get all paths for SSG

This commit is contained in:
Dom Sip 2022-04-11 17:30:43 +01:00
parent 181e9520c1
commit cc424e58b3
2 changed files with 39 additions and 7 deletions

View File

@ -1,14 +1,46 @@
// import data from '../../data.json' import { Product } from '@vercel/commerce/types/product'
import { OperationContext } from '@vercel/commerce/api/operations'
import { normalizeSearchProducts } from '../utils/normalise-product';
import { SFCCConfig } from '..'
export type GetAllProductPathsResult = { export type GetAllProductPathsResult = {
products: Array<{ path: string }> products: Array<{ path: string }>
} }
export default function getAllProductPathsOperation() { export default function getAllProductPathsOperation({ commerce }: OperationContext<any>) {
function getAllProductPaths(): Promise<GetAllProductPathsResult> { async function getAllProductPaths({
return Promise.resolve({ query,
products: [], // TODO: SSG for products config,
}) variables,
}: {
query?: string
config?: SFCCConfig
variables?: any
} = {}): Promise<GetAllProductPathsResult> {
// TODO: support locale
const { sdk, locale } = commerce.getConfig(config) as SFCCConfig
const searchClient = await sdk.getSearchClient()
// use SDK search API for initial products same as getAllProductsOperation
const searchResults = await searchClient.productSearch({
parameters: { q: "dress", limit: variables?.first },
});
let products = [] as Product[];
if (searchResults.total) {
products = normalizeSearchProducts(searchResults.hits)
} else {
// TODO: handle this better?
console.log("No results for search");
}
return {
products: products?.map(({ slug }: Product) => ({
path: `/${slug}`,
})),
}
} }
return getAllProductPaths return getAllProductPaths

View File

@ -1,7 +1,7 @@
import { Product } from '@vercel/commerce/types/product' import { Product } from '@vercel/commerce/types/product'
import { GetAllProductsOperation } from '@vercel/commerce/types/product' import { GetAllProductsOperation } from '@vercel/commerce/types/product'
import type { OperationContext } from '@vercel/commerce/api/operations' import type { OperationContext } from '@vercel/commerce/api/operations'
import type { SFCCConfig, Provider } from '../index' import type { SFCCConfig } from '../index'
import { normalizeSearchProducts } from '../utils/normalise-product'; import { normalizeSearchProducts } from '../utils/normalise-product';
export default function getAllProductsOperation({ export default function getAllProductsOperation({