diff --git a/src/Apps/Artwork/ArtworkApp.tsx b/src/Apps/Artwork/ArtworkApp.tsx index 9b8f08e04f8..f7a1694a809 100644 --- a/src/Apps/Artwork/ArtworkApp.tsx +++ b/src/Apps/Artwork/ArtworkApp.tsx @@ -42,6 +42,8 @@ import { ArtworkAuctionCreateAlertHeaderFragmentContainer } from "Apps/Artwork/C import { compact } from "lodash" import { AlertProvider } from "Components/Alert/AlertProvider" import { FullBleedBanner } from "Components/FullBleedBanner" +import { extractNodes } from "Utils/extractNodes" +import { useFeatureFlag } from "System/useFeatureFlag" export interface Props { artwork: ArtworkApp_artwork$data @@ -300,7 +302,14 @@ export const ArtworkApp: React.FC = props => { const WrappedArtworkApp: React.FC = props => { const { - artwork: { artists, attributionClass, internalID, mediumType, sale }, + artwork: { + artists, + artistSeriesConnection, + attributionClass, + internalID, + mediumType, + sale, + }, } = props const { @@ -314,6 +323,10 @@ const WrappedArtworkApp: React.FC = props => { const referrer = state && state.previousHref const { isComplete } = useRouteComplete() + const isArtistSeriesFilterEnabled = useFeatureFlag( + "onyx_enable-artist-series-filter" + ) + const websocketEnabled = !!sale?.extendedBiddingIntervalMinutes const initialAlertCriteria = { @@ -322,6 +335,13 @@ const WrappedArtworkApp: React.FC = props => { additionalGeneIDs: compact([mediumType?.filterGene?.slug as string]), } + if (isArtistSeriesFilterEnabled) { + const artistSeriesSlugs = compact( + extractNodes(artistSeriesConnection).map(node => node.slug) + ) + initialAlertCriteria["artistSeriesIDs"] = artistSeriesSlugs + } + return ( { field: "artistIDs", value: "artist-id", }, + { + displayValue: "Soup Cans", + field: "artistSeriesID", + value: "artist-series-id", + }, ], }, }), @@ -106,6 +111,7 @@ describe("AlertProvider", () => { expect(screen.getByText("Add Filters:")).toBeInTheDocument() expect(screen.getByText("Andy Warhol")).toBeInTheDocument() + expect(screen.getByText("Soup Cans")).toBeInTheDocument() // transition to filters step screen.getByTestId("addFilters").click() diff --git a/src/__generated__/ArtworkApp_artwork.graphql.ts b/src/__generated__/ArtworkApp_artwork.graphql.ts index 785c800c545..964621c85de 100644 --- a/src/__generated__/ArtworkApp_artwork.graphql.ts +++ b/src/__generated__/ArtworkApp_artwork.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<> + * @generated SignedSource<> * @lightSyntaxTransform * @nogrep */ @@ -15,6 +15,13 @@ export type ArtworkApp_artwork$data = { readonly artist: { readonly " $fragmentSpreads": FragmentRefs<"ArtistInfo_artist">; } | null | undefined; + readonly artistSeriesConnection: { + readonly edges: ReadonlyArray<{ + readonly node: { + readonly slug: string; + } | null | undefined; + } | null | undefined> | null | undefined; + } | null | undefined; readonly artists: ReadonlyArray<{ readonly id: string; readonly internalID: string; @@ -72,6 +79,9 @@ v1 = { "storageKey": null }, v2 = [ + (v1/*: any*/) +], +v3 = [ { "alias": null, "args": null, @@ -80,7 +90,7 @@ v2 = [ "storageKey": null } ], -v3 = { +v4 = { "args": null, "kind": "FragmentSpread", "name": "ArtistInfo_artist" @@ -103,6 +113,44 @@ return { ], "storageKey": null }, + { + "alias": null, + "args": [ + { + "kind": "Literal", + "name": "first", + "value": 5 + } + ], + "concreteType": "ArtistSeriesConnection", + "kind": "LinkedField", + "name": "artistSeriesConnection", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "ArtistSeriesEdge", + "kind": "LinkedField", + "name": "edges", + "plural": true, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "ArtistSeries", + "kind": "LinkedField", + "name": "node", + "plural": false, + "selections": (v2/*: any*/), + "storageKey": null + } + ], + "storageKey": null + } + ], + "storageKey": "artistSeriesConnection(first:5)" + }, (v1/*: any*/), (v0/*: any*/), { @@ -141,9 +189,7 @@ return { "kind": "LinkedField", "name": "filterGene", "plural": false, - "selections": [ - (v1/*: any*/) - ], + "selections": (v2/*: any*/), "storageKey": null } ], @@ -166,13 +212,13 @@ return { "selections": [ { "kind": "InlineFragment", - "selections": (v2/*: any*/), + "selections": (v3/*: any*/), "type": "PriceRange", "abstractKey": null }, { "kind": "InlineFragment", - "selections": (v2/*: any*/), + "selections": (v3/*: any*/), "type": "Money", "abstractKey": null } @@ -244,7 +290,7 @@ return { }, (v0/*: any*/), (v1/*: any*/), - (v3/*: any*/) + (v4/*: any*/) ], "storageKey": null }, @@ -256,7 +302,7 @@ return { "name": "artist", "plural": false, "selections": [ - (v3/*: any*/) + (v4/*: any*/) ], "storageKey": null }, @@ -296,6 +342,6 @@ return { }; })(); -(node as any).hash = "9e413607b7545cf07e2c756f804b19ef"; +(node as any).hash = "70f10194d159b94d7e238a455f2fd8d1"; export default node; diff --git a/src/__generated__/artworkRoutes_ArtworkQuery.graphql.ts b/src/__generated__/artworkRoutes_ArtworkQuery.graphql.ts index 7402a5ca668..5309505d4a8 100644 --- a/src/__generated__/artworkRoutes_ArtworkQuery.graphql.ts +++ b/src/__generated__/artworkRoutes_ArtworkQuery.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<> + * @generated SignedSource<<8fabbdb2cf25816498de9710b6b54e44>> * @lightSyntaxTransform * @nogrep */ @@ -874,6 +874,46 @@ return { ], "storageKey": null }, + { + "alias": null, + "args": [ + { + "kind": "Literal", + "name": "first", + "value": 5 + } + ], + "concreteType": "ArtistSeriesConnection", + "kind": "LinkedField", + "name": "artistSeriesConnection", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "ArtistSeriesEdge", + "kind": "LinkedField", + "name": "edges", + "plural": true, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "ArtistSeries", + "kind": "LinkedField", + "name": "node", + "plural": false, + "selections": [ + (v4/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ], + "storageKey": "artistSeriesConnection(first:5)" + }, (v4/*: any*/), (v2/*: any*/), { @@ -2340,12 +2380,12 @@ return { ] }, "params": { - "cacheID": "f595e89a668741eb6bec0be95d15cd7f", + "cacheID": "7b51a336578c4fc5a495c520de636771", "id": null, "metadata": {}, "name": "artworkRoutes_ArtworkQuery", "operationKind": "query", - "text": "query artworkRoutes_ArtworkQuery(\n $artworkID: String!\n) {\n artwork(id: $artworkID) @principalField {\n ...ArtworkApp_artwork\n id\n }\n me {\n ...ArtworkApp_me\n id\n }\n}\n\nfragment ArtistBio_bio on Artist {\n biographyBlurb(format: HTML, partnerBio: false) {\n credit\n partnerID\n text\n }\n}\n\nfragment ArtistInfo_artist on Artist {\n ...EntityHeaderArtist_artist\n internalID\n slug\n image {\n cropped(width: 45, height: 45) {\n src\n srcSet\n }\n }\n counts {\n partnerShows\n }\n exhibitionHighlights(size: 3) {\n ...SelectedExhibitions_exhibitions\n id\n }\n collections\n highlights {\n partnersConnection(first: 10, displayOnPartnerProfile: true, representedBy: true, partnerCategory: [\"blue-chip\", \"top-established\", \"top-emerging\"]) {\n edges {\n node {\n __typename\n id\n }\n id\n }\n }\n }\n auctionResultsConnection(recordsTrusted: true, first: 1, sort: PRICE_AND_DATE_DESC) {\n edges {\n node {\n __typename\n id\n }\n }\n }\n ...ArtistBio_bio\n ...ArtistMarketInsights_artist\n biographyBlurb(format: HTML, partnerBio: false) {\n text\n }\n}\n\nfragment ArtistMarketInsights_artist on Artist {\n collections\n highlights {\n partnersConnection(first: 10, displayOnPartnerProfile: true, representedBy: true, partnerCategory: [\"blue-chip\", \"top-established\", \"top-emerging\"]) {\n edges {\n node {\n categories {\n slug\n id\n }\n id\n }\n id\n }\n }\n }\n auctionResultsConnection(recordsTrusted: true, first: 1, sort: PRICE_AND_DATE_DESC) {\n edges {\n node {\n price_realized: priceRealized {\n display(format: \"0.0a\")\n }\n organization\n sale_date: saleDate(format: \"YYYY\")\n id\n }\n }\n }\n}\n\nfragment ArtworkActionsSaveButton_artwork on Artwork {\n id\n internalID\n isSaved\n slug\n title\n date\n artistNames\n preview: image {\n url(version: \"square\")\n }\n isSavedToList\n sale {\n isAuction\n isClosed\n id\n }\n ...ArtworkActionsWatchLotButton_artwork\n}\n\nfragment ArtworkActionsWatchLotButton_artwork on Artwork {\n sale {\n isLiveOpen\n isRegistrationClosed\n liveStartAt\n registrationStatus {\n qualifiedForBidding\n id\n }\n id\n }\n ...ArtworkAuctionRegistrationPanel_artwork\n}\n\nfragment ArtworkActions_artwork_FOvjt on Artwork {\n ...ArtworkActionsSaveButton_artwork\n ...ArtworkDownloadButton_artwork\n ...ArtworkSharePanel_artwork_FOvjt\n ...ViewInRoom_artwork\n slug\n downloadableImageUrl\n isDownloadable\n isHangable\n partner {\n slug\n id\n }\n}\n\nfragment ArtworkApp_artwork on Artwork {\n attributionClass {\n internalID\n id\n }\n slug\n internalID\n is_acquireable: isAcquireable\n is_offerable: isOfferable\n availability\n mediumType {\n filterGene {\n slug\n id\n }\n }\n visibilityLevel\n listPrice {\n __typename\n ... on PriceRange {\n display\n }\n ... on Money {\n display\n }\n }\n partner {\n ...UnlistedArtworkBanner_partner\n id\n }\n is_in_auction: isInAuction\n sale {\n ...CascadingEndTimesBanner_sale\n internalID\n slug\n extendedBiddingIntervalMinutes\n id\n }\n artists {\n id\n internalID\n slug\n ...ArtistInfo_artist\n }\n artist {\n ...ArtistInfo_artist\n id\n }\n ...ArtworkRelatedArtists_artwork\n ...ArtworkMeta_artwork\n ...ArtworkTopContextBar_artwork\n ...ArtworkImageBrowser_artwork\n ...ArtworkSidebar_artwork\n ...ArtworkAuctionCreateAlertHeader_artwork\n}\n\nfragment ArtworkApp_me on Me {\n ...ArtworkSidebar_me\n}\n\nfragment ArtworkAuctionCreateAlertHeader_artwork on Artwork {\n slug\n internalID\n title\n isEligibleToCreateAlert\n isInAuction\n artistNames\n artists {\n internalID\n name\n slug\n id\n }\n sale {\n startAt\n isClosed\n id\n }\n saleArtwork {\n extendedBiddingEndAt\n endAt\n endedAt\n id\n }\n attributionClass {\n internalID\n id\n }\n mediumType {\n filterGene {\n slug\n name\n id\n }\n }\n savedSearch {\n suggestedArtworksConnection {\n totalCount\n }\n }\n myLotStandingManageAlerts: myLotStanding {\n isHighestBidder\n }\n ...ArtworkCreateAlertButton_artwork\n}\n\nfragment ArtworkAuctionRegistrationPanel_artwork on Artwork {\n sale {\n slug\n registrationEndsAt\n isRegistrationClosed\n id\n }\n}\n\nfragment ArtworkChatBubble_artwork on Artwork {\n isAcquireable\n isInquireable\n isOfferable\n isInAuction\n listPrice {\n __typename\n ... on Money {\n currencyCode\n major\n }\n ... on PriceRange {\n maxPrice {\n currencyCode\n major\n }\n }\n }\n}\n\nfragment ArtworkCreateAlertButton_artwork on Artwork {\n slug\n internalID\n title\n artists {\n internalID\n name\n slug\n id\n }\n attributionClass {\n internalID\n id\n }\n mediumType {\n filterGene {\n slug\n name\n id\n }\n }\n}\n\nfragment ArtworkDownloadButton_artwork on Artwork {\n title\n date\n downloadableImageUrl\n artists {\n name\n id\n }\n}\n\nfragment ArtworkImageBrowserLarge_artwork_FOvjt on Artwork {\n ...ArtworkLightbox_artwork_FOvjt\n ...ArtworkVideoPlayer_artwork_FOvjt\n isSetVideoAsCover\n figures(includeAll: false) {\n __typename\n ... on Image {\n ...DeepZoom_image\n __typename\n internalID\n isZoomable\n }\n ... on Video {\n __typename\n id\n }\n }\n}\n\nfragment ArtworkImageBrowserSmall_artwork_FOvjt on Artwork {\n ...ArtworkLightbox_artwork_FOvjt\n ...ArtworkVideoPlayer_artwork_FOvjt\n isSetVideoAsCover\n figures(includeAll: false) {\n __typename\n ... on Image {\n ...DeepZoom_image\n internalID\n isZoomable\n type: __typename\n }\n ... on Video {\n type: __typename\n id\n }\n }\n}\n\nfragment ArtworkImageBrowser_artwork on Artwork {\n ...ArtworkActions_artwork_FOvjt\n ...ArtworkImageBrowserSmall_artwork_FOvjt\n ...ArtworkImageBrowserLarge_artwork_FOvjt\n internalID\n figures(includeAll: false) {\n __typename\n ... on Image {\n isDefault\n width\n height\n }\n ... on Video {\n videoWidth: width\n videoHeight: height\n id\n }\n }\n}\n\nfragment ArtworkLightbox_artwork_FOvjt on Artwork {\n formattedMetadata\n images(includeAll: false) {\n internalID\n isDefault\n placeholder: url(version: [\"small\", \"medium\"])\n fallback: cropped(quality: 85, width: 800, height: 800, version: [\"main\", \"normalized\", \"larger\", \"large\"]) {\n width\n height\n src\n srcSet\n }\n resized(quality: 85, width: 800, height: 800, version: [\"main\", \"normalized\", \"larger\", \"large\"]) {\n width\n height\n src\n srcSet\n }\n versions\n }\n}\n\nfragment ArtworkMeta_artwork on Artwork {\n ...SeoDataForArtwork_artwork\n ...ArtworkChatBubble_artwork\n href\n isShareable\n visibilityLevel\n metaImage: image {\n resized(width: 640, height: 640, version: [\"large\", \"medium\", \"tall\"]) {\n width\n height\n url\n }\n }\n meta {\n title\n description(limit: 155)\n longDescription: description(limit: 200)\n }\n}\n\nfragment ArtworkRelatedArtists_artwork on Artwork {\n slug\n artist {\n href\n related {\n artistsConnection(kind: MAIN, first: 6, after: \"\") {\n pageInfo {\n hasNextPage\n endCursor\n }\n edges {\n node {\n ...EntityHeaderArtist_artist\n id\n __typename\n }\n cursor\n }\n }\n }\n id\n }\n}\n\nfragment ArtworkSharePanel_artwork_FOvjt on Artwork {\n href\n images(includeAll: false) {\n url\n }\n artworkMeta: meta {\n share\n }\n}\n\nfragment ArtworkSidebarArtists_artwork on Artwork {\n culturalMaker\n artists {\n slug\n name\n id\n }\n}\n\nfragment ArtworkSidebarArtworkTitle_artwork on Artwork {\n date\n title\n}\n\nfragment ArtworkSidebarAuctionInfoPolling_artwork on Artwork {\n internalID\n sale {\n isClosed\n id\n }\n saleArtwork {\n currentBid {\n display\n }\n id\n }\n ...ArtworkSidebarCurrentBidInfo_artwork\n ...ArtworkSidebarBidAction_artwork\n}\n\nfragment ArtworkSidebarAuctionInfoPolling_me on Me {\n ...ArtworkSidebarBidAction_me\n}\n\nfragment ArtworkSidebarAuctionTimer_artwork on Artwork {\n internalID\n sale {\n cascadingEndTimeIntervalMinutes\n isClosed\n ...AuctionTimer_sale\n startAt\n id\n }\n saleArtwork {\n ...LotTimer_saleArtwork\n endAt\n endedAt\n id\n }\n}\n\nfragment ArtworkSidebarAuthenticityCertificate_artwork on Artwork {\n hasCertificateOfAuthenticity\n isBiddable\n}\n\nfragment ArtworkSidebarBidAction_artwork on Artwork {\n myLotStanding(live: true) {\n most_recent_bid: mostRecentBid {\n max_bid: maxBid {\n cents\n }\n id\n }\n }\n slug\n internalID\n sale {\n slug\n registrationStatus {\n qualified_for_bidding: qualifiedForBidding\n id\n }\n is_preview: isPreview\n is_open: isOpen\n is_live_open: isLiveOpen\n is_closed: isClosed\n is_registration_closed: isRegistrationClosed\n requireIdentityVerification\n id\n }\n sale_artwork: saleArtwork {\n increments {\n cents\n display\n }\n endedAt\n id\n }\n}\n\nfragment ArtworkSidebarBidAction_me on Me {\n isIdentityVerified\n pendingIdentityVerification {\n internalID\n id\n }\n}\n\nfragment ArtworkSidebarBiddingClosedMessage_artwork on Artwork {\n ...ArtworkCreateAlertButton_artwork\n isEligibleToCreateAlert\n artists {\n internalID\n id\n }\n attributionClass {\n internalID\n id\n }\n mediumType {\n filterGene {\n slug\n id\n }\n }\n}\n\nfragment ArtworkSidebarClassification_artwork on Artwork {\n attributionClass {\n shortArrayDescription\n id\n }\n}\n\nfragment ArtworkSidebarCommercialButtons_artwork on Artwork {\n ...ArtworkSidebarEditionSets_artwork\n ...ArtworkCreateAlertButton_artwork\n isEligibleToCreateAlert\n artists {\n internalID\n id\n }\n attributionClass {\n internalID\n id\n }\n internalID\n slug\n saleMessage\n isInquireable\n isAcquireable\n isOfferable\n isSold\n listPrice {\n __typename\n ... on PriceRange {\n display\n }\n ... on Money {\n display\n }\n }\n mediumType {\n filterGene {\n slug\n id\n }\n }\n editionSets {\n id\n internalID\n isAcquireable\n isOfferable\n saleMessage\n }\n}\n\nfragment ArtworkSidebarCreateAlert_artwork on Artwork {\n internalID\n title\n slug\n isEligibleToCreateAlert\n artists {\n internalID\n name\n slug\n id\n }\n attributionClass {\n internalID\n id\n }\n mediumType {\n filterGene {\n slug\n name\n id\n }\n }\n}\n\nfragment ArtworkSidebarCurrentBidInfo_artwork on Artwork {\n sale {\n is_closed: isClosed\n is_live_open: isLiveOpen\n internalID\n is_with_buyers_premium: isWithBuyersPremium\n id\n }\n sale_artwork: saleArtwork {\n is_with_reserve: isWithReserve\n reserve_message: reserveMessage\n reserve_status: reserveStatus\n endedAt\n current_bid: currentBid {\n display\n }\n counts {\n bidder_positions: bidderPositions\n }\n id\n }\n myLotStanding(live: true) {\n active_bid: activeBid {\n is_winning: isWinning\n id\n }\n most_recent_bid: mostRecentBid {\n max_bid: maxBid {\n display\n }\n id\n }\n }\n ...ArtworkSidebarBiddingClosedMessage_artwork\n}\n\nfragment ArtworkSidebarDetails_artwork on Artwork {\n medium\n dimensions {\n in\n cm\n }\n framed {\n details\n }\n editionOf\n isEdition\n editionSets {\n internalID\n id\n }\n ...ArtworkSidebarClassification_artwork\n ...ArtworkSidebarAuthenticityCertificate_artwork\n}\n\nfragment ArtworkSidebarEditionSets_artwork on Artwork {\n isInquireable\n isOfferable\n isAcquireable\n editionSets {\n id\n internalID\n isOfferable\n isAcquireable\n saleMessage\n ...ArtworkSidebarSizeInfo_piece\n }\n}\n\nfragment ArtworkSidebarEstimatedValue_artwork on Artwork {\n saleArtwork {\n estimate\n id\n }\n sale {\n isClosed\n id\n }\n}\n\nfragment ArtworkSidebarLinks_artwork on Artwork {\n isInAuction\n sale {\n isClosed\n id\n }\n}\n\nfragment ArtworkSidebarPartnerInfo_artwork on Artwork {\n internalID\n slug\n isInquireable\n partner {\n name\n href\n cities\n isInquireable\n id\n }\n sale {\n name\n href\n id\n }\n}\n\nfragment ArtworkSidebarShippingInformation_artwork on Artwork {\n shippingOrigin\n shippingInfo\n}\n\nfragment ArtworkSidebarSizeInfo_piece on Sellable {\n __isSellable: __typename\n dimensions {\n in\n cm\n }\n editionOf\n}\n\nfragment ArtworkSidebar_artwork on Artwork {\n slug\n isSold\n isAcquireable\n isOfferable\n isInAuction\n saleMessage\n isBiddable\n isEligibleForArtsyGuarantee\n isEligibleToCreateAlert\n ...ArtworkSidebarArtworkTitle_artwork\n ...ArtworkSidebarArtists_artwork\n ...ArtworkSidebarDetails_artwork\n ...ArtworkSidebarCommercialButtons_artwork\n ...ArtworkSidebarShippingInformation_artwork\n ...ArtworkSidebarPartnerInfo_artwork\n ...ArtworkSidebarCreateAlert_artwork\n ...ArtworkSidebarLinks_artwork\n ...ArtworkSidebarEstimatedValue_artwork\n ...ArtworkSidebarBiddingClosedMessage_artwork\n ...ArtworkSidebarAuctionTimer_artwork\n ...ArtworkSidebarAuctionInfoPolling_artwork\n sale {\n startAt\n isClosed\n id\n }\n saleArtwork {\n lotID\n lotLabel\n extendedBiddingEndAt\n endAt\n endedAt\n id\n }\n artists {\n internalID\n id\n }\n}\n\nfragment ArtworkSidebar_me on Me {\n ...ArtworkSidebarAuctionInfoPolling_me\n}\n\nfragment ArtworkTopContextBar_artwork on Artwork {\n partner {\n name\n id\n }\n sale {\n isAuction\n isBenefit\n isGalleryAuction\n coverImage {\n url\n }\n ...RegistrationAuctionTimer_sale\n id\n }\n context {\n __typename\n ... on Sale {\n name\n href\n }\n ... on Fair {\n name\n href\n profile {\n icon {\n url\n }\n id\n }\n }\n ... on Show {\n name\n href\n status\n thumbnail: coverImage {\n url\n }\n }\n ... on Node {\n __isNode: __typename\n id\n }\n }\n}\n\nfragment ArtworkVideoPlayer_artwork_FOvjt on Artwork {\n internalID\n slug\n figures(includeAll: false) {\n __typename\n ... on Video {\n __typename\n playerUrl\n videoWidth: width\n videoHeight: height\n id\n }\n }\n}\n\nfragment AuctionTimer_sale on Sale {\n liveStartAt\n endAt\n}\n\nfragment CascadingEndTimesBanner_sale on Sale {\n cascadingEndTimeIntervalMinutes\n extendedBiddingIntervalMinutes\n}\n\nfragment DeepZoom_image on Image {\n deepZoom {\n Image {\n xmlns\n Url\n Format\n TileSize\n Overlap\n Size {\n Width\n Height\n }\n }\n }\n}\n\nfragment EntityHeaderArtist_artist on Artist {\n internalID\n href\n slug\n name\n initials\n formattedNationalityAndBirthday\n counts {\n artworks\n forSaleArtworks\n }\n coverArtwork {\n avatar: image {\n cropped(width: 45, height: 45) {\n src\n srcSet\n }\n }\n id\n }\n}\n\nfragment LotTimer_saleArtwork on SaleArtwork {\n endAt\n formattedStartDateTime\n extendedBiddingEndAt\n lotID\n sale {\n startAt\n extendedBiddingPeriodMinutes\n extendedBiddingIntervalMinutes\n internalID\n id\n }\n}\n\nfragment RegistrationAuctionTimer_sale on Sale {\n registrationEndsAt\n isRegistrationClosed\n}\n\nfragment SelectedExhibitions_exhibitions on Show {\n partner {\n __typename\n ... on ExternalPartner {\n name\n id\n }\n ... on Partner {\n name\n }\n ... on Node {\n __isNode: __typename\n id\n }\n }\n name\n start_at: startAt(format: \"YYYY\")\n cover_image: coverImage {\n cropped(width: 800, height: 600) {\n url\n }\n }\n city\n}\n\nfragment SeoDataForArtwork_artwork on Artwork {\n href\n date\n is_price_hidden: isPriceHidden\n is_price_range: isPriceRange\n listPrice {\n __typename\n ... on PriceRange {\n minPrice {\n major\n currencyCode\n }\n maxPrice {\n major\n }\n }\n ... on Money {\n major\n currencyCode\n }\n }\n meta_image: image {\n resized(width: 640, height: 640, version: [\"large\", \"medium\", \"tall\"]) {\n width\n height\n url\n }\n }\n meta {\n title\n description(limit: 155)\n }\n partner {\n name\n type\n profile {\n image {\n resized(width: 320, height: 320, version: [\"medium\"]) {\n url\n }\n }\n id\n }\n id\n }\n artistNames\n availability\n category\n dimensions {\n in\n }\n}\n\nfragment UnlistedArtworkBanner_partner on Partner {\n name\n}\n\nfragment ViewInRoomArtwork_artwork on Artwork {\n widthCm\n heightCm\n image {\n resized(width: 800, height: 800, version: [\"main\", \"normalized\", \"larger\", \"large\"]) {\n src\n srcSet\n width\n height\n }\n }\n}\n\nfragment ViewInRoom_artwork on Artwork {\n ...ViewInRoomArtwork_artwork\n}\n" + "text": "query artworkRoutes_ArtworkQuery(\n $artworkID: String!\n) {\n artwork(id: $artworkID) @principalField {\n ...ArtworkApp_artwork\n id\n }\n me {\n ...ArtworkApp_me\n id\n }\n}\n\nfragment ArtistBio_bio on Artist {\n biographyBlurb(format: HTML, partnerBio: false) {\n credit\n partnerID\n text\n }\n}\n\nfragment ArtistInfo_artist on Artist {\n ...EntityHeaderArtist_artist\n internalID\n slug\n image {\n cropped(width: 45, height: 45) {\n src\n srcSet\n }\n }\n counts {\n partnerShows\n }\n exhibitionHighlights(size: 3) {\n ...SelectedExhibitions_exhibitions\n id\n }\n collections\n highlights {\n partnersConnection(first: 10, displayOnPartnerProfile: true, representedBy: true, partnerCategory: [\"blue-chip\", \"top-established\", \"top-emerging\"]) {\n edges {\n node {\n __typename\n id\n }\n id\n }\n }\n }\n auctionResultsConnection(recordsTrusted: true, first: 1, sort: PRICE_AND_DATE_DESC) {\n edges {\n node {\n __typename\n id\n }\n }\n }\n ...ArtistBio_bio\n ...ArtistMarketInsights_artist\n biographyBlurb(format: HTML, partnerBio: false) {\n text\n }\n}\n\nfragment ArtistMarketInsights_artist on Artist {\n collections\n highlights {\n partnersConnection(first: 10, displayOnPartnerProfile: true, representedBy: true, partnerCategory: [\"blue-chip\", \"top-established\", \"top-emerging\"]) {\n edges {\n node {\n categories {\n slug\n id\n }\n id\n }\n id\n }\n }\n }\n auctionResultsConnection(recordsTrusted: true, first: 1, sort: PRICE_AND_DATE_DESC) {\n edges {\n node {\n price_realized: priceRealized {\n display(format: \"0.0a\")\n }\n organization\n sale_date: saleDate(format: \"YYYY\")\n id\n }\n }\n }\n}\n\nfragment ArtworkActionsSaveButton_artwork on Artwork {\n id\n internalID\n isSaved\n slug\n title\n date\n artistNames\n preview: image {\n url(version: \"square\")\n }\n isSavedToList\n sale {\n isAuction\n isClosed\n id\n }\n ...ArtworkActionsWatchLotButton_artwork\n}\n\nfragment ArtworkActionsWatchLotButton_artwork on Artwork {\n sale {\n isLiveOpen\n isRegistrationClosed\n liveStartAt\n registrationStatus {\n qualifiedForBidding\n id\n }\n id\n }\n ...ArtworkAuctionRegistrationPanel_artwork\n}\n\nfragment ArtworkActions_artwork_FOvjt on Artwork {\n ...ArtworkActionsSaveButton_artwork\n ...ArtworkDownloadButton_artwork\n ...ArtworkSharePanel_artwork_FOvjt\n ...ViewInRoom_artwork\n slug\n downloadableImageUrl\n isDownloadable\n isHangable\n partner {\n slug\n id\n }\n}\n\nfragment ArtworkApp_artwork on Artwork {\n attributionClass {\n internalID\n id\n }\n artistSeriesConnection(first: 5) {\n edges {\n node {\n slug\n }\n }\n }\n slug\n internalID\n is_acquireable: isAcquireable\n is_offerable: isOfferable\n availability\n mediumType {\n filterGene {\n slug\n id\n }\n }\n visibilityLevel\n listPrice {\n __typename\n ... on PriceRange {\n display\n }\n ... on Money {\n display\n }\n }\n partner {\n ...UnlistedArtworkBanner_partner\n id\n }\n is_in_auction: isInAuction\n sale {\n ...CascadingEndTimesBanner_sale\n internalID\n slug\n extendedBiddingIntervalMinutes\n id\n }\n artists {\n id\n internalID\n slug\n ...ArtistInfo_artist\n }\n artist {\n ...ArtistInfo_artist\n id\n }\n ...ArtworkRelatedArtists_artwork\n ...ArtworkMeta_artwork\n ...ArtworkTopContextBar_artwork\n ...ArtworkImageBrowser_artwork\n ...ArtworkSidebar_artwork\n ...ArtworkAuctionCreateAlertHeader_artwork\n}\n\nfragment ArtworkApp_me on Me {\n ...ArtworkSidebar_me\n}\n\nfragment ArtworkAuctionCreateAlertHeader_artwork on Artwork {\n slug\n internalID\n title\n isEligibleToCreateAlert\n isInAuction\n artistNames\n artists {\n internalID\n name\n slug\n id\n }\n sale {\n startAt\n isClosed\n id\n }\n saleArtwork {\n extendedBiddingEndAt\n endAt\n endedAt\n id\n }\n attributionClass {\n internalID\n id\n }\n mediumType {\n filterGene {\n slug\n name\n id\n }\n }\n savedSearch {\n suggestedArtworksConnection {\n totalCount\n }\n }\n myLotStandingManageAlerts: myLotStanding {\n isHighestBidder\n }\n ...ArtworkCreateAlertButton_artwork\n}\n\nfragment ArtworkAuctionRegistrationPanel_artwork on Artwork {\n sale {\n slug\n registrationEndsAt\n isRegistrationClosed\n id\n }\n}\n\nfragment ArtworkChatBubble_artwork on Artwork {\n isAcquireable\n isInquireable\n isOfferable\n isInAuction\n listPrice {\n __typename\n ... on Money {\n currencyCode\n major\n }\n ... on PriceRange {\n maxPrice {\n currencyCode\n major\n }\n }\n }\n}\n\nfragment ArtworkCreateAlertButton_artwork on Artwork {\n slug\n internalID\n title\n artists {\n internalID\n name\n slug\n id\n }\n attributionClass {\n internalID\n id\n }\n mediumType {\n filterGene {\n slug\n name\n id\n }\n }\n}\n\nfragment ArtworkDownloadButton_artwork on Artwork {\n title\n date\n downloadableImageUrl\n artists {\n name\n id\n }\n}\n\nfragment ArtworkImageBrowserLarge_artwork_FOvjt on Artwork {\n ...ArtworkLightbox_artwork_FOvjt\n ...ArtworkVideoPlayer_artwork_FOvjt\n isSetVideoAsCover\n figures(includeAll: false) {\n __typename\n ... on Image {\n ...DeepZoom_image\n __typename\n internalID\n isZoomable\n }\n ... on Video {\n __typename\n id\n }\n }\n}\n\nfragment ArtworkImageBrowserSmall_artwork_FOvjt on Artwork {\n ...ArtworkLightbox_artwork_FOvjt\n ...ArtworkVideoPlayer_artwork_FOvjt\n isSetVideoAsCover\n figures(includeAll: false) {\n __typename\n ... on Image {\n ...DeepZoom_image\n internalID\n isZoomable\n type: __typename\n }\n ... on Video {\n type: __typename\n id\n }\n }\n}\n\nfragment ArtworkImageBrowser_artwork on Artwork {\n ...ArtworkActions_artwork_FOvjt\n ...ArtworkImageBrowserSmall_artwork_FOvjt\n ...ArtworkImageBrowserLarge_artwork_FOvjt\n internalID\n figures(includeAll: false) {\n __typename\n ... on Image {\n isDefault\n width\n height\n }\n ... on Video {\n videoWidth: width\n videoHeight: height\n id\n }\n }\n}\n\nfragment ArtworkLightbox_artwork_FOvjt on Artwork {\n formattedMetadata\n images(includeAll: false) {\n internalID\n isDefault\n placeholder: url(version: [\"small\", \"medium\"])\n fallback: cropped(quality: 85, width: 800, height: 800, version: [\"main\", \"normalized\", \"larger\", \"large\"]) {\n width\n height\n src\n srcSet\n }\n resized(quality: 85, width: 800, height: 800, version: [\"main\", \"normalized\", \"larger\", \"large\"]) {\n width\n height\n src\n srcSet\n }\n versions\n }\n}\n\nfragment ArtworkMeta_artwork on Artwork {\n ...SeoDataForArtwork_artwork\n ...ArtworkChatBubble_artwork\n href\n isShareable\n visibilityLevel\n metaImage: image {\n resized(width: 640, height: 640, version: [\"large\", \"medium\", \"tall\"]) {\n width\n height\n url\n }\n }\n meta {\n title\n description(limit: 155)\n longDescription: description(limit: 200)\n }\n}\n\nfragment ArtworkRelatedArtists_artwork on Artwork {\n slug\n artist {\n href\n related {\n artistsConnection(kind: MAIN, first: 6, after: \"\") {\n pageInfo {\n hasNextPage\n endCursor\n }\n edges {\n node {\n ...EntityHeaderArtist_artist\n id\n __typename\n }\n cursor\n }\n }\n }\n id\n }\n}\n\nfragment ArtworkSharePanel_artwork_FOvjt on Artwork {\n href\n images(includeAll: false) {\n url\n }\n artworkMeta: meta {\n share\n }\n}\n\nfragment ArtworkSidebarArtists_artwork on Artwork {\n culturalMaker\n artists {\n slug\n name\n id\n }\n}\n\nfragment ArtworkSidebarArtworkTitle_artwork on Artwork {\n date\n title\n}\n\nfragment ArtworkSidebarAuctionInfoPolling_artwork on Artwork {\n internalID\n sale {\n isClosed\n id\n }\n saleArtwork {\n currentBid {\n display\n }\n id\n }\n ...ArtworkSidebarCurrentBidInfo_artwork\n ...ArtworkSidebarBidAction_artwork\n}\n\nfragment ArtworkSidebarAuctionInfoPolling_me on Me {\n ...ArtworkSidebarBidAction_me\n}\n\nfragment ArtworkSidebarAuctionTimer_artwork on Artwork {\n internalID\n sale {\n cascadingEndTimeIntervalMinutes\n isClosed\n ...AuctionTimer_sale\n startAt\n id\n }\n saleArtwork {\n ...LotTimer_saleArtwork\n endAt\n endedAt\n id\n }\n}\n\nfragment ArtworkSidebarAuthenticityCertificate_artwork on Artwork {\n hasCertificateOfAuthenticity\n isBiddable\n}\n\nfragment ArtworkSidebarBidAction_artwork on Artwork {\n myLotStanding(live: true) {\n most_recent_bid: mostRecentBid {\n max_bid: maxBid {\n cents\n }\n id\n }\n }\n slug\n internalID\n sale {\n slug\n registrationStatus {\n qualified_for_bidding: qualifiedForBidding\n id\n }\n is_preview: isPreview\n is_open: isOpen\n is_live_open: isLiveOpen\n is_closed: isClosed\n is_registration_closed: isRegistrationClosed\n requireIdentityVerification\n id\n }\n sale_artwork: saleArtwork {\n increments {\n cents\n display\n }\n endedAt\n id\n }\n}\n\nfragment ArtworkSidebarBidAction_me on Me {\n isIdentityVerified\n pendingIdentityVerification {\n internalID\n id\n }\n}\n\nfragment ArtworkSidebarBiddingClosedMessage_artwork on Artwork {\n ...ArtworkCreateAlertButton_artwork\n isEligibleToCreateAlert\n artists {\n internalID\n id\n }\n attributionClass {\n internalID\n id\n }\n mediumType {\n filterGene {\n slug\n id\n }\n }\n}\n\nfragment ArtworkSidebarClassification_artwork on Artwork {\n attributionClass {\n shortArrayDescription\n id\n }\n}\n\nfragment ArtworkSidebarCommercialButtons_artwork on Artwork {\n ...ArtworkSidebarEditionSets_artwork\n ...ArtworkCreateAlertButton_artwork\n isEligibleToCreateAlert\n artists {\n internalID\n id\n }\n attributionClass {\n internalID\n id\n }\n internalID\n slug\n saleMessage\n isInquireable\n isAcquireable\n isOfferable\n isSold\n listPrice {\n __typename\n ... on PriceRange {\n display\n }\n ... on Money {\n display\n }\n }\n mediumType {\n filterGene {\n slug\n id\n }\n }\n editionSets {\n id\n internalID\n isAcquireable\n isOfferable\n saleMessage\n }\n}\n\nfragment ArtworkSidebarCreateAlert_artwork on Artwork {\n internalID\n title\n slug\n isEligibleToCreateAlert\n artists {\n internalID\n name\n slug\n id\n }\n attributionClass {\n internalID\n id\n }\n mediumType {\n filterGene {\n slug\n name\n id\n }\n }\n}\n\nfragment ArtworkSidebarCurrentBidInfo_artwork on Artwork {\n sale {\n is_closed: isClosed\n is_live_open: isLiveOpen\n internalID\n is_with_buyers_premium: isWithBuyersPremium\n id\n }\n sale_artwork: saleArtwork {\n is_with_reserve: isWithReserve\n reserve_message: reserveMessage\n reserve_status: reserveStatus\n endedAt\n current_bid: currentBid {\n display\n }\n counts {\n bidder_positions: bidderPositions\n }\n id\n }\n myLotStanding(live: true) {\n active_bid: activeBid {\n is_winning: isWinning\n id\n }\n most_recent_bid: mostRecentBid {\n max_bid: maxBid {\n display\n }\n id\n }\n }\n ...ArtworkSidebarBiddingClosedMessage_artwork\n}\n\nfragment ArtworkSidebarDetails_artwork on Artwork {\n medium\n dimensions {\n in\n cm\n }\n framed {\n details\n }\n editionOf\n isEdition\n editionSets {\n internalID\n id\n }\n ...ArtworkSidebarClassification_artwork\n ...ArtworkSidebarAuthenticityCertificate_artwork\n}\n\nfragment ArtworkSidebarEditionSets_artwork on Artwork {\n isInquireable\n isOfferable\n isAcquireable\n editionSets {\n id\n internalID\n isOfferable\n isAcquireable\n saleMessage\n ...ArtworkSidebarSizeInfo_piece\n }\n}\n\nfragment ArtworkSidebarEstimatedValue_artwork on Artwork {\n saleArtwork {\n estimate\n id\n }\n sale {\n isClosed\n id\n }\n}\n\nfragment ArtworkSidebarLinks_artwork on Artwork {\n isInAuction\n sale {\n isClosed\n id\n }\n}\n\nfragment ArtworkSidebarPartnerInfo_artwork on Artwork {\n internalID\n slug\n isInquireable\n partner {\n name\n href\n cities\n isInquireable\n id\n }\n sale {\n name\n href\n id\n }\n}\n\nfragment ArtworkSidebarShippingInformation_artwork on Artwork {\n shippingOrigin\n shippingInfo\n}\n\nfragment ArtworkSidebarSizeInfo_piece on Sellable {\n __isSellable: __typename\n dimensions {\n in\n cm\n }\n editionOf\n}\n\nfragment ArtworkSidebar_artwork on Artwork {\n slug\n isSold\n isAcquireable\n isOfferable\n isInAuction\n saleMessage\n isBiddable\n isEligibleForArtsyGuarantee\n isEligibleToCreateAlert\n ...ArtworkSidebarArtworkTitle_artwork\n ...ArtworkSidebarArtists_artwork\n ...ArtworkSidebarDetails_artwork\n ...ArtworkSidebarCommercialButtons_artwork\n ...ArtworkSidebarShippingInformation_artwork\n ...ArtworkSidebarPartnerInfo_artwork\n ...ArtworkSidebarCreateAlert_artwork\n ...ArtworkSidebarLinks_artwork\n ...ArtworkSidebarEstimatedValue_artwork\n ...ArtworkSidebarBiddingClosedMessage_artwork\n ...ArtworkSidebarAuctionTimer_artwork\n ...ArtworkSidebarAuctionInfoPolling_artwork\n sale {\n startAt\n isClosed\n id\n }\n saleArtwork {\n lotID\n lotLabel\n extendedBiddingEndAt\n endAt\n endedAt\n id\n }\n artists {\n internalID\n id\n }\n}\n\nfragment ArtworkSidebar_me on Me {\n ...ArtworkSidebarAuctionInfoPolling_me\n}\n\nfragment ArtworkTopContextBar_artwork on Artwork {\n partner {\n name\n id\n }\n sale {\n isAuction\n isBenefit\n isGalleryAuction\n coverImage {\n url\n }\n ...RegistrationAuctionTimer_sale\n id\n }\n context {\n __typename\n ... on Sale {\n name\n href\n }\n ... on Fair {\n name\n href\n profile {\n icon {\n url\n }\n id\n }\n }\n ... on Show {\n name\n href\n status\n thumbnail: coverImage {\n url\n }\n }\n ... on Node {\n __isNode: __typename\n id\n }\n }\n}\n\nfragment ArtworkVideoPlayer_artwork_FOvjt on Artwork {\n internalID\n slug\n figures(includeAll: false) {\n __typename\n ... on Video {\n __typename\n playerUrl\n videoWidth: width\n videoHeight: height\n id\n }\n }\n}\n\nfragment AuctionTimer_sale on Sale {\n liveStartAt\n endAt\n}\n\nfragment CascadingEndTimesBanner_sale on Sale {\n cascadingEndTimeIntervalMinutes\n extendedBiddingIntervalMinutes\n}\n\nfragment DeepZoom_image on Image {\n deepZoom {\n Image {\n xmlns\n Url\n Format\n TileSize\n Overlap\n Size {\n Width\n Height\n }\n }\n }\n}\n\nfragment EntityHeaderArtist_artist on Artist {\n internalID\n href\n slug\n name\n initials\n formattedNationalityAndBirthday\n counts {\n artworks\n forSaleArtworks\n }\n coverArtwork {\n avatar: image {\n cropped(width: 45, height: 45) {\n src\n srcSet\n }\n }\n id\n }\n}\n\nfragment LotTimer_saleArtwork on SaleArtwork {\n endAt\n formattedStartDateTime\n extendedBiddingEndAt\n lotID\n sale {\n startAt\n extendedBiddingPeriodMinutes\n extendedBiddingIntervalMinutes\n internalID\n id\n }\n}\n\nfragment RegistrationAuctionTimer_sale on Sale {\n registrationEndsAt\n isRegistrationClosed\n}\n\nfragment SelectedExhibitions_exhibitions on Show {\n partner {\n __typename\n ... on ExternalPartner {\n name\n id\n }\n ... on Partner {\n name\n }\n ... on Node {\n __isNode: __typename\n id\n }\n }\n name\n start_at: startAt(format: \"YYYY\")\n cover_image: coverImage {\n cropped(width: 800, height: 600) {\n url\n }\n }\n city\n}\n\nfragment SeoDataForArtwork_artwork on Artwork {\n href\n date\n is_price_hidden: isPriceHidden\n is_price_range: isPriceRange\n listPrice {\n __typename\n ... on PriceRange {\n minPrice {\n major\n currencyCode\n }\n maxPrice {\n major\n }\n }\n ... on Money {\n major\n currencyCode\n }\n }\n meta_image: image {\n resized(width: 640, height: 640, version: [\"large\", \"medium\", \"tall\"]) {\n width\n height\n url\n }\n }\n meta {\n title\n description(limit: 155)\n }\n partner {\n name\n type\n profile {\n image {\n resized(width: 320, height: 320, version: [\"medium\"]) {\n url\n }\n }\n id\n }\n id\n }\n artistNames\n availability\n category\n dimensions {\n in\n }\n}\n\nfragment UnlistedArtworkBanner_partner on Partner {\n name\n}\n\nfragment ViewInRoomArtwork_artwork on Artwork {\n widthCm\n heightCm\n image {\n resized(width: 800, height: 800, version: [\"main\", \"normalized\", \"larger\", \"large\"]) {\n src\n srcSet\n width\n height\n }\n }\n}\n\nfragment ViewInRoom_artwork on Artwork {\n ...ViewInRoomArtwork_artwork\n}\n" } }; })();