From 861da9a265d417dedb4597ec21cd65e2cd94ebe4 Mon Sep 17 00:00:00 2001 From: albertfolch-redeemeum <102516373+albertfolch-redeemeum@users.noreply.github.com> Date: Fri, 9 Feb 2024 18:04:02 +0100 Subject: [PATCH] fix: some missing seller name and image in the explore page (#1016) --- .eslintrc | 6 +- package-lock.json | 209 ++++++++++++++++++ package.json | 1 + src/components/core-sdk/CoreSDKProvider.tsx | 3 - .../hooks/lens/profile/useGetLensProfiles.ts | 55 ++--- src/lib/utils/hooks/product/useProducts.ts | 21 +- 6 files changed, 253 insertions(+), 42 deletions(-) diff --git a/.eslintrc b/.eslintrc index 2ec9776a4..c200b77dc 100644 --- a/.eslintrc +++ b/.eslintrc @@ -10,7 +10,8 @@ "@typescript-eslint", "react-hooks", "simple-import-sort", - "unused-imports" + "unused-imports", + "@tanstack/query" ], "rules": { "simple-import-sort/exports": "error", @@ -29,7 +30,8 @@ "extends": [ "eslint:recommended", "plugin:@typescript-eslint/recommended", - "plugin:prettier/recommended" + "plugin:prettier/recommended", + "plugin:@tanstack/eslint-plugin-query/recommended" ], "env": { "browser": true, diff --git a/package-lock.json b/package-lock.json index c820dcd91..3f92a6cdd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -132,6 +132,7 @@ "@graphql-codegen/typescript": "^2.7.3", "@graphql-codegen/typescript-operations": "^2.5.3", "@playwright/test": "^1.23.1", + "@tanstack/eslint-plugin-query": "^5.18.1", "@testing-library/react": "^13.3.0", "@types/lodash.merge": "^4.6.7", "@types/lodash.uniqby": "^4.7.7", @@ -13816,6 +13817,137 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/@tanstack/eslint-plugin-query": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/@tanstack/eslint-plugin-query/-/eslint-plugin-query-5.18.1.tgz", + "integrity": "sha512-pLHqd2RYSbGxhFXdjVxo5Gmi1aJfcXDpZQsjLHEkGEXFb65WzX6LMCz7n2rW3wBElDerRLFZNVLC61Pg/TlYsA==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^5.62.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "eslint": "^8.0.0" + } + }, + "node_modules/@tanstack/eslint-plugin-query/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@tanstack/eslint-plugin-query/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@tanstack/eslint-plugin-query/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@tanstack/eslint-plugin-query/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@tanstack/eslint-plugin-query/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@tanstack/eslint-plugin-query/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@tanstack/query-core": { "version": "4.36.1", "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.36.1.tgz", @@ -57084,6 +57216,83 @@ "loader-utils": "^2.0.0" } }, + "@tanstack/eslint-plugin-query": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/@tanstack/eslint-plugin-query/-/eslint-plugin-query-5.18.1.tgz", + "integrity": "sha512-pLHqd2RYSbGxhFXdjVxo5Gmi1aJfcXDpZQsjLHEkGEXFb65WzX6LMCz7n2rW3wBElDerRLFZNVLC61Pg/TlYsA==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "^5.62.0" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + } + }, + "@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "@tanstack/query-core": { "version": "4.36.1", "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.36.1.tgz", diff --git a/package.json b/package.json index 13e460bde..d22890580 100644 --- a/package.json +++ b/package.json @@ -167,6 +167,7 @@ "@graphql-codegen/typescript": "^2.7.3", "@graphql-codegen/typescript-operations": "^2.5.3", "@playwright/test": "^1.23.1", + "@tanstack/eslint-plugin-query": "^5.18.1", "@testing-library/react": "^13.3.0", "@types/lodash.merge": "^4.6.7", "@types/lodash.uniqby": "^4.7.7", diff --git a/src/components/core-sdk/CoreSDKProvider.tsx b/src/components/core-sdk/CoreSDKProvider.tsx index 9e5a6f5bc..a69fd8496 100644 --- a/src/components/core-sdk/CoreSDKProvider.tsx +++ b/src/components/core-sdk/CoreSDKProvider.tsx @@ -10,9 +10,6 @@ interface Props { export function CoreSDKProvider({ children }: Props) { const coreSDK = useProviderCoreSDK() as ExtendedCoreSDK; - if (!coreSDK.uuid) { - coreSDK.uuid = crypto.randomUUID(); - } return ( {children} diff --git a/src/lib/utils/hooks/lens/profile/useGetLensProfiles.ts b/src/lib/utils/hooks/lens/profile/useGetLensProfiles.ts index 3a54bc04d..581337db9 100644 --- a/src/lib/utils/hooks/lens/profile/useGetLensProfiles.ts +++ b/src/lib/utils/hooks/lens/profile/useGetLensProfiles.ts @@ -51,43 +51,46 @@ export function useLensProfilesPerSellerIds( const { config } = useConfigContext(); const lensApiLink = config.lens.apiLink || ""; const { enabled } = options; - const sellerIdPerLensToken = props.sellers - .filter((seller) => seller.authTokenType === AuthTokenType.LENS) - .reduce((_sellerIdPerLensToken, seller) => { - const sellerId = seller.id; - const tokenId = getLensTokenIdHex(seller.authTokenId); - if (!_sellerIdPerLensToken.has(tokenId)) { - _sellerIdPerLensToken.set(tokenId, sellerId); - } - return _sellerIdPerLensToken; - }, new Map()); + const sellerIdPerLensToken = useMemo( + () => + props.sellers + .filter((seller) => seller.authTokenType === AuthTokenType.LENS) + .reduce((_sellerIdPerLensToken, seller) => { + const sellerId = seller.id; + const tokenId = getLensTokenIdHex(seller.authTokenId); + if (!_sellerIdPerLensToken.has(tokenId)) { + _sellerIdPerLensToken.set(tokenId, sellerId); + } + return _sellerIdPerLensToken; + }, new Map()), + [props.sellers] + ); + const profileIds = Array.from(sellerIdPerLensToken.keys()); const lensProfiles = useQuery( - ["get-lens-profiles", sellerIdPerLensToken, lensApiLink], + ["get-lens-profiles", profileIds, lensApiLink], async () => { - return getLensProfiles( + const lensProfiles = await getLensProfiles( { - profileIds: Array.from(sellerIdPerLensToken.keys()) + profileIds }, lensApiLink ); + return lensProfiles?.items.reduce((map, profile) => { + if (profile) { + const sellerId = sellerIdPerLensToken.get(String(profile.id)); + if (!sellerId) { + return map; + } + return map.set(sellerId, profile as Profile); + } + return map; + }, new Map()); }, { enabled: enabled && !!sellerIdPerLensToken.size } ); - return useMemo(() => { - return lensProfiles.isSuccess && lensProfiles.data?.items - ? lensProfiles.data?.items.reduce((map, profile) => { - if (profile) { - const sellerId = sellerIdPerLensToken.get( - String(profile.id) - ) as string; - return map.set(sellerId, profile as Profile); - } - return map; - }, new Map()) - : new Map(); - }, [lensProfiles, sellerIdPerLensToken]); + return lensProfiles.data; } async function getLensProfiles( diff --git a/src/lib/utils/hooks/product/useProducts.ts b/src/lib/utils/hooks/product/useProducts.ts index 293864aeb..93ee7d34a 100644 --- a/src/lib/utils/hooks/product/useProducts.ts +++ b/src/lib/utils/hooks/product/useProducts.ts @@ -43,6 +43,7 @@ export default function useProducts( withNumExchanges?: boolean; } ) { + const { enabled = true } = options; const { config } = useConfigContext(); const { subgraphUrl, defaultDisputeResolverId } = config.envConfig; @@ -54,8 +55,8 @@ export default function useProducts( maxValidUntilDate_gte: now + "" } : {}; - const baseProps = useMemo( - () => ({ + const baseProps = useMemo(() => { + return { ...omit(props, ["productsIds", "quantityAvailable_gte"]), productsFirst: OFFERS_PER_PAGE, productsFilter: { @@ -66,20 +67,20 @@ export default function useProducts( : undefined, ...props.productsFilter } - }), - [props, options, curationLists, defaultDisputeResolverId] - ); + }; + }, [props, options, curationLists, defaultDisputeResolverId]); const coreSDK = useCoreSDK(); const { store } = useContext(ConvertionRateContext); // If id_in or sellerId_in are empty list, then no need to fetch, result is necessarily empty - const emptyListFilter = + const emptyListFilter = !!( (baseProps.productsFilter.id_in && baseProps.productsFilter.id_in?.length === 0) || (baseProps.productsFilter.sellerId_in && - baseProps.productsFilter.sellerId_in?.length === 0); + baseProps.productsFilter.sellerId_in?.length === 0) + ); const productsVariants = useQuery( [ @@ -97,9 +98,7 @@ export default function useProducts( ...baseProps.productsFilter } }; - const data = emptyListFilter - ? [] - : props.onlyNotVoided + const data = props.onlyNotVoided ? await coreSDK.getAllProductsWithNotVoidedVariants({ ...newProps }) : await coreSDK.getAllProductsWithVariants({ ...newProps }); let loop = data.length === OFFERS_PER_PAGE; @@ -122,7 +121,7 @@ export default function useProducts( }, { ...options, - enabled: options.enabled && !!coreSDK, + enabled: enabled && !!coreSDK && !emptyListFilter, refetchOnWindowFocus: false, refetchOnMount: options.refetchOnMount || false }