|
@@ -2,11 +2,12 @@ import { ActivatedRoute, Router } from '@angular/router';
|
|
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
|
|
import { CustomFieldType } from '@vendure/common/lib/shared-types';
|
|
import { CustomFieldType } from '@vendure/common/lib/shared-types';
|
|
|
import { assertNever } from '@vendure/common/lib/shared-utils';
|
|
import { assertNever } from '@vendure/common/lib/shared-utils';
|
|
|
-import { Subject } from 'rxjs';
|
|
|
|
|
import extend from 'just-extend';
|
|
import extend from 'just-extend';
|
|
|
|
|
+import { Subject } from 'rxjs';
|
|
|
import {
|
|
import {
|
|
|
CustomFieldConfig,
|
|
CustomFieldConfig,
|
|
|
DateOperators,
|
|
DateOperators,
|
|
|
|
|
+ IdOperators,
|
|
|
NumberOperators,
|
|
NumberOperators,
|
|
|
StringOperators,
|
|
StringOperators,
|
|
|
} from '../../common/generated-types';
|
|
} from '../../common/generated-types';
|
|
@@ -15,6 +16,7 @@ import {
|
|
|
DataTableFilterBooleanType,
|
|
DataTableFilterBooleanType,
|
|
|
DataTableFilterCustomType,
|
|
DataTableFilterCustomType,
|
|
|
DataTableFilterDateRangeType,
|
|
DataTableFilterDateRangeType,
|
|
|
|
|
+ DataTableFilterIDType,
|
|
|
DataTableFilterNumberType,
|
|
DataTableFilterNumberType,
|
|
|
DataTableFilterOptions,
|
|
DataTableFilterOptions,
|
|
|
DataTableFilterSelectType,
|
|
DataTableFilterSelectType,
|
|
@@ -46,6 +48,10 @@ export class FilterWithValue<Type extends DataTableFilterType = DataTableFilterT
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ isId(): this is FilterWithValue<DataTableFilterIDType> {
|
|
|
|
|
+ return this.filter.type.kind === 'id';
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
isText(): this is FilterWithValue<DataTableFilterTextType> {
|
|
isText(): this is FilterWithValue<DataTableFilterTextType> {
|
|
|
return this.filter.type.kind === 'text';
|
|
return this.filter.type.kind === 'text';
|
|
|
}
|
|
}
|
|
@@ -112,6 +118,20 @@ export class DataTableFilterCollection<FilterInput extends Record<string, any> =
|
|
|
return this;
|
|
return this;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ addIdFilter(): FilterInput extends {
|
|
|
|
|
+ id?: IdOperators | null;
|
|
|
|
|
+ }
|
|
|
|
|
+ ? DataTableFilterCollection<FilterInput>
|
|
|
|
|
+ : never {
|
|
|
|
|
+ this.addFilter({
|
|
|
|
|
+ name: 'id',
|
|
|
|
|
+ type: { kind: 'id' },
|
|
|
|
|
+ label: _('common.id'),
|
|
|
|
|
+ filterField: 'id',
|
|
|
|
|
+ });
|
|
|
|
|
+ return this as any;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
addDateFilters(): FilterInput extends {
|
|
addDateFilters(): FilterInput extends {
|
|
|
createdAt?: DateOperators | null;
|
|
createdAt?: DateOperators | null;
|
|
|
updatedAt?: DateOperators | null;
|
|
updatedAt?: DateOperators | null;
|
|
@@ -219,14 +239,22 @@ export class DataTableFilterCollection<FilterInput extends Record<string, any> =
|
|
|
return this;
|
|
return this;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- serializeValue<Type extends DataTableFilterType>(
|
|
|
|
|
|
|
+ serialize(): string {
|
|
|
|
|
+ return this.#activeFilters
|
|
|
|
|
+ .map(
|
|
|
|
|
+ (filterWithValue, i) =>
|
|
|
|
|
+ `${filterWithValue.filter.name}:${this.serializeValue(filterWithValue)}`,
|
|
|
|
|
+ )
|
|
|
|
|
+ .join(';');
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private serializeValue<Type extends DataTableFilterType>(
|
|
|
filterWithValue: FilterWithValue<Type>,
|
|
filterWithValue: FilterWithValue<Type>,
|
|
|
): string | undefined {
|
|
): string | undefined {
|
|
|
- const valueAsType = <T extends DataTableFilter<any, any>>(
|
|
|
|
|
- _filter: T,
|
|
|
|
|
- _value: DataTableFilterValue<any>,
|
|
|
|
|
- ): T extends DataTableFilter<any, infer R> ? DataTableFilterValue<R> : any => _value;
|
|
|
|
|
-
|
|
|
|
|
|
|
+ if (filterWithValue.isId()) {
|
|
|
|
|
+ const val = filterWithValue.value;
|
|
|
|
|
+ return `${val?.operator},${val?.term}`;
|
|
|
|
|
+ }
|
|
|
if (filterWithValue.isText()) {
|
|
if (filterWithValue.isText()) {
|
|
|
const val = filterWithValue.value;
|
|
const val = filterWithValue.value;
|
|
|
return `${val?.operator},${val?.term}`;
|
|
return `${val?.operator},${val?.term}`;
|
|
@@ -249,8 +277,15 @@ export class DataTableFilterCollection<FilterInput extends Record<string, any> =
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- deserializeValue(filter: DataTableFilter, value: string): DataTableFilterValue<DataTableFilterType> {
|
|
|
|
|
|
|
+ private deserializeValue(
|
|
|
|
|
+ filter: DataTableFilter,
|
|
|
|
|
+ value: string,
|
|
|
|
|
+ ): DataTableFilterValue<DataTableFilterType> {
|
|
|
switch (filter.type.kind) {
|
|
switch (filter.type.kind) {
|
|
|
|
|
+ case 'id': {
|
|
|
|
|
+ const [operator, term] = value.split(',') as [keyof StringOperators, string];
|
|
|
|
|
+ return { operator, term };
|
|
|
|
|
+ }
|
|
|
case 'text': {
|
|
case 'text': {
|
|
|
const [operator, term] = value.split(',') as [keyof StringOperators, string];
|
|
const [operator, term] = value.split(',') as [keyof StringOperators, string];
|
|
|
return { operator, term };
|
|
return { operator, term };
|
|
@@ -275,15 +310,6 @@ export class DataTableFilterCollection<FilterInput extends Record<string, any> =
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private serialize(): string {
|
|
|
|
|
- return this.#activeFilters
|
|
|
|
|
- .map(
|
|
|
|
|
- (filterWithValue, i) =>
|
|
|
|
|
- `${filterWithValue.filter.name}:${this.serializeValue(filterWithValue)}`,
|
|
|
|
|
- )
|
|
|
|
|
- .join(';');
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
private onActivateFilter(filter: DataTableFilter<any, any>, value: DataTableFilterValue<any>) {
|
|
private onActivateFilter(filter: DataTableFilter<any, any>, value: DataTableFilterValue<any>) {
|
|
|
this.#activeFilters.push(this.createFacetWithValue(filter, value));
|
|
this.#activeFilters.push(this.createFacetWithValue(filter, value));
|
|
|
this.#valueChanges$.next(this.#activeFilters);
|
|
this.#valueChanges$.next(this.#activeFilters);
|