New: Headless Commerce with Remix! read more

CollectionFilter

CollectionFilter

A CollectionFilter defines a rule which can be used to associate ProductVariants with a Collection. The filtering is done by defining the apply() function, which receives a TypeORM QueryBuilder object to which clauses may be added.

Creating a CollectionFilter is considered an advanced Vendure topic. For more insight into how they work, study the default collection filters

Here’s a simple example of a custom CollectionFilter:

Example

import { CollectionFilter, LanguageCode } from '@vendure/core';

export const skuCollectionFilter = new CollectionFilter({
  args: {
    // The `args` object defines the user-configurable arguments
    // which will get passed to the filter's `apply()` function.
    sku: {
      type: 'string',
      label: [{ languageCode: LanguageCode.en, value: 'SKU' }],
      description: [
        {
          languageCode: LanguageCode.en,
          value: 'Matches any product variants with SKUs containing this value',
        },
      ],
    },
  },
  code: 'variant-sku-filter',
  description: [{ languageCode: LanguageCode.en, value: 'Filter by matching SKU' }],

  // This is the function that defines the logic of the filter.
  apply: (qb, args) => {
    const LIKE = qb.connection.options.type === 'postgres' ? 'ILIKE' : 'LIKE';
    return qb.andWhere(`productVariant.sku ${LIKE} :sku`, { sku: `%${args.sku}%` });
  },
});

Signature

class CollectionFilter<T extends ConfigArgs = ConfigArgs> extends ConfigurableOperationDef<T> {
  constructor(config: CollectionFilterConfig<T>)
  apply(qb: SelectQueryBuilder<ProductVariant>, args: ConfigArg[]) => SelectQueryBuilder<ProductVariant>;
}

Extends

Members

constructor

method
type:
(config: CollectionFilterConfig<T>) => CollectionFilter

apply

method
type:
(qb: SelectQueryBuilder<ProductVariant>, args: ConfigArg[]) => SelectQueryBuilder<ProductVariant>