|
|
@@ -1,8 +1,13 @@
|
|
|
-import { Brackets, SelectQueryBuilder } from 'typeorm';
|
|
|
+import { SelectQueryBuilder } from 'typeorm';
|
|
|
|
|
|
import { ConfigArg } from '../../../../shared/generated-types';
|
|
|
+import {
|
|
|
+ argsArrayToHash,
|
|
|
+ ConfigArgs,
|
|
|
+ ConfigArgValues,
|
|
|
+ ConfigurableOperationDef,
|
|
|
+} from '../../common/types/configurable-operation';
|
|
|
import { ProductVariant } from '../../entity/product-variant/product-variant.entity';
|
|
|
-import { argsArrayToHash, ConfigArgs, ConfigArgValues } from '../common/config-args';
|
|
|
|
|
|
export type CollectionFilterArgType = 'facetValueIds';
|
|
|
export type CollectionFilterArgs = ConfigArgs<CollectionFilterArgType>;
|
|
|
@@ -19,7 +24,7 @@ export interface CollectionFilterConfig<T extends CollectionFilterArgs> {
|
|
|
apply: ApplyCollectionFilterFn<T>;
|
|
|
}
|
|
|
|
|
|
-export class CollectionFilter<T extends CollectionFilterArgs = {}> {
|
|
|
+export class CollectionFilter<T extends CollectionFilterArgs = {}> implements ConfigurableOperationDef {
|
|
|
readonly code: string;
|
|
|
readonly args: CollectionFilterArgs;
|
|
|
readonly description: string;
|
|
|
@@ -36,27 +41,3 @@ export class CollectionFilter<T extends CollectionFilterArgs = {}> {
|
|
|
return this.applyFn(qb, argsArrayToHash(args));
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-export const facetValueCollectionFilter = new CollectionFilter({
|
|
|
- args: {
|
|
|
- facetValueIds: 'facetValueIds',
|
|
|
- },
|
|
|
- code: 'facet-value-filter',
|
|
|
- description: 'Filter by FacetValues',
|
|
|
- apply: (qb, args) => {
|
|
|
- qb.leftJoin('productVariant.product', 'product')
|
|
|
- .leftJoin('product.facetValues', 'productFacetValues')
|
|
|
- .leftJoin('productVariant.facetValues', 'variantFacetValues')
|
|
|
- .andWhere(
|
|
|
- new Brackets(qb1 => {
|
|
|
- const ids = args.facetValueIds;
|
|
|
- return qb1
|
|
|
- .where(`productFacetValues.id IN (:...ids)`, { ids })
|
|
|
- .orWhere(`variantFacetValues.id IN (:...ids)`, { ids });
|
|
|
- }),
|
|
|
- )
|
|
|
- .groupBy('productVariant.id')
|
|
|
- .having(`COUNT(1) = :count`, { count: args.facetValueIds.length });
|
|
|
- return qb;
|
|
|
- },
|
|
|
-});
|