From e12c43f3935e7e153b4d7fee3fa5767c04fc8721 Mon Sep 17 00:00:00 2001 From: DatNguyen Date: Mon, 4 Oct 2021 16:38:02 +0700 Subject: [PATCH] get veggie --- .../api/operations/get-all-products.ts | 3 +- pages/index.tsx | 57 +++++++++++-------- .../common/CartDrawer/CartDrawer.tsx | 2 +- src/components/hooks/cart/index.ts | 2 + .../hooks/cart/useAddProductToCart.tsx | 40 +++++++++++++ .../hooks/{ => cart}/useGetActiveOrder.tsx | 0 src/utils/constanst.utils.ts | 6 ++ src/utils/funtion.utils.ts | 7 +++ src/utils/types.utils.ts | 11 +++- 9 files changed, 100 insertions(+), 28 deletions(-) create mode 100644 src/components/hooks/cart/index.ts create mode 100644 src/components/hooks/cart/useAddProductToCart.tsx rename src/components/hooks/{ => cart}/useGetActiveOrder.tsx (100%) diff --git a/framework/vendure/api/operations/get-all-products.ts b/framework/vendure/api/operations/get-all-products.ts index 1f558a7cb..c9cbc2f19 100644 --- a/framework/vendure/api/operations/get-all-products.ts +++ b/framework/vendure/api/operations/get-all-products.ts @@ -5,7 +5,7 @@ import { normalizeSearchResult } from '../../utils/normalize' import { getAllProductsQuery } from '../../utils/queries/get-all-products-query' import { OperationContext } from '@commerce/api/operations' -export type ProductVariables = { first?: number, facetValueIds?: string[] } +export type ProductVariables = { first?: number, facetValueIds?: string[], collectionSlug?:string } export default function getAllProductsOperation({ commerce, @@ -31,6 +31,7 @@ export default function getAllProductsOperation({ input: { take: vars.first, facetValueIds: vars.facetValueIds, + collectionSlug : vars.collectionSlug, groupByProduct: true, }, } diff --git a/pages/index.tsx b/pages/index.tsx index 3082d1790..55b5dd5a5 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,20 +1,21 @@ import { ProductVariables } from '@framework/api/operations/get-all-products'; -import { Product } from '@framework/schema'; +import { Facet, Product } from '@framework/schema'; import commerce from '@lib/api/commerce'; +import { ifError } from 'assert'; import { GetStaticPropsContext } from 'next'; import { Layout } from 'src/components/common'; import { FeaturedProductsCarousel, HomeBanner, HomeCategories, HomeCollection, HomeCTA, HomeFeature, HomeRecipe, HomeSubscribe, HomeVideo } from 'src/components/modules/home'; import HomeSpice from 'src/components/modules/home/HomeSpice/HomeSpice'; -import { getAllFeaturedFacetId, getFreshProductFacetId } from 'src/utils/funtion.utils'; +import { FACET } from 'src/utils/constanst.utils'; +import { getAllFeaturedFacetId, getFacetIdByName, getFreshProductFacetId } from 'src/utils/funtion.utils'; interface Props { - freshProducts: Product[], - featuredProducts: Product[], - + veggie: Product[], + facets:Facet[] } -export default function Home({ freshProducts, featuredProducts }: Props) { - console.log("total: ", freshProducts.length, featuredProducts.length) - console.log("rs: ", freshProducts, featuredProducts) +export default function Home({ veggie, facets }: Props) { + // console.log("total: ", freshProducts.length, featuredProducts.length) + console.log("rs: ", veggie) return ( <> @@ -46,37 +47,43 @@ export async function getStaticProps({ config, preview, }) - - + const freshProductvariables: ProductVariables = {} - const freshFacetId = getFreshProductFacetId(facets) - - if (freshFacetId) { - freshProductvariables.facetValueIds = [freshFacetId] + // const freshFacetId = getFreshProductFacetId(facets) + const veggieId = getFacetIdByName(facets,FACET.CATEGORY.PARENT_NAME,FACET.CATEGORY.VEGGIE) + console.log("veggieId",veggieId) + console.log("facets",facets) + if (veggieId) { + freshProductvariables.facetValueIds = [veggieId] } + // if (freshFacetId) { + // freshProductvariables.facetValueIds = [freshFacetId] + // } const freshProductsPromise = commerce.getAllProducts({ variables: freshProductvariables, config, preview, }) - const allFeaturedFacetId = getAllFeaturedFacetId(facets) - const featuredProductsPromise = commerce.getAllProducts({ - variables: { - facetValueIds: allFeaturedFacetId - }, - config, - preview, - }) + // const allFeaturedFacetId = getAllFeaturedFacetId(facets) + // const featuredProductsPromise = commerce.getAllProducts({ + // variables: { + // facetValueIds: allFeaturedFacetId + // }, + // config, + // preview, + // }) try { - const rs = await Promise.all([freshProductsPromise, featuredProductsPromise]) + const rs = await Promise.all([freshProductsPromise]) + // const rs = await Promise.all([freshProductsPromise, featuredProductsPromise]) return { props: { - freshProducts: rs[0].products, - featuredProducts: rs[1].products + veggie: rs[0].products, + // featuredProducts: rs[1].products + facets }, revalidate: 60, } diff --git a/src/components/common/CartDrawer/CartDrawer.tsx b/src/components/common/CartDrawer/CartDrawer.tsx index 87d357b2a..daeae0513 100644 --- a/src/components/common/CartDrawer/CartDrawer.tsx +++ b/src/components/common/CartDrawer/CartDrawer.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { useCartDrawer } from 'src/components/contexts'; -import useGetActiveOrder from 'src/components/hooks/useGetActiveOrder'; +import useGetActiveOrder from 'src/components/hooks/cart/useGetActiveOrder'; import { PRODUCT_CART_DATA_TEST } from 'src/utils/demo-data'; import { DrawerCommon } from '..'; import s from './CartDrawer.module.scss'; diff --git a/src/components/hooks/cart/index.ts b/src/components/hooks/cart/index.ts new file mode 100644 index 000000000..c0235c81c --- /dev/null +++ b/src/components/hooks/cart/index.ts @@ -0,0 +1,2 @@ +export { default as useAddProductToCart } from './useAddProductToCart' +export { default as useGetActiveOrder } from './useGetActiveOrder' \ No newline at end of file diff --git a/src/components/hooks/cart/useAddProductToCart.tsx b/src/components/hooks/cart/useAddProductToCart.tsx new file mode 100644 index 000000000..2e6c538e2 --- /dev/null +++ b/src/components/hooks/cart/useAddProductToCart.tsx @@ -0,0 +1,40 @@ +import { useState } from 'react' +import { CommonError } from 'src/domains/interfaces/CommonError' +import rawFetcher from 'src/utils/rawFetcher' +import { AddItemToOrderMutation, AddItemToOrderMutationVariables } from '@framework/schema' +import { errorMapping } from 'src/utils/errrorMapping' +import { useGetActiveOrder } from '.' +import { addItemToOrderMutation } from '@framework/utils/mutations/add-item-to-order-mutation' + +const useAddProductToCart = () => { + const [loading, setLoading] = useState(false) + const [error, setError] = useState(null) + const { mutate } = useGetActiveOrder() + + const addProduct = (options:AddItemToOrderMutationVariables, + fCallBack: (isSuccess: boolean, message?: string) => void + ) => { + setError(null) + setLoading(true) + rawFetcher({ + query: addItemToOrderMutation , + variables: options, + }) + .then(({ data }) => { + if (data.addItemToOrder.__typename !== "Order") { + throw CommonError.create(errorMapping(data.addItemToOrder.message), data.addItemToOrder.errorCode) + } + mutate() + fCallBack(true) + }) + .catch((error) => { + setError(error) + fCallBack(false, error.message) + }) + .finally(() => setLoading(false)) + } + + return { loading, addProduct, error } +} + +export default useAddProductToCart diff --git a/src/components/hooks/useGetActiveOrder.tsx b/src/components/hooks/cart/useGetActiveOrder.tsx similarity index 100% rename from src/components/hooks/useGetActiveOrder.tsx rename to src/components/hooks/cart/useGetActiveOrder.tsx diff --git a/src/utils/constanst.utils.ts b/src/utils/constanst.utils.ts index f66d6a7ea..2d85951a7 100644 --- a/src/utils/constanst.utils.ts +++ b/src/utils/constanst.utils.ts @@ -1,3 +1,5 @@ +import { FacetConstant } from "./types.utils" + export const BLUR_DATA_IMG = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mN8fBIAApUBruKYvzsAAAAASUVORK5CYII=' export const SOCIAL_LINKS = { @@ -113,6 +115,10 @@ export const FACET = { PARENT_NAME: 'Featured', FRESH: 'Fresh', BEST_SELLERS: 'Best seller' + }, + CATEGORY: { + PARENT_NAME:"category", + VEGGIE:"veggie" } } diff --git a/src/utils/funtion.utils.ts b/src/utils/funtion.utils.ts index d2ad83be1..4c0265a19 100644 --- a/src/utils/funtion.utils.ts +++ b/src/utils/funtion.utils.ts @@ -21,6 +21,13 @@ export function getFreshProductFacetId(facets: Facet[]) { return freshFacetValue?.id } +export function getFacetIdByName(facets: Facet[], facetName: string, valueName:string) { + const featuredFacet = facets.find((item: Facet) => item.name === facetName) + const freshFacetValue = featuredFacet?.values.find((item: FacetValue) => item.name === valueName) + return freshFacetValue?.id +} + + export function getAllFeaturedFacetId(facets: Facet[]) { const featuredFacet = facets.find((item: Facet) => item.name === FACET.FEATURE.PARENT_NAME) const rs = featuredFacet?.values.map((item: FacetValue) => item.id) diff --git a/src/utils/types.utils.ts b/src/utils/types.utils.ts index fe1a4df07..7936675e8 100644 --- a/src/utils/types.utils.ts +++ b/src/utils/types.utils.ts @@ -52,4 +52,13 @@ export type filterContextType = { visible: boolean; open: () => void; close: () => void; -}; \ No newline at end of file +}; + +export interface StringMap { [key: string]: string; } + +export interface FacetMap extends StringMap{ + PARENT_NAME: string +} +export interface FacetConstant{ + [key: string]: FacetMap; +} \ No newline at end of file