47 lines
1.3 KiB
TypeScript
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} />
|
|
}
|