2022-01-14 20:22:39 -05:00

82 lines
2.0 KiB
TypeScript

import type {
OperationContext,
OperationOptions,
} from '@vercel/commerce/api/operations'
import type { GetPageOperation } from '@vercel/commerce/types/page'
import type { SpreeSdkVariables } from '../../types'
import type { SpreeApiConfig, SpreeApiProvider } from '..'
import type { IPage } from '@spree/storefront-api-v2-sdk/types/interfaces/Page'
import normalizePage from '../../utils/normalizations/normalize-page'
export type Page = any
export type GetPageResult = { page?: Page }
export type PageVariables = {
id: number
}
export default function getPageOperation({
commerce,
}: OperationContext<SpreeApiProvider>) {
async function getPage<T extends GetPageOperation>(opts: {
variables: T['variables']
config?: Partial<SpreeApiConfig>
preview?: boolean
}): Promise<T['data']>
async function getPage<T extends GetPageOperation>(
opts: {
variables: T['variables']
config?: Partial<SpreeApiConfig>
preview?: boolean
} & OperationOptions
): Promise<T['data']>
async function getPage<T extends GetPageOperation>({
url,
config: userConfig,
preview,
variables: getPageVariables,
}: {
url?: string
variables: T['variables']
config?: Partial<SpreeApiConfig>
preview?: boolean
}): Promise<T['data']> {
console.info(
'getPage called. Configuration: ',
'userConfig: ',
userConfig,
'preview: ',
preview,
'url: ',
url
)
const config = commerce.getConfig(userConfig)
const { fetch: apiFetch } = config
const variables: SpreeSdkVariables = {
methodPath: 'pages.show',
arguments: [getPageVariables.id],
}
const { data: spreeSuccessResponse } = await apiFetch<
IPage,
SpreeSdkVariables
>('__UNUSED__', {
variables,
})
const normalizedPage: Page = normalizePage(
spreeSuccessResponse,
spreeSuccessResponse.data,
config.locales || []
)
return { page: normalizedPage }
}
return getPage
}