From 853bd75119b322096965472ce7befa3ae1d60ef9 Mon Sep 17 00:00:00 2001 From: k4rli Date: Mon, 4 Aug 2025 12:44:36 +0300 Subject: [PATCH] feat(MED-131): analysis package has list of medusa product IDs, not medipost IDs --- .../order-analysis-package/page.tsx | 4 +-- .../_components/compare-packages-modal.tsx | 35 +++++++++---------- .../_lib/server/load-analysis-packages.ts | 29 +++++++++------ app/select-package/page.tsx | 4 +-- components/select-analysis-package.tsx | 6 ++-- .../src/lib/data/products.ts | 2 +- utils/medusa-product.ts | 10 +++--- 7 files changed, 49 insertions(+), 41 deletions(-) diff --git a/app/home/(user)/(dashboard)/order-analysis-package/page.tsx b/app/home/(user)/(dashboard)/order-analysis-package/page.tsx index 5c7db8b..8be76c5 100644 --- a/app/home/(user)/(dashboard)/order-analysis-package/page.tsx +++ b/app/home/(user)/(dashboard)/order-analysis-package/page.tsx @@ -20,7 +20,7 @@ export const generateMetadata = async () => { }; async function OrderAnalysisPackagePage() { - const { analysisElements, analysisPackages, countryCode } = await loadAnalysisPackages(); + const { analysisPackageElements, analysisPackages, countryCode } = await loadAnalysisPackages(); return ( @@ -29,8 +29,8 @@ async function OrderAnalysisPackagePage() { diff --git a/app/home/(user)/_components/compare-packages-modal.tsx b/app/home/(user)/_components/compare-packages-modal.tsx index 545edf4..1b561ad 100644 --- a/app/home/(user)/_components/compare-packages-modal.tsx +++ b/app/home/(user)/_components/compare-packages-modal.tsx @@ -23,8 +23,7 @@ import { withI18n } from '~/lib/i18n/with-i18n'; import { PackageHeader } from '@/components/package-header'; import { InfoTooltip } from '@/components/ui/info-tooltip'; import { StoreProduct } from '@medusajs/types'; -import type { AnalysisElement } from '~/lib/services/analysis-element.service'; -import { getAnalysisElementOriginalIds } from '@/utils/medusa-product'; +import { getAnalysisElementMedusaProductIds } from '@/utils/medusa-product'; const CheckWithBackground = () => { return ( @@ -53,12 +52,12 @@ const PackageTableHead = async ({ product, nrOfAnalyses }: { product: StoreProdu } const ComparePackagesModal = async ({ - analysisElements, analysisPackages, + analysisPackageElements, triggerElement, }: { - analysisElements: AnalysisElement[]; analysisPackages: StoreProduct[]; + analysisPackageElements: StoreProduct[]; triggerElement: JSX.Element; }) => { const { t } = await createI18nServerInstance(); @@ -71,9 +70,9 @@ const ComparePackagesModal = async ({ return null; } - const standardPackageAnalyses = getAnalysisElementOriginalIds([standardPackage]); - const standardPlusPackageAnalyses = getAnalysisElementOriginalIds([standardPlusPackage]); - const premiumPackageAnalyses = getAnalysisElementOriginalIds([premiumPackage]); + const standardPackageAnalyses = getAnalysisElementMedusaProductIds([standardPackage]); + const standardPlusPackageAnalyses = getAnalysisElementMedusaProductIds([standardPlusPackage]); + const premiumPackageAnalyses = getAnalysisElementMedusaProductIds([premiumPackage]); return ( @@ -110,28 +109,26 @@ const ComparePackagesModal = async ({ - {analysisElements.map( + {analysisPackageElements.map( ( { - analysis_name_lab: analysisName, - analysis_id_original: analysisId, + title, + id, + description, }, index, ) => { - if (!analysisName) { + if (!title) { return null; } - const includedInStandard = standardPackageAnalyses.includes(analysisId); - const includedInStandardPlus = standardPlusPackageAnalyses.includes(analysisId); - const includedInPremium = premiumPackageAnalyses.includes(analysisId); + const includedInStandard = standardPackageAnalyses.includes(id); + const includedInStandardPlus = standardPlusPackageAnalyses.includes(id); + const includedInPremium = premiumPackageAnalyses.includes(id); return ( - {analysisName}{' '} - {/* } - /> */} + {title}{' '} + {description && (} />)} {includedInStandard && } diff --git a/app/home/(user)/_lib/server/load-analysis-packages.ts b/app/home/(user)/_lib/server/load-analysis-packages.ts index 68075e7..b7caa78 100644 --- a/app/home/(user)/_lib/server/load-analysis-packages.ts +++ b/app/home/(user)/_lib/server/load-analysis-packages.ts @@ -2,8 +2,8 @@ import { cache } from 'react'; import { listProductTypes, listProducts } from "@lib/data/products"; import { listRegions } from '@lib/data/regions'; -import { AnalysisElement, getAnalysisElements } from '~/lib/services/analysis-element.service'; -import { getAnalysisElementOriginalIds } from '@/utils/medusa-product'; +import { getAnalysisElementMedusaProductIds } from '@/utils/medusa-product'; +import type { StoreProduct } from '@medusajs/types'; async function countryCodesLoader() { const countryCodes = await listRegions().then((regions) => @@ -23,23 +23,32 @@ async function analysisPackagesLoader() { const [countryCodes, productTypes] = await Promise.all([loadCountryCodes(), loadProductTypes()]); const countryCode = countryCodes[0]!; + let analysisPackages: StoreProduct[] = []; + let analysisPackageElements: StoreProduct[] = []; + const productType = productTypes.find(({ metadata }) => metadata?.handle === 'analysis-packages'); if (!productType) { - return { analysisElements: [], analysisPackages: [], countryCode }; + return { analysisPackageElements, analysisPackages, countryCode }; } - const { response } = await listProducts({ + const analysisPackagesResponse = await listProducts({ countryCode, queryParams: { limit: 100, "type_id[0]": productType.id }, }); - const analysisPackages = response.products; - let analysisElements: AnalysisElement[] = []; - const analysisElementOriginalIds = getAnalysisElementOriginalIds(analysisPackages); + analysisPackages = analysisPackagesResponse.response.products; - if (analysisElementOriginalIds.length) { - analysisElements = await getAnalysisElements({ originalIds: analysisElementOriginalIds }); + const analysisElementMedusaProductIds = getAnalysisElementMedusaProductIds(analysisPackages); + if (analysisElementMedusaProductIds.length > 0) { + const { response: { products } } = await listProducts({ + countryCode, + queryParams: { + id: analysisElementMedusaProductIds, + limit: 100, + }, + }); + analysisPackageElements = products; } - return { analysisElements, analysisPackages, countryCode }; + return { analysisPackageElements, analysisPackages, countryCode }; } export const loadAnalysisPackages = cache(analysisPackagesLoader); diff --git a/app/select-package/page.tsx b/app/select-package/page.tsx index 5549cc2..56742bd 100644 --- a/app/select-package/page.tsx +++ b/app/select-package/page.tsx @@ -24,7 +24,7 @@ export const generateMetadata = async () => { }; async function SelectPackagePage() { - const { analysisElements, analysisPackages, countryCode } = await loadAnalysisPackages(); + const { analysisPackageElements, analysisPackages, countryCode } = await loadAnalysisPackages(); return (
@@ -34,8 +34,8 @@ async function SelectPackagePage() { diff --git a/components/select-analysis-package.tsx b/components/select-analysis-package.tsx index 5dd3846..b4863cf 100644 --- a/components/select-analysis-package.tsx +++ b/components/select-analysis-package.tsx @@ -19,7 +19,7 @@ import { handleAddToCart } from '@/lib/services/medusaCart.service'; import { PackageHeader } from './package-header'; import { ButtonTooltip } from './ui/button-tooltip'; -import { getAnalysisElementOriginalIds } from '@/utils/medusa-product'; +import { getAnalysisElementMedusaProductIds } from '@/utils/medusa-product'; export interface IAnalysisPackage { titleKey: string; @@ -52,8 +52,8 @@ export default function SelectAnalysisPackage({ } const titleKey = analysisPackage.title; - const analysisElementOriginalIds = getAnalysisElementOriginalIds([analysisPackage]); - const nrOfAnalyses = analysisElementOriginalIds.length; + const analysisElementMedusaProductIds = getAnalysisElementMedusaProductIds([analysisPackage]); + const nrOfAnalyses = analysisElementMedusaProductIds.length; const description = analysisPackage.description ?? ''; const subtitle = analysisPackage.subtitle ?? ''; const variant = analysisPackage.variants?.[0]; diff --git a/packages/features/medusa-storefront/src/lib/data/products.ts b/packages/features/medusa-storefront/src/lib/data/products.ts index 1997706..d242b3c 100644 --- a/packages/features/medusa-storefront/src/lib/data/products.ts +++ b/packages/features/medusa-storefront/src/lib/data/products.ts @@ -14,7 +14,7 @@ export const listProducts = async ({ regionId, }: { pageParam?: number - queryParams?: HttpTypes.FindParams & HttpTypes.StoreProductParams & { "type_id[0]"?: string } + queryParams?: HttpTypes.FindParams & HttpTypes.StoreProductParams & { "type_id[0]"?: string; id?: string[] } countryCode?: string regionId?: string }): Promise<{ diff --git a/utils/medusa-product.ts b/utils/medusa-product.ts index dc9cd32..a93669b 100644 --- a/utils/medusa-product.ts +++ b/utils/medusa-product.ts @@ -1,17 +1,19 @@ -export const getAnalysisElementOriginalIds = (products: ({ metadata?: { analysisElementOriginalIds?: string } | null } | null)[]) => { +export const getAnalysisElementMedusaProductIds = (products: ({ metadata?: { analysisElementMedusaProductIds?: string } | null } | null)[]) => { if (!products) { return []; } - return products + const mapped = products .flatMap((product) => { - const value = product?.metadata?.analysisElementOriginalIds; + const value = product?.metadata?.analysisElementMedusaProductIds; try { return JSON.parse(value as string); } catch (e) { - console.error("Failed to parse analysisElementOriginalIds from analysis package, possibly invalid format", e); + console.error("Failed to parse analysisElementMedusaProductIds from analysis package, possibly invalid format", e); return []; } }) .filter(Boolean) as string[]; + + return [...new Set(mapped)]; }