mirror of
https://github.com/vercel/commerce.git
synced 2025-07-27 04:01:23 +00:00
Implement variants and options
This commit is contained in:
@@ -1,15 +1,33 @@
|
||||
import data from '../../data.json'
|
||||
import type { OrdercloudConfig, Provider } from '../index'
|
||||
import type { OperationContext } from '@commerce/api/operations'
|
||||
import type { GetAllProductPathsOperation } from '@commerce/types/product'
|
||||
import { RawProduct } from '@framework/types/product'
|
||||
|
||||
export type GetAllProductPathsResult = {
|
||||
products: Array<{ path: string }>
|
||||
}
|
||||
|
||||
export default function getAllProductPathsOperation() {
|
||||
function getAllProductPaths(): Promise<GetAllProductPathsResult> {
|
||||
return Promise.resolve({
|
||||
products: []
|
||||
// products: data.products.map(({ path }) => ({ path })),
|
||||
})
|
||||
export default function getAllProductPathsOperation({
|
||||
commerce,
|
||||
}: OperationContext<Provider>) {
|
||||
async function getAllProductPaths<T extends GetAllProductPathsOperation>({
|
||||
config,
|
||||
}: {
|
||||
config?: Partial<OrdercloudConfig>
|
||||
} = {}): Promise<T['data']> {
|
||||
// Get fetch from the config
|
||||
const { fetch } = commerce.getConfig(config)
|
||||
|
||||
// Get all products
|
||||
const rawProducts: RawProduct[] = await fetch<{ Items: RawProduct[] }>(
|
||||
'GET',
|
||||
'/products'
|
||||
).then((response) => response.Items)
|
||||
|
||||
return {
|
||||
// Match a path for every product retrieved
|
||||
products: rawProducts.map((product) => ({ path: `/${product.ID}` })),
|
||||
}
|
||||
}
|
||||
|
||||
return getAllProductPaths
|
||||
|
@@ -1,4 +1,3 @@
|
||||
import type { Product } from '@commerce/types/product'
|
||||
import type { GetAllProductsOperation } from '@commerce/types/product'
|
||||
import type { OperationContext } from '@commerce/api/operations'
|
||||
import type { RawProduct } from '@framework/types/product'
|
||||
@@ -16,15 +15,18 @@ export default function getAllProductsOperation({
|
||||
variables?: T['variables']
|
||||
config?: Partial<OrdercloudConfig>
|
||||
preview?: boolean
|
||||
} = {}): Promise<{ products: Product[] }> {
|
||||
} = {}): Promise<T['data']> {
|
||||
// Get fetch from the config
|
||||
const { fetch } = commerce.getConfig(config)
|
||||
|
||||
// Get all products
|
||||
const rawProducts: RawProduct[] = await fetch<{ Items: RawProduct[] }>(
|
||||
'GET',
|
||||
'/products'
|
||||
).then((response) => response.Items)
|
||||
|
||||
return {
|
||||
// Normalize products to commerce schema
|
||||
products: rawProducts.map(normalizeProduct),
|
||||
}
|
||||
}
|
||||
|
@@ -1,6 +1,5 @@
|
||||
import type { OperationContext } from '@commerce/api/operations'
|
||||
import type { RawProduct } from '@framework/types/product'
|
||||
import type { Product } from '@commerce/types/product'
|
||||
import type { GetProductOperation } from '@commerce/types/product'
|
||||
import type { OrdercloudConfig, Provider } from '../index'
|
||||
|
||||
@@ -17,15 +16,18 @@ export default function getProductOperation({
|
||||
variables?: T['variables']
|
||||
config?: Partial<OrdercloudConfig>
|
||||
preview?: boolean
|
||||
} = {}): Promise<{ product: Product }> {
|
||||
} = {}): Promise<T['data']> {
|
||||
// Get fetch from the config
|
||||
const { fetch } = commerce.getConfig(config)
|
||||
|
||||
// Get a single product
|
||||
const rawProduct: RawProduct = await fetch<RawProduct>(
|
||||
'GET',
|
||||
`/products/${variables?.slug}`
|
||||
)
|
||||
|
||||
return {
|
||||
// Normalize product to commerce schema
|
||||
product: normalizeProduct(rawProduct),
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user