@firestitch/filter 13.3.1 → 13.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/app/components/saved-filter/index.d.ts +3 -0
  2. package/app/components/saved-filter/saved-filter-edit/index.d.ts +1 -0
  3. package/app/components/{saved-filter-edit → saved-filter/saved-filter-edit}/saved-filter-edit.component.d.ts +2 -2
  4. package/app/components/saved-filter/saved-filter-manage/index.d.ts +1 -0
  5. package/app/components/saved-filter/saved-filter-manage/saved-filter-manage.component.d.ts +16 -0
  6. package/app/components/saved-filter/saved-filters-menu/index.d.ts +1 -0
  7. package/app/components/{saved-filters-menu → saved-filter/saved-filters-menu}/saved-filters-menu.component.d.ts +7 -5
  8. package/app/fs-filter.module.d.ts +37 -35
  9. package/app/helpers/create-filter-item.d.ts +1 -1
  10. package/app/services/items-store.service.d.ts +1 -0
  11. package/esm2020/app/components/saved-filter/index.mjs +4 -0
  12. package/esm2020/app/components/saved-filter/saved-filter-edit/index.mjs +2 -0
  13. package/esm2020/app/components/{saved-filter-edit → saved-filter/saved-filter-edit}/saved-filter-edit.component.mjs +1 -1
  14. package/esm2020/app/components/saved-filter/saved-filter-manage/index.mjs +2 -0
  15. package/esm2020/app/components/saved-filter/saved-filter-manage/saved-filter-manage.component.mjs +40 -0
  16. package/esm2020/app/components/saved-filter/saved-filters-menu/index.mjs +2 -0
  17. package/esm2020/app/components/saved-filter/saved-filters-menu/saved-filters-menu.component.mjs +52 -0
  18. package/esm2020/app/fs-filter.module.mjs +10 -3
  19. package/esm2020/app/helpers/restore-items.mjs +4 -4
  20. package/esm2020/app/services/external-params/saved-filters-controller.service.mjs +6 -6
  21. package/esm2020/app/services/external-params-controller.service.mjs +23 -6
  22. package/esm2020/app/services/items-store.service.mjs +4 -1
  23. package/esm2020/public_api.mjs +2 -2
  24. package/fesm2015/firestitch-filter.mjs +67 -15
  25. package/fesm2015/firestitch-filter.mjs.map +1 -1
  26. package/fesm2020/firestitch-filter.mjs +221 -159
  27. package/fesm2020/firestitch-filter.mjs.map +1 -1
  28. package/package.json +1 -1
  29. package/public_api.d.ts +1 -1
  30. package/esm2020/app/components/saved-filters-menu/saved-filters-menu.component.mjs +0 -44
@@ -29,6 +29,8 @@ import * as i7 from '@firestitch/form';
29
29
  import { FsFormModule } from '@firestitch/form';
30
30
  import * as i3$2 from '@angular/material/input';
31
31
  import { MatInput, MatInputModule } from '@angular/material/input';
32
+ import * as i4$3 from '@angular/cdk/drag-drop';
33
+ import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop';
32
34
  import { ComponentPortal, PortalInjector, PortalModule } from '@angular/cdk/portal';
33
35
  import { MatAutocompleteModule } from '@angular/material/autocomplete';
34
36
  import * as i4$2 from '@angular/material/checkbox';
@@ -1435,6 +1437,9 @@ class FsFilterItemsStore {
1435
1437
  get items() {
1436
1438
  return this._items;
1437
1439
  }
1440
+ get itemNames() {
1441
+ return this._items.map((item) => item.name);
1442
+ }
1438
1443
  get visibleItems() {
1439
1444
  return this._visibleItems$.getValue();
1440
1445
  }
@@ -2073,17 +2078,17 @@ class SavedFiltersController {
2073
2078
  }
2074
2079
  order(savedFilters) {
2075
2080
  return this._config.order(savedFilters)
2076
- .pipe(tap((response) => {
2081
+ .pipe(tap(() => {
2077
2082
  this.savedFilters = [
2078
- ...response,
2083
+ ...savedFilters,
2079
2084
  ];
2080
2085
  }));
2081
2086
  }
2082
2087
  delete(savedFilter) {
2083
2088
  return this._config.delete(savedFilter)
2084
- .pipe(tap((response) => {
2089
+ .pipe(tap(() => {
2085
2090
  this.savedFilters = this.savedFilters
2086
- .filter((f) => f.id !== response.id);
2091
+ .filter((f) => f.id !== savedFilter.id);
2087
2092
  }));
2088
2093
  }
2089
2094
  setActiveFilter(savedFilter) {
@@ -2170,15 +2175,20 @@ class ExternalParamsController {
2170
2175
  }
2171
2176
  get params() {
2172
2177
  var _a;
2173
- const result = {};
2178
+ let result = {};
2174
2179
  if (this._persistanceStore.enabled) {
2175
- Object.assign(result, (_a = this._persistanceStore.value) === null || _a === void 0 ? void 0 : _a.data);
2180
+ result = Object.assign(Object.assign({}, result), (_a = this._persistanceStore.value) === null || _a === void 0 ? void 0 : _a.data);
2176
2181
  }
2177
2182
  if (this._savedFilters.enabled && this._savedFilters.activeFilter) {
2178
- Object.assign(result, this._savedFilters.activeFilterData);
2183
+ const query = Object.keys(result)
2184
+ .filter((key) => !this._itemsStore.itemNames.includes(key))
2185
+ .reduce((acc, key) => {
2186
+ return Object.assign(Object.assign({}, acc), { [key]: result[key] });
2187
+ }, {});
2188
+ result = Object.assign(Object.assign({}, query), this._savedFilters.activeFilterData);
2179
2189
  }
2180
- if (this._queryParams.enabled) {
2181
- Object.assign(result, this._queryParams.fetchedParams);
2190
+ else if (this._queryParams.enabled) {
2191
+ result = Object.assign(Object.assign({}, result), this._queryParams.fetchedParams);
2182
2192
  }
2183
2193
  return result;
2184
2194
  }
@@ -4306,11 +4316,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
4306
4316
  args: [{ selector: 'filter-item-select-backdrop', changeDetection: ChangeDetectionStrategy.OnPush, template: "", styles: [":host{position:absolute;z-index:1002;inset:0}\n"] }]
4307
4317
  }], ctorParameters: function () { return []; } });
4308
4318
 
4319
+ class FsFilterSavedFilterManageComponent {
4320
+ constructor(data, _cdRef) {
4321
+ this.data = data;
4322
+ this._cdRef = _cdRef;
4323
+ this._savedFiltersController = this.data.savedFiltersController;
4324
+ this.savedFilters = [...this._savedFiltersController.savedFilters];
4325
+ }
4326
+ remove(savedFilter) {
4327
+ this._savedFiltersController.delete(savedFilter)
4328
+ .subscribe(() => {
4329
+ this.savedFilters = [...this._savedFiltersController.savedFilters];
4330
+ this._cdRef.markForCheck();
4331
+ });
4332
+ }
4333
+ drop(event) {
4334
+ moveItemInArray(this.savedFilters, event.previousIndex, event.currentIndex);
4335
+ this._savedFiltersController.order(this.savedFilters)
4336
+ .subscribe();
4337
+ }
4338
+ }
4339
+ FsFilterSavedFilterManageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsFilterSavedFilterManageComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
4340
+ FsFilterSavedFilterManageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: FsFilterSavedFilterManageComponent, selector: "ng-component", ngImport: i0, template: "<h1 mat-dialog-title>\n Manage saved filters\n</h1>\n<div mat-dialog-content>\n <div\n cdkDropList \n [cdkDropListData]=\"savedFilters\"\n cdkDropListOrientation=\"vertical\"\n (cdkDropListDropped)=\"drop($event)\"> \n <ng-container \n *ngFor=\"let savedFilter of savedFilters\">\n <div class=\"chip-container\">\n <fs-chip \n cdkDrag\n (removed)=\"remove(savedFilter)\">\n {{savedFilter.name}}\n </fs-chip>\n </div>\n </ng-container>\n </div>\n</div>\n<div mat-dialog-actions>\n <button \n mat-button\n type=\"button\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n</div>\n", styles: [".chip-container{padding:5px 0}.chip-container fs-chip{cursor:move}.cdk-drag-preview{box-sizing:border-box}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], components: [{ type: i2$3.FsChipComponent, selector: "fs-chip", inputs: ["selectable", "removable", "value", "icon", "image", "selected", "size", "backgroundColor", "borderColor", "color", "outlined"], outputs: ["selectedToggled", "removed"] }, { type: i1$3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i1$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i4$3.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4$3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i7.FsButtonDirective, selector: "[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]", inputs: ["name", "dirtySubmit", "form"] }, { type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4341
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsFilterSavedFilterManageComponent, decorators: [{
4342
+ type: Component,
4343
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<h1 mat-dialog-title>\n Manage saved filters\n</h1>\n<div mat-dialog-content>\n <div\n cdkDropList \n [cdkDropListData]=\"savedFilters\"\n cdkDropListOrientation=\"vertical\"\n (cdkDropListDropped)=\"drop($event)\"> \n <ng-container \n *ngFor=\"let savedFilter of savedFilters\">\n <div class=\"chip-container\">\n <fs-chip \n cdkDrag\n (removed)=\"remove(savedFilter)\">\n {{savedFilter.name}}\n </fs-chip>\n </div>\n </ng-container>\n </div>\n</div>\n<div mat-dialog-actions>\n <button \n mat-button\n type=\"button\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n</div>\n", styles: [".chip-container{padding:5px 0}.chip-container fs-chip{cursor:move}.cdk-drag-preview{box-sizing:border-box}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.example-box:last-child{border:none}.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"] }]
4344
+ }], ctorParameters: function () {
4345
+ return [{ type: undefined, decorators: [{
4346
+ type: Inject,
4347
+ args: [MAT_DIALOG_DATA]
4348
+ }] }, { type: i0.ChangeDetectorRef }];
4349
+ } });
4350
+
4309
4351
  class FsSavedFiltersMenuComponent {
4310
- constructor(_itemsStore, _externalParams, _savedFilters) {
4352
+ constructor(_itemsStore, _externalParams, _savedFilters, _dialog) {
4311
4353
  this._itemsStore = _itemsStore;
4312
4354
  this._externalParams = _externalParams;
4313
4355
  this._savedFilters = _savedFilters;
4356
+ this._dialog = _dialog;
4314
4357
  this.clear = new EventEmitter();
4315
4358
  }
4316
4359
  get filters$() {
@@ -4328,15 +4371,19 @@ class FsSavedFiltersMenuComponent {
4328
4371
  this.clear.emit();
4329
4372
  }
4330
4373
  manageFilters() {
4331
- // TODO: Implement
4374
+ this._dialog.open(FsFilterSavedFilterManageComponent, {
4375
+ data: {
4376
+ savedFiltersController: this._savedFilters,
4377
+ },
4378
+ });
4332
4379
  }
4333
4380
  }
4334
- FsSavedFiltersMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsSavedFiltersMenuComponent, deps: [{ token: FsFilterItemsStore }, { token: ExternalParamsController }, { token: SavedFiltersController }], target: i0.ɵɵFactoryTarget.Component });
4335
- FsSavedFiltersMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: FsSavedFiltersMenuComponent, selector: "fs-filter-saved-filters-menu", outputs: { clear: "clear" }, ngImport: i0, template: "<a [fsMenuTriggerFor]=\"menu\" class=\"selector\">{{ (activeFilter$ | async)?.name || 'Not selected' }}</a>\n\n<fs-menu #menu>\n <ng-container *ngIf=\"activeFilter$ | async\">\n <ng-template fs-menu-item (click)=\"removeActiveFilter()\">\n None\n </ng-template>\n </ng-container>\n <ng-container *ngFor=\"let filter of filters$ | async\">\n <ng-template fs-menu-item (click)=\"selectFilter(filter)\">\n {{ filter.name }}\n </ng-template>\n </ng-container>\n <!-- TODO: Implement -->\n <!-- <ng-template \n fs-menu-item \n class=\"saved-filter-last-item\" \n (click)=\"manageFilters()\">\n Manage\n </ng-template> -->\n</fs-menu>\n", styles: [":host ::ng-deep .selector{cursor:pointer}\n"], components: [{ type: i3$3.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass", "buttonType", "buttonColor"], outputs: ["opened", "closed"] }], directives: [{ type: i3$3.FsMenuTriggerDirective, selector: "[fsMenuTriggerFor]", inputs: ["fsMenuTriggerFor"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$3.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i3.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
4381
+ FsSavedFiltersMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsSavedFiltersMenuComponent, deps: [{ token: FsFilterItemsStore }, { token: ExternalParamsController }, { token: SavedFiltersController }, { token: i1$1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
4382
+ FsSavedFiltersMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: FsSavedFiltersMenuComponent, selector: "fs-filter-saved-filters-menu", outputs: { clear: "clear" }, ngImport: i0, template: "<a [fsMenuTriggerFor]=\"menu\" class=\"selector\">{{ (activeFilter$ | async)?.name || 'Not selected' }}</a>\n\n<fs-menu #menu>\n <ng-container *ngIf=\"activeFilter$ | async\">\n <ng-template fs-menu-item (click)=\"removeActiveFilter()\">\n None\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"(filters$ | async).length !==0\">\n <ng-container *ngFor=\"let filter of filters$ | async\">\n <ng-template fs-menu-item (click)=\"selectFilter(filter)\">\n {{ filter.name }}\n </ng-template>\n </ng-container>\n <ng-template fs-menu-divider-item></ng-template>\n </ng-container>\n <ng-template \n fs-menu-item \n class=\"saved-filter-last-item\" \n (click)=\"manageFilters()\">\n Manage\n </ng-template>\n</fs-menu>\n", styles: [":host ::ng-deep .selector{cursor:pointer}\n"], components: [{ type: i3$3.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass", "buttonType", "buttonColor"], outputs: ["opened", "closed"] }], directives: [{ type: i3$3.FsMenuTriggerDirective, selector: "[fsMenuTriggerFor]", inputs: ["fsMenuTriggerFor"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$3.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i3.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
4336
4383
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: FsSavedFiltersMenuComponent, decorators: [{
4337
4384
  type: Component,
4338
- args: [{ selector: 'fs-filter-saved-filters-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a [fsMenuTriggerFor]=\"menu\" class=\"selector\">{{ (activeFilter$ | async)?.name || 'Not selected' }}</a>\n\n<fs-menu #menu>\n <ng-container *ngIf=\"activeFilter$ | async\">\n <ng-template fs-menu-item (click)=\"removeActiveFilter()\">\n None\n </ng-template>\n </ng-container>\n <ng-container *ngFor=\"let filter of filters$ | async\">\n <ng-template fs-menu-item (click)=\"selectFilter(filter)\">\n {{ filter.name }}\n </ng-template>\n </ng-container>\n <!-- TODO: Implement -->\n <!-- <ng-template \n fs-menu-item \n class=\"saved-filter-last-item\" \n (click)=\"manageFilters()\">\n Manage\n </ng-template> -->\n</fs-menu>\n", styles: [":host ::ng-deep .selector{cursor:pointer}\n"] }]
4339
- }], ctorParameters: function () { return [{ type: FsFilterItemsStore }, { type: ExternalParamsController }, { type: SavedFiltersController }]; }, propDecorators: { clear: [{
4385
+ args: [{ selector: 'fs-filter-saved-filters-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a [fsMenuTriggerFor]=\"menu\" class=\"selector\">{{ (activeFilter$ | async)?.name || 'Not selected' }}</a>\n\n<fs-menu #menu>\n <ng-container *ngIf=\"activeFilter$ | async\">\n <ng-template fs-menu-item (click)=\"removeActiveFilter()\">\n None\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"(filters$ | async).length !==0\">\n <ng-container *ngFor=\"let filter of filters$ | async\">\n <ng-template fs-menu-item (click)=\"selectFilter(filter)\">\n {{ filter.name }}\n </ng-template>\n </ng-container>\n <ng-template fs-menu-divider-item></ng-template>\n </ng-container>\n <ng-template \n fs-menu-item \n class=\"saved-filter-last-item\" \n (click)=\"manageFilters()\">\n Manage\n </ng-template>\n</fs-menu>\n", styles: [":host ::ng-deep .selector{cursor:pointer}\n"] }]
4386
+ }], ctorParameters: function () { return [{ type: FsFilterItemsStore }, { type: ExternalParamsController }, { type: SavedFiltersController }, { type: i1$1.MatDialog }]; }, propDecorators: { clear: [{
4340
4387
  type: Output
4341
4388
  }] } });
4342
4389
 
@@ -4383,6 +4430,7 @@ FsFilterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
4383
4430
  FsFilterActionsComponent,
4384
4431
  FsFilterActionButtonComponent,
4385
4432
  FsFilterActionKebabActionsComponent,
4433
+ FsFilterSavedFilterManageComponent,
4386
4434
  FilterStatusBarDirective,
4387
4435
  FocusToItemDirective,
4388
4436
  // Pipes
@@ -4390,6 +4438,7 @@ FsFilterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
4390
4438
  RouterModule,
4391
4439
  FormsModule,
4392
4440
  ReactiveFormsModule,
4441
+ DragDropModule,
4393
4442
  MatIconModule,
4394
4443
  MatInputModule,
4395
4444
  MatSelectModule,
@@ -4425,6 +4474,7 @@ FsFilterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version:
4425
4474
  RouterModule,
4426
4475
  FormsModule,
4427
4476
  ReactiveFormsModule,
4477
+ DragDropModule,
4428
4478
  MatIconModule,
4429
4479
  MatInputModule,
4430
4480
  MatSelectModule,
@@ -4460,6 +4510,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
4460
4510
  RouterModule,
4461
4511
  FormsModule,
4462
4512
  ReactiveFormsModule,
4513
+ DragDropModule,
4463
4514
  MatIconModule,
4464
4515
  MatInputModule,
4465
4516
  MatSelectModule,
@@ -4515,6 +4566,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
4515
4566
  FsFilterActionsComponent,
4516
4567
  FsFilterActionButtonComponent,
4517
4568
  FsFilterActionKebabActionsComponent,
4569
+ FsFilterSavedFilterManageComponent,
4518
4570
  FilterStatusBarDirective,
4519
4571
  FocusToItemDirective,
4520
4572
  // Pipes