From ca7dd333da1b7fb63aaa78af8f16897bbf951d43 Mon Sep 17 00:00:00 2001 From: Anandaroop Roy Date: Tue, 8 Oct 2024 16:00:23 -0400 Subject: [PATCH] refactor: re-organize section types (#6102) * refactor: extract everything but the concrete sections * refactor: extract concrete types to their own sectionTypes/ dir * refactor: move type names into sectionTypes/ * refactor: move standard fields into sectionTypes/ * refactor: move interface into sectionTypes/ * refactor: move standard fields into GenericSectionInterface * refactor: move the list of all section types into sectionTypes/index * refactor: simplify naming for section types * chore: clean up section registry * docs: brings docs up to date with this refactor --- docs/adding_a_new_home_view_section.md | 49 ++- docs/imgs/home-view-sections-and-types.png | Bin 0 -> 59022 bytes src/schema/v2/homeView/HomeViewCard.ts | 40 -- src/schema/v2/homeView/HomeViewSection.ts | 392 ------------------ src/schema/v2/homeView/index.ts | 2 +- .../v2/homeView/sectionTypes/Activity.ts | 29 ++ .../v2/homeView/sectionTypes/Articles.ts | 27 ++ .../v2/homeView/sectionTypes/Artists.ts | 28 ++ .../v2/homeView/sectionTypes/Artworks.ts | 28 ++ .../homeView/sectionTypes/AuctionResults.ts | 28 ++ src/schema/v2/homeView/sectionTypes/Cards.ts | 55 +++ .../DiscoverMarketingCollection.ts | 29 ++ .../v2/homeView/sectionTypes/ExploreBy.ts | 64 +++ src/schema/v2/homeView/sectionTypes/Fairs.ts | 27 ++ .../v2/homeView/sectionTypes/Galleries.ts | 18 + .../sectionTypes/GenericSectionInterface.ts | 50 +++ .../v2/homeView/sectionTypes/HeroUnits.ts | 28 ++ .../sectionTypes/MarketingCollections.ts | 30 ++ src/schema/v2/homeView/sectionTypes/Sales.ts | 27 ++ src/schema/v2/homeView/sectionTypes/Shows.ts | 18 + .../v2/homeView/sectionTypes/ViewingRooms.ts | 18 + .../sectionTypes/_ExampleSectionType.ts | 67 +++ src/schema/v2/homeView/sectionTypes/index.ts | 35 ++ src/schema/v2/homeView/sectionTypes/names.ts | 24 ++ src/schema/v2/homeView/sections/ActiveBids.ts | 2 +- .../v2/homeView/sections/AuctionLotsForYou.ts | 2 +- src/schema/v2/homeView/sections/Auctions.ts | 2 +- .../sections/CuratorsPicksEmerging.ts | 2 +- .../sections/DiscoverMarketingCollections.ts | 2 +- .../homeView/sections/DiscoverSomethingNew.ts | 2 +- .../v2/homeView/sections/ExploreByCategory.ts | 2 +- .../ExploreByMarketingCollectionCategories.ts | 2 +- .../v2/homeView/sections/FeaturedFairs.ts | 2 +- .../v2/homeView/sections/GalleriesNearYou.ts | 2 +- src/schema/v2/homeView/sections/HeroUnits.ts | 2 +- .../v2/homeView/sections/LatestActivity.ts | 2 +- .../v2/homeView/sections/LatestArticles.ts | 2 +- .../homeView/sections/LatestAuctionResults.ts | 2 +- .../homeView/sections/MarketingCollections.ts | 2 +- .../v2/homeView/sections/NewWorksForYou.ts | 2 +- .../NewWorksFromGalleriesYouFollow.ts | 2 +- src/schema/v2/homeView/sections/News.ts | 2 +- .../sections/RecentlyViewedArtworks.ts | 2 +- .../homeView/sections/RecommendedArtists.ts | 2 +- .../homeView/sections/RecommendedArtworks.ts | 2 +- .../v2/homeView/sections/ShowsForYou.ts | 2 +- .../SimilarToRecentlyViewedArtworks.ts | 2 +- .../v2/homeView/sections/TrendingArtists.ts | 2 +- .../v2/homeView/sections/ViewingRooms.ts | 2 +- .../v2/homeView/sections/_ExampleSection.ts | 2 +- src/schema/v2/homeView/sections/index.ts | 6 +- src/schema/v2/schema.ts | 2 +- 52 files changed, 695 insertions(+), 478 deletions(-) create mode 100644 docs/imgs/home-view-sections-and-types.png delete mode 100644 src/schema/v2/homeView/HomeViewCard.ts delete mode 100644 src/schema/v2/homeView/HomeViewSection.ts create mode 100644 src/schema/v2/homeView/sectionTypes/Activity.ts create mode 100644 src/schema/v2/homeView/sectionTypes/Articles.ts create mode 100644 src/schema/v2/homeView/sectionTypes/Artists.ts create mode 100644 src/schema/v2/homeView/sectionTypes/Artworks.ts create mode 100644 src/schema/v2/homeView/sectionTypes/AuctionResults.ts create mode 100644 src/schema/v2/homeView/sectionTypes/Cards.ts create mode 100644 src/schema/v2/homeView/sectionTypes/DiscoverMarketingCollection.ts create mode 100644 src/schema/v2/homeView/sectionTypes/ExploreBy.ts create mode 100644 src/schema/v2/homeView/sectionTypes/Fairs.ts create mode 100644 src/schema/v2/homeView/sectionTypes/Galleries.ts create mode 100644 src/schema/v2/homeView/sectionTypes/GenericSectionInterface.ts create mode 100644 src/schema/v2/homeView/sectionTypes/HeroUnits.ts create mode 100644 src/schema/v2/homeView/sectionTypes/MarketingCollections.ts create mode 100644 src/schema/v2/homeView/sectionTypes/Sales.ts create mode 100644 src/schema/v2/homeView/sectionTypes/Shows.ts create mode 100644 src/schema/v2/homeView/sectionTypes/ViewingRooms.ts create mode 100644 src/schema/v2/homeView/sectionTypes/_ExampleSectionType.ts create mode 100644 src/schema/v2/homeView/sectionTypes/index.ts create mode 100644 src/schema/v2/homeView/sectionTypes/names.ts diff --git a/docs/adding_a_new_home_view_section.md b/docs/adding_a_new_home_view_section.md index 0b0a710e63..e847384117 100644 --- a/docs/adding_a_new_home_view_section.md +++ b/docs/adding_a_new_home_view_section.md @@ -8,7 +8,9 @@ > > πŸ‘‰πŸ½ [Archived presentation video and slides][ks_archive] -In order to add to the home view schema, we should think in terms of **section instances** and **section types** (see [related slide][ks_slide_instances_types]). +In order to add to the home view schema, we should think in terms of **section instances** and **section types**, as indicated by [this slide from the KS][ks_slide_instances_types]. + + If you want to add a new section _instance_, you should first check to see if there is an existing section _type_ that returns the same kind of data. @@ -21,7 +23,11 @@ Else, you'll need to create the new section type: > [!NOTE] > See also [related slide][ks_slide_new_section_type] and 33:00 in the [video][ks_archive] -### 1. Create the new section type in [HomeViewSection.ts][section_type_declarations] +### 1. Create the new section type in [homeView/sectionTypes/][section_type_declarations] + +You will first need to define a name for the section type, in the [sectionTypes/names][section_type_names] file + +Then copy the annotated [`ExampleSectionType`][example_section_type_declaration] file, customizing the values and removing the comments as you go. ```typescript const HomeViewSectionMyNewType = new GraphQLObjectType({ @@ -37,16 +43,19 @@ const HomeViewSectionMyNewType = new GraphQLObjectType({ }) ``` -### 2. Add your new section type to [`homeViewSectionTypes`][section_types_list] +### 2. Add your new section type to [`sectionTypes/index`][section_types_list] ```typescript export const homeViewSectionTypes: GraphQLObjectType[] = [ - ..., - HomeViewSectionMyNewType, // πŸ‘ˆ Add your new type here + //... + + HomeViewSectionMyNewType, // πŸ‘ˆ Add your new type here, in alphabetical order + + //... ] ``` -You should now have a commit that looks something like [this][gh_new_section_type_commit]. +You should now have a commit that looks something like [this][gh_new_section_type_commit] (although the folder structure may be different nowadays). ## Define your new section _instance_ @@ -73,16 +82,21 @@ export const MyNewSection: HomeViewSection = { } ``` -> [!CAUTION] -> If you don't prefix the id with `home-view-section-`, it might break deep linking in App. - > [!TIP] > Consider using the built-in support for Unleash flags so as to avoid expose the new section prematurely. -You should now have a commit that looks something like [this][gh_new_section_instance_commit]. - ### 4. Add your new section to the [section registry][section_instance_registry] +```ts +const sections: HomeViewSection[] = [ + //... + + MyNewSection, // πŸ‘ˆ Add your new section here, in alphabetical order + + //... +] +``` + This is what will allow you to query it directly by `id` from GraphQL: ```graphql @@ -97,6 +111,8 @@ This is what will allow you to query it directly by `id` from GraphQL: } ``` +You should now have a commit that looks something like [this][gh_new_section_instance_commit] (although the folder structure may be different nowadays). + ### 5. Expose your section in the appropriate zone > [!NOTE] @@ -119,7 +135,7 @@ This will allow you to query the entire list of home view sections and see your ```graphql { homeView { - sectionsConnection(first: 20) { + sectionsConnection(first: 30) { edges { node { __typename @@ -132,6 +148,8 @@ This will allow you to query the entire list of home view sections and see your } ``` +You should now have a commit that looks something like [this][gh_expose_section_commit] (although the folder structure may be different nowadays). + ## Finally If you want to see how this all comes together, check out [this branch from the KS][gh_new_section_type_and_instance_branch] @@ -140,10 +158,12 @@ If you have any questions, drop them in #dev-help as usual! -[section_type_declarations]: ../src/schema/v2/homeView/HomeViewSection.ts -[section_types_list]: ../src/schema/v2/homeView/HomeViewSection.ts +[section_type_names]: ../src/schema/v2/homeView/sectionTypes/names.ts +[section_type_declarations]: ../src/schema/v2/homeView/sectionTypes/ +[section_types_list]: ../src/schema/v2/homeView/sectionTypes/index.ts [section_instance_declarations]: ../src/schema/v2/homeView/sections [example_section_declaration]: ../src/schema/v2/homeView/sections/_ExampleSection.ts +[example_section_type_declaration]: ../src/schema/v2/homeView/sectionTypes/_ExampleSectionType.ts [section_instance_registry]: ../src/schema/v2/homeView/sections/index.ts [default_zone]: ../src/schema/v2/homeView/zones/default.ts @@ -159,4 +179,5 @@ If you have any questions, drop them in #dev-help as usual! [gh_new_section_type_commit]: https://github.com/artsy/metaphysics/commit/34dd1ddf195da8bb8a842e7e5b2b3bf77cf5f8be [gh_new_section_instance_commit]: https://github.com/artsy/metaphysics/commit/98c9acec51ab2f4c9c0ec8d2e24c66c1219fe5c0 +[gh_expose_section_commit]: https://github.com/artsy/metaphysics/commit/613415ec88cb79f81e011ce7389b1f97eafa0149 [gh_new_section_type_and_instance_branch]: https://github.com/artsy/metaphysics/compare/main...onyx/home-view-ks-demo-new-section-type diff --git a/docs/imgs/home-view-sections-and-types.png b/docs/imgs/home-view-sections-and-types.png new file mode 100644 index 0000000000000000000000000000000000000000..0bb24424d16868902fa59fd1783bf5b79f82d85f GIT binary patch literal 59022 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%0Dxi*_gw_Q(vsFpk2S92Jq(*&dGQ4G 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 - name: "HomeViewCard", - fields: { - href: { type: GraphQLString }, - entityType: { type: GraphQLString }, - entityID: { type: GraphQLString }, - image: { - type: Image.type, - resolve: ({ image_url }) => { - if (image_url) { - return { - image_url, - } - } - }, - }, - subtitle: { type: GraphQLString }, - title: { type: GraphQLNonNull(GraphQLString) }, - }, -}) - -export const HomeViewCardConnectionType = connectionWithCursorInfo({ - nodeType: HomeViewCardType, -}).connectionType - -const HomeViewCard: GraphQLFieldConfig = { - type: HomeViewCardType, -} - -export default HomeViewCard diff --git a/src/schema/v2/homeView/HomeViewSection.ts b/src/schema/v2/homeView/HomeViewSection.ts deleted file mode 100644 index 3a534501b3..0000000000 --- a/src/schema/v2/homeView/HomeViewSection.ts +++ /dev/null @@ -1,392 +0,0 @@ -import { - GraphQLFieldConfigMap, - GraphQLID, - GraphQLInterfaceType, - GraphQLList, - GraphQLNonNull, - GraphQLObjectType, - GraphQLString, -} from "graphql" -import { pageable } from "relay-cursor-paging" -import { ResolverContext } from "types/graphql" -import ArticlesConnection from "../articlesConnection" -import { artistsConnection } from "../artists" -import { artworkConnection } from "../artwork" -import { auctionResultConnection } from "../auction_result" -import { fairsConnection } from "../fairs" -import { connectionWithCursorInfo, emptyConnection } from "../fields/pagination" -import { heroUnitsConnection } from "../HeroUnit/heroUnitsConnection" -import { MarketingCollectionType } from "../marketingCollections" -import { NotificationsConnection } from "../notifications" -import { InternalIDFields, NodeInterface } from "../object_identification" -import { SalesConnectionField } from "../sales" -import { HomeViewComponent } from "./HomeViewComponent" -import { toGlobalId } from "graphql-relay" -import { FeaturedLinkConnectionType } from "../FeaturedLink/featuredLink" -import { ImageType } from "../image" -import { HomeViewCardConnectionType } from "./HomeViewCard" - -// section interface - -const standardSectionFields: GraphQLFieldConfigMap = { - ...InternalIDFields, - id: { - type: new GraphQLNonNull(GraphQLID), - description: "A globally unique ID.", - resolve: ({ id }) => { - return toGlobalId("HomeViewSection", id) - }, - }, - contextModule: { - type: GraphQLString, - description: - "[Analytics] `context module` analytics value for this section, as defined in our schema (artsy/cohesion)", - }, - component: { - type: HomeViewComponent, - description: - "Component prescription for this section, for overriding or customizing presentation and behavior", - }, - ownerType: { - type: GraphQLString, - description: - "[Analytics] `owner type` analytics value for this scetion when displayed in a standalone UI, as defined in our schema (artsy/cohesion)", - }, -} - -export const HomeViewSectionTypeNames = { - HomeViewSectionActivity: "HomeViewSectionActivity", - HomeViewSectionArticles: "HomeViewSectionArticles", - HomeViewSectionArtists: "HomeViewSectionArtists", - HomeViewSectionArtworks: "HomeViewSectionArtworks", - HomeViewSectionAuctionResults: "HomeViewSectionAuctionResults", - HomeViewSectionCards: "HomeViewSectionCards", - HomeViewSectionDiscoverMarketingCollections: - "HomeViewSectionDiscoverMarketingCollections", - HomeViewSectionFairs: "HomeViewSectionFairs", - HomeViewSectionGalleries: "HomeViewSectionGalleries", - HomeViewSectionGeneric: "HomeViewSectionGeneric", - HomeViewSectionHeroUnits: "HomeViewSectionHeroUnits", - HomeViewSectionExploreByMarketingCollectionCategories: - "HomeViewSectionExploreByMarketingCollectionCategories", - HomeViewSectionMarketingCollections: "HomeViewSectionMarketingCollections", - HomeViewSectionSales: "HomeViewSectionSales", - HomeViewSectionShows: "HomeViewSectionShows", - HomeViewSectionViewingRooms: "HomeViewSectionViewingRooms", -} as const - -export const HomeViewGenericSectionInterface = new GraphQLInterfaceType({ - name: HomeViewSectionTypeNames.HomeViewSectionGeneric, - description: "Abstract interface shared by every kind of home view section", - fields: standardSectionFields, - resolveType: (value) => { - return value.type - }, -}) - -// concrete sections - -const HomeViewArtworksSectionType = new GraphQLObjectType( - { - name: HomeViewSectionTypeNames.HomeViewSectionArtworks, - description: "An artworks section in the home view", - interfaces: [HomeViewGenericSectionInterface, NodeInterface], - fields: { - ...standardSectionFields, - - artworksConnection: { - type: artworkConnection.connectionType, - args: pageable({}), - resolve: (parent, ...rest) => - parent.resolver ? parent.resolver(parent, ...rest) : emptyConnection, - }, - }, - } -) - -const HomeViewArtistsSectionType = new GraphQLObjectType({ - name: HomeViewSectionTypeNames.HomeViewSectionArtists, - description: "An artists section in the home view", - interfaces: [HomeViewGenericSectionInterface, NodeInterface], - fields: { - ...standardSectionFields, - - artistsConnection: { - type: artistsConnection.type, - args: pageable({}), - resolve: (parent, ...rest) => - parent.resolver ? parent.resolver(parent, ...rest) : emptyConnection, - }, - }, -}) - -const HomeViewHeroUnitsSectionType = new GraphQLObjectType< - any, - ResolverContext ->({ - name: HomeViewSectionTypeNames.HomeViewSectionHeroUnits, - description: "A hero units section in the home view", - interfaces: [HomeViewGenericSectionInterface, NodeInterface], - fields: { - ...standardSectionFields, - - heroUnitsConnection: { - type: heroUnitsConnection.type, - args: pageable({}), - resolve: (parent, ...rest) => - parent.resolver ? parent.resolver(parent, ...rest) : emptyConnection, - }, - }, -}) - -const HomeViewFairsSectionType = new GraphQLObjectType({ - name: HomeViewSectionTypeNames.HomeViewSectionFairs, - description: "A fairs section in the home view", - interfaces: [HomeViewGenericSectionInterface, NodeInterface], - fields: { - ...standardSectionFields, - - fairsConnection: { - type: fairsConnection.type, - args: pageable({}), - resolve: (parent, ...rest) => - parent.resolver ? parent.resolver(parent, ...rest) : [], - }, - }, -}) - -const HomeViewArticlesSectionType = new GraphQLObjectType( - { - name: HomeViewSectionTypeNames.HomeViewSectionArticles, - description: "An articles section in the home view", - interfaces: [HomeViewGenericSectionInterface, NodeInterface], - fields: { - ...standardSectionFields, - - articlesConnection: { - type: ArticlesConnection.type, - args: pageable({}), - resolve: (parent, ...rest) => - parent.resolver ? parent.resolver(parent, ...rest) : [], - }, - }, - } -) - -const ExploreByMarketingCollectionCategory = new GraphQLObjectType< - any, - ResolverContext ->({ - name: "ExploreByMarketingCollectionCategory", - description: - "[deprecated in favor of `HomeViewCard`] A marketing collection category to explore by", - fields: () => ({ - href: { - type: GraphQLNonNull(GraphQLString), - }, - name: { - type: GraphQLNonNull(GraphQLString), - }, - image: { - type: ImageType, - resolve: ({ image }) => { - const { image_url } = image - return { - image_url, - original_width: 180, - original_height: 180, - quality: 80, - } - }, - }, - }), -}) - -const HomeViewExploreBySectionType = new GraphQLObjectType< - any, - ResolverContext ->({ - name: - HomeViewSectionTypeNames.HomeViewSectionExploreByMarketingCollectionCategories, - description: - "[deprecated in favor of `HomeViewSectionCards`] Marketing Collection Categories section in the home view", - interfaces: [HomeViewGenericSectionInterface, NodeInterface], - fields: { - ...standardSectionFields, - - categories: { - type: GraphQLNonNull( - GraphQLList(GraphQLNonNull(ExploreByMarketingCollectionCategory)) - ), - resolve: (parent, ...rest) => { - return parent.resolver ? parent.resolver(parent, ...rest) : [] - }, - }, - }, -}) - -const HomeViewMarketingCollectionsSectionType = new GraphQLObjectType< - any, - ResolverContext ->({ - name: HomeViewSectionTypeNames.HomeViewSectionMarketingCollections, - description: "A marketing collections section in the home view", - interfaces: [HomeViewGenericSectionInterface, NodeInterface], - fields: { - ...standardSectionFields, - - marketingCollectionsConnection: { - type: connectionWithCursorInfo({ - nodeType: MarketingCollectionType, - }).connectionType, - args: pageable({}), - resolve: (parent, ...rest) => - parent.resolver ? parent.resolver(parent, ...rest) : [], - }, - }, -}) - -const HomeViewShowsSectionType = new GraphQLObjectType({ - name: HomeViewSectionTypeNames.HomeViewSectionShows, - description: "A shows section in the home view", - interfaces: [HomeViewGenericSectionInterface, NodeInterface], - fields: { - ...standardSectionFields, - }, -}) - -export const HomeViewViewingRoomsSectionType = new GraphQLObjectType< - any, - ResolverContext ->({ - name: HomeViewSectionTypeNames.HomeViewSectionViewingRooms, - description: "A viewing rooms section in the home view", - interfaces: [HomeViewGenericSectionInterface, NodeInterface], - fields: { - ...standardSectionFields, - }, -}) - -const HomeViewActivitySectionType = new GraphQLObjectType( - { - name: HomeViewSectionTypeNames.HomeViewSectionActivity, - description: "A user activity section in the home view", - interfaces: [HomeViewGenericSectionInterface, NodeInterface], - fields: { - ...standardSectionFields, - - notificationsConnection: { - type: NotificationsConnection.type, - - args: pageable({}), - resolve: (parent, ...rest) => { - return parent.resolver ? parent.resolver(parent, ...rest) : [] - }, - }, - }, - } -) - -export const HomeViewAuctionResultsSectionType = new GraphQLObjectType< - any, - ResolverContext ->({ - name: HomeViewSectionTypeNames.HomeViewSectionAuctionResults, - description: "An auction results section in the home view", - interfaces: [HomeViewGenericSectionInterface, NodeInterface], - fields: { - ...standardSectionFields, - - auctionResultsConnection: { - type: auctionResultConnection.connectionType, - args: pageable({}), - resolve: (parent, ...rest) => { - return parent.resolver ? parent.resolver(parent, ...rest) : [] - }, - }, - }, -}) - -const HomeViewSalesSectionType = new GraphQLObjectType({ - name: HomeViewSectionTypeNames.HomeViewSectionSales, - description: "A sales (auctions) section in the home view", - interfaces: [HomeViewGenericSectionInterface, NodeInterface], - fields: { - ...standardSectionFields, - - salesConnection: { - type: SalesConnectionField.type, - args: pageable({}), - resolve: (parent, ...rest) => - parent.resolver ? parent.resolver(parent, ...rest) : [], - }, - }, -}) - -export const HomeViewGalleriesSectionType = new GraphQLObjectType< - any, - ResolverContext ->({ - name: HomeViewSectionTypeNames.HomeViewSectionGalleries, - description: "A section containing a list of galleries", - interfaces: [HomeViewGenericSectionInterface, NodeInterface], - fields: { - ...standardSectionFields, - }, -}) - -export const HomeViewDiscoverMarketingCollectionType = new GraphQLObjectType< - any, - ResolverContext ->({ - name: HomeViewSectionTypeNames.HomeViewSectionDiscoverMarketingCollections, - description: - "[deprecated in favor of `HomeViewSectionCards`] A section containing a list of curated marketing collections", - - interfaces: [HomeViewGenericSectionInterface, NodeInterface], - fields: { - ...standardSectionFields, - linksConnection: { - type: FeaturedLinkConnectionType, - args: pageable({}), - resolve: (parent, ...rest) => - parent.resolver ? parent.resolver(parent, ...rest) : emptyConnection, - }, - }, -}) - -export const HomeViewCardsSectionType = new GraphQLObjectType< - any, - ResolverContext ->({ - name: HomeViewSectionTypeNames.HomeViewSectionCards, - description: "A section containing a list of navigation cards", - interfaces: [HomeViewGenericSectionInterface, NodeInterface], - fields: { - ...standardSectionFields, - cardsConnection: { - type: HomeViewCardConnectionType, - args: pageable({}), - resolve: (parent, ...rest) => - parent.resolver ? parent.resolver(parent, ...rest) : emptyConnection, - }, - }, -}) - -export const homeViewSectionTypes: GraphQLObjectType[] = [ - HomeViewActivitySectionType, - HomeViewArticlesSectionType, - HomeViewArtistsSectionType, - HomeViewArtworksSectionType, - HomeViewAuctionResultsSectionType, - HomeViewCardsSectionType, - HomeViewFairsSectionType, - HomeViewGalleriesSectionType, - HomeViewHeroUnitsSectionType, - HomeViewExploreBySectionType, - HomeViewMarketingCollectionsSectionType, - HomeViewSalesSectionType, - HomeViewShowsSectionType, - HomeViewViewingRoomsSectionType, - HomeViewDiscoverMarketingCollectionType, -] diff --git a/src/schema/v2/homeView/index.ts b/src/schema/v2/homeView/index.ts index 5a8927e405..8882aa79ac 100644 --- a/src/schema/v2/homeView/index.ts +++ b/src/schema/v2/homeView/index.ts @@ -11,7 +11,7 @@ import { connectionWithCursorInfo, paginationResolver, } from "../fields/pagination" -import { HomeViewGenericSectionInterface } from "./HomeViewSection" +import { HomeViewGenericSectionInterface } from "./sectionTypes/GenericSectionInterface" import { getSectionsForUser } from "./helpers/getSectionsForUser" import { registry } from "./sections" import { isSectionDisplayable } from "./helpers/isSectionDisplayable" diff --git a/src/schema/v2/homeView/sectionTypes/Activity.ts b/src/schema/v2/homeView/sectionTypes/Activity.ts new file mode 100644 index 0000000000..2f062fcbed --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/Activity.ts @@ -0,0 +1,29 @@ +import { GraphQLObjectType } from "graphql" +import { pageable } from "relay-cursor-paging" +import { ResolverContext } from "types/graphql" +import { NotificationsConnection } from "../../notifications" +import { NodeInterface } from "../../object_identification" +import { HomeViewGenericSectionInterface } from "./GenericSectionInterface" +import { HomeViewSectionTypeNames } from "./names" +import { standardSectionFields } from "./GenericSectionInterface" + +export const HomeViewActivitySectionType = new GraphQLObjectType< + any, + ResolverContext +>({ + name: HomeViewSectionTypeNames.HomeViewSectionActivity, + description: "A user activity section in the home view", + interfaces: [HomeViewGenericSectionInterface, NodeInterface], + fields: { + ...standardSectionFields, + + notificationsConnection: { + type: NotificationsConnection.type, + + args: pageable({}), + resolve: (parent, ...rest) => { + return parent.resolver ? parent.resolver(parent, ...rest) : [] + }, + }, + }, +}) diff --git a/src/schema/v2/homeView/sectionTypes/Articles.ts b/src/schema/v2/homeView/sectionTypes/Articles.ts new file mode 100644 index 0000000000..c5aeaa9da3 --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/Articles.ts @@ -0,0 +1,27 @@ +import { GraphQLObjectType } from "graphql" +import { pageable } from "relay-cursor-paging" +import { ResolverContext } from "types/graphql" +import ArticlesConnection from "../../articlesConnection" +import { NodeInterface } from "../../object_identification" +import { HomeViewSectionTypeNames } from "./names" +import { standardSectionFields } from "./GenericSectionInterface" +import { HomeViewGenericSectionInterface } from "./GenericSectionInterface" + +export const HomeViewArticlesSectionType = new GraphQLObjectType< + any, + ResolverContext +>({ + name: HomeViewSectionTypeNames.HomeViewSectionArticles, + description: "An articles section in the home view", + interfaces: [HomeViewGenericSectionInterface, NodeInterface], + fields: { + ...standardSectionFields, + + articlesConnection: { + type: ArticlesConnection.type, + args: pageable({}), + resolve: (parent, ...rest) => + parent.resolver ? parent.resolver(parent, ...rest) : [], + }, + }, +}) diff --git a/src/schema/v2/homeView/sectionTypes/Artists.ts b/src/schema/v2/homeView/sectionTypes/Artists.ts new file mode 100644 index 0000000000..ef725be095 --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/Artists.ts @@ -0,0 +1,28 @@ +import { GraphQLObjectType } from "graphql" +import { pageable } from "relay-cursor-paging" +import { ResolverContext } from "types/graphql" +import { artistsConnection } from "../../artists" +import { emptyConnection } from "../../fields/pagination" +import { NodeInterface } from "../../object_identification" +import { HomeViewGenericSectionInterface } from "./GenericSectionInterface" +import { HomeViewSectionTypeNames } from "./names" +import { standardSectionFields } from "./GenericSectionInterface" + +export const HomeViewArtistsSectionType = new GraphQLObjectType< + any, + ResolverContext +>({ + name: HomeViewSectionTypeNames.HomeViewSectionArtists, + description: "An artists section in the home view", + interfaces: [HomeViewGenericSectionInterface, NodeInterface], + fields: { + ...standardSectionFields, + + artistsConnection: { + type: artistsConnection.type, + args: pageable({}), + resolve: (parent, ...rest) => + parent.resolver ? parent.resolver(parent, ...rest) : emptyConnection, + }, + }, +}) diff --git a/src/schema/v2/homeView/sectionTypes/Artworks.ts b/src/schema/v2/homeView/sectionTypes/Artworks.ts new file mode 100644 index 0000000000..a4e6153e33 --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/Artworks.ts @@ -0,0 +1,28 @@ +import { GraphQLObjectType } from "graphql" +import { pageable } from "relay-cursor-paging" +import { ResolverContext } from "types/graphql" +import { artworkConnection } from "../../artwork" +import { emptyConnection } from "../../fields/pagination" +import { NodeInterface } from "../../object_identification" +import { HomeViewGenericSectionInterface } from "./GenericSectionInterface" +import { HomeViewSectionTypeNames } from "./names" +import { standardSectionFields } from "./GenericSectionInterface" + +export const HomeViewArtworksSectionType = new GraphQLObjectType< + any, + ResolverContext +>({ + name: HomeViewSectionTypeNames.HomeViewSectionArtworks, + description: "An artworks section in the home view", + interfaces: [HomeViewGenericSectionInterface, NodeInterface], + fields: { + ...standardSectionFields, + + artworksConnection: { + type: artworkConnection.connectionType, + args: pageable({}), + resolve: (parent, ...rest) => + parent.resolver ? parent.resolver(parent, ...rest) : emptyConnection, + }, + }, +}) diff --git a/src/schema/v2/homeView/sectionTypes/AuctionResults.ts b/src/schema/v2/homeView/sectionTypes/AuctionResults.ts new file mode 100644 index 0000000000..b551e7a303 --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/AuctionResults.ts @@ -0,0 +1,28 @@ +import { GraphQLObjectType } from "graphql" +import { pageable } from "relay-cursor-paging" +import { ResolverContext } from "types/graphql" +import { auctionResultConnection } from "../../auction_result" +import { NodeInterface } from "../../object_identification" +import { HomeViewGenericSectionInterface } from "./GenericSectionInterface" +import { HomeViewSectionTypeNames } from "./names" +import { standardSectionFields } from "./GenericSectionInterface" + +export const HomeViewAuctionResultsSectionType = new GraphQLObjectType< + any, + ResolverContext +>({ + name: HomeViewSectionTypeNames.HomeViewSectionAuctionResults, + description: "An auction results section in the home view", + interfaces: [HomeViewGenericSectionInterface, NodeInterface], + fields: { + ...standardSectionFields, + + auctionResultsConnection: { + type: auctionResultConnection.connectionType, + args: pageable({}), + resolve: (parent, ...rest) => { + return parent.resolver ? parent.resolver(parent, ...rest) : [] + }, + }, + }, +}) diff --git a/src/schema/v2/homeView/sectionTypes/Cards.ts b/src/schema/v2/homeView/sectionTypes/Cards.ts new file mode 100644 index 0000000000..885be94db3 --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/Cards.ts @@ -0,0 +1,55 @@ +import { GraphQLNonNull, GraphQLObjectType, GraphQLString } from "graphql" +import { pageable } from "relay-cursor-paging" +import { ResolverContext } from "types/graphql" +import { + connectionWithCursorInfo, + emptyConnection, +} from "../../fields/pagination" +import { NodeInterface } from "../../object_identification" +import { HomeViewGenericSectionInterface } from "./GenericSectionInterface" +import { HomeViewSectionTypeNames } from "./names" +import { standardSectionFields } from "./GenericSectionInterface" +import Image from "schema/v2/image" + +export const HomeViewCardType = new GraphQLObjectType({ + name: "HomeViewCard", + fields: { + href: { type: GraphQLString }, + entityType: { type: GraphQLString }, + entityID: { type: GraphQLString }, + image: { + type: Image.type, + resolve: ({ image_url }) => { + if (image_url) { + return { + image_url, + } + } + }, + }, + subtitle: { type: GraphQLString }, + title: { type: GraphQLNonNull(GraphQLString) }, + }, +}) + +const HomeViewCardConnectionType = connectionWithCursorInfo({ + nodeType: HomeViewCardType, +}).connectionType + +export const HomeViewCardsSectionType = new GraphQLObjectType< + any, + ResolverContext +>({ + name: HomeViewSectionTypeNames.HomeViewSectionCards, + description: "A section containing a list of navigation cards", + interfaces: [HomeViewGenericSectionInterface, NodeInterface], + fields: { + ...standardSectionFields, + cardsConnection: { + type: HomeViewCardConnectionType, + args: pageable({}), + resolve: (parent, ...rest) => + parent.resolver ? parent.resolver(parent, ...rest) : emptyConnection, + }, + }, +}) diff --git a/src/schema/v2/homeView/sectionTypes/DiscoverMarketingCollection.ts b/src/schema/v2/homeView/sectionTypes/DiscoverMarketingCollection.ts new file mode 100644 index 0000000000..50b2eb777a --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/DiscoverMarketingCollection.ts @@ -0,0 +1,29 @@ +import { GraphQLObjectType } from "graphql" +import { pageable } from "relay-cursor-paging" +import { ResolverContext } from "types/graphql" +import { FeaturedLinkConnectionType } from "../../FeaturedLink/featuredLink" +import { emptyConnection } from "../../fields/pagination" +import { NodeInterface } from "../../object_identification" +import { HomeViewGenericSectionInterface } from "./GenericSectionInterface" +import { HomeViewSectionTypeNames } from "./names" +import { standardSectionFields } from "./GenericSectionInterface" + +export const HomeViewDiscoverMarketingCollectionType = new GraphQLObjectType< + any, + ResolverContext +>({ + name: HomeViewSectionTypeNames.HomeViewSectionDiscoverMarketingCollections, + description: + "[deprecated in favor of `HomeViewSectionCards`] A section containing a list of curated marketing collections", + + interfaces: [HomeViewGenericSectionInterface, NodeInterface], + fields: { + ...standardSectionFields, + linksConnection: { + type: FeaturedLinkConnectionType, + args: pageable({}), + resolve: (parent, ...rest) => + parent.resolver ? parent.resolver(parent, ...rest) : emptyConnection, + }, + }, +}) diff --git a/src/schema/v2/homeView/sectionTypes/ExploreBy.ts b/src/schema/v2/homeView/sectionTypes/ExploreBy.ts new file mode 100644 index 0000000000..37dddcbb5f --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/ExploreBy.ts @@ -0,0 +1,64 @@ +import { + GraphQLObjectType, + GraphQLNonNull, + GraphQLList, + GraphQLString, +} from "graphql" +import { ResolverContext } from "types/graphql" +import { NodeInterface } from "../../object_identification" +import { HomeViewGenericSectionInterface } from "./GenericSectionInterface" +import { HomeViewSectionTypeNames } from "./names" +import { standardSectionFields } from "./GenericSectionInterface" +import { ImageType } from "../../image" + +export const ExploreByMarketingCollectionCategory = new GraphQLObjectType< + any, + ResolverContext +>({ + name: "ExploreByMarketingCollectionCategory", + description: + "[deprecated in favor of `HomeViewCard`] A marketing collection category to explore by", + fields: () => ({ + href: { + type: GraphQLNonNull(GraphQLString), + }, + name: { + type: GraphQLNonNull(GraphQLString), + }, + image: { + type: ImageType, + resolve: ({ image }) => { + const { image_url } = image + return { + image_url, + original_width: 180, + original_height: 180, + quality: 80, + } + }, + }, + }), +}) + +export const HomeViewExploreBySectionType = new GraphQLObjectType< + any, + ResolverContext +>({ + name: + HomeViewSectionTypeNames.HomeViewSectionExploreByMarketingCollectionCategories, + description: + "[deprecated in favor of `HomeViewSectionCards`] Marketing Collection Categories section in the home view", + interfaces: [HomeViewGenericSectionInterface, NodeInterface], + fields: { + ...standardSectionFields, + + categories: { + type: GraphQLNonNull( + GraphQLList(GraphQLNonNull(ExploreByMarketingCollectionCategory)) + ), + resolve: (parent, ...rest) => { + return parent.resolver ? parent.resolver(parent, ...rest) : [] + }, + }, + }, +}) diff --git a/src/schema/v2/homeView/sectionTypes/Fairs.ts b/src/schema/v2/homeView/sectionTypes/Fairs.ts new file mode 100644 index 0000000000..ac0a00da06 --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/Fairs.ts @@ -0,0 +1,27 @@ +import { GraphQLObjectType } from "graphql" +import { pageable } from "relay-cursor-paging" +import { ResolverContext } from "types/graphql" +import { fairsConnection } from "../../fairs" +import { NodeInterface } from "../../object_identification" +import { HomeViewGenericSectionInterface } from "./GenericSectionInterface" +import { HomeViewSectionTypeNames } from "./names" +import { standardSectionFields } from "./GenericSectionInterface" + +export const HomeViewFairsSectionType = new GraphQLObjectType< + any, + ResolverContext +>({ + name: HomeViewSectionTypeNames.HomeViewSectionFairs, + description: "A fairs section in the home view", + interfaces: [HomeViewGenericSectionInterface, NodeInterface], + fields: { + ...standardSectionFields, + + fairsConnection: { + type: fairsConnection.type, + args: pageable({}), + resolve: (parent, ...rest) => + parent.resolver ? parent.resolver(parent, ...rest) : [], + }, + }, +}) diff --git a/src/schema/v2/homeView/sectionTypes/Galleries.ts b/src/schema/v2/homeView/sectionTypes/Galleries.ts new file mode 100644 index 0000000000..cb3f6ae0bc --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/Galleries.ts @@ -0,0 +1,18 @@ +import { GraphQLObjectType } from "graphql" +import { ResolverContext } from "types/graphql" +import { NodeInterface } from "../../object_identification" +import { HomeViewGenericSectionInterface } from "./GenericSectionInterface" +import { HomeViewSectionTypeNames } from "./names" +import { standardSectionFields } from "./GenericSectionInterface" + +export const HomeViewGalleriesSectionType = new GraphQLObjectType< + any, + ResolverContext +>({ + name: HomeViewSectionTypeNames.HomeViewSectionGalleries, + description: "A section containing a list of galleries", + interfaces: [HomeViewGenericSectionInterface, NodeInterface], + fields: { + ...standardSectionFields, + }, +}) diff --git a/src/schema/v2/homeView/sectionTypes/GenericSectionInterface.ts b/src/schema/v2/homeView/sectionTypes/GenericSectionInterface.ts new file mode 100644 index 0000000000..06baecd2f2 --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/GenericSectionInterface.ts @@ -0,0 +1,50 @@ +import { + GraphQLFieldConfigMap, + GraphQLID, + GraphQLInterfaceType, + GraphQLNonNull, + GraphQLString, +} from "graphql" +import { HomeViewSectionTypeNames } from "./names" +import { toGlobalId } from "graphql-relay" +import { InternalIDFields } from "schema/v2/object_identification" +import { ResolverContext } from "types/graphql" +import { HomeViewComponent } from "../HomeViewComponent" + +export const standardSectionFields: GraphQLFieldConfigMap< + any, + ResolverContext +> = { + ...InternalIDFields, + id: { + type: new GraphQLNonNull(GraphQLID), + description: "A globally unique ID.", + resolve: ({ id }) => { + return toGlobalId("HomeViewSection", id) + }, + }, + contextModule: { + type: GraphQLString, + description: + "[Analytics] `context module` analytics value for this section, as defined in our schema (artsy/cohesion)", + }, + component: { + type: HomeViewComponent, + description: + "Component prescription for this section, for overriding or customizing presentation and behavior", + }, + ownerType: { + type: GraphQLString, + description: + "[Analytics] `owner type` analytics value for this scetion when displayed in a standalone UI, as defined in our schema (artsy/cohesion)", + }, +} + +export const HomeViewGenericSectionInterface = new GraphQLInterfaceType({ + name: HomeViewSectionTypeNames.HomeViewSectionGeneric, + description: "Abstract interface shared by every kind of home view section", + fields: standardSectionFields, + resolveType: (value) => { + return value.type + }, +}) diff --git a/src/schema/v2/homeView/sectionTypes/HeroUnits.ts b/src/schema/v2/homeView/sectionTypes/HeroUnits.ts new file mode 100644 index 0000000000..0260351c6e --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/HeroUnits.ts @@ -0,0 +1,28 @@ +import { GraphQLObjectType } from "graphql" +import { pageable } from "relay-cursor-paging" +import { ResolverContext } from "types/graphql" +import { emptyConnection } from "../../fields/pagination" +import { heroUnitsConnection } from "../../HeroUnit/heroUnitsConnection" +import { NodeInterface } from "../../object_identification" +import { HomeViewGenericSectionInterface } from "./GenericSectionInterface" +import { HomeViewSectionTypeNames } from "./names" +import { standardSectionFields } from "./GenericSectionInterface" + +export const HomeViewHeroUnitsSectionType = new GraphQLObjectType< + any, + ResolverContext +>({ + name: HomeViewSectionTypeNames.HomeViewSectionHeroUnits, + description: "A hero units section in the home view", + interfaces: [HomeViewGenericSectionInterface, NodeInterface], + fields: { + ...standardSectionFields, + + heroUnitsConnection: { + type: heroUnitsConnection.type, + args: pageable({}), + resolve: (parent, ...rest) => + parent.resolver ? parent.resolver(parent, ...rest) : emptyConnection, + }, + }, +}) diff --git a/src/schema/v2/homeView/sectionTypes/MarketingCollections.ts b/src/schema/v2/homeView/sectionTypes/MarketingCollections.ts new file mode 100644 index 0000000000..6678dc115c --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/MarketingCollections.ts @@ -0,0 +1,30 @@ +import { GraphQLObjectType } from "graphql" +import { pageable } from "relay-cursor-paging" +import { ResolverContext } from "types/graphql" +import { connectionWithCursorInfo } from "../../fields/pagination" +import { MarketingCollectionType } from "../../marketingCollections" +import { NodeInterface } from "../../object_identification" +import { HomeViewGenericSectionInterface } from "./GenericSectionInterface" +import { HomeViewSectionTypeNames } from "./names" +import { standardSectionFields } from "./GenericSectionInterface" + +export const HomeViewMarketingCollectionsSectionType = new GraphQLObjectType< + any, + ResolverContext +>({ + name: HomeViewSectionTypeNames.HomeViewSectionMarketingCollections, + description: "A marketing collections section in the home view", + interfaces: [HomeViewGenericSectionInterface, NodeInterface], + fields: { + ...standardSectionFields, + + marketingCollectionsConnection: { + type: connectionWithCursorInfo({ + nodeType: MarketingCollectionType, + }).connectionType, + args: pageable({}), + resolve: (parent, ...rest) => + parent.resolver ? parent.resolver(parent, ...rest) : [], + }, + }, +}) diff --git a/src/schema/v2/homeView/sectionTypes/Sales.ts b/src/schema/v2/homeView/sectionTypes/Sales.ts new file mode 100644 index 0000000000..b26b8e2b1e --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/Sales.ts @@ -0,0 +1,27 @@ +import { GraphQLObjectType } from "graphql" +import { pageable } from "relay-cursor-paging" +import { ResolverContext } from "types/graphql" +import { NodeInterface } from "../../object_identification" +import { SalesConnectionField } from "../../sales" +import { HomeViewGenericSectionInterface } from "./GenericSectionInterface" +import { HomeViewSectionTypeNames } from "./names" +import { standardSectionFields } from "./GenericSectionInterface" + +export const HomeViewSalesSectionType = new GraphQLObjectType< + any, + ResolverContext +>({ + name: HomeViewSectionTypeNames.HomeViewSectionSales, + description: "A sales (auctions) section in the home view", + interfaces: [HomeViewGenericSectionInterface, NodeInterface], + fields: { + ...standardSectionFields, + + salesConnection: { + type: SalesConnectionField.type, + args: pageable({}), + resolve: (parent, ...rest) => + parent.resolver ? parent.resolver(parent, ...rest) : [], + }, + }, +}) diff --git a/src/schema/v2/homeView/sectionTypes/Shows.ts b/src/schema/v2/homeView/sectionTypes/Shows.ts new file mode 100644 index 0000000000..4b8a928f4f --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/Shows.ts @@ -0,0 +1,18 @@ +import { GraphQLObjectType } from "graphql" +import { ResolverContext } from "types/graphql" +import { NodeInterface } from "../../object_identification" +import { HomeViewGenericSectionInterface } from "./GenericSectionInterface" +import { HomeViewSectionTypeNames } from "./names" +import { standardSectionFields } from "./GenericSectionInterface" + +export const HomeViewShowsSectionType = new GraphQLObjectType< + any, + ResolverContext +>({ + name: HomeViewSectionTypeNames.HomeViewSectionShows, + description: "A shows section in the home view", + interfaces: [HomeViewGenericSectionInterface, NodeInterface], + fields: { + ...standardSectionFields, + }, +}) diff --git a/src/schema/v2/homeView/sectionTypes/ViewingRooms.ts b/src/schema/v2/homeView/sectionTypes/ViewingRooms.ts new file mode 100644 index 0000000000..34f22855b7 --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/ViewingRooms.ts @@ -0,0 +1,18 @@ +import { GraphQLObjectType } from "graphql" +import { ResolverContext } from "types/graphql" +import { NodeInterface } from "../../object_identification" +import { HomeViewGenericSectionInterface } from "./GenericSectionInterface" +import { HomeViewSectionTypeNames } from "./names" +import { standardSectionFields } from "./GenericSectionInterface" + +export const HomeViewViewingRoomsSectionType = new GraphQLObjectType< + any, + ResolverContext +>({ + name: HomeViewSectionTypeNames.HomeViewSectionViewingRooms, + description: "A viewing rooms section in the home view", + interfaces: [HomeViewGenericSectionInterface, NodeInterface], + fields: { + ...standardSectionFields, + }, +}) diff --git a/src/schema/v2/homeView/sectionTypes/_ExampleSectionType.ts b/src/schema/v2/homeView/sectionTypes/_ExampleSectionType.ts new file mode 100644 index 0000000000..74f251a9df --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/_ExampleSectionType.ts @@ -0,0 +1,67 @@ +import { GraphQLObjectType } from "graphql" +import { pageable } from "relay-cursor-paging" +import { ResolverContext } from "types/graphql" +import { artworkConnection } from "../../artwork" +import { emptyConnection } from "../../fields/pagination" +import { NodeInterface } from "../../object_identification" +import { HomeViewGenericSectionInterface } from "./GenericSectionInterface" +import { HomeViewSectionTypeNames } from "./names" +import { standardSectionFields } from "./GenericSectionInterface" + +/* + * A section type in the home view is specified declaratively + * as a GraphQL object that implements the HomeViewGenericSectionInterface + * + * Below we will configure its various fields. + */ +export const HomeViewExampleSectionType = new GraphQLObjectType< + any, + ResolverContext +>({ + /** + * The name of the section type, e.g. HomeViewSectionArtists + * or HomeViewSectionArtworks. + * + * This is typically in the form of HomeViewSection{Things}>, + * where Things is a plural noun that identifies the kind of content + * returned by this section type. + */ + // @ts-expect-error - not a real section type name + name: HomeViewSectionTypeNames.HomeViewSectionExample, + + /** + * A short description of the section type + */ + description: "An artworks section in the home view", + + /** + * (Do not modify). These are the interfaces that this section type implements. + * HomeViewGenericSectionInterface specifies attributes that are common to + * all section types. + */ + interfaces: [HomeViewGenericSectionInterface, NodeInterface], + + fields: { + /** + * (Do not modify). These are the standard fields that are shared by all + * implementors of the HomeViewGenericSectionInterface + */ + ...standardSectionFields, + + /** + * This is where you define the field that is used to access this + * section type's data. It will typically be a connection over an existing + * MP data type. + * + * Usually you will need to define the connection name itself, and the + * type of connection. (The `args` and `resolve` attributes here are + * generally just boilerplate.) + */ + artworksConnection: { + type: artworkConnection.connectionType, + args: pageable({}), + resolve: (parent, ...rest) => + parent.resolver ? parent.resolver(parent, ...rest) : emptyConnection, + }, + }, +}) diff --git a/src/schema/v2/homeView/sectionTypes/index.ts b/src/schema/v2/homeView/sectionTypes/index.ts new file mode 100644 index 0000000000..a0efcb7e4c --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/index.ts @@ -0,0 +1,35 @@ +import { GraphQLObjectType } from "graphql" +import { ResolverContext } from "types/graphql" +import { HomeViewActivitySectionType } from "./Activity" +import { HomeViewArticlesSectionType } from "./Articles" +import { HomeViewArtistsSectionType } from "./Artists" +import { HomeViewArtworksSectionType } from "./Artworks" +import { HomeViewAuctionResultsSectionType } from "./AuctionResults" +import { HomeViewCardsSectionType } from "./Cards" +import { HomeViewDiscoverMarketingCollectionType } from "./DiscoverMarketingCollection" +import { HomeViewExploreBySectionType } from "./ExploreBy" +import { HomeViewFairsSectionType } from "./Fairs" +import { HomeViewGalleriesSectionType } from "./Galleries" +import { HomeViewHeroUnitsSectionType } from "./HeroUnits" +import { HomeViewMarketingCollectionsSectionType } from "./MarketingCollections" +import { HomeViewSalesSectionType } from "./Sales" +import { HomeViewShowsSectionType } from "./Shows" +import { HomeViewViewingRoomsSectionType } from "./ViewingRooms" + +export const homeViewSectionTypes: GraphQLObjectType[] = [ + HomeViewActivitySectionType, + HomeViewArticlesSectionType, + HomeViewArtistsSectionType, + HomeViewArtworksSectionType, + HomeViewAuctionResultsSectionType, + HomeViewCardsSectionType, + HomeViewDiscoverMarketingCollectionType, + HomeViewExploreBySectionType, + HomeViewFairsSectionType, + HomeViewGalleriesSectionType, + HomeViewHeroUnitsSectionType, + HomeViewMarketingCollectionsSectionType, + HomeViewSalesSectionType, + HomeViewShowsSectionType, + HomeViewViewingRoomsSectionType, +] diff --git a/src/schema/v2/homeView/sectionTypes/names.ts b/src/schema/v2/homeView/sectionTypes/names.ts new file mode 100644 index 0000000000..7a27b62ef4 --- /dev/null +++ b/src/schema/v2/homeView/sectionTypes/names.ts @@ -0,0 +1,24 @@ +/** + * A list of section types’ names, following the naming convention: + * HomeViewSection{Things} + */ +export const HomeViewSectionTypeNames = { + HomeViewSectionActivity: "HomeViewSectionActivity", + HomeViewSectionArticles: "HomeViewSectionArticles", + HomeViewSectionArtists: "HomeViewSectionArtists", + HomeViewSectionArtworks: "HomeViewSectionArtworks", + HomeViewSectionAuctionResults: "HomeViewSectionAuctionResults", + HomeViewSectionCards: "HomeViewSectionCards", + HomeViewSectionDiscoverMarketingCollections: + "HomeViewSectionDiscoverMarketingCollections", + HomeViewSectionFairs: "HomeViewSectionFairs", + HomeViewSectionGalleries: "HomeViewSectionGalleries", + HomeViewSectionGeneric: "HomeViewSectionGeneric", + HomeViewSectionHeroUnits: "HomeViewSectionHeroUnits", + HomeViewSectionExploreByMarketingCollectionCategories: + "HomeViewSectionExploreByMarketingCollectionCategories", + HomeViewSectionMarketingCollections: "HomeViewSectionMarketingCollections", + HomeViewSectionSales: "HomeViewSectionSales", + HomeViewSectionShows: "HomeViewSectionShows", + HomeViewSectionViewingRooms: "HomeViewSectionViewingRooms", +} as const diff --git a/src/schema/v2/homeView/sections/ActiveBids.ts b/src/schema/v2/homeView/sections/ActiveBids.ts index eb77e25d5f..b2f8b02360 100644 --- a/src/schema/v2/homeView/sections/ActiveBids.ts +++ b/src/schema/v2/homeView/sections/ActiveBids.ts @@ -1,7 +1,7 @@ import { ContextModule } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { connectionFromArray } from "graphql-relay" export const ActiveBids: HomeViewSection = { diff --git a/src/schema/v2/homeView/sections/AuctionLotsForYou.ts b/src/schema/v2/homeView/sections/AuctionLotsForYou.ts index 6145a6356d..3e51d72e43 100644 --- a/src/schema/v2/homeView/sections/AuctionLotsForYou.ts +++ b/src/schema/v2/homeView/sections/AuctionLotsForYou.ts @@ -1,7 +1,7 @@ import { ContextModule, OwnerType } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { artworksForUser } from "schema/v2/artworksForUser/artworksForUser" export const AuctionLotsForYou: HomeViewSection = { diff --git a/src/schema/v2/homeView/sections/Auctions.ts b/src/schema/v2/homeView/sections/Auctions.ts index e1b27e6424..48a7139574 100644 --- a/src/schema/v2/homeView/sections/Auctions.ts +++ b/src/schema/v2/homeView/sections/Auctions.ts @@ -1,7 +1,7 @@ import { ContextModule, OwnerType } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { HomePageSalesModuleType } from "schema/v2/home/home_page_sales_module" import { connectionFromArray } from "graphql-relay" diff --git a/src/schema/v2/homeView/sections/CuratorsPicksEmerging.ts b/src/schema/v2/homeView/sections/CuratorsPicksEmerging.ts index 3a9bfacccf..387e953cb6 100644 --- a/src/schema/v2/homeView/sections/CuratorsPicksEmerging.ts +++ b/src/schema/v2/homeView/sections/CuratorsPicksEmerging.ts @@ -2,7 +2,7 @@ import { ContextModule, OwnerType } from "@artsy/cohesion" import { ResolverContext } from "types/graphql" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { filterArtworksConnectionWithParams } from "schema/v2/filterArtworksConnection" export const CuratorsPicksEmerging: HomeViewSection = { diff --git a/src/schema/v2/homeView/sections/DiscoverMarketingCollections.ts b/src/schema/v2/homeView/sections/DiscoverMarketingCollections.ts index 82b3d5931c..97355f2b3f 100644 --- a/src/schema/v2/homeView/sections/DiscoverMarketingCollections.ts +++ b/src/schema/v2/homeView/sections/DiscoverMarketingCollections.ts @@ -1,7 +1,7 @@ import { ContextModule, OwnerType } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { connectionFromArray } from "graphql-relay" export const DiscoverMarketingCollections: HomeViewSection = { diff --git a/src/schema/v2/homeView/sections/DiscoverSomethingNew.ts b/src/schema/v2/homeView/sections/DiscoverSomethingNew.ts index a301485483..7efd6fcea7 100644 --- a/src/schema/v2/homeView/sections/DiscoverSomethingNew.ts +++ b/src/schema/v2/homeView/sections/DiscoverSomethingNew.ts @@ -1,6 +1,6 @@ import { ContextModule } from "@artsy/cohesion" import { HomeViewSection } from "." -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { connectionFromArray } from "graphql-relay" const marketingCollectionSlugs = [ diff --git a/src/schema/v2/homeView/sections/ExploreByCategory.ts b/src/schema/v2/homeView/sections/ExploreByCategory.ts index 084d5fee4d..b30f03ff73 100644 --- a/src/schema/v2/homeView/sections/ExploreByCategory.ts +++ b/src/schema/v2/homeView/sections/ExploreByCategory.ts @@ -1,6 +1,6 @@ import { ContextModule } from "@artsy/cohesion" import { HomeViewSection } from "." -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { connectionFromArray } from "graphql-relay" // TODO: replace placeholder images 🐹 diff --git a/src/schema/v2/homeView/sections/ExploreByMarketingCollectionCategories.ts b/src/schema/v2/homeView/sections/ExploreByMarketingCollectionCategories.ts index c982501e12..4556051a96 100644 --- a/src/schema/v2/homeView/sections/ExploreByMarketingCollectionCategories.ts +++ b/src/schema/v2/homeView/sections/ExploreByMarketingCollectionCategories.ts @@ -1,5 +1,5 @@ import { HomeViewSection } from "." -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" export const ExploreByMarketingCollectionCategories: HomeViewSection = { id: "home-view-section-explore-by-marketing-collection-categories", diff --git a/src/schema/v2/homeView/sections/FeaturedFairs.ts b/src/schema/v2/homeView/sections/FeaturedFairs.ts index a74417a7d8..222fef948c 100644 --- a/src/schema/v2/homeView/sections/FeaturedFairs.ts +++ b/src/schema/v2/homeView/sections/FeaturedFairs.ts @@ -1,7 +1,7 @@ import { ContextModule } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { HomePageFairsModuleType } from "schema/v2/home/home_page_fairs_module" import { connectionFromArray } from "graphql-relay" diff --git a/src/schema/v2/homeView/sections/GalleriesNearYou.ts b/src/schema/v2/homeView/sections/GalleriesNearYou.ts index fdbb7aec33..68a82cd788 100644 --- a/src/schema/v2/homeView/sections/GalleriesNearYou.ts +++ b/src/schema/v2/homeView/sections/GalleriesNearYou.ts @@ -1,6 +1,6 @@ import { ContextModule, OwnerType } from "@artsy/cohesion" import { HomeViewSection } from "." -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" export const GalleriesNearYou: HomeViewSection = { id: "home-view-section-galleries-near-you", diff --git a/src/schema/v2/homeView/sections/HeroUnits.ts b/src/schema/v2/homeView/sections/HeroUnits.ts index 038c27e724..70ec77770c 100644 --- a/src/schema/v2/homeView/sections/HeroUnits.ts +++ b/src/schema/v2/homeView/sections/HeroUnits.ts @@ -1,7 +1,7 @@ import { ContextModule } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { heroUnitsConnection } from "schema/v2/HeroUnit/heroUnitsConnection" export const HeroUnits: HomeViewSection = { diff --git a/src/schema/v2/homeView/sections/LatestActivity.ts b/src/schema/v2/homeView/sections/LatestActivity.ts index fa883de357..cfa348ce28 100644 --- a/src/schema/v2/homeView/sections/LatestActivity.ts +++ b/src/schema/v2/homeView/sections/LatestActivity.ts @@ -1,7 +1,7 @@ import { ContextModule, OwnerType } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { NotificationsConnection } from "schema/v2/notifications" export const LatestActivity: HomeViewSection = { diff --git a/src/schema/v2/homeView/sections/LatestArticles.ts b/src/schema/v2/homeView/sections/LatestArticles.ts index f4c79bd12d..55e43b482c 100644 --- a/src/schema/v2/homeView/sections/LatestArticles.ts +++ b/src/schema/v2/homeView/sections/LatestArticles.ts @@ -1,7 +1,7 @@ import { ContextModule, OwnerType } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import ArticlesConnection from "schema/v2/articlesConnection" export const LatestArticles: HomeViewSection = { diff --git a/src/schema/v2/homeView/sections/LatestAuctionResults.ts b/src/schema/v2/homeView/sections/LatestAuctionResults.ts index a0e4cb4c18..b248a00b92 100644 --- a/src/schema/v2/homeView/sections/LatestAuctionResults.ts +++ b/src/schema/v2/homeView/sections/LatestAuctionResults.ts @@ -1,7 +1,7 @@ import { ContextModule, OwnerType } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { AuctionResultSortEnum, AuctionResultsStateEnums, diff --git a/src/schema/v2/homeView/sections/MarketingCollections.ts b/src/schema/v2/homeView/sections/MarketingCollections.ts index e430394522..c6043de4b4 100644 --- a/src/schema/v2/homeView/sections/MarketingCollections.ts +++ b/src/schema/v2/homeView/sections/MarketingCollections.ts @@ -1,7 +1,7 @@ import { ContextModule } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { HomePageMarketingCollectionsModuleType } from "schema/v2/home/home_page_marketing_collections_module" import { connectionFromArray } from "graphql-relay" diff --git a/src/schema/v2/homeView/sections/NewWorksForYou.ts b/src/schema/v2/homeView/sections/NewWorksForYou.ts index 5e8a23c30f..14ea116ca4 100644 --- a/src/schema/v2/homeView/sections/NewWorksForYou.ts +++ b/src/schema/v2/homeView/sections/NewWorksForYou.ts @@ -1,7 +1,7 @@ import { ContextModule, OwnerType } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { artworksForUser } from "schema/v2/artworksForUser/artworksForUser" export const NewWorksForYou: HomeViewSection = { diff --git a/src/schema/v2/homeView/sections/NewWorksFromGalleriesYouFollow.ts b/src/schema/v2/homeView/sections/NewWorksFromGalleriesYouFollow.ts index 7fa1e521ca..7ac108161c 100644 --- a/src/schema/v2/homeView/sections/NewWorksFromGalleriesYouFollow.ts +++ b/src/schema/v2/homeView/sections/NewWorksFromGalleriesYouFollow.ts @@ -1,7 +1,7 @@ import { ContextModule, OwnerType } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { newWorksFromGalleriesYouFollow } from "schema/v2/me/newWorksFromGalleriesYouFollow" export const NewWorksFromGalleriesYouFollow: HomeViewSection = { diff --git a/src/schema/v2/homeView/sections/News.ts b/src/schema/v2/homeView/sections/News.ts index 8530db3998..b05ef76984 100644 --- a/src/schema/v2/homeView/sections/News.ts +++ b/src/schema/v2/homeView/sections/News.ts @@ -1,7 +1,7 @@ import { ContextModule, OwnerType } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import ArticleSorts from "schema/v2/sorts/article_sorts" import { ArticleLayoutEnum } from "schema/v2/article/models" import ArticlesConnection from "schema/v2/articlesConnection" diff --git a/src/schema/v2/homeView/sections/RecentlyViewedArtworks.ts b/src/schema/v2/homeView/sections/RecentlyViewedArtworks.ts index dca6253d52..1baeec4741 100644 --- a/src/schema/v2/homeView/sections/RecentlyViewedArtworks.ts +++ b/src/schema/v2/homeView/sections/RecentlyViewedArtworks.ts @@ -1,7 +1,7 @@ import { ContextModule, OwnerType } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { RecentlyViewedArtworks as _RecentlyViewedArtworks } from "../../me/recentlyViewedArtworks" export const RecentlyViewedArtworks: HomeViewSection = { diff --git a/src/schema/v2/homeView/sections/RecommendedArtists.ts b/src/schema/v2/homeView/sections/RecommendedArtists.ts index 61143fc18d..0e5cff7fde 100644 --- a/src/schema/v2/homeView/sections/RecommendedArtists.ts +++ b/src/schema/v2/homeView/sections/RecommendedArtists.ts @@ -1,7 +1,7 @@ import { ContextModule } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { ArtistRecommendations } from "schema/v2/me/artistRecommendations" export const RecommendedArtists: HomeViewSection = { diff --git a/src/schema/v2/homeView/sections/RecommendedArtworks.ts b/src/schema/v2/homeView/sections/RecommendedArtworks.ts index e7f13bd86f..58aad56c73 100644 --- a/src/schema/v2/homeView/sections/RecommendedArtworks.ts +++ b/src/schema/v2/homeView/sections/RecommendedArtworks.ts @@ -1,7 +1,7 @@ import { ContextModule, OwnerType } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { ArtworkRecommendations } from "schema/v2/me/artworkRecommendations" export const RecommendedArtworks: HomeViewSection = { diff --git a/src/schema/v2/homeView/sections/ShowsForYou.ts b/src/schema/v2/homeView/sections/ShowsForYou.ts index 8e509a38dd..ab6aacb1f3 100644 --- a/src/schema/v2/homeView/sections/ShowsForYou.ts +++ b/src/schema/v2/homeView/sections/ShowsForYou.ts @@ -1,6 +1,6 @@ import { ContextModule } from "@artsy/cohesion" import { HomeViewSection } from "." -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" export const ShowsForYou: HomeViewSection = { id: "home-view-section-shows-for-you", diff --git a/src/schema/v2/homeView/sections/SimilarToRecentlyViewedArtworks.ts b/src/schema/v2/homeView/sections/SimilarToRecentlyViewedArtworks.ts index c142e62af7..a5c9c9d88b 100644 --- a/src/schema/v2/homeView/sections/SimilarToRecentlyViewedArtworks.ts +++ b/src/schema/v2/homeView/sections/SimilarToRecentlyViewedArtworks.ts @@ -1,7 +1,7 @@ import { ContextModule, OwnerType } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { SimilarToRecentlyViewed } from "schema/v2/me/similarToRecentlyViewed" export const SimilarToRecentlyViewedArtworks: HomeViewSection = { diff --git a/src/schema/v2/homeView/sections/TrendingArtists.ts b/src/schema/v2/homeView/sections/TrendingArtists.ts index 2967d1bba9..2f49be680d 100644 --- a/src/schema/v2/homeView/sections/TrendingArtists.ts +++ b/src/schema/v2/homeView/sections/TrendingArtists.ts @@ -1,7 +1,7 @@ import { ContextModule } from "@artsy/cohesion" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { connectionFromArray } from "graphql-relay" import { getCuratedArtists } from "schema/v2/artists/curatedTrending" diff --git a/src/schema/v2/homeView/sections/ViewingRooms.ts b/src/schema/v2/homeView/sections/ViewingRooms.ts index 69eb61646a..5990f21f0f 100644 --- a/src/schema/v2/homeView/sections/ViewingRooms.ts +++ b/src/schema/v2/homeView/sections/ViewingRooms.ts @@ -1,6 +1,6 @@ import { ContextModule, OwnerType } from "@artsy/cohesion" import { HomeViewSection } from "." -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" export const ViewingRooms: HomeViewSection = { id: "home-view-section-viewing-rooms", diff --git a/src/schema/v2/homeView/sections/_ExampleSection.ts b/src/schema/v2/homeView/sections/_ExampleSection.ts index dbceece408..89c77daf13 100644 --- a/src/schema/v2/homeView/sections/_ExampleSection.ts +++ b/src/schema/v2/homeView/sections/_ExampleSection.ts @@ -2,7 +2,7 @@ import { ContextModule, OwnerType } from "@artsy/cohesion" import { ResolverContext } from "types/graphql" import { HomeViewSection } from "." import { withHomeViewTimeout } from "../helpers/withHomeViewTimeout" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { filterArtworksConnectionWithParams } from "schema/v2/filterArtworksConnection" /* diff --git a/src/schema/v2/homeView/sections/index.ts b/src/schema/v2/homeView/sections/index.ts index 992f1ea110..5151b88c62 100644 --- a/src/schema/v2/homeView/sections/index.ts +++ b/src/schema/v2/homeView/sections/index.ts @@ -1,7 +1,7 @@ import { GraphQLFieldResolver } from "graphql" import { ResolverContext } from "types/graphql" import { HomeViewComponentBehaviors } from "../HomeViewComponent" -import { HomeViewSectionTypeNames } from "../HomeViewSection" +import { HomeViewSectionTypeNames } from "../sectionTypes/names" import { ContextModule, OwnerType } from "@artsy/cohesion" import { SimilarToRecentlyViewedArtworks } from "./SimilarToRecentlyViewedArtworks" import { CuratorsPicksEmerging } from "./CuratorsPicksEmerging" @@ -68,11 +68,9 @@ const sections: HomeViewSection[] = [ LatestArticles, LatestAuctionResults, MarketingCollections, - MarketingCollections, - MarketingCollections, + News, NewWorksForYou, NewWorksFromGalleriesYouFollow, - News, RecentlyViewedArtworks, RecommendedArtists, RecommendedArtworks, diff --git a/src/schema/v2/schema.ts b/src/schema/v2/schema.ts index 76fd09746b..6a1b95fd5c 100644 --- a/src/schema/v2/schema.ts +++ b/src/schema/v2/schema.ts @@ -228,7 +228,7 @@ import { updateCareerHighlightMutation } from "./careerHighlight/updateCareerHig import { updatePartnerShowMutation } from "./partner/updatePartnerShowMutation" import { VerifyUser } from "./verifyUser" import { ArtistSeries, ArtistSeriesConnection } from "./artistSeries" -import { homeViewSectionTypes } from "./homeView/HomeViewSection" +import { homeViewSectionTypes } from "./homeView/sectionTypes" import { CacheableDirective } from "directives/cacheableDirective" import { OptionalFieldDirective } from "directives/optionalField/optionalFieldsDirectiveExtension" import { PrincipalFieldDirective } from "directives/principalField/principalFieldDirectiveExtension"