Răsfoiți Sursa

refactor(core): Base collection previews on parentId

Relates to #1530
Michael Bromley 3 ani în urmă
părinte
comite
de18c1c369

+ 1 - 1
packages/asset-server-plugin/e2e/graphql/generated-e2e-asset-server-plugin-types.ts

@@ -3629,7 +3629,7 @@ export type PermissionDefinition = {
 };
 };
 
 
 export type PreviewCollectionVariantsInput = {
 export type PreviewCollectionVariantsInput = {
-  collectionId: Scalars['ID'];
+  parentId?: Maybe<Scalars['ID']>;
   filters: Array<ConfigurableOperationInput>;
   filters: Array<ConfigurableOperationInput>;
 };
 };
 
 

+ 1 - 1
packages/common/src/generated-types.ts

@@ -3726,7 +3726,7 @@ export type PermissionDefinition = {
 };
 };
 
 
 export type PreviewCollectionVariantsInput = {
 export type PreviewCollectionVariantsInput = {
-  collectionId: Scalars['ID'];
+  parentId?: Maybe<Scalars['ID']>;
   filters: Array<ConfigurableOperationInput>;
   filters: Array<ConfigurableOperationInput>;
 };
 };
 
 

+ 68 - 2
packages/core/e2e/collection.e2e-spec.ts

@@ -1611,7 +1611,7 @@ describe('Collection resolver', () => {
                     PreviewCollectionVariantsQueryVariables
                     PreviewCollectionVariantsQueryVariables
                 >(PREVIEW_COLLECTION_VARIANTS, {
                 >(PREVIEW_COLLECTION_VARIANTS, {
                     input: {
                     input: {
-                        collectionId: electronicsCollection.id,
+                        parentId: electronicsCollection.parent?.id,
                         filters: [
                         filters: [
                             {
                             {
                                 code: facetValueCollectionFilter.code,
                                 code: facetValueCollectionFilter.code,
@@ -1649,7 +1649,7 @@ describe('Collection resolver', () => {
                     PreviewCollectionVariantsQueryVariables
                     PreviewCollectionVariantsQueryVariables
                 >(PREVIEW_COLLECTION_VARIANTS, {
                 >(PREVIEW_COLLECTION_VARIANTS, {
                     input: {
                     input: {
-                        collectionId: electronicsCollection.id,
+                        parentId: electronicsCollection.parent?.id,
                         filters: [
                         filters: [
                             {
                             {
                                 code: facetValueCollectionFilter.code,
                                 code: facetValueCollectionFilter.code,
@@ -1683,6 +1683,72 @@ describe('Collection resolver', () => {
                     { id: 'T_6', name: 'Curvy Monitor 27 inch' },
                     { id: 'T_6', name: 'Curvy Monitor 27 inch' },
                 ]);
                 ]);
             });
             });
+
+            it('takes parent filters into account', async () => {
+                const { previewCollectionVariants } = await adminClient.query<
+                    PreviewCollectionVariantsQuery,
+                    PreviewCollectionVariantsQueryVariables
+                >(PREVIEW_COLLECTION_VARIANTS, {
+                    input: {
+                        parentId: electronicsCollection.id,
+                        filters: [
+                            {
+                                code: variantNameCollectionFilter.code,
+                                arguments: [
+                                    {
+                                        name: 'operator',
+                                        value: 'startsWith',
+                                    },
+                                    {
+                                        name: 'term',
+                                        value: 'h',
+                                    },
+                                ],
+                            },
+                        ],
+                    },
+                });
+                expect(previewCollectionVariants.items.map(i => i.name).sort()).toEqual([
+                    'Hard Drive 1TB',
+                    'Hard Drive 2TB',
+                    'Hard Drive 3TB',
+                    'Hard Drive 4TB',
+                    'Hard Drive 6TB',
+                ]);
+            });
+
+            it('with no parentId, operates at the root level', async () => {
+                const { previewCollectionVariants } = await adminClient.query<
+                    PreviewCollectionVariantsQuery,
+                    PreviewCollectionVariantsQueryVariables
+                >(PREVIEW_COLLECTION_VARIANTS, {
+                    input: {
+                        filters: [
+                            {
+                                code: variantNameCollectionFilter.code,
+                                arguments: [
+                                    {
+                                        name: 'operator',
+                                        value: 'startsWith',
+                                    },
+                                    {
+                                        name: 'term',
+                                        value: 'h',
+                                    },
+                                ],
+                            },
+                        ],
+                    },
+                });
+                expect(previewCollectionVariants.items.map(i => i.name).sort()).toEqual([
+                    'Hard Drive 1TB',
+                    'Hard Drive 2TB',
+                    'Hard Drive 3TB',
+                    'Hard Drive 4TB',
+                    'Hard Drive 6TB',
+                    'Hat',
+                ]);
+            });
         });
         });
     });
     });
 
 

+ 1 - 1
packages/core/e2e/graphql/generated-e2e-admin-types.ts

@@ -3629,7 +3629,7 @@ export type PermissionDefinition = {
 };
 };
 
 
 export type PreviewCollectionVariantsInput = {
 export type PreviewCollectionVariantsInput = {
-  collectionId: Scalars['ID'];
+  parentId?: Maybe<Scalars['ID']>;
   filters: Array<ConfigurableOperationInput>;
   filters: Array<ConfigurableOperationInput>;
 };
 };
 
 

+ 1 - 1
packages/core/src/api/schema/admin-api/collection.api.graphql

@@ -55,7 +55,7 @@ input CreateCollectionInput {
 }
 }
 
 
 input PreviewCollectionVariantsInput {
 input PreviewCollectionVariantsInput {
-    collectionId: ID!
+    parentId: ID
     filters: [ConfigurableOperationInput!]!
     filters: [ConfigurableOperationInput!]!
 }
 }
 
 

+ 11 - 8
packages/core/src/service/services/collection.service.ts

@@ -368,14 +368,17 @@ export class CollectionService implements OnModuleInit {
         options?: ListQueryOptions<ProductVariant>,
         options?: ListQueryOptions<ProductVariant>,
         relations?: RelationPaths<Collection>,
         relations?: RelationPaths<Collection>,
     ): Promise<PaginatedList<ProductVariant>> {
     ): Promise<PaginatedList<ProductVariant>> {
-        const filters = this.getCollectionFiltersFromInput(input);
-        const ancestorFilters = await this.getAncestors(input.collectionId).then(ancestors =>
-            ancestors.reduce(
-                (_filters, c) => [..._filters, ...(c.filters || [])],
-                [] as ConfigurableOperation[],
-            ),
-        );
-        const applicableFilters = filters.concat(ancestorFilters);
+        const applicableFilters = this.getCollectionFiltersFromInput(input);
+        if (input.parentId) {
+            const parentFilters = (await this.findOne(ctx, input.parentId, []))?.filters ?? [];
+            const ancestorFilters = await this.getAncestors(input.parentId).then(ancestors =>
+                ancestors.reduce(
+                    (_filters, c) => [..._filters, ...(c.filters || [])],
+                    [] as ConfigurableOperation[],
+                ),
+            );
+            applicableFilters.push(...parentFilters, ...ancestorFilters);
+        }
         let qb = this.listQueryBuilder.build(ProductVariant, options, {
         let qb = this.listQueryBuilder.build(ProductVariant, options, {
             relations: relations ?? ['taxCategory'],
             relations: relations ?? ['taxCategory'],
             channelId: ctx.channelId,
             channelId: ctx.channelId,

+ 1 - 1
packages/elasticsearch-plugin/e2e/graphql/generated-e2e-elasticsearch-plugin-types.ts

@@ -3629,7 +3629,7 @@ export type PermissionDefinition = {
 };
 };
 
 
 export type PreviewCollectionVariantsInput = {
 export type PreviewCollectionVariantsInput = {
-  collectionId: Scalars['ID'];
+  parentId?: Maybe<Scalars['ID']>;
   filters: Array<ConfigurableOperationInput>;
   filters: Array<ConfigurableOperationInput>;
 };
 };
 
 

+ 1 - 1
packages/payments-plugin/e2e/graphql/generated-admin-types.ts

@@ -3629,7 +3629,7 @@ export type PermissionDefinition = {
 };
 };
 
 
 export type PreviewCollectionVariantsInput = {
 export type PreviewCollectionVariantsInput = {
-  collectionId: Scalars['ID'];
+  parentId?: Maybe<Scalars['ID']>;
   filters: Array<ConfigurableOperationInput>;
   filters: Array<ConfigurableOperationInput>;
 };
 };
 
 

Fișier diff suprimat deoarece este prea mare
+ 0 - 0
schema-admin.json


Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff