diff --git a/app/home/(user)/_components/order/cart-totals.tsx b/app/home/(user)/_components/order/cart-totals.tsx
new file mode 100644
index 0000000..69dadde
--- /dev/null
+++ b/app/home/(user)/_components/order/cart-totals.tsx
@@ -0,0 +1,82 @@
+"use client"
+
+import { formatCurrency } from "@/packages/shared/src/utils"
+import { StoreOrder } from "@medusajs/types"
+import React from "react"
+import { useTranslation } from "react-i18next"
+import { Trans } from '@kit/ui/trans';
+
+export default function CartTotals({ order }: {
+ order: StoreOrder
+}) {
+ const { i18n: { language } } = useTranslation()
+ const {
+ currency_code,
+ total,
+ subtotal,
+ tax_total,
+ discount_total,
+ gift_card_total,
+ } = order
+
+ return (
+
+
+
+
+
+
+
+ {formatCurrency({ value: subtotal ?? 0, currencyCode: currency_code, locale: language })}
+
+
+ {!!discount_total && (
+
+
+
+ -{" "}
+ {formatCurrency({ value: discount_total ?? 0, currencyCode: currency_code, locale: language })}
+
+
+ )}
+
+
+
+
+
+ {formatCurrency({ value: tax_total ?? 0, currencyCode: currency_code, locale: language })}
+
+
+ {!!gift_card_total && (
+
+
+
+ -{" "}
+ {formatCurrency({ value: gift_card_total ?? 0, currencyCode: currency_code, locale: language })}
+
+
+ )}
+
+
+
+
+
+ {formatCurrency({ value: total ?? 0, currencyCode: currency_code, locale: language })}
+
+
+
+
+ )
+}
diff --git a/app/home/(user)/_components/order/order-completed.tsx b/app/home/(user)/_components/order/order-completed.tsx
new file mode 100644
index 0000000..cf2cfa6
--- /dev/null
+++ b/app/home/(user)/_components/order/order-completed.tsx
@@ -0,0 +1,24 @@
+import { Trans } from '@kit/ui/trans';
+import { PageBody, PageHeader } from '@kit/ui/page';
+import { StoreOrder } from "@medusajs/types"
+
+import CartTotals from "./cart-totals"
+import OrderDetails from "./order-details"
+import OrderItems from "./order-items"
+
+export default async function OrderCompleted({
+ order,
+}: {
+ order: StoreOrder,
+}) {
+ return (
+
+ } />
+
+
+
+
+
+
+ )
+}
diff --git a/app/home/(user)/_components/order/order-details.tsx b/app/home/(user)/_components/order/order-details.tsx
new file mode 100644
index 0000000..e6bc6cf
--- /dev/null
+++ b/app/home/(user)/_components/order/order-details.tsx
@@ -0,0 +1,47 @@
+import { StoreOrder } from "@medusajs/types"
+import { Trans } from '@kit/ui/trans';
+
+export default function OrderDetails({ order, showStatus }: {
+ order: StoreOrder
+ showStatus?: boolean
+}) {
+ const formatStatus = (str: string) => {
+ const formatted = str.split("_").join(" ")
+
+ return formatted.slice(0, 1).toUpperCase() + formatted.slice(1)
+ }
+
+ return (
+
+
+ :{" "}
+
+ {new Date(order.created_at).toLocaleDateString()}
+
+
+
+ : {order.display_id}
+
+
+ {showStatus && (
+ <>
+
+ :{" "}
+
+ {formatStatus(order.fulfillment_status)}
+
+
+
+ :{" "}
+
+ {formatStatus(order.payment_status)}
+
+
+ >
+ )}
+
+ )
+}
diff --git a/app/home/(user)/_components/order/order-item.tsx b/app/home/(user)/_components/order/order-item.tsx
new file mode 100644
index 0000000..658f91b
--- /dev/null
+++ b/app/home/(user)/_components/order/order-item.tsx
@@ -0,0 +1,52 @@
+import { StoreCartLineItem, StoreOrderLineItem } from "@medusajs/types"
+import { TableCell, TableRow } from "@kit/ui/table"
+
+import LineItemOptions from "@modules/common/components/line-item-options"
+import LineItemPrice from "@modules/common/components/line-item-price"
+import LineItemUnitPrice from "@modules/common/components/line-item-unit-price"
+
+export default function OrderItem({ item, currencyCode }: {
+ item: StoreCartLineItem | StoreOrderLineItem
+ currencyCode: string
+}) {
+ return (
+
+ {/*
+
+
+
+ */}
+
+
+
+ {item.product_title}
+
+
+
+
+
+
+
+
+ {item.quantity}x{" "}
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/app/home/(user)/_components/order/order-items.tsx b/app/home/(user)/_components/order/order-items.tsx
new file mode 100644
index 0000000..b08db72
--- /dev/null
+++ b/app/home/(user)/_components/order/order-items.tsx
@@ -0,0 +1,41 @@
+import repeat from "@lib/util/repeat"
+import { StoreOrder } from "@medusajs/types"
+import { Table, TableBody } from "@kit/ui/table"
+
+import Divider from "@modules/common/components/divider"
+import SkeletonLineItem from "@modules/skeletons/components/skeleton-line-item"
+import OrderItem from "./order-item"
+import { Heading } from "@kit/ui/heading"
+import { Trans } from '@kit/ui/trans';
+
+export default function OrderItems({ order }: {
+ order: StoreOrder
+}) {
+ const items = order.items
+
+ return (
+
+
+
+
+
+
+
+
+ {items?.length
+ ? items
+ .sort((a, b) => (a.created_at ?? "") > (b.created_at ?? "") ? -1 : 1)
+ .map((item) => (
+
+ ))
+ : repeat(5).map((i) => )}
+
+
+
+
+ )
+}
diff --git a/app/home/(user)/_lib/server/load-analysis-packages.ts b/app/home/(user)/_lib/server/load-analysis-packages.ts
new file mode 100644
index 0000000..3dc758d
--- /dev/null
+++ b/app/home/(user)/_lib/server/load-analysis-packages.ts
@@ -0,0 +1,36 @@
+import { cache } from 'react';
+
+import { listCollections, listProducts, listRegions } from "@lib/data";
+
+async function countryCodesLoader() {
+ const countryCodes = await listRegions().then((regions) =>
+ regions?.map((r) => r.countries?.map((c) => c.iso_2)).flat(),
+ );
+ return countryCodes ?? [];
+}
+export const loadCountryCodes = cache(countryCodesLoader);
+
+async function collectionsLoader() {
+ const { collections } = await listCollections({
+ fields: 'id, handle',
+ });
+ return collections ?? [];
+}
+export const loadCollections = cache(collectionsLoader);
+
+async function analysisPackagesLoader() {
+ const [countryCodes, collections] = await Promise.all([loadCountryCodes(), loadCollections()]);
+ const countryCode = countryCodes[0]!;
+
+ const collection = collections.find(({ handle }) => handle === 'analysis-packages');
+ if (!collection) {
+ return { analysisPackages: [], countryCode };
+ }
+
+ const { response } = await listProducts({
+ countryCode,
+ queryParams: { limit: 100, collection_id: collection?.id },
+ });
+ return { analysisPackages: response.products, countryCode };
+}
+export const loadAnalysisPackages = cache(analysisPackagesLoader);
diff --git a/app/select-package/page.tsx b/app/select-package/page.tsx
index e4de4bb..a446b97 100644
--- a/app/select-package/page.tsx
+++ b/app/select-package/page.tsx
@@ -13,6 +13,7 @@ import SelectAnalysisPackages from '@/components/select-analysis-packages';
import { MedReportLogo } from '../../components/med-report-logo';
import pathsConfig from '../../config/paths.config';
import ComparePackagesModal from '../home/(user)/_components/compare-packages-modal';
+import { loadAnalysisPackages } from '../home/(user)/_lib/server/load-analysis-packages';
export const generateMetadata = async () => {
const { t } = await createI18nServerInstance();
@@ -23,6 +24,8 @@ export const generateMetadata = async () => {
};
async function SelectPackagePage() {
+ const { analysisPackages, countryCode } = await loadAnalysisPackages();
+
return (
@@ -31,6 +34,7 @@ async function SelectPackagePage() {
@@ -39,7 +43,7 @@ async function SelectPackagePage() {
}
/>
-
+