84 lines
2.8 KiB
TypeScript
84 lines
2.8 KiB
TypeScript
import { redirect } from 'next/navigation';
|
|
|
|
import { listOrders } from '~/medusa/lib/data/orders';
|
|
import { createI18nServerInstance } from '@/lib/i18n/i18n.server';
|
|
import { listProductTypes } from '@lib/data/products';
|
|
import { PageBody } from '@kit/ui/makerkit/page';
|
|
import pathsConfig from '~/config/paths.config';
|
|
import { Trans } from '@kit/ui/trans';
|
|
import { HomeLayoutPageHeader } from '../../_components/home-page-header';
|
|
import OrdersTable from '../../_components/orders/orders-table';
|
|
import { withI18n } from '~/lib/i18n/with-i18n';
|
|
import type { IOrderLineItem } from '../../_components/orders/types';
|
|
import { getAnalysisOrders } from '~/lib/services/order.service';
|
|
|
|
export async function generateMetadata() {
|
|
const { t } = await createI18nServerInstance();
|
|
|
|
return {
|
|
title: t('orders:title'),
|
|
};
|
|
}
|
|
|
|
async function OrdersPage() {
|
|
const medusaOrders = await listOrders();
|
|
const analysisOrders = await getAnalysisOrders();
|
|
const { productTypes } = await listProductTypes();
|
|
|
|
if (!medusaOrders || !productTypes) {
|
|
redirect(pathsConfig.auth.signIn);
|
|
}
|
|
|
|
const analysisPackagesType = productTypes.find(({ metadata }) => metadata?.handle === 'analysis-packages');
|
|
const analysisPackageOrders: IOrderLineItem[] = medusaOrders.flatMap(({ id, items, payment_status, fulfillment_status }) => items
|
|
?.filter((item) => item.product_type_id === analysisPackagesType?.id)
|
|
.map((item) => {
|
|
const localOrder = analysisOrders.find((order) => order.medusa_order_id === id);
|
|
if (!localOrder) {
|
|
return null;
|
|
}
|
|
return {
|
|
item,
|
|
medusaOrderId: id,
|
|
orderId: localOrder?.id,
|
|
orderStatus: localOrder.status,
|
|
analysis_element_ids: localOrder.analysis_element_ids,
|
|
}
|
|
})
|
|
.filter((order) => order !== null)
|
|
|| []);
|
|
|
|
const otherOrders: IOrderLineItem[] = medusaOrders
|
|
.filter(({ items }) => items?.some((item) => item.product_type_id !== analysisPackagesType?.id))
|
|
.flatMap(({ id, items, payment_status, fulfillment_status }) => items
|
|
?.map((item) => {
|
|
const analysisOrder = analysisOrders.find((order) => order.medusa_order_id === id);
|
|
if (!analysisOrder) {
|
|
return null;
|
|
}
|
|
return {
|
|
item,
|
|
medusaOrderId: id,
|
|
orderId: analysisOrder.id,
|
|
orderStatus: analysisOrder.status,
|
|
}
|
|
})
|
|
.filter((order) => order !== null)
|
|
|| []);
|
|
|
|
return (
|
|
<>
|
|
<HomeLayoutPageHeader
|
|
title={<Trans i18nKey={'orders:title'} />}
|
|
description={<Trans i18nKey={'orders:description'} />}
|
|
/>
|
|
<PageBody>
|
|
<OrdersTable orderItems={analysisPackageOrders} title="orders:table.analysisPackage" />
|
|
<OrdersTable orderItems={otherOrders} title="orders:table.otherOrders" />
|
|
</PageBody>
|
|
</>
|
|
);
|
|
}
|
|
|
|
export default withI18n(OrdersPage);
|