mirror of
https://github.com/vercel/commerce.git
synced 2025-07-23 04:36:49 +00:00
🔨 refactor: filter one product vatiant
:%s
This commit is contained in:
@@ -64,6 +64,7 @@ export type ProductCard = {
|
|||||||
collection?: string,
|
collection?: string,
|
||||||
isNotSell?: boolean
|
isNotSell?: boolean
|
||||||
productVariantId?:string
|
productVariantId?:string
|
||||||
|
productVariantName?:string
|
||||||
}
|
}
|
||||||
|
|
||||||
export type SearchProductsBody = {
|
export type SearchProductsBody = {
|
||||||
|
@@ -5,7 +5,7 @@ import { normalizeSearchResult } from '../../utils/normalize'
|
|||||||
import { getAllProductsQuery } from '../../utils/queries/get-all-products-query'
|
import { getAllProductsQuery } from '../../utils/queries/get-all-products-query'
|
||||||
import { OperationContext } from '@commerce/api/operations'
|
import { OperationContext } from '@commerce/api/operations'
|
||||||
|
|
||||||
export type ProductVariables = { first?: number, facetValueIds?: string[], collectionSlug?:string }
|
export type ProductVariables = { first?: number, facetValueIds?: string[], collectionSlug?:string, groupByProduct?:boolean }
|
||||||
|
|
||||||
export default function getAllProductsOperation({
|
export default function getAllProductsOperation({
|
||||||
commerce,
|
commerce,
|
||||||
@@ -32,7 +32,7 @@ export default function getAllProductsOperation({
|
|||||||
take: vars.first,
|
take: vars.first,
|
||||||
facetValueIds: vars.facetValueIds,
|
facetValueIds: vars.facetValueIds,
|
||||||
collectionSlug : vars.collectionSlug,
|
collectionSlug : vars.collectionSlug,
|
||||||
groupByProduct: true,
|
groupByProduct: vars.groupByProduct??true,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
const { data } = await config.fetch<GetAllProductsQuery>(query, {
|
const { data } = await config.fetch<GetAllProductsQuery>(query, {
|
||||||
|
2
framework/vendure/schema.d.ts
vendored
2
framework/vendure/schema.d.ts
vendored
@@ -3039,7 +3039,7 @@ export type SearchResultFragment = { __typename?: 'SearchResult' } & Pick<
|
|||||||
SearchResult,
|
SearchResult,
|
||||||
'productId' | 'sku' | 'productName' | 'description' | 'slug' | 'sku' | 'currencyCode'
|
'productId' | 'sku' | 'productName' | 'description' | 'slug' | 'sku' | 'currencyCode'
|
||||||
| 'productAsset' | 'price' | 'priceWithTax' | 'currencyCode'
|
| 'productAsset' | 'price' | 'priceWithTax' | 'currencyCode'
|
||||||
| 'collectionIds' | 'productVariantId' | 'facetValueIds'
|
| 'collectionIds' | 'productVariantId' | 'facetValueIds' | "productVariantName"
|
||||||
> & {
|
> & {
|
||||||
productAsset?: Maybe<
|
productAsset?: Maybe<
|
||||||
{ __typename?: 'SearchResultAsset' } & Pick<
|
{ __typename?: 'SearchResultAsset' } & Pick<
|
||||||
|
@@ -8,6 +8,7 @@ export const searchResultFragment = /* GraphQL */ `
|
|||||||
sku
|
sku
|
||||||
currencyCode
|
currencyCode
|
||||||
productVariantId
|
productVariantId
|
||||||
|
productVariantName
|
||||||
productAsset {
|
productAsset {
|
||||||
id
|
id
|
||||||
preview
|
preview
|
||||||
|
@@ -11,6 +11,7 @@ export function normalizeSearchResult(item: SearchResultFragment): ProductCard {
|
|||||||
price: (item.priceWithTax as any).min / 100,
|
price: (item.priceWithTax as any).min / 100,
|
||||||
currencyCode: item.currencyCode,
|
currencyCode: item.currencyCode,
|
||||||
productVariantId: item.productVariantId,
|
productVariantId: item.productVariantId,
|
||||||
|
productVariantName:item.productVariantName,
|
||||||
facetValueIds: item.facetValueIds,
|
facetValueIds: item.facetValueIds,
|
||||||
collectionIds: item.collectionIds,
|
collectionIds: item.collectionIds,
|
||||||
|
|
||||||
|
@@ -1,15 +1,13 @@
|
|||||||
import { ProductCard } from '@commerce/types/product';
|
import { ProductCard } from '@commerce/types/product';
|
||||||
import { ProductVariables } from '@framework/api/operations/get-all-products';
|
import { ProductVariables } from '@framework/api/operations/get-all-products';
|
||||||
import { Facet, Product } from '@framework/schema';
|
|
||||||
import { Collection, FacetValue } from '@framework/schema';
|
import { Collection, FacetValue } from '@framework/schema';
|
||||||
import commerce from '@lib/api/commerce';
|
import commerce from '@lib/api/commerce';
|
||||||
import { ifError } from 'assert';
|
|
||||||
import { GetStaticPropsContext } from 'next';
|
import { GetStaticPropsContext } from 'next';
|
||||||
import { Layout } from 'src/components/common';
|
import { Layout } from 'src/components/common';
|
||||||
import { FeaturedProductsCarousel, FreshProducts, HomeBanner, HomeCategories, HomeCollection, HomeCTA, HomeFeature, HomeRecipe, HomeSubscribe, HomeVideo } from 'src/components/modules/home';
|
import { FeaturedProductsCarousel, FreshProducts, HomeBanner, HomeCategories, HomeCollection, HomeCTA, HomeFeature, HomeRecipe, HomeSubscribe, HomeVideo } from 'src/components/modules/home';
|
||||||
import HomeSpice from 'src/components/modules/home/HomeSpice/HomeSpice';
|
import HomeSpice from 'src/components/modules/home/HomeSpice/HomeSpice';
|
||||||
import { FACET } from 'src/utils/constanst.utils';
|
import { FACET } from 'src/utils/constanst.utils';
|
||||||
import { getAllFeaturedFacetId, getFacetIdByName, getFreshProductFacetId } from 'src/utils/funtion.utils';
|
import { FilterOneVatiant, getFacetIdByName } from 'src/utils/funtion.utils';
|
||||||
import { CODE_FACET_DISCOUNT, CODE_FACET_FEATURED } from 'src/utils/constanst.utils';
|
import { CODE_FACET_DISCOUNT, CODE_FACET_FEATURED } from 'src/utils/constanst.utils';
|
||||||
import { getAllFacetValueIdsByParentCode, getAllFacetValuesForFeatuedProducts, getAllPromies, getFreshFacetId } from 'src/utils/funtion.utils';
|
import { getAllFacetValueIdsByParentCode, getAllFacetValuesForFeatuedProducts, getAllPromies, getFreshFacetId } from 'src/utils/funtion.utils';
|
||||||
import { PromiseWithKey } from 'src/utils/types.utils';
|
import { PromiseWithKey } from 'src/utils/types.utils';
|
||||||
@@ -78,7 +76,9 @@ export async function getStaticProps({
|
|||||||
props.freshProducts = []
|
props.freshProducts = []
|
||||||
}
|
}
|
||||||
|
|
||||||
const veggieProductvariables: ProductVariables = {}
|
const veggieProductvariables: ProductVariables = {
|
||||||
|
groupByProduct:false
|
||||||
|
}
|
||||||
const veggieId = getFacetIdByName(facets,FACET.CATEGORY.PARENT_NAME,FACET.CATEGORY.VEGGIE)
|
const veggieId = getFacetIdByName(facets,FACET.CATEGORY.PARENT_NAME,FACET.CATEGORY.VEGGIE)
|
||||||
if (veggieId) {
|
if (veggieId) {
|
||||||
veggieProductvariables.facetValueIds = [veggieId]
|
veggieProductvariables.facetValueIds = [veggieId]
|
||||||
@@ -121,7 +121,7 @@ export async function getStaticProps({
|
|||||||
const rs = await Promise.all(promises)
|
const rs = await Promise.all(promises)
|
||||||
|
|
||||||
promisesWithKey.map((item, index) => {
|
promisesWithKey.map((item, index) => {
|
||||||
props[item.key] = item.keyResult ? rs[index][item.keyResult] : rs[index]
|
props[item.key] = item.keyResult ? FilterOneVatiant(rs[index][item.keyResult]) : rs[index]
|
||||||
return null
|
return null
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@@ -31,6 +31,7 @@ const ProductCardComponent = ({
|
|||||||
isNotSell,
|
isNotSell,
|
||||||
isSingleButton,
|
isSingleButton,
|
||||||
productVariantId,
|
productVariantId,
|
||||||
|
productVariantName
|
||||||
}: ProductCardProps) => {
|
}: ProductCardProps) => {
|
||||||
|
|
||||||
const {addProduct,loading} = useAddProductToCart()
|
const {addProduct,loading} = useAddProductToCart()
|
||||||
@@ -84,7 +85,7 @@ const ProductCardComponent = ({
|
|||||||
<div className={s.cardMidTop}>
|
<div className={s.cardMidTop}>
|
||||||
<Link href={`${ROUTE.PRODUCT_DETAIL}/${slug}`}>
|
<Link href={`${ROUTE.PRODUCT_DETAIL}/${slug}`}>
|
||||||
<a>
|
<a>
|
||||||
<div className={s.productname}>{name} </div>
|
<div className={s.productname}>{productVariantName} </div>
|
||||||
</a>
|
</a>
|
||||||
</Link>
|
</Link>
|
||||||
<div className={s.productWeight}>{weight}</div>
|
<div className={s.productWeight}>{weight}</div>
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
import { Facet } from "@commerce/types/facet";
|
import { Facet } from "@commerce/types/facet";
|
||||||
|
import { ProductCard } from "@commerce/types/product";
|
||||||
import { Collection, FacetValue, SearchResultSortParameter } from './../../framework/vendure/schema.d';
|
import { Collection, FacetValue, SearchResultSortParameter } from './../../framework/vendure/schema.d';
|
||||||
import { CODE_FACET_DISCOUNT, CODE_FACET_FEATURED, CODE_FACET_FEATURED_VARIANT, FACET, PRODUCT_SORT_OPTION_VALUE } from "./constanst.utils";
|
import { CODE_FACET_DISCOUNT, CODE_FACET_FEATURED, CODE_FACET_FEATURED_VARIANT, FACET, PRODUCT_SORT_OPTION_VALUE } from "./constanst.utils";
|
||||||
import { PromiseWithKey, SortOrder } from "./types.utils";
|
import { PromiseWithKey, SortOrder } from "./types.utils";
|
||||||
@@ -139,4 +140,16 @@ export const getCategoryNameFromCollectionId = (colelctions: Collection[], colle
|
|||||||
|
|
||||||
export function getAllPromies(promies: PromiseWithKey[]) {
|
export function getAllPromies(promies: PromiseWithKey[]) {
|
||||||
return promies.map(item => item.promise)
|
return promies.map(item => item.promise)
|
||||||
|
}
|
||||||
|
|
||||||
|
export const FilterOneVatiant = (products:ProductCard[]) => {
|
||||||
|
let idList:string[] = []
|
||||||
|
let filtedProduct: ProductCard[]=[]
|
||||||
|
products.map((product:ProductCard)=>{
|
||||||
|
if(!idList.includes(product.id)){
|
||||||
|
filtedProduct.push(product)
|
||||||
|
idList.push(product.id)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return filtedProduct
|
||||||
}
|
}
|
Reference in New Issue
Block a user