Shop-Storefront/src/app/[countryCode]/(main)/layout.tsx

47 lines
1.3 KiB
TypeScript

import { Metadata } from "next"
import { listCartOptions, retrieveCart } from "@lib/data/cart"
import { retrieveCustomer } from "@lib/data/customer"
import { getBaseURL } from "@lib/util/env"
import { StoreCartShippingOption } from "@medusajs/types"
import { DynamicLayoutRenderer } from "../../../vibentec/renderer"
import { LayoutContext, LayoutComponentNode } from "../../../vibentec/component-map"
import { loadLayoutConfig } from "vibentec/configloader"
import { getRegion } from "@lib/data/regions"
export const metadata: Metadata = {
metadataBase: new URL(getBaseURL()),
}
export default async function PageLayout(props: {
children: React.ReactNode
params: Promise<{ countryCode: string }>
}) {
const params = await props.params
const { countryCode } = params
const region = await getRegion(countryCode)
const customer = await retrieveCustomer()
const cart = await retrieveCart()
let shippingOptions: StoreCartShippingOption[] = []
if (cart) {
const { shipping_options } = await listCartOptions()
shippingOptions = shipping_options
}
const nodes: LayoutComponentNode[] = await loadLayoutConfig()
const context: LayoutContext = {
customer,
cart,
shippingOptions,
contentChildren: props.children,
countryCode,
region,
}
return <DynamicLayoutRenderer nodes={nodes} context={context} />
}