mirror of
https://github.com/vercel/commerce.git
synced 2025-05-17 15:06:59 +00:00
59 lines
1.4 KiB
TypeScript
59 lines
1.4 KiB
TypeScript
import { Page } from '../../../schema'
|
|
import { SwellConfig, Provider } from '..'
|
|
import {
|
|
OperationContext,
|
|
OperationOptions,
|
|
} from '@vercel/commerce/api/operations'
|
|
import { GetPageOperation } from '../../types/page'
|
|
|
|
export type GetPageResult<T extends { page?: any } = { page?: Page }> = T
|
|
|
|
export type PageVariables = {
|
|
id: number
|
|
}
|
|
|
|
export default function getPageOperation({
|
|
commerce,
|
|
}: OperationContext<Provider>) {
|
|
async function getPage<T extends GetPageOperation>(opts: {
|
|
variables: T['variables']
|
|
config?: Partial<SwellConfig>
|
|
preview?: boolean
|
|
}): Promise<T['data']>
|
|
|
|
async function getPage<T extends GetPageOperation>(
|
|
opts: {
|
|
variables: T['variables']
|
|
config?: Partial<SwellConfig>
|
|
preview?: boolean
|
|
} & OperationOptions
|
|
): Promise<T['data']>
|
|
|
|
async function getPage<T extends GetPageOperation>({
|
|
variables,
|
|
config,
|
|
}: {
|
|
query?: string
|
|
variables: T['variables']
|
|
config?: Partial<SwellConfig>
|
|
preview?: boolean
|
|
}): Promise<T['data']> {
|
|
const { fetch, locale = 'en-US' } = commerce.getConfig(config)
|
|
const id = variables.id
|
|
const result = await fetch('content', 'get', ['pages', id])
|
|
const page = result
|
|
|
|
return {
|
|
page: page
|
|
? {
|
|
...page,
|
|
url: `/${locale}/${page.slug}`,
|
|
body: page.body ?? '',
|
|
}
|
|
: null,
|
|
}
|
|
}
|
|
|
|
return getPage
|
|
}
|