Implement variants and options

This commit is contained in:
goncy
2021-08-10 10:51:53 -03:00
parent 04f9799636
commit 07bc16b9a7
6 changed files with 113 additions and 80 deletions

View File

@@ -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

View File

@@ -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),
}
}

View File

@@ -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),
}
}