Files
medreport_mrb2b/app/home/(user)/(dashboard)/cart/page.tsx
Danel Kungla 0c2cfe6d18 prettier fix
2025-09-19 17:22:36 +03:00

75 lines
2.1 KiB
TypeScript

import { notFound } from 'next/navigation';
import { createI18nServerInstance } from '@/lib/i18n/i18n.server';
import { PageBody, PageHeader } from '@/packages/ui/src/makerkit/page';
import { retrieveCart } from '@lib/data/cart';
import { listProductTypes } from '@lib/data/products';
import { Trans } from '@kit/ui/trans';
import { withI18n } from '~/lib/i18n/with-i18n';
import Cart from '../../_components/cart';
import CartTimer from '../../_components/cart/cart-timer';
export async function generateMetadata() {
const { t } = await createI18nServerInstance();
return {
title: t('cart:title'),
};
}
async function CartPage() {
const cart = await retrieveCart().catch((error) => {
console.error('Failed to retrieve cart', error);
return notFound();
});
const { productTypes } = await listProductTypes();
const analysisPackagesType = productTypes.find(
({ metadata }) => metadata?.handle === 'analysis-packages',
);
const synlabAnalysisType = productTypes.find(
({ metadata }) => metadata?.handle === 'synlab-analysis',
);
const synlabAnalyses =
analysisPackagesType && synlabAnalysisType && cart?.items
? cart.items.filter((item) => {
const productTypeId = item.product?.type_id;
if (!productTypeId) {
return false;
}
return [analysisPackagesType.id, synlabAnalysisType.id].includes(
productTypeId,
);
})
: [];
const ttoServiceItems =
cart?.items?.filter(
(item) => !synlabAnalyses.some((analysis) => analysis.id === item.id),
) ?? [];
const otherItemsSorted = ttoServiceItems.sort((a, b) =>
(a.updated_at ?? '') > (b.updated_at ?? '') ? -1 : 1,
);
const item = otherItemsSorted[0];
const isTimerShown =
ttoServiceItems.length > 0 && !!item && !!item.updated_at;
return (
<PageBody>
<PageHeader title={<Trans i18nKey="cart:title" />}>
{isTimerShown && <CartTimer cartItem={item} />}
</PageHeader>
<Cart
cart={cart}
synlabAnalyses={synlabAnalyses}
ttoServiceItems={ttoServiceItems}
/>
</PageBody>
);
}
export default withI18n(CartPage);