matias-delavega-dg-dmi 716b540966
TEC-252 and TEC-256: Implementing fetchers, products list and search (#5)
* TEC-252: Base integration with commercetools using fetchers for REST and GraphQL endpoints

* TEC-252: WIP commenting some components that are failing while we don't have all the hooks defined

* add sdk integration

* TEC-256: Implementing product search

* TEC-256: removing unnecessary env variables

* TEC-256: review comments

* TEC-256: other remaining review fixes

Co-authored-by: nicossosa93 <nicolas.sosa@devgurus.io>
2021-06-30 10:05:26 -03:00

40 lines
1.2 KiB
TypeScript

import { Provider, CommercetoolsConfig } from '@framework/api'
import { OperationContext } from '@commerce/api/operations'
import { Category } from '@commerce/types/site'
import { getAllCategoriesAndBrandsQuery } from '@framework/utils/queries/get-category'
import { normalizeSite } from '@framework/lib/normalize'
export type GetSiteInfoResult<
T extends { categories: any[]; brands: any[] } = {
categories: Category[]
brands: any[]
}
> = T
export default function getSiteInfoOperation({
commerce,
}: OperationContext<Provider>) {
async function getSiteInfo({
query = getAllCategoriesAndBrandsQuery,
variables,
config: cfg,
}: {
query?: string
variables?: any
config?: Partial<CommercetoolsConfig>
preview?: boolean
} = {}): Promise<GetSiteInfoResult> {
const config = commerce.getConfig(cfg)
const {
data: { categories, productTypes },
}: any = await config.fetch(query)
const ctCategories = categories.results
const ctBrands =
productTypes?.results[0]?.attributeDefinitions?.results[0]?.type?.values
?.results
return normalizeSite(ctCategories, ctBrands)
}
return getSiteInfo
}