Browse Source

feat(core): Implement `in` string filter for PaginatedList queries

Relates to #543
Michael Bromley 5 years ago
parent
commit
7c7dcf2999

+ 24 - 3
packages/admin-ui/src/lib/core/src/common/generated-types.ts

@@ -1037,7 +1037,7 @@ export type Collection = Node & {
   filters: Array<ConfigurableOperation>;
   translations: Array<CollectionTranslation>;
   productVariants: ProductVariantList;
-  customFields?: Maybe<Scalars['JSON']>;
+  customFields?: Maybe<CollectionCustomFields>;
 };
 
 
@@ -1075,7 +1075,7 @@ export type CreateCollectionInput = {
   parentId?: Maybe<Scalars['ID']>;
   filters: Array<ConfigurableOperationInput>;
   translations: Array<CreateCollectionTranslationInput>;
-  customFields?: Maybe<Scalars['JSON']>;
+  customFields?: Maybe<CreateCollectionCustomFieldsInput>;
 };
 
 export type UpdateCollectionInput = {
@@ -1086,7 +1086,7 @@ export type UpdateCollectionInput = {
   assetIds?: Maybe<Array<Scalars['ID']>>;
   filters?: Maybe<Array<ConfigurableOperationInput>>;
   translations?: Maybe<Array<UpdateCollectionTranslationInput>>;
-  customFields?: Maybe<Scalars['JSON']>;
+  customFields?: Maybe<UpdateCollectionCustomFieldsInput>;
 };
 
 export type CountryTranslationInput = {
@@ -2115,6 +2115,7 @@ export type ErrorResult = {
 export type StringOperators = {
   eq?: Maybe<Scalars['String']>;
   contains?: Maybe<Scalars['String']>;
+  in?: Maybe<Array<Scalars['String']>>;
 };
 
 export type BooleanOperators = {
@@ -3920,6 +3921,8 @@ export type CollectionFilterParameter = {
   slug?: Maybe<StringOperators>;
   position?: Maybe<NumberOperators>;
   description?: Maybe<StringOperators>;
+  foo?: Maybe<DateOperators>;
+  bar?: Maybe<StringOperators>;
 };
 
 export type CollectionSortParameter = {
@@ -3930,6 +3933,8 @@ export type CollectionSortParameter = {
   slug?: Maybe<SortOrder>;
   position?: Maybe<SortOrder>;
   description?: Maybe<SortOrder>;
+  foo?: Maybe<SortOrder>;
+  bar?: Maybe<SortOrder>;
 };
 
 export type CountryFilterParameter = {
@@ -4198,6 +4203,22 @@ export type HistoryEntrySortParameter = {
   updatedAt?: Maybe<SortOrder>;
 };
 
+export type CollectionCustomFields = {
+  __typename?: 'CollectionCustomFields';
+  foo?: Maybe<Scalars['DateTime']>;
+  bar?: Maybe<Scalars['String']>;
+};
+
+export type CreateCollectionCustomFieldsInput = {
+  foo?: Maybe<Scalars['DateTime']>;
+  bar?: Maybe<Scalars['String']>;
+};
+
+export type UpdateCollectionCustomFieldsInput = {
+  foo?: Maybe<Scalars['DateTime']>;
+  bar?: Maybe<Scalars['String']>;
+};
+
 export type CustomFields = {
   __typename?: 'CustomFields';
   Address: Array<CustomFieldConfig>;

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

@@ -872,7 +872,7 @@ export type Collection = Node & {
     filters: Array<ConfigurableOperation>;
     translations: Array<CollectionTranslation>;
     productVariants: ProductVariantList;
-    customFields?: Maybe<Scalars['JSON']>;
+    customFields?: Maybe<CollectionCustomFields>;
 };
 
 export type CollectionProductVariantsArgs = {
@@ -909,7 +909,7 @@ export type CreateCollectionInput = {
     parentId?: Maybe<Scalars['ID']>;
     filters: Array<ConfigurableOperationInput>;
     translations: Array<CreateCollectionTranslationInput>;
-    customFields?: Maybe<Scalars['JSON']>;
+    customFields?: Maybe<CreateCollectionCustomFieldsInput>;
 };
 
 export type UpdateCollectionInput = {
@@ -920,7 +920,7 @@ export type UpdateCollectionInput = {
     assetIds?: Maybe<Array<Scalars['ID']>>;
     filters?: Maybe<Array<ConfigurableOperationInput>>;
     translations?: Maybe<Array<UpdateCollectionTranslationInput>>;
-    customFields?: Maybe<Scalars['JSON']>;
+    customFields?: Maybe<UpdateCollectionCustomFieldsInput>;
 };
 
 export type CountryTranslationInput = {
@@ -1927,6 +1927,7 @@ export type ErrorResult = {
 export type StringOperators = {
     eq?: Maybe<Scalars['String']>;
     contains?: Maybe<Scalars['String']>;
+    in?: Maybe<Array<Scalars['String']>>;
 };
 
 export type BooleanOperators = {
@@ -3660,6 +3661,8 @@ export type CollectionFilterParameter = {
     slug?: Maybe<StringOperators>;
     position?: Maybe<NumberOperators>;
     description?: Maybe<StringOperators>;
+    foo?: Maybe<DateOperators>;
+    bar?: Maybe<StringOperators>;
 };
 
 export type CollectionSortParameter = {
@@ -3670,6 +3673,8 @@ export type CollectionSortParameter = {
     slug?: Maybe<SortOrder>;
     position?: Maybe<SortOrder>;
     description?: Maybe<SortOrder>;
+    foo?: Maybe<SortOrder>;
+    bar?: Maybe<SortOrder>;
 };
 
 export type CountryFilterParameter = {
@@ -3938,6 +3943,21 @@ export type HistoryEntrySortParameter = {
     updatedAt?: Maybe<SortOrder>;
 };
 
+export type CollectionCustomFields = {
+    foo?: Maybe<Scalars['DateTime']>;
+    bar?: Maybe<Scalars['String']>;
+};
+
+export type CreateCollectionCustomFieldsInput = {
+    foo?: Maybe<Scalars['DateTime']>;
+    bar?: Maybe<Scalars['String']>;
+};
+
+export type UpdateCollectionCustomFieldsInput = {
+    foo?: Maybe<Scalars['DateTime']>;
+    bar?: Maybe<Scalars['String']>;
+};
+
 export type CustomFields = {
     Address: Array<CustomFieldConfig>;
     Collection: Array<CustomFieldConfig>;

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

@@ -484,6 +484,7 @@ export type ErrorResult = {
 export type StringOperators = {
     eq?: Maybe<Scalars['String']>;
     contains?: Maybe<Scalars['String']>;
+    in?: Maybe<Array<Scalars['String']>>;
 };
 
 export type BooleanOperators = {
@@ -1772,7 +1773,7 @@ export type Collection = Node & {
     filters: Array<ConfigurableOperation>;
     translations: Array<CollectionTranslation>;
     productVariants: ProductVariantList;
-    customFields?: Maybe<Scalars['JSON']>;
+    customFields?: Maybe<CollectionCustomFields>;
 };
 
 export type CollectionProductVariantsArgs = {
@@ -2634,6 +2635,8 @@ export type CollectionFilterParameter = {
     slug?: Maybe<StringOperators>;
     position?: Maybe<NumberOperators>;
     description?: Maybe<StringOperators>;
+    foo?: Maybe<DateOperators>;
+    bar?: Maybe<StringOperators>;
 };
 
 export type CollectionSortParameter = {
@@ -2644,6 +2647,8 @@ export type CollectionSortParameter = {
     slug?: Maybe<SortOrder>;
     position?: Maybe<SortOrder>;
     description?: Maybe<SortOrder>;
+    foo?: Maybe<SortOrder>;
+    bar?: Maybe<SortOrder>;
 };
 
 export type ProductFilterParameter = {
@@ -2756,6 +2761,12 @@ export type UpdateOrderInput = {
     customFields?: Maybe<Scalars['JSON']>;
 };
 
+export type CollectionCustomFields = {
+    __typename?: 'CollectionCustomFields';
+    foo?: Maybe<Scalars['DateTime']>;
+    bar?: Maybe<Scalars['String']>;
+};
+
 export type CustomFields = {
     __typename?: 'CustomFields';
     Address: Array<CustomFieldConfig>;

+ 24 - 3
packages/common/src/generated-types.ts

@@ -1006,7 +1006,7 @@ export type Collection = Node & {
   filters: Array<ConfigurableOperation>;
   translations: Array<CollectionTranslation>;
   productVariants: ProductVariantList;
-  customFields?: Maybe<Scalars['JSON']>;
+  customFields?: Maybe<CollectionCustomFields>;
 };
 
 
@@ -1044,7 +1044,7 @@ export type CreateCollectionInput = {
   parentId?: Maybe<Scalars['ID']>;
   filters: Array<ConfigurableOperationInput>;
   translations: Array<CreateCollectionTranslationInput>;
-  customFields?: Maybe<Scalars['JSON']>;
+  customFields?: Maybe<CreateCollectionCustomFieldsInput>;
 };
 
 export type UpdateCollectionInput = {
@@ -1055,7 +1055,7 @@ export type UpdateCollectionInput = {
   assetIds?: Maybe<Array<Scalars['ID']>>;
   filters?: Maybe<Array<ConfigurableOperationInput>>;
   translations?: Maybe<Array<UpdateCollectionTranslationInput>>;
-  customFields?: Maybe<Scalars['JSON']>;
+  customFields?: Maybe<UpdateCollectionCustomFieldsInput>;
 };
 
 export type CountryTranslationInput = {
@@ -2083,6 +2083,7 @@ export type ErrorResult = {
 export type StringOperators = {
   eq?: Maybe<Scalars['String']>;
   contains?: Maybe<Scalars['String']>;
+  in?: Maybe<Array<Scalars['String']>>;
 };
 
 export type BooleanOperators = {
@@ -3888,6 +3889,8 @@ export type CollectionFilterParameter = {
   slug?: Maybe<StringOperators>;
   position?: Maybe<NumberOperators>;
   description?: Maybe<StringOperators>;
+  foo?: Maybe<DateOperators>;
+  bar?: Maybe<StringOperators>;
 };
 
 export type CollectionSortParameter = {
@@ -3898,6 +3901,8 @@ export type CollectionSortParameter = {
   slug?: Maybe<SortOrder>;
   position?: Maybe<SortOrder>;
   description?: Maybe<SortOrder>;
+  foo?: Maybe<SortOrder>;
+  bar?: Maybe<SortOrder>;
 };
 
 export type CountryFilterParameter = {
@@ -4166,6 +4171,22 @@ export type HistoryEntrySortParameter = {
   updatedAt?: Maybe<SortOrder>;
 };
 
+export type CollectionCustomFields = {
+  __typename?: 'CollectionCustomFields';
+  foo?: Maybe<Scalars['DateTime']>;
+  bar?: Maybe<Scalars['String']>;
+};
+
+export type CreateCollectionCustomFieldsInput = {
+  foo?: Maybe<Scalars['DateTime']>;
+  bar?: Maybe<Scalars['String']>;
+};
+
+export type UpdateCollectionCustomFieldsInput = {
+  foo?: Maybe<Scalars['DateTime']>;
+  bar?: Maybe<Scalars['String']>;
+};
+
 export type CustomFields = {
   __typename?: 'CustomFields';
   Address: Array<CustomFieldConfig>;

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

@@ -872,7 +872,7 @@ export type Collection = Node & {
     filters: Array<ConfigurableOperation>;
     translations: Array<CollectionTranslation>;
     productVariants: ProductVariantList;
-    customFields?: Maybe<Scalars['JSON']>;
+    customFields?: Maybe<CollectionCustomFields>;
 };
 
 export type CollectionProductVariantsArgs = {
@@ -909,7 +909,7 @@ export type CreateCollectionInput = {
     parentId?: Maybe<Scalars['ID']>;
     filters: Array<ConfigurableOperationInput>;
     translations: Array<CreateCollectionTranslationInput>;
-    customFields?: Maybe<Scalars['JSON']>;
+    customFields?: Maybe<CreateCollectionCustomFieldsInput>;
 };
 
 export type UpdateCollectionInput = {
@@ -920,7 +920,7 @@ export type UpdateCollectionInput = {
     assetIds?: Maybe<Array<Scalars['ID']>>;
     filters?: Maybe<Array<ConfigurableOperationInput>>;
     translations?: Maybe<Array<UpdateCollectionTranslationInput>>;
-    customFields?: Maybe<Scalars['JSON']>;
+    customFields?: Maybe<UpdateCollectionCustomFieldsInput>;
 };
 
 export type CountryTranslationInput = {
@@ -1927,6 +1927,7 @@ export type ErrorResult = {
 export type StringOperators = {
     eq?: Maybe<Scalars['String']>;
     contains?: Maybe<Scalars['String']>;
+    in?: Maybe<Array<Scalars['String']>>;
 };
 
 export type BooleanOperators = {
@@ -3660,6 +3661,8 @@ export type CollectionFilterParameter = {
     slug?: Maybe<StringOperators>;
     position?: Maybe<NumberOperators>;
     description?: Maybe<StringOperators>;
+    foo?: Maybe<DateOperators>;
+    bar?: Maybe<StringOperators>;
 };
 
 export type CollectionSortParameter = {
@@ -3670,6 +3673,8 @@ export type CollectionSortParameter = {
     slug?: Maybe<SortOrder>;
     position?: Maybe<SortOrder>;
     description?: Maybe<SortOrder>;
+    foo?: Maybe<SortOrder>;
+    bar?: Maybe<SortOrder>;
 };
 
 export type CountryFilterParameter = {
@@ -3938,6 +3943,21 @@ export type HistoryEntrySortParameter = {
     updatedAt?: Maybe<SortOrder>;
 };
 
+export type CollectionCustomFields = {
+    foo?: Maybe<Scalars['DateTime']>;
+    bar?: Maybe<Scalars['String']>;
+};
+
+export type CreateCollectionCustomFieldsInput = {
+    foo?: Maybe<Scalars['DateTime']>;
+    bar?: Maybe<Scalars['String']>;
+};
+
+export type UpdateCollectionCustomFieldsInput = {
+    foo?: Maybe<Scalars['DateTime']>;
+    bar?: Maybe<Scalars['String']>;
+};
+
 export type CustomFields = {
     Address: Array<CustomFieldConfig>;
     Collection: Array<CustomFieldConfig>;

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

@@ -476,6 +476,7 @@ export type ErrorResult = {
 export type StringOperators = {
     eq?: Maybe<Scalars['String']>;
     contains?: Maybe<Scalars['String']>;
+    in?: Maybe<Array<Scalars['String']>>;
 };
 
 export type BooleanOperators = {
@@ -1720,7 +1721,7 @@ export type Collection = Node & {
     filters: Array<ConfigurableOperation>;
     translations: Array<CollectionTranslation>;
     productVariants: ProductVariantList;
-    customFields?: Maybe<Scalars['JSON']>;
+    customFields?: Maybe<CollectionCustomFields>;
 };
 
 export type CollectionProductVariantsArgs = {
@@ -2514,6 +2515,8 @@ export type CollectionFilterParameter = {
     slug?: Maybe<StringOperators>;
     position?: Maybe<NumberOperators>;
     description?: Maybe<StringOperators>;
+    foo?: Maybe<DateOperators>;
+    bar?: Maybe<StringOperators>;
 };
 
 export type CollectionSortParameter = {
@@ -2524,6 +2527,8 @@ export type CollectionSortParameter = {
     slug?: Maybe<SortOrder>;
     position?: Maybe<SortOrder>;
     description?: Maybe<SortOrder>;
+    foo?: Maybe<SortOrder>;
+    bar?: Maybe<SortOrder>;
 };
 
 export type ProductFilterParameter = {
@@ -2636,6 +2641,11 @@ export type UpdateOrderInput = {
     customFields?: Maybe<Scalars['JSON']>;
 };
 
+export type CollectionCustomFields = {
+    foo?: Maybe<Scalars['DateTime']>;
+    bar?: Maybe<Scalars['String']>;
+};
+
 export type CustomFields = {
     Address: Array<CustomFieldConfig>;
     Collection: Array<CustomFieldConfig>;

+ 14 - 0
packages/core/e2e/list-query-builder.e2e-spec.ts

@@ -63,6 +63,20 @@ describe('ListQueryBuilder', () => {
 
             expect(getItemLabels(testEntities.items)).toEqual(['C']);
         });
+
+        it('in', async () => {
+            const { testEntities } = await adminClient.query(GET_LIST, {
+                options: {
+                    filter: {
+                        label: {
+                            in: ['A', 'C'],
+                        },
+                    },
+                },
+            });
+
+            expect(getItemLabels(testEntities.items)).toEqual(['A', 'C']);
+        });
     });
 
     describe('boolean filtering', () => {

+ 1 - 0
packages/core/src/api/schema/common/common-types.graphql

@@ -104,6 +104,7 @@ interface ErrorResult {
 input StringOperators {
     eq: String
     contains: String
+    in: [String!]
 }
 
 input BooleanOperators {

+ 1 - 0
packages/core/src/common/types/common-types.ts

@@ -82,6 +82,7 @@ export type FilterParameter<T extends VendureEntity> = {
 export interface StringOperators {
     eq?: string;
     contains?: string;
+    in?: string[];
 }
 
 export interface BooleanOperators {

+ 5 - 0
packages/core/src/service/helpers/list-query-builder/parse-filter-params.ts

@@ -82,6 +82,11 @@ function buildWhereCondition(
                 clause: `${fieldName} ${LIKE} :arg${argIndex}`,
                 parameters: { [`arg${argIndex}`]: `%${operand.trim()}%` },
             };
+        case 'in':
+            return {
+                clause: `${fieldName} IN (:...arg${argIndex})`,
+                parameters: { [`arg${argIndex}`]: operand },
+            };
         case 'lt':
         case 'before':
             return {

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

@@ -872,7 +872,7 @@ export type Collection = Node & {
     filters: Array<ConfigurableOperation>;
     translations: Array<CollectionTranslation>;
     productVariants: ProductVariantList;
-    customFields?: Maybe<Scalars['JSON']>;
+    customFields?: Maybe<CollectionCustomFields>;
 };
 
 export type CollectionProductVariantsArgs = {
@@ -909,7 +909,7 @@ export type CreateCollectionInput = {
     parentId?: Maybe<Scalars['ID']>;
     filters: Array<ConfigurableOperationInput>;
     translations: Array<CreateCollectionTranslationInput>;
-    customFields?: Maybe<Scalars['JSON']>;
+    customFields?: Maybe<CreateCollectionCustomFieldsInput>;
 };
 
 export type UpdateCollectionInput = {
@@ -920,7 +920,7 @@ export type UpdateCollectionInput = {
     assetIds?: Maybe<Array<Scalars['ID']>>;
     filters?: Maybe<Array<ConfigurableOperationInput>>;
     translations?: Maybe<Array<UpdateCollectionTranslationInput>>;
-    customFields?: Maybe<Scalars['JSON']>;
+    customFields?: Maybe<UpdateCollectionCustomFieldsInput>;
 };
 
 export type CountryTranslationInput = {
@@ -1927,6 +1927,7 @@ export type ErrorResult = {
 export type StringOperators = {
     eq?: Maybe<Scalars['String']>;
     contains?: Maybe<Scalars['String']>;
+    in?: Maybe<Array<Scalars['String']>>;
 };
 
 export type BooleanOperators = {
@@ -3660,6 +3661,8 @@ export type CollectionFilterParameter = {
     slug?: Maybe<StringOperators>;
     position?: Maybe<NumberOperators>;
     description?: Maybe<StringOperators>;
+    foo?: Maybe<DateOperators>;
+    bar?: Maybe<StringOperators>;
 };
 
 export type CollectionSortParameter = {
@@ -3670,6 +3673,8 @@ export type CollectionSortParameter = {
     slug?: Maybe<SortOrder>;
     position?: Maybe<SortOrder>;
     description?: Maybe<SortOrder>;
+    foo?: Maybe<SortOrder>;
+    bar?: Maybe<SortOrder>;
 };
 
 export type CountryFilterParameter = {
@@ -3938,6 +3943,21 @@ export type HistoryEntrySortParameter = {
     updatedAt?: Maybe<SortOrder>;
 };
 
+export type CollectionCustomFields = {
+    foo?: Maybe<Scalars['DateTime']>;
+    bar?: Maybe<Scalars['String']>;
+};
+
+export type CreateCollectionCustomFieldsInput = {
+    foo?: Maybe<Scalars['DateTime']>;
+    bar?: Maybe<Scalars['String']>;
+};
+
+export type UpdateCollectionCustomFieldsInput = {
+    foo?: Maybe<Scalars['DateTime']>;
+    bar?: Maybe<Scalars['String']>;
+};
+
 export type CustomFields = {
     Address: Array<CustomFieldConfig>;
     Collection: Array<CustomFieldConfig>;

File diff suppressed because it is too large
+ 0 - 0
schema-admin.json


File diff suppressed because it is too large
+ 0 - 0
schema-shop.json


Some files were not shown because too many files changed in this diff