Răsfoiți Sursa

feat(core): Add new variantIdCollectionFilter default CollectionFilter

Michael Bromley 3 ani în urmă
părinte
comite
449c584aa5

+ 35 - 4
packages/core/src/config/catalog/default-collection-filters.ts

@@ -17,11 +17,21 @@ export const facetValueCollectionFilter = new CollectionFilter({
             ui: {
                 component: 'facet-value-form-input',
             },
+            label: [{ languageCode: LanguageCode.en, value: 'Facet values' }],
+        },
+        containsAny: {
+            type: 'boolean',
+            label: [{ languageCode: LanguageCode.en, value: 'Contains any' }],
+            description: [
+                {
+                    languageCode: LanguageCode.en,
+                    value: 'If checked, product variants must have at least one of the selected facet values. If not checked, the variant must have all selected values.',
+                },
+            ],
         },
-        containsAny: { type: 'boolean' },
     },
     code: 'facet-value-filter',
-    description: [{ languageCode: LanguageCode.en, value: 'Filter by FacetValues' }],
+    description: [{ languageCode: LanguageCode.en, value: 'Filter by facet values' }],
     apply: (qb, args) => {
         const ids = args.facetValueIds;
 
@@ -89,7 +99,7 @@ export const variantNameCollectionFilter = new CollectionFilter({
         term: { type: 'string' },
     },
     code: 'variant-name-filter',
-    description: [{ languageCode: LanguageCode.en, value: 'Filter by ProductVariant name' }],
+    description: [{ languageCode: LanguageCode.en, value: 'Filter by product variant name' }],
     apply: (qb, args) => {
         let translationAlias = `variant_name_filter_translation`;
         const nanoid = customAlphabet('123456789abcdefghijklmnopqrstuvwxyz', 6);
@@ -126,4 +136,25 @@ export const variantNameCollectionFilter = new CollectionFilter({
     },
 });
 
-export const defaultCollectionFilters = [facetValueCollectionFilter, variantNameCollectionFilter];
+export const variantIdCollectionFilter = new CollectionFilter({
+    args: {
+        variantIds: {
+            type: 'ID',
+            list: true,
+            ui: {
+                component: 'product-selector-form-input',
+            },
+        },
+    },
+    code: 'variant-id-filter',
+    description: [{ languageCode: LanguageCode.en, value: 'Manually select product variants' }],
+    apply: (qb, args) => {
+        return qb.andWhere('productVariant.id IN (:...variantIds)', { variantIds: args.variantIds });
+    },
+});
+
+export const defaultCollectionFilters = [
+    facetValueCollectionFilter,
+    variantNameCollectionFilter,
+    variantIdCollectionFilter,
+];