From 5c70c8be25d775e63a81778bb18f936dcfb8758b Mon Sep 17 00:00:00 2001 From: lytrankieio123 Date: Thu, 30 Sep 2021 17:50:35 +0700 Subject: [PATCH] :sparkles: feat: get all facets :%s --- framework/vendure/schema.d.ts | 45 +++++++++++++++++++ .../utils/queries/get-all-facets-query.ts | 17 +++++++ pages/product/[slug].tsx | 1 + pages/test.tsx | 34 +++++++++++--- src/components/hooks/facets/index.ts | 3 ++ src/components/hooks/facets/useFacets.tsx | 12 +++++ 6 files changed, 107 insertions(+), 5 deletions(-) create mode 100644 framework/vendure/utils/queries/get-all-facets-query.ts create mode 100644 src/components/hooks/facets/index.ts create mode 100644 src/components/hooks/facets/useFacets.tsx diff --git a/framework/vendure/schema.d.ts b/framework/vendure/schema.d.ts index b0b0170d7..3922f679b 100644 --- a/framework/vendure/schema.d.ts +++ b/framework/vendure/schema.d.ts @@ -93,6 +93,10 @@ export type QueryProductsArgs = { options?: Maybe } +export type QueryFacetsArgs = { + options?: Maybe +} + export type QuerySearchArgs = { input: SearchInput } @@ -2727,6 +2731,13 @@ export type ProductListOptions = { filter?: Maybe } +export type FacetListOptions = { + skip?: Maybe + take?: Maybe + sort?: Maybe + filter?: Maybe +} + export type UpdateOrderItemsResult = | Order | OrderModificationError @@ -2884,6 +2895,23 @@ export type ProductVariantSortParameter = { discountPrice?: Maybe } + +export type FacetFilterParameter = { + createdAt?: Maybe + updatedAt?: Maybe + languageCode?: Maybe + name?: Maybe + code?: Maybe +} + +export type FacetSortParameter = { + id?: Maybe + createdAt?: Maybe + updatedAt?: Maybe + name?: Maybe + code?: Maybe +} + export type CustomerFilterParameter = { createdAt?: Maybe updatedAt?: Maybe @@ -3192,6 +3220,23 @@ export type GetAllProductsQuery = { __typename?: 'Query' } & { } } +export type GetAllFacetsQuery = { __typename?: 'Query' } & { + facets: { __typename?: 'FacetList' } & { + items: Array< + { __typename?: 'Facet' } & Pick< + Facet, + 'id' | 'name' | 'code' + > & { + parent?: Maybe<{ __typename?: 'Facet' } & Pick> + children?: Maybe< + Array<{ __typename?: 'Facet' } & Pick> + > + } + >, + 'totalItems' + } +} + export type ActiveOrderQueryVariables = Exact<{ [key: string]: never }> export type ActiveOrderQuery = { __typename?: 'Query' } & { diff --git a/framework/vendure/utils/queries/get-all-facets-query.ts b/framework/vendure/utils/queries/get-all-facets-query.ts new file mode 100644 index 000000000..906507c69 --- /dev/null +++ b/framework/vendure/utils/queries/get-all-facets-query.ts @@ -0,0 +1,17 @@ +export const getAllFacetsQuery = /* GraphQL */ ` +query facets ($options: FacetListOptions) { + facets (options: $options){ + totalItems, + items { + id + name + code + values { + id + name + code + } + } + } +} +` diff --git a/pages/product/[slug].tsx b/pages/product/[slug].tsx index ab9a1c17c..a8e925df9 100644 --- a/pages/product/[slug].tsx +++ b/pages/product/[slug].tsx @@ -4,6 +4,7 @@ import { ProductInfoDetail, ReleventProducts, ViewedProducts } from 'src/compone import { BLOGS_DATA_TEST, INGREDIENT_DATA_TEST, RECIPE_DATA_TEST } from 'src/utils/demo-data' export default function Slug() { + return <> diff --git a/pages/test.tsx b/pages/test.tsx index b60fe63c7..452b42173 100644 --- a/pages/test.tsx +++ b/pages/test.tsx @@ -1,16 +1,40 @@ +import { QueryFacetsArgs } from '@framework/schema' +import { useMemo, useState } from 'react' import { Layout } from 'src/components/common' -import { useMessage } from 'src/components/contexts' +import { useFacets } from 'src/components/hooks/facets' export default function Test() { - const { showMessageError } = useMessage() + const [keyword, setKeyword] = useState('c') - const handleClick = () => { - showMessageError("Create account successfully") + const optionsFilter = useMemo(() => { + console.log("change options") + return { + options: { + filter: { + name: { + contains: keyword + } + } + } + } as QueryFacetsArgs + }, [keyword]) + + const { items, totalItems } = useFacets(optionsFilter) + + const changeQuery = () => { + setKeyword('ca') } return ( <> - +
Lorem ipsum dolor sit amet consectetur adipisicing elit. Inventore, praesentium.
+
+ total: {totalItems} +
+
+ ITEMS: {JSON.stringify(items)} +
+ ) } diff --git a/src/components/hooks/facets/index.ts b/src/components/hooks/facets/index.ts new file mode 100644 index 000000000..f039373e3 --- /dev/null +++ b/src/components/hooks/facets/index.ts @@ -0,0 +1,3 @@ +export { default as useFacets } from './useFacets' + + diff --git a/src/components/hooks/facets/useFacets.tsx b/src/components/hooks/facets/useFacets.tsx new file mode 100644 index 000000000..59d5485ec --- /dev/null +++ b/src/components/hooks/facets/useFacets.tsx @@ -0,0 +1,12 @@ +import { GetAllFacetsQuery, QueryFacetsArgs } from '@framework/schema' +import { getAllFacetsQuery } from '@framework/utils/queries/get-all-facets-query' +import gglFetcher from 'src/utils/gglFetcher' +import useSWR from 'swr' + +const useFacets = (options: QueryFacetsArgs) => { + const { data, isValidating, ...rest } = useSWR([getAllFacetsQuery, options], gglFetcher) + console.log("here", data) + return { items: data?.facets.items, totalItems: data?.facets.totalItems, loading: isValidating, ...rest } +} + +export default useFacets