From 0ed61bcc541d42d18383228565dc643f59f5d1b2 Mon Sep 17 00:00:00 2001 From: dariakoko Date: Thu, 9 Jan 2025 16:23:45 +0100 Subject: [PATCH 1/7] chore: cleanup AREnableArtworksConnectionForAuction --- .../ArtworkFilter/ArtworkFilterHelpers.ts | 14 +- .../ArtworkFilter/ArtworkFilterStore.tsx | 6 - .../Filters/ArtistIDsOptionsScreen.tsx | 3 +- .../Filters/EstimateRangeOptions.tsx | 14 +- .../ArtworkFilter/Filters/SortOptions.tsx | 36 --- .../Sections/HomeViewSectionSalesItem.tsx | 10 +- .../Scenes/Sale/BuyNowArtworksRail.tests.tsx | 61 ----- ...tests.tsx => BuyNowArtworksRail.tests.tsx} | 19 +- .../Sale/Components/BuyNowArtworksRail.tsx | 12 +- .../Sale/Components/NewBuyNowArtworksRail.tsx | 56 ----- .../Sale/Components/NewSaleLotsList.tsx | 224 ----------------- src/app/Scenes/Sale/Components/SaleLotsList | 0 ...sList.tests.tsx => SaleLotsList.tests.tsx} | 27 ++- .../Scenes/Sale/Components/SaleLotsList.tsx | 227 +++++++----------- src/app/Scenes/Sale/Sale.tsx | 89 ++----- src/app/Scenes/Sale/SaleLotsList.tests.tsx | 204 ---------------- src/app/store/config/features.ts | 6 - 17 files changed, 140 insertions(+), 868 deletions(-) delete mode 100644 src/app/Scenes/Sale/BuyNowArtworksRail.tests.tsx rename src/app/Scenes/Sale/Components/{NewBuyNowArtworksRail.tests.tsx => BuyNowArtworksRail.tests.tsx} (65%) delete mode 100644 src/app/Scenes/Sale/Components/NewBuyNowArtworksRail.tsx delete mode 100644 src/app/Scenes/Sale/Components/NewSaleLotsList.tsx create mode 100644 src/app/Scenes/Sale/Components/SaleLotsList rename src/app/Scenes/Sale/Components/{NewSaleLotsList.tests.tsx => SaleLotsList.tests.tsx} (67%) delete mode 100644 src/app/Scenes/Sale/SaleLotsList.tests.tsx diff --git a/src/app/Components/ArtworkFilter/ArtworkFilterHelpers.ts b/src/app/Components/ArtworkFilter/ArtworkFilterHelpers.ts index b117c4e33f9..85559bc7213 100644 --- a/src/app/Components/ArtworkFilter/ArtworkFilterHelpers.ts +++ b/src/app/Components/ArtworkFilter/ArtworkFilterHelpers.ts @@ -119,9 +119,7 @@ export enum ViewAsValues { export const getSortDefaultValueByFilterType = (filterType: FilterType) => { return { artwork: "-decayed_merch", - saleArtwork: "position", - // TODO: Replace newSaleArtwork with saleArtwork when AREnableArtworksConnectionForAuction is released - newSaleArtwork: "sale_position", + saleArtwork: "sale_position", showArtwork: "partner_show_position", auctionResult: "DATE_DESC", geneArtwork: "-partner_updated_at", @@ -246,8 +244,6 @@ export type FilterArray = ReadonlyArray export type FilterType = | "artwork" | "saleArtwork" - // TODO: Replace newSaleArtwork with saleArtwork when AREnableArtworksConnectionForAuction is released - | "newSaleArtwork" | "showArtwork" | "auctionResult" | "geneArtwork" @@ -299,12 +295,6 @@ const DEFAULT_ARTWORKS_PARAMS = { } as FilterParams const DEFAULT_SALE_ARTWORKS_PARAMS = { - sort: "position", - estimateRange: "", -} as FilterParams - -// TODO: Replace DEFAULT_NEW_SALE_ARTWORKS_PARAMS with DEFAULT_SALE_ARTWORKS_PARAMS when AREnableArtworksConnectionForAuction is released -const DEFAULT_NEW_SALE_ARTWORKS_PARAMS = { sort: "sale_position", estimateRange: "", } as FilterParams @@ -350,8 +340,6 @@ const getDefaultParamsByType = (filterType: FilterType) => { return { artwork: DEFAULT_ARTWORKS_PARAMS, saleArtwork: DEFAULT_SALE_ARTWORKS_PARAMS, - // TODO: Replace newSaleArtwork with saleArtwork when AREnableArtworksConnectionForAuction is released - newSaleArtwork: DEFAULT_NEW_SALE_ARTWORKS_PARAMS, showArtwork: DEFAULT_SHOW_ARTWORKS_PARAMS, auctionResult: DEFAULT_AUCTION_RESULT_PARAMS, geneArtwork: DEFAULT_GENE_ARTWORK_PARAMS, diff --git a/src/app/Components/ArtworkFilter/ArtworkFilterStore.tsx b/src/app/Components/ArtworkFilter/ArtworkFilterStore.tsx index 412fe4a44df..23e40430887 100644 --- a/src/app/Components/ArtworkFilter/ArtworkFilterStore.tsx +++ b/src/app/Components/ArtworkFilter/ArtworkFilterStore.tsx @@ -237,12 +237,6 @@ export const selectedOptionsUnion = ({ displayText: "Recommended", }, saleArtwork: { - paramName: FilterParamName.sort, - paramValue: "position", - displayText: "Lot Number Ascending", - }, - // TODO: Replace newSaleArtwork with saleArtwork when AREnableArtworksConnectionForAuction is released - newSaleArtwork: { paramName: FilterParamName.sort, paramValue: "sale_position", displayText: "Lot Number Ascending", diff --git a/src/app/Components/ArtworkFilter/Filters/ArtistIDsOptionsScreen.tsx b/src/app/Components/ArtworkFilter/Filters/ArtistIDsOptionsScreen.tsx index 1dc3c29e525..3447745c5fd 100644 --- a/src/app/Components/ArtworkFilter/Filters/ArtistIDsOptionsScreen.tsx +++ b/src/app/Components/ArtworkFilter/Filters/ArtistIDsOptionsScreen.tsx @@ -9,8 +9,7 @@ export const ArtistIDsOptionsScreen = ( ) => { const filterType = ArtworksFiltersStore.useStoreState((state) => state.filterType) - // TODO: Replace newSaleArtwork when AREnableArtworksConnectionForAuction is released - if (filterType === "saleArtwork" || filterType === "newSaleArtwork") { + if (filterType === "saleArtwork") { return } return diff --git a/src/app/Components/ArtworkFilter/Filters/EstimateRangeOptions.tsx b/src/app/Components/ArtworkFilter/Filters/EstimateRangeOptions.tsx index 6a0e28e9076..ec364773636 100644 --- a/src/app/Components/ArtworkFilter/Filters/EstimateRangeOptions.tsx +++ b/src/app/Components/ArtworkFilter/Filters/EstimateRangeOptions.tsx @@ -6,7 +6,6 @@ import { ArtworksFiltersStore, useSelectedOptionsDisplay, } from "app/Components/ArtworkFilter/ArtworkFilterStore" -import { useFeatureFlag } from "app/utils/hooks/useFeatureFlag" import { SingleSelectOptionScreen } from "./SingleSelectOption" type PriceRangeOptionsScreenProps = StackScreenProps< @@ -15,16 +14,6 @@ type PriceRangeOptionsScreenProps = StackScreenProps< > const EstimateRanges = [ - { paramValue: "", paramDisplay: "All" }, - { paramValue: "*-100000", paramDisplay: "$0-1,000" }, - { paramValue: "100000-500000", paramDisplay: "$1000-5,000" }, - { paramValue: "500000-1000000", paramDisplay: "$5,000-10,000" }, - { paramValue: "1000000-5000000", paramDisplay: "$10,000-50,000" }, - { paramValue: "5000000-*", paramDisplay: "$50,000+" }, -] - -// TODO: Replace NewEstimateRanges with EstimateRanges when AREnableArtworksConnectionForAuction is released -const NewEstimateRanges = [ { paramValue: "", paramDisplay: "All" }, { paramValue: "*-1000", paramDisplay: "$0-1,000" }, { paramValue: "1000-5000", paramDisplay: "$1000-5,000" }, @@ -36,9 +25,8 @@ const NewEstimateRanges = [ export const EstimateRangeOptionsScreen: React.FC = ({ navigation, }) => { - const enableArtworksConnection = useFeatureFlag("AREnableArtworksConnectionForAuction") const paramName = FilterParamName.estimateRange - const ranges = enableArtworksConnection ? NewEstimateRanges : EstimateRanges + const ranges = EstimateRanges const selectFiltersAction = ArtworksFiltersStore.useStoreActions( (state) => state.selectFiltersAction diff --git a/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx b/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx index 892607eba67..333a6ce9b26 100644 --- a/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx +++ b/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx @@ -77,40 +77,6 @@ export const ORDERED_ARTWORK_SORTS: FilterData[] = [ ] export const ORDERED_SALE_ARTWORK_SORTS: FilterData[] = [ - { - displayText: "Lot Number Ascending", - paramName: FilterParamName.sort, - paramValue: "position", - }, - { - displayText: "Lot Number Descending", - paramName: FilterParamName.sort, - paramValue: "-position", - }, - { - displayText: "Most Bids", - paramName: FilterParamName.sort, - paramValue: "-bidder_positions_count", - }, - { - displayText: "Least Bids", - paramName: FilterParamName.sort, - paramValue: "bidder_positions_count", - }, - { - displayText: "Highest Bid", - paramName: FilterParamName.sort, - paramValue: "-searchable_estimate", - }, - { - displayText: "Lowest Bid", - paramName: FilterParamName.sort, - paramValue: "searchable_estimate", - }, -] - -// TODO: Replace DEFAULT_NEW_SALE_ARTWORKS_PARAMS with DEFAULT_SALE_ARTWORKS_PARAMS when AREnableArtworksConnectionForAuction is released -export const ORDERED_NEW_SALE_ARTWORK_SORTS: FilterData[] = [ DEFAULT_NEW_SALE_ARTWORK_SORT, { displayText: "Lot Number Descending", @@ -172,8 +138,6 @@ export const SortOptionsScreen: React.FC = ({ navigation const filterOptions = { artwork: [DEFAULT_ARTWORK_SORT, ...ORDERED_ARTWORK_SORTS], saleArtwork: ORDERED_SALE_ARTWORK_SORTS, - // TODO: Replace newSaleArtwork with saleArtwork when AREnableArtworksConnectionForAuction is released - newSaleArtwork: ORDERED_NEW_SALE_ARTWORK_SORTS, showArtwork: [GALLERY_CURATED_ARTWORK_SORT, ...ORDERED_ARTWORK_SORTS], auctionResult: ORDERED_AUCTION_RESULTS_SORTS, geneArtwork: [DEFAULT_GENE_SORT, ...ORDERED_ARTWORK_SORTS], diff --git a/src/app/Scenes/HomeView/Sections/HomeViewSectionSalesItem.tsx b/src/app/Scenes/HomeView/Sections/HomeViewSectionSalesItem.tsx index ff46c804b2f..25fffbaa347 100644 --- a/src/app/Scenes/HomeView/Sections/HomeViewSectionSalesItem.tsx +++ b/src/app/Scenes/HomeView/Sections/HomeViewSectionSalesItem.tsx @@ -11,7 +11,6 @@ import { import { ThreeUpImageLayout } from "app/Components/ThreeUpImageLayout" import { navigate } from "app/system/navigation/navigate" import { extractNodes } from "app/utils/extractNodes" -import { useFeatureFlag } from "app/utils/hooks/useFeatureFlag" import { compact } from "lodash" import { FC } from "react" import { View } from "react-native" @@ -26,16 +25,9 @@ export const HomeViewSectionSalesItem: FC = ({ sale: saleProp, onPress, }) => { - const isArtworksConnectionEnabled = useFeatureFlag("AREnableArtworksConnectionForAuction") const sale = useFragment(fragment, saleProp) - let imageURLs - - if (isArtworksConnectionEnabled) { - imageURLs = extractNodes(sale.artworksConnection, (artwork) => artwork.image?.url) - } else { - imageURLs = extractNodes(sale.saleArtworksConnection, (artwork) => artwork.artwork?.image?.url) - } + const imageURLs = extractNodes(sale.artworksConnection, (artwork) => artwork.image?.url) // Sales are expected to always have >= 2 artworks, but we should // still be cautious to avoid crashes if this assumption is broken. diff --git a/src/app/Scenes/Sale/BuyNowArtworksRail.tests.tsx b/src/app/Scenes/Sale/BuyNowArtworksRail.tests.tsx deleted file mode 100644 index f40260aa066..00000000000 --- a/src/app/Scenes/Sale/BuyNowArtworksRail.tests.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { setupTestWrapper } from "app/utils/tests/setupTestWrapper" -import { graphql } from "react-relay" -import { BuyNowArtworksRailContainer } from "./Components/BuyNowArtworksRail" - -describe("BuyNowArtworksRail", () => { - const { renderWithRelay } = setupTestWrapper({ - Component: BuyNowArtworksRailContainer, - query: graphql` - query BuyNowArtworksRailTestsQuery($id: String!) @relay_test_operation { - sale(id: $id) { - ...BuyNowArtworksRail_sale - } - } - `, - variables: { id: "sale-id" }, - }) - - it(`renders title "Buy now"`, () => { - const { getByText } = renderWithRelay(mockProps) - expect(getByText("Artworks Available to Inquire")).toBeDefined() - }) - - it("renders nothing if there are no artworks", () => { - const noArtworksProps = { - Sale: () => ({ - saleArtworksConnection: { - edges: [], - }, - }), - } - const { queryAllByTestId } = renderWithRelay(noArtworksProps) - expect(queryAllByTestId("bnmo-rail-wrapper")).toHaveLength(0) - }) -}) - -const saleArtworksConnectionEdges = new Array(10).fill({ - node: { - artwork: { - id: "artwork-id", - title: "Best artwork ever", - date: "2019", - saleMessage: "Price on request", - artistNames: "Banksy", - href: "/artwork/artwroks-href", - image: { - url: "artworkImageUrl", - }, - partner: { - name: "Heritage Auctions", - }, - }, - }, -}) - -const mockProps = { - Sale: () => ({ - saleArtworksConnection: { - edges: saleArtworksConnectionEdges, - }, - }), -} diff --git a/src/app/Scenes/Sale/Components/NewBuyNowArtworksRail.tests.tsx b/src/app/Scenes/Sale/Components/BuyNowArtworksRail.tests.tsx similarity index 65% rename from src/app/Scenes/Sale/Components/NewBuyNowArtworksRail.tests.tsx rename to src/app/Scenes/Sale/Components/BuyNowArtworksRail.tests.tsx index 327f5fb3570..3dba94f3054 100644 --- a/src/app/Scenes/Sale/Components/NewBuyNowArtworksRail.tests.tsx +++ b/src/app/Scenes/Sale/Components/BuyNowArtworksRail.tests.tsx @@ -1,15 +1,15 @@ import { screen } from "@testing-library/react-native" import { setupTestWrapper } from "app/utils/tests/setupTestWrapper" import { graphql } from "react-relay" -import { NewBuyNowArtworksRailContainer } from "./NewBuyNowArtworksRail" +import { BuyNowArtworksRailContainer } from "./BuyNowArtworksRail" -describe("NewBuyNowArtworksRail", () => { +describe("BuyNowArtworksRail", () => { const { renderWithRelay } = setupTestWrapper({ - Component: NewBuyNowArtworksRailContainer, + Component: BuyNowArtworksRailContainer, query: graphql` - query NewBuyNowArtworksRailTestsQuery($id: String!) @relay_test_operation { + query BuyNowArtworksRailTestsQuery($id: String!) @relay_test_operation { sale(id: $id) { - ...NewBuyNowArtworksRail_sale + ...BuyNowArtworksRail_sale } } `, @@ -18,8 +18,9 @@ describe("NewBuyNowArtworksRail", () => { it(`renders "Buy now" rail and artworks`, () => { renderWithRelay(mockProps) - expect(screen.queryByText("Artworks Available to Inquire")).toBeDefined() - expect(screen.queryAllByText("Best artwork ever, 2019")).toBeDefined() + + expect(screen.getByText("Artworks Available to Inquire")).toBeOnTheScreen() + expect(screen.queryAllByText("Best artwork ever, 2019")).toHaveLength(10) }) it("renders nothing if there are no artworks", () => { @@ -31,8 +32,8 @@ describe("NewBuyNowArtworksRail", () => { }), } - const { queryAllByTestId } = renderWithRelay(noArtworksProps) - expect(queryAllByTestId("bnmo-rail-wrapper")).toHaveLength(0) + renderWithRelay(noArtworksProps) + expect(screen.queryAllByTestId("bnmo-rail-wrapper")).toHaveLength(0) }) }) diff --git a/src/app/Scenes/Sale/Components/BuyNowArtworksRail.tsx b/src/app/Scenes/Sale/Components/BuyNowArtworksRail.tsx index 27bdb3d6df0..643693e1afa 100644 --- a/src/app/Scenes/Sale/Components/BuyNowArtworksRail.tsx +++ b/src/app/Scenes/Sale/Components/BuyNowArtworksRail.tsx @@ -12,9 +12,7 @@ interface BuyNowArtworksRailProps { } export const BuyNowArtworksRail: React.FC = ({ sale }) => { - const artworks = extractNodes(sale.promotedSale?.saleArtworksConnection).map( - (saleArtwork) => saleArtwork.artwork - ) + const artworks = extractNodes(sale.promotedSale?.artworksConnection) if (!artworks?.length) { return null @@ -43,13 +41,11 @@ export const BuyNowArtworksRailContainer = createFragmentContainer(BuyNowArtwork @argumentDefinitions(count: { type: "Int", defaultValue: 20 }, cursor: { type: "String" }) { internalID promotedSale { - saleArtworksConnection(first: $count, after: $cursor) - @connection(key: "Sale_saleArtworksConnection") { + artworksConnection(first: $count, after: $cursor) + @connection(key: "BuyNowArtworksRail_artworksConnection") { edges { node { - artwork { - ...ArtworkRail_artworks - } + ...ArtworkRail_artworks } } } diff --git a/src/app/Scenes/Sale/Components/NewBuyNowArtworksRail.tsx b/src/app/Scenes/Sale/Components/NewBuyNowArtworksRail.tsx deleted file mode 100644 index eb9ce6732e2..00000000000 --- a/src/app/Scenes/Sale/Components/NewBuyNowArtworksRail.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { Flex } from "@artsy/palette-mobile" -import { NewBuyNowArtworksRail_sale$data } from "__generated__/NewBuyNowArtworksRail_sale.graphql" -import { ArtworkRail } from "app/Components/ArtworkRail/ArtworkRail" -import { SectionTitle } from "app/Components/SectionTitle" -import { navigate } from "app/system/navigation/navigate" -import { extractNodes } from "app/utils/extractNodes" -import { compact } from "lodash" -import { createFragmentContainer, graphql } from "react-relay" - -interface NewBuyNowArtworksRailProps { - sale: NewBuyNowArtworksRail_sale$data -} - -export const NewBuyNowArtworksRail: React.FC = ({ sale }) => { - const artworks = extractNodes(sale.promotedSale?.artworksConnection) - - if (!artworks?.length) { - return null - } - - return ( - - - - - { - if (artwork?.href) { - navigate(artwork.href) - } - }} - /> - - ) -} - -// TODO: Replace NewBuyNowArtworksRail with BuyNowArtworksRail when AREnableArtworksConnectionForAuction is released -export const NewBuyNowArtworksRailContainer = createFragmentContainer(NewBuyNowArtworksRail, { - sale: graphql` - fragment NewBuyNowArtworksRail_sale on Sale - @argumentDefinitions(count: { type: "Int", defaultValue: 20 }, cursor: { type: "String" }) { - internalID - promotedSale { - artworksConnection(first: $count, after: $cursor) - @connection(key: "NewBuyNowArtworksRail_artworksConnection") { - edges { - node { - ...ArtworkRail_artworks - } - } - } - } - } - `, -}) diff --git a/src/app/Scenes/Sale/Components/NewSaleLotsList.tsx b/src/app/Scenes/Sale/Components/NewSaleLotsList.tsx deleted file mode 100644 index 8cf434b6379..00000000000 --- a/src/app/Scenes/Sale/Components/NewSaleLotsList.tsx +++ /dev/null @@ -1,224 +0,0 @@ -import { OwnerType } from "@artsy/cohesion" -import { Flex, Box, Text } from "@artsy/palette-mobile" -import { NewSaleLotsList_unfilteredArtworks$data } from "__generated__/NewSaleLotsList_unfilteredArtworks.graphql" -import { NewSaleLotsList_viewer$data } from "__generated__/NewSaleLotsList_viewer.graphql" -import { - filterArtworksParams, - FilterParamName, - prepareFilterArtworksParamsForInput, - ViewAsValues, -} from "app/Components/ArtworkFilter/ArtworkFilterHelpers" -import { ArtworksFiltersStore } from "app/Components/ArtworkFilter/ArtworkFilterStore" -import { ORDERED_NEW_SALE_ARTWORK_SORTS } from "app/Components/ArtworkFilter/Filters/SortOptions" -import { useArtworkFilters } from "app/Components/ArtworkFilter/useArtworkFilters" -import { FilteredArtworkGridZeroState } from "app/Components/ArtworkGrids/FilteredArtworkGridZeroState" -import { InfiniteScrollArtworksGridContainer } from "app/Components/ArtworkGrids/InfiniteScrollArtworksGrid" -import { Schema } from "app/utils/track" -import { MutableRefObject, useEffect } from "react" -import { createPaginationContainer, graphql, RelayPaginationProp } from "react-relay" -import { useTracking } from "react-tracking" -import { SaleArtworkListContainer } from "./SaleArtworkList" - -interface NewSaleLotsListProps { - unfilteredArtworks: NewSaleLotsList_unfilteredArtworks$data | null | undefined - viewer: NewSaleLotsList_viewer$data | null | undefined - saleID: string - saleSlug: string - relay: RelayPaginationProp - artworksRefetchRef?: MutableRefObject<() => void> - scrollToTop: () => void -} - -export const NewSaleLotsList: React.FC = ({ - unfilteredArtworks, - viewer, - saleID, - saleSlug, - relay, - artworksRefetchRef, - scrollToTop, -}) => { - const tracking = useTracking() - const appliedFiltersState = ArtworksFiltersStore.useStoreState((state) => state.appliedFilters) - const filterTypeState = ArtworksFiltersStore.useStoreState((state) => state.filterType) - const setFiltersCountAction = ArtworksFiltersStore.useStoreActions( - (action) => action.setFiltersCountAction - ) - const setFilterTypeAction = ArtworksFiltersStore.useStoreActions( - (action) => action.setFilterTypeAction - ) - - const filterParams = filterArtworksParams(appliedFiltersState, filterTypeState) - const viewAsFilter = appliedFiltersState.find( - (filter) => filter.paramName === FilterParamName.viewAs - ) - const counts = viewer?.artworksConnection?.counts?.total - const totalCount = unfilteredArtworks?.counts?.total - const sortMode = ORDERED_NEW_SALE_ARTWORK_SORTS.find( - (sort) => sort.paramValue === filterParams?.sort - ) - - const trackClear = (id: string, slug: string) => { - tracking.trackEvent({ - action_name: "clearFilters", - context_screen: Schema.ContextModules.Auction, - context_screen_owner_type: Schema.OwnerEntityTypes.Auction, - context_screen_owner_id: id, - context_screen_owner_slug: slug, - action_type: Schema.ActionTypes.Tap, - }) - } - - useEffect(() => { - setFilterTypeAction("newSaleArtwork") - - if (unfilteredArtworks?.counts) { - setFiltersCountAction(unfilteredArtworks.counts) - } - }, []) - - const input = prepareFilterArtworksParamsForInput(filterParams) - const refetchVariables = { - input: { - priceRange: filterParams.estimateRange, - ...input, - }, - } - - useArtworkFilters({ - relay, - aggregations: unfilteredArtworks?.aggregations, - componentPath: "Sale/NewSaleLotsList", - refetchVariables, - refetchRef: artworksRefetchRef, - onApply: () => scrollToTop(), - }) - - if (totalCount === 0) { - return null - } - - if (!viewer?.artworksConnection?.edges?.length) { - return ( - - - - ) - } - - return ( - - - - Sorted by {sortMode?.displayText} - - - - Showing {counts} of {totalCount} - - - - {viewAsFilter?.paramValue === ViewAsValues.List ? ( - - ) : ( - - - - )} - - ) -} - -export const NewSaleLotsListContainer = createPaginationContainer( - NewSaleLotsList, - { - unfilteredArtworks: graphql` - fragment NewSaleLotsList_unfilteredArtworks on FilterArtworksConnection { - counts { - followedArtists - total - } - - aggregations { - slice - counts { - count - name - value - } - } - } - `, - viewer: graphql` - fragment NewSaleLotsList_viewer on Viewer - @argumentDefinitions( - saleID: { type: "ID" } - count: { type: "Int", defaultValue: 10 } - cursor: { type: "String" } - input: { type: "FilterArtworksInput" } - ) { - artworksConnection( - saleID: $saleID - first: $count - after: $cursor - input: $input - aggregations: [TOTAL, FOLLOWED_ARTISTS] - ) @connection(key: "NewSaleLotsList__artworksConnection") { - counts { - total - } - edges { - node { - id - } - } - ...SaleArtworkList_connection - ...InfiniteScrollArtworksGrid_connection - } - } - `, - }, - { - getConnectionFromProps(props) { - return props.viewer?.artworksConnection - }, - getVariables(_props, { count, cursor }, fragmentVariables) { - return { - ...fragmentVariables, - cursor, - count, - } - }, - query: graphql` - query NewSaleLotsListRefetchQuery( - $saleID: ID! - $count: Int - $cursor: String - $input: FilterArtworksInput - ) { - viewer { - ...NewSaleLotsList_viewer - @arguments(saleID: $saleID, count: $count, cursor: $cursor, input: $input) - } - } - `, - } -) diff --git a/src/app/Scenes/Sale/Components/SaleLotsList b/src/app/Scenes/Sale/Components/SaleLotsList new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/app/Scenes/Sale/Components/NewSaleLotsList.tests.tsx b/src/app/Scenes/Sale/Components/SaleLotsList.tests.tsx similarity index 67% rename from src/app/Scenes/Sale/Components/NewSaleLotsList.tests.tsx rename to src/app/Scenes/Sale/Components/SaleLotsList.tests.tsx index a69014404d0..595e3f6ed27 100644 --- a/src/app/Scenes/Sale/Components/NewSaleLotsList.tests.tsx +++ b/src/app/Scenes/Sale/Components/SaleLotsList.tests.tsx @@ -1,16 +1,17 @@ -import { NewSaleLotsListTestsQuery } from "__generated__/NewSaleLotsListTestsQuery.graphql" +import { screen } from "@testing-library/react-native" +import { SaleLotsListTestsQuery } from "__generated__/SaleLotsListTestsQuery.graphql" import { ArtworkFiltersStoreProvider } from "app/Components/ArtworkFilter/ArtworkFilterStore" import { setupTestWrapper } from "app/utils/tests/setupTestWrapper" import { graphql } from "react-relay" -import { NewSaleLotsListContainer } from "./NewSaleLotsList" +import { SaleLotsListContainer } from "./SaleLotsList" -describe("NewSaleLotsList", () => { - const { renderWithRelay } = setupTestWrapper({ +describe("SaleLotsList", () => { + const { renderWithRelay } = setupTestWrapper({ Component: (props) => { if (props?.viewer) { return ( - { return null }, query: graphql` - query NewSaleLotsListTestsQuery($saleID: ID) @relay_test_operation { + query SaleLotsListTestsQuery($saleID: ID) @relay_test_operation { viewer { unfilteredArtworks: artworksConnection( saleID: $saleID aggregations: [FOLLOWED_ARTISTS, ARTIST, MEDIUM, TOTAL] first: 0 ) { - ...NewSaleLotsList_unfilteredArtworks + ...SaleLotsList_unfilteredArtworks } - ...NewSaleLotsList_viewer @arguments(saleID: $saleID) + ...SaleLotsList_viewer @arguments(saleID: $saleID) } } `, @@ -53,20 +54,20 @@ describe("NewSaleLotsList", () => { }) it("renders content", () => { - const { getByText } = renderWithRelay({ + renderWithRelay({ FilterArtworksConnection: () => mockedFilterArtworksConnection, }) - expect(getByText("Artwork Title")).toBeDefined() + expect(screen.getByText("Artwork Title")).toBeDefined() }) it("renders header", () => { - const { getByText } = renderWithRelay({ + renderWithRelay({ FilterArtworksConnection: () => mockedFilterArtworksConnection, }) - expect(getByText("Sorted by Lot Number Ascending")).toBeDefined() - expect(getByText("Showing 1 of 1")).toBeDefined() + expect(screen.getByText("Sorted by Lot Number Ascending")).toBeDefined() + expect(screen.getByText("Showing 1 of 1")).toBeDefined() }) }) diff --git a/src/app/Scenes/Sale/Components/SaleLotsList.tsx b/src/app/Scenes/Sale/Components/SaleLotsList.tsx index fd8e2bd0289..417a2e059d8 100644 --- a/src/app/Scenes/Sale/Components/SaleLotsList.tsx +++ b/src/app/Scenes/Sale/Components/SaleLotsList.tsx @@ -1,11 +1,11 @@ import { OwnerType } from "@artsy/cohesion" import { Flex, Box, Text } from "@artsy/palette-mobile" -import { SaleLotsList_saleArtworksConnection$data } from "__generated__/SaleLotsList_saleArtworksConnection.graphql" -import { SaleLotsList_unfilteredSaleArtworksConnection$data } from "__generated__/SaleLotsList_unfilteredSaleArtworksConnection.graphql" +import { SaleLotsList_unfilteredArtworks$data } from "__generated__/SaleLotsList_unfilteredArtworks.graphql" +import { SaleLotsList_viewer$data } from "__generated__/SaleLotsList_viewer.graphql" import { filterArtworksParams, FilterParamName, - FilterParams, + prepareFilterArtworksParamsForInput, ViewAsValues, } from "app/Components/ArtworkFilter/ArtworkFilterHelpers" import { ArtworksFiltersStore } from "app/Components/ArtworkFilter/ArtworkFilterStore" @@ -14,67 +14,31 @@ import { useArtworkFilters } from "app/Components/ArtworkFilter/useArtworkFilter import { FilteredArtworkGridZeroState } from "app/Components/ArtworkGrids/FilteredArtworkGridZeroState" import { InfiniteScrollArtworksGridContainer } from "app/Components/ArtworkGrids/InfiniteScrollArtworksGrid" import { Schema } from "app/utils/track" -import React, { MutableRefObject, useCallback, useEffect, useState } from "react" +import { MutableRefObject, useEffect } from "react" import { createPaginationContainer, graphql, RelayPaginationProp } from "react-relay" import { useTracking } from "react-tracking" import { SaleArtworkListContainer } from "./SaleArtworkList" -interface Props { - saleArtworksConnection: SaleLotsList_saleArtworksConnection$data - unfilteredSaleArtworksConnection: - | SaleLotsList_unfilteredSaleArtworksConnection$data - | null - | undefined - relay: RelayPaginationProp +interface SaleLotsListProps { + unfilteredArtworks: SaleLotsList_unfilteredArtworks$data | null | undefined + viewer: SaleLotsList_viewer$data | null | undefined saleID: string saleSlug: string - scrollToTop: () => void + relay: RelayPaginationProp artworksRefetchRef?: MutableRefObject<() => void> + scrollToTop: () => void } -export const SaleLotsListSortMode = ({ - filterParams, - filteredTotal, - totalCount, -}: { - filterParams: FilterParams - filteredTotal: number | null | undefined - totalCount: number | null | undefined -}) => { - const getSortDescription = useCallback(() => { - const sortMode = ORDERED_SALE_ARTWORK_SORTS.find( - (sort) => sort.paramValue === filterParams?.sort - ) - if (sortMode) { - return sortMode.displayText - } - }, [filterParams]) - - return ( - - - Sorted by {getSortDescription()?.toLowerCase()} - - - {!!filteredTotal && !!totalCount && ( - {`Showing ${filteredTotal} of ${totalCount}`} - )} - - ) -} - -export const SaleLotsList: React.FC = ({ - saleArtworksConnection, - unfilteredSaleArtworksConnection, - relay, +export const SaleLotsList: React.FC = ({ + unfilteredArtworks, + viewer, saleID, saleSlug, + relay, artworksRefetchRef, scrollToTop, }) => { - const [totalCount, setTotalCount] = useState(null) const tracking = useTracking() - const appliedFiltersState = ArtworksFiltersStore.useStoreState((state) => state.appliedFilters) const filterTypeState = ArtworksFiltersStore.useStoreState((state) => state.filterType) const setFiltersCountAction = ArtworksFiltersStore.useStoreActions( @@ -88,38 +52,9 @@ export const SaleLotsList: React.FC = ({ const viewAsFilter = appliedFiltersState.find( (filter) => filter.paramName === FilterParamName.viewAs ) - const counts = saleArtworksConnection.saleArtworksConnection?.counts - - // Add the new medium to geneIDs array - const refetchVariables = { - ...filterParams, - saleID: saleSlug, - geneIDs: filterParams.additionalGeneIDs || [], - includeArtworksByFollowedArtists: !!filterParams.includeArtworksByFollowedArtists, - } - - useArtworkFilters({ - relay, - aggregations: saleArtworksConnection.saleArtworksConnection?.aggregations, - componentPath: "Sale/SaleLotsList", - refetchVariables, - onApply: () => scrollToTop(), - refetchRef: artworksRefetchRef, - }) - - useEffect(() => { - setFilterTypeAction("saleArtwork") - }, []) - - useEffect(() => { - setTotalCount(saleArtworksConnection.saleArtworksConnection?.counts?.total || 0) - }, []) - - useEffect(() => { - if (saleArtworksConnection.saleArtworksConnection?.counts) { - setFiltersCountAction(saleArtworksConnection.saleArtworksConnection?.counts) - } - }, []) + const counts = viewer?.artworksConnection?.counts?.total + const totalCount = unfilteredArtworks?.counts?.total + const sortMode = ORDERED_SALE_ARTWORK_SORTS.find((sort) => sort.paramValue === filterParams?.sort) const trackClear = (id: string, slug: string) => { tracking.trackEvent({ @@ -132,11 +67,36 @@ export const SaleLotsList: React.FC = ({ }) } - if (unfilteredSaleArtworksConnection?.counts?.total === 0) { + useEffect(() => { + setFilterTypeAction("saleArtwork") + + if (unfilteredArtworks?.counts) { + setFiltersCountAction(unfilteredArtworks.counts) + } + }, []) + + const input = prepareFilterArtworksParamsForInput(filterParams) + const refetchVariables = { + input: { + priceRange: filterParams.estimateRange, + ...input, + }, + } + + useArtworkFilters({ + relay, + aggregations: unfilteredArtworks?.aggregations, + componentPath: "Sale/SaleLotsList", + refetchVariables, + refetchRef: artworksRefetchRef, + onApply: () => scrollToTop(), + }) + + if (totalCount === 0) { return null } - if (!saleArtworksConnection.saleArtworksConnection?.edges?.length) { + if (!viewer?.artworksConnection?.edges?.length) { return ( @@ -146,15 +106,19 @@ export const SaleLotsList: React.FC = ({ return ( - + + + Sorted by {sortMode?.displayText} + + + + Showing {counts} of {totalCount} + + {viewAsFilter?.paramValue === ViewAsValues.List ? ( = ({ ) : ( = ({ isLoading={relay.isLoading} showLotLabel hidePartner - hideRegisterBySignal /> )} @@ -185,46 +148,39 @@ export const SaleLotsList: React.FC = ({ export const SaleLotsListContainer = createPaginationContainer( SaleLotsList, { - unfilteredSaleArtworksConnection: graphql` - fragment SaleLotsList_unfilteredSaleArtworksConnection on SaleArtworksConnection { + unfilteredArtworks: graphql` + fragment SaleLotsList_unfilteredArtworks on FilterArtworksConnection { counts { + followedArtists total } + + aggregations { + slice + counts { + count + name + value + } + } } `, - saleArtworksConnection: graphql` - fragment SaleLotsList_saleArtworksConnection on Query + viewer: graphql` + fragment SaleLotsList_viewer on Viewer @argumentDefinitions( + saleID: { type: "ID" } count: { type: "Int", defaultValue: 10 } cursor: { type: "String" } - artistIDs: { type: "[String]", defaultValue: [] } - geneIDs: { type: "[String]", defaultValue: [] } - estimateRange: { type: "String", defaultValue: "" } - sort: { type: "String", defaultValue: "position" } - includeArtworksByFollowedArtists: { type: "Boolean", defaultValue: false } - saleID: { type: "ID" } + input: { type: "FilterArtworksInput" } ) { - saleArtworksConnection( - after: $cursor + artworksConnection( saleID: $saleID - artistIDs: $artistIDs - geneIDs: $geneIDs - aggregations: [FOLLOWED_ARTISTS, ARTIST, MEDIUM, TOTAL] - estimateRange: $estimateRange first: $count - includeArtworksByFollowedArtists: $includeArtworksByFollowedArtists - sort: $sort - ) @connection(key: "SaleLotsList_saleArtworksConnection") { - aggregations { - slice - counts { - count - name - value - } - } + after: $cursor + input: $input + aggregations: [TOTAL, FOLLOWED_ARTISTS] + ) @connection(key: "SaleLotsList__artworksConnection") { counts { - followedArtists total } edges { @@ -240,7 +196,7 @@ export const SaleLotsListContainer = createPaginationContainer( }, { getConnectionFromProps(props) { - return props?.saleArtworksConnection?.saleArtworksConnection + return props.viewer?.artworksConnection }, getVariables(_props, { count, cursor }, fragmentVariables) { return { @@ -250,29 +206,16 @@ export const SaleLotsListContainer = createPaginationContainer( } }, query: graphql` - query SaleLotsListQuery( - $geneIDs: [String] - $artistIDs: [String] - $count: Int! + query SaleLotsListRefetchQuery( + $saleID: ID! + $count: Int $cursor: String - $estimateRange: String - $saleID: ID - $sort: String - $includeArtworksByFollowedArtists: Boolean - ) - # $saleID: ID - @raw_response_type { - ...SaleLotsList_saleArtworksConnection - @arguments( - geneIDs: $geneIDs - artistIDs: $artistIDs - count: $count - cursor: $cursor - sort: $sort - estimateRange: $estimateRange - saleID: $saleID - includeArtworksByFollowedArtists: $includeArtworksByFollowedArtists - ) + $input: FilterArtworksInput + ) { + viewer { + ...SaleLotsList_viewer + @arguments(saleID: $saleID, count: $count, cursor: $cursor, input: $input) + } } `, } diff --git a/src/app/Scenes/Sale/Sale.tsx b/src/app/Scenes/Sale/Sale.tsx index be472fae173..02664fcb0c7 100644 --- a/src/app/Scenes/Sale/Sale.tsx +++ b/src/app/Scenes/Sale/Sale.tsx @@ -2,8 +2,10 @@ import { ContextModule, OwnerType } from "@artsy/cohesion" import { Box, Flex, Join, Screen, Spacer } from "@artsy/palette-mobile" import { captureMessage } from "@sentry/react-native" import { SaleAboveTheFoldQuery } from "__generated__/SaleAboveTheFoldQuery.graphql" -import { SaleBelowTheFoldNewQuery$data } from "__generated__/SaleBelowTheFoldNewQuery.graphql" -import { SaleBelowTheFoldQuery } from "__generated__/SaleBelowTheFoldQuery.graphql" +import { + SaleBelowTheFoldQuery, + SaleBelowTheFoldQuery$data, +} from "__generated__/SaleBelowTheFoldQuery.graphql" import { Sale_me$data } from "__generated__/Sale_me.graphql" import { Sale_sale$data } from "__generated__/Sale_sale.graphql" import { @@ -21,7 +23,6 @@ import { goBack, navigate } from "app/system/navigation/navigate" import { getRelayEnvironment } from "app/system/relay/defaultEnvironment" import { AboveTheFoldQueryRenderer } from "app/utils/AboveTheFoldQueryRenderer" import { AuctionWebsocketContextProvider } from "app/utils/Websockets/auctions/AuctionSocketContext" -import { useFeatureFlag } from "app/utils/hooks/useFeatureFlag" import { PlaceholderBox, PlaceholderText, ProvidePlaceholderContext } from "app/utils/placeholders" import { ProvideScreenTracking, Schema } from "app/utils/track" import { compact, times } from "lodash" @@ -33,8 +34,6 @@ import { useTracking } from "react-tracking" import useInterval from "react-use/lib/useInterval" import usePrevious from "react-use/lib/usePrevious" import { BuyNowArtworksRailContainer } from "./Components/BuyNowArtworksRail" -import { NewBuyNowArtworksRailContainer } from "./Components/NewBuyNowArtworksRail" -import { NewSaleLotsListContainer } from "./Components/NewSaleLotsList" import { RegisterToBidButtonContainer } from "./Components/RegisterToBidButton" import { SaleActiveBidsContainer } from "./Components/SaleActiveBids" import { SaleArtworksRailContainer } from "./Components/SaleArtworksRail" @@ -79,7 +78,6 @@ const NOOP = () => {} export const Sale: React.FC = ({ sale, me, below, relay }) => { const tracking = useTracking() - const enableArtworksConnection = useFeatureFlag("AREnableArtworksConnectionForAuction") const flatListRef = useRef>(null) const [isRefreshing, setIsRefreshing] = useState(false) @@ -170,25 +168,12 @@ export const Sale: React.FC = ({ sale, me, below, relay }) => { const renderSaleLotsList = () => { if (below) { - if (enableArtworksConnection) { - return ( - - ) - } - return ( = ({ sale, me, below, relay }) => { }, { key: BUY_NOW_ARTWORKS_RAIL, - content: enableArtworksConnection ? ( - - ) : ( - - ), + content: , }, { key: SALE_LOTS_LIST, @@ -393,7 +374,6 @@ export const SaleContainer = createRefetchContainer( ...SaleHeader_sale ...RegisterToBidButton_sale ...BuyNowArtworksRail_sale - ...NewBuyNowArtworksRail_sale endAt internalID liveStartAt @@ -430,31 +410,16 @@ export const SaleScreenQuery = graphql` ` const SaleScreenBelowQuery = graphql` - query SaleBelowTheFoldQuery($saleID: ID) { - ...SaleLotsList_saleArtworksConnection @arguments(saleID: $saleID) - unfilteredSaleArtworksConnection: saleArtworksConnection( - saleID: $saleID - aggregations: [TOTAL] - ) { - ...SaleLotsList_unfilteredSaleArtworksConnection - counts { - total - } - } - } -` - -const SaleScreenBelowNewQuery = graphql` - query SaleBelowTheFoldNewQuery($saleID: ID, $input: FilterArtworksInput) { + query SaleBelowTheFoldQuery($saleID: ID, $input: FilterArtworksInput) { viewer { unfilteredArtworks: artworksConnection( saleID: $saleID aggregations: [FOLLOWED_ARTISTS, ARTIST, MEDIUM, TOTAL] first: 0 ) { - ...NewSaleLotsList_unfilteredArtworks + ...SaleLotsList_unfilteredArtworks } - ...NewSaleLotsList_viewer @arguments(saleID: $saleID, input: $input) + ...SaleLotsList_viewer @arguments(saleID: $saleID, input: $input) } } ` @@ -464,7 +429,6 @@ export const SaleQueryRenderer: React.FC<{ environment?: Environment }> = ({ saleID, environment }) => { const { trackEvent } = useTracking() - const enableArtworksConnection = useFeatureFlag("AREnableArtworksConnectionForAuction") useEffect(() => { trackEvent(tracks.pageView(saleID)) @@ -481,24 +445,17 @@ export const SaleQueryRenderer: React.FC<{ query: SaleScreenQuery, variables: { saleID, saleSlug: saleID }, }} - below={ - enableArtworksConnection - ? { - query: SaleScreenBelowNewQuery, - variables: { - saleID, - // @ts-ignore - input: { - sort: DEFAULT_NEW_SALE_ARTWORK_SORT.paramValue, - priceRange: "", - }, - }, - } - : { - query: SaleScreenBelowQuery, - variables: { saleID }, - } - } + below={{ + query: SaleScreenBelowQuery, + variables: { + saleID, + // @ts-ignore + input: { + sort: DEFAULT_NEW_SALE_ARTWORK_SORT.paramValue, + priceRange: "", + }, + }, + }} render={({ props, error }) => { if (error) { if (__DEV__) { diff --git a/src/app/Scenes/Sale/SaleLotsList.tests.tsx b/src/app/Scenes/Sale/SaleLotsList.tests.tsx deleted file mode 100644 index 26141998803..00000000000 --- a/src/app/Scenes/Sale/SaleLotsList.tests.tsx +++ /dev/null @@ -1,204 +0,0 @@ -import { Text } from "@artsy/palette-mobile" -import { SaleLotsListTestsQuery } from "__generated__/SaleLotsListTestsQuery.graphql" -import { - FilterParamName, - ViewAsValues, - FilterParams, -} from "app/Components/ArtworkFilter/ArtworkFilterHelpers" -import { - ArtworkFiltersState, - ArtworkFiltersStoreProvider, - getArtworkFiltersModel, -} from "app/Components/ArtworkFilter/ArtworkFilterStore" -import { InfiniteScrollArtworksGridContainer } from "app/Components/ArtworkGrids/InfiniteScrollArtworksGrid" -import { extractText } from "app/utils/tests/extractText" -import { renderWithWrappersLEGACY } from "app/utils/tests/renderWithWrappers" -import { resolveMostRecentRelayOperation } from "app/utils/tests/resolveMostRecentRelayOperation" -import { graphql, QueryRenderer } from "react-relay" -import { createMockEnvironment } from "relay-test-utils" -import { SaleArtworkListContainer } from "./Components/SaleArtworkList" -import { SaleLotsListContainer, SaleLotsListSortMode } from "./Components/SaleLotsList" - -describe("SaleLotsListContainer", () => { - let mockEnvironment: ReturnType - - const initialState: ArtworkFiltersState = { - selectedFilters: [], - appliedFilters: [], - previouslyAppliedFilters: [], - applyFilters: false, - aggregations: [], - filterType: "auctionResult", - counts: { - total: null, - followedArtists: null, - }, - showFilterArtworksModal: false, - sizeMetric: "cm", - } - - const TestRenderer = ({ initialData = initialState }: { initialData?: ArtworkFiltersState }) => ( - - environment={mockEnvironment} - query={graphql` - query SaleLotsListTestsQuery($saleSlug: ID!) @relay_test_operation { - ...SaleLotsList_saleArtworksConnection @arguments(saleID: $saleSlug) - } - `} - variables={{ saleSlug: "sale-slug" }} - render={({ props }) => { - if (props) { - return ( - - - - ) - } - return null - }} - /> - ) - - const getState = (viewAs: ViewAsValues = ViewAsValues.List): ArtworkFiltersState => ({ - selectedFilters: [], - appliedFilters: [ - { - paramName: FilterParamName.viewAs, - paramValue: viewAs, - displayText: "View as", - }, - ], - previouslyAppliedFilters: [], - applyFilters: false, - aggregations: [], - filterType: "saleArtwork", - counts: { - total: null, - followedArtists: null, - }, - showFilterArtworksModal: false, - sizeMetric: "cm", - }) - - beforeEach(() => { - mockEnvironment = createMockEnvironment() - }) - - // Investigate why this test is failing - // Most likely this has something to do with the unfilteredSaleArtworksConnection - // Follow-up ticket https://artsyproduct.atlassian.net/browse/CX-1108 - it.skip("Renders nothing if not sale artworks are available", () => { - const tree = renderWithWrappersLEGACY() - const mockProps = { - SaleArtworksConnection: () => ({ - aggregations: [], - counts: { - total: 0, - }, - edges: saleArtworksConnectionEdges, - }), - } - - resolveMostRecentRelayOperation(mockEnvironment, mockProps) - - expect(tree.toJSON()).toBeNull() - }) - - it("Renders list of sale artworks as a grid", () => { - const tree = renderWithWrappersLEGACY( - - ) - - const mockProps = { - SaleArtworksConnection: () => ({ - aggregations: [], - counts: { - total: 0, - }, - edges: saleArtworksConnectionEdges, - }), - } - - resolveMostRecentRelayOperation(mockEnvironment, mockProps) - - expect(tree.root.findAllByType(InfiniteScrollArtworksGridContainer)).toHaveLength(1) - }) - - it("Renders list of sale artworks as a list", () => { - const tree = renderWithWrappersLEGACY() - const mockProps = { - SaleArtworksConnection: () => ({ - aggregations: [], - counts: { - total: 0, - }, - edges: saleArtworksConnectionEdges, - }), - } - - resolveMostRecentRelayOperation(mockEnvironment, mockProps) - - expect(tree.root.findAllByType(SaleArtworkListContainer)).toHaveLength(1) - }) - - describe("SaleLotsListSortMode", () => { - it("renders the right sort mode and count", () => { - const tree = renderWithWrappersLEGACY( - - ) - - expect(extractText(tree.root.findAllByType(Text)[0])).toBe("Sorted by least bids") - expect(extractText(tree.root.findAllByType(Text)[1])).toBe("Showing 20 of 100") - }) - }) -}) - -const saleArtworkNode = { - artwork: { - image: { - url: "artworkImageUrl", - }, - href: "/artwork/artwroks-href", - saleMessage: "Price on request", - artistNames: "Banksy", - slug: "artwork-slug", - internalID: "Internal-ID", - sale: { - isAuction: true, - isClosed: false, - displayTimelyAt: "register by\n5pm", - endAt: null, - }, - saleArtwork: { - counts: "{bidderPositions: 0}", - currentBid: '{display: "$650"}', - }, - partner: { - name: "Heritage Auctions", - }, - }, - lotLabel: "1", -} - -const saleArtworksConnectionEdges = new Array(10).fill({ - node: { - saleArtwork: saleArtworkNode, - id: saleArtworkNode.artwork.internalID, - href: saleArtworkNode.artwork.href, - }, -}) diff --git a/src/app/store/config/features.ts b/src/app/store/config/features.ts index 1763c16623d..c9deea9f640 100644 --- a/src/app/store/config/features.ts +++ b/src/app/store/config/features.ts @@ -54,12 +54,6 @@ export const features = { echoFlagKey: "AREnableEditorialNews", showInDevMenu: true, }, - // TODO: need to refresh it before releasing to avoid leaking the feature in not ready releases, marked as ready since 15 months ago - AREnableArtworksConnectionForAuction: { - readyForRelease: true, - description: "Use artworksConnection for Auction screen", - echoFlagKey: "AREnableArtworksConnectionForAuction", - }, ARImpressionsTrackingHomeRailViews: { description: "Enable tracking rail views on home screen", readyForRelease: true, From a8d66a20525510cfefd5407a91a31c0b23d3ef8a Mon Sep 17 00:00:00 2001 From: dariakoko Date: Thu, 9 Jan 2025 17:15:18 +0100 Subject: [PATCH 2/7] chore: fix types error --- .../ArtworkFilter/Filters/EstimateRangeOptions.tsx | 3 ++- src/app/Components/ArtworkFilter/Filters/SortOptions.tsx | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/app/Components/ArtworkFilter/Filters/EstimateRangeOptions.tsx b/src/app/Components/ArtworkFilter/Filters/EstimateRangeOptions.tsx index ec364773636..eda55e8b042 100644 --- a/src/app/Components/ArtworkFilter/Filters/EstimateRangeOptions.tsx +++ b/src/app/Components/ArtworkFilter/Filters/EstimateRangeOptions.tsx @@ -41,7 +41,8 @@ export const EstimateRangeOptionsScreen: React.FC }) const selectedOptions = useSelectedOptionsDisplay() - const selectedOption = selectedOptions.find((option) => option.paramName === paramName)! + const selectedOption = + selectedOptions.find((option) => option.paramName === paramName) ?? options[0] const selectOption = (option: AggregateOption) => { selectFiltersAction({ diff --git a/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx b/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx index 333a6ce9b26..129d4380e32 100644 --- a/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx +++ b/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx @@ -131,9 +131,9 @@ export const SortOptionsScreen: React.FC = ({ navigation ) const selectedOptions = useSelectedOptionsDisplay() - const selectedOption = selectedOptions.find( - (option) => option.paramName === FilterParamName.sort - )! + const selectedOption = + selectedOptions.find((option) => option.paramName === FilterParamName.sort) ?? + DEFAULT_ARTWORK_SORT const filterOptions = { artwork: [DEFAULT_ARTWORK_SORT, ...ORDERED_ARTWORK_SORTS], From 5561bcd42dc4f7f805d4e7195ad8cabe6c1ac065 Mon Sep 17 00:00:00 2001 From: dariakoko Date: Fri, 10 Jan 2025 09:23:20 +0100 Subject: [PATCH 3/7] Revert "chore: fix types error" This reverts commit a8d66a20525510cfefd5407a91a31c0b23d3ef8a. --- .../ArtworkFilter/Filters/EstimateRangeOptions.tsx | 3 +-- src/app/Components/ArtworkFilter/Filters/SortOptions.tsx | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/app/Components/ArtworkFilter/Filters/EstimateRangeOptions.tsx b/src/app/Components/ArtworkFilter/Filters/EstimateRangeOptions.tsx index eda55e8b042..ec364773636 100644 --- a/src/app/Components/ArtworkFilter/Filters/EstimateRangeOptions.tsx +++ b/src/app/Components/ArtworkFilter/Filters/EstimateRangeOptions.tsx @@ -41,8 +41,7 @@ export const EstimateRangeOptionsScreen: React.FC }) const selectedOptions = useSelectedOptionsDisplay() - const selectedOption = - selectedOptions.find((option) => option.paramName === paramName) ?? options[0] + const selectedOption = selectedOptions.find((option) => option.paramName === paramName)! const selectOption = (option: AggregateOption) => { selectFiltersAction({ diff --git a/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx b/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx index 129d4380e32..333a6ce9b26 100644 --- a/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx +++ b/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx @@ -131,9 +131,9 @@ export const SortOptionsScreen: React.FC = ({ navigation ) const selectedOptions = useSelectedOptionsDisplay() - const selectedOption = - selectedOptions.find((option) => option.paramName === FilterParamName.sort) ?? - DEFAULT_ARTWORK_SORT + const selectedOption = selectedOptions.find( + (option) => option.paramName === FilterParamName.sort + )! const filterOptions = { artwork: [DEFAULT_ARTWORK_SORT, ...ORDERED_ARTWORK_SORTS], From d166f565b18453989337f1d9c04aff07c70ee9d0 Mon Sep 17 00:00:00 2001 From: dariakoko Date: Fri, 10 Jan 2025 09:31:32 +0100 Subject: [PATCH 4/7] chore --- .../Components/ArtworkFilter/Filters/EstimateRangeOptions.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/app/Components/ArtworkFilter/Filters/EstimateRangeOptions.tsx b/src/app/Components/ArtworkFilter/Filters/EstimateRangeOptions.tsx index ec364773636..0451b159de8 100644 --- a/src/app/Components/ArtworkFilter/Filters/EstimateRangeOptions.tsx +++ b/src/app/Components/ArtworkFilter/Filters/EstimateRangeOptions.tsx @@ -26,13 +26,12 @@ export const EstimateRangeOptionsScreen: React.FC navigation, }) => { const paramName = FilterParamName.estimateRange - const ranges = EstimateRanges const selectFiltersAction = ArtworksFiltersStore.useStoreActions( (state) => state.selectFiltersAction ) - const options = ranges.map((estimateRange) => { + const options = EstimateRanges.map((estimateRange) => { return { displayText: estimateRange.paramDisplay, paramName, From 806651014af1abc60fc703f7d690d8a602bcf46d Mon Sep 17 00:00:00 2001 From: dariakoko Date: Thu, 16 Jan 2025 13:21:16 +0100 Subject: [PATCH 5/7] chore: final cleanup --- src/app/Components/ArtworkFilter/ArtworkFilterHelpers.ts | 4 ++-- src/app/Components/ArtworkFilter/ArtworkFilterStore.tsx | 2 +- src/app/Components/ArtworkFilter/Filters/SortOptions.tsx | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/app/Components/ArtworkFilter/ArtworkFilterHelpers.ts b/src/app/Components/ArtworkFilter/ArtworkFilterHelpers.ts index 85559bc7213..2df0448ceff 100644 --- a/src/app/Components/ArtworkFilter/ArtworkFilterHelpers.ts +++ b/src/app/Components/ArtworkFilter/ArtworkFilterHelpers.ts @@ -119,7 +119,7 @@ export enum ViewAsValues { export const getSortDefaultValueByFilterType = (filterType: FilterType) => { return { artwork: "-decayed_merch", - saleArtwork: "sale_position", + saleArtwork: "position", showArtwork: "partner_show_position", auctionResult: "DATE_DESC", geneArtwork: "-partner_updated_at", @@ -295,7 +295,7 @@ const DEFAULT_ARTWORKS_PARAMS = { } as FilterParams const DEFAULT_SALE_ARTWORKS_PARAMS = { - sort: "sale_position", + sort: "position", estimateRange: "", } as FilterParams diff --git a/src/app/Components/ArtworkFilter/ArtworkFilterStore.tsx b/src/app/Components/ArtworkFilter/ArtworkFilterStore.tsx index 23e40430887..9d5655813ee 100644 --- a/src/app/Components/ArtworkFilter/ArtworkFilterStore.tsx +++ b/src/app/Components/ArtworkFilter/ArtworkFilterStore.tsx @@ -238,7 +238,7 @@ export const selectedOptionsUnion = ({ }, saleArtwork: { paramName: FilterParamName.sort, - paramValue: "sale_position", + paramValue: "position", displayText: "Lot Number Ascending", }, showArtwork: { diff --git a/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx b/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx index 333a6ce9b26..c7f9ecb88cd 100644 --- a/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx +++ b/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx @@ -37,10 +37,10 @@ const DEFAULT_TAG_SORT = { paramValue: "-partner_updated_at", } -export const DEFAULT_NEW_SALE_ARTWORK_SORT = { +export const DEFAULT_SALE_ARTWORK_SORT = { displayText: "Lot Number Ascending", paramName: FilterParamName.sort, - paramValue: "sale_position", + paramValue: "position", } export const ORDERED_ARTWORK_SORTS: FilterData[] = [ @@ -77,11 +77,11 @@ export const ORDERED_ARTWORK_SORTS: FilterData[] = [ ] export const ORDERED_SALE_ARTWORK_SORTS: FilterData[] = [ - DEFAULT_NEW_SALE_ARTWORK_SORT, + DEFAULT_SALE_ARTWORK_SORT, { displayText: "Lot Number Descending", paramName: FilterParamName.sort, - paramValue: "-sale_position", + paramValue: "-position", }, { displayText: "Most Bids", From e0605cfeaf29193408e8ce3c56f138c4fd293b6a Mon Sep 17 00:00:00 2001 From: dariakoko Date: Thu, 16 Jan 2025 13:21:39 +0100 Subject: [PATCH 6/7] chore --- src/app/Scenes/Sale/Sale.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/Scenes/Sale/Sale.tsx b/src/app/Scenes/Sale/Sale.tsx index 02664fcb0c7..0c660d9554f 100644 --- a/src/app/Scenes/Sale/Sale.tsx +++ b/src/app/Scenes/Sale/Sale.tsx @@ -14,7 +14,7 @@ import { FilterModalMode, } from "app/Components/ArtworkFilter" import { ArtworkFiltersStoreProvider } from "app/Components/ArtworkFilter/ArtworkFilterStore" -import { DEFAULT_NEW_SALE_ARTWORK_SORT } from "app/Components/ArtworkFilter/Filters/SortOptions" +import { DEFAULT_SALE_ARTWORK_SORT } from "app/Components/ArtworkFilter/Filters/SortOptions" import { LoadFailureView } from "app/Components/LoadFailureView" import Spinner from "app/Components/Spinner" import { CascadingEndTimesBanner } from "app/Scenes/Artwork/Components/CascadingEndTimesBanner" @@ -451,7 +451,7 @@ export const SaleQueryRenderer: React.FC<{ saleID, // @ts-ignore input: { - sort: DEFAULT_NEW_SALE_ARTWORK_SORT.paramValue, + sort: DEFAULT_SALE_ARTWORK_SORT.paramValue, priceRange: "", }, }, From 8507a9a12d1911b9f3b6fb516ba86d13826984f8 Mon Sep 17 00:00:00 2001 From: dariakoko Date: Fri, 24 Jan 2025 11:12:55 +0100 Subject: [PATCH 7/7] chore: use sale_position default sort --- src/app/Components/ArtworkFilter/ArtworkFilterHelpers.ts | 2 +- src/app/Components/ArtworkFilter/ArtworkFilterStore.tsx | 2 +- .../Components/ArtworkFilter/ArtworkFiltersStore.tests.tsx | 4 ++-- src/app/Components/ArtworkFilter/Filters/SortOptions.tsx | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/app/Components/ArtworkFilter/ArtworkFilterHelpers.ts b/src/app/Components/ArtworkFilter/ArtworkFilterHelpers.ts index 2df0448ceff..8fef5c0c1f2 100644 --- a/src/app/Components/ArtworkFilter/ArtworkFilterHelpers.ts +++ b/src/app/Components/ArtworkFilter/ArtworkFilterHelpers.ts @@ -295,7 +295,7 @@ const DEFAULT_ARTWORKS_PARAMS = { } as FilterParams const DEFAULT_SALE_ARTWORKS_PARAMS = { - sort: "position", + sort: "sale_position", estimateRange: "", } as FilterParams diff --git a/src/app/Components/ArtworkFilter/ArtworkFilterStore.tsx b/src/app/Components/ArtworkFilter/ArtworkFilterStore.tsx index 9d5655813ee..23e40430887 100644 --- a/src/app/Components/ArtworkFilter/ArtworkFilterStore.tsx +++ b/src/app/Components/ArtworkFilter/ArtworkFilterStore.tsx @@ -238,7 +238,7 @@ export const selectedOptionsUnion = ({ }, saleArtwork: { paramName: FilterParamName.sort, - paramValue: "position", + paramValue: "sale_position", displayText: "Lot Number Ascending", }, showArtwork: { diff --git a/src/app/Components/ArtworkFilter/ArtworkFiltersStore.tests.tsx b/src/app/Components/ArtworkFilter/ArtworkFiltersStore.tests.tsx index 38b54d87d7f..e69906bb061 100644 --- a/src/app/Components/ArtworkFilter/ArtworkFiltersStore.tests.tsx +++ b/src/app/Components/ArtworkFilter/ArtworkFiltersStore.tests.tsx @@ -2108,7 +2108,7 @@ describe("selectedOptionsUnion", () => { { displayText: "Lot Number Ascending", paramName: "sort", - paramValue: "position", + paramValue: "sale_position", }, { displayText: "All", @@ -2243,7 +2243,7 @@ describe("selectedOptionsUnion", () => { { displayText: "Lot Number Ascending", paramName: "sort", - paramValue: "position", + paramValue: "sale_position", }, { displayText: "All", diff --git a/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx b/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx index c7f9ecb88cd..13c980c9b9f 100644 --- a/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx +++ b/src/app/Components/ArtworkFilter/Filters/SortOptions.tsx @@ -40,7 +40,7 @@ const DEFAULT_TAG_SORT = { export const DEFAULT_SALE_ARTWORK_SORT = { displayText: "Lot Number Ascending", paramName: FilterParamName.sort, - paramValue: "position", + paramValue: "sale_position", } export const ORDERED_ARTWORK_SORTS: FilterData[] = [ @@ -81,7 +81,7 @@ export const ORDERED_SALE_ARTWORK_SORTS: FilterData[] = [ { displayText: "Lot Number Descending", paramName: FilterParamName.sort, - paramValue: "-position", + paramValue: "-sale_position", }, { displayText: "Most Bids",