@firestitch/filter 12.12.13 → 12.13.0

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 (35) hide show
  1. package/app/components/filter/filter.component.d.ts +2 -1
  2. package/app/components/filter-chip/filter-chip.component.d.ts +1 -1
  3. package/app/components/filter-chips/filter-chips.component.d.ts +1 -1
  4. package/app/components/filter-drawer/filter-drawer.component.d.ts +8 -6
  5. package/app/components/filters-item/autocomplete/autocomplete.component.d.ts +1 -1
  6. package/app/components/filters-item/autocompletechips/autocompletechips.component.d.ts +1 -1
  7. package/app/components/filters-item/base-item/base-item.component.d.ts +5 -3
  8. package/app/components/filters-item/filter-item.component.d.ts +11 -9
  9. package/app/fs-filter.module.d.ts +1 -1
  10. package/app/helpers/create-filter-item.d.ts +1 -1
  11. package/app/models/items/autocomplete/base-autocomplete-item.d.ts +3 -3
  12. package/app/models/items/base-item.d.ts +7 -6
  13. package/app/services/filter-overlay.service.d.ts +7 -5
  14. package/app/services/items-store.service.d.ts +3 -1
  15. package/bundles/firestitch-filter.umd.js +138 -137
  16. package/bundles/firestitch-filter.umd.js.map +1 -1
  17. package/esm2015/app/components/filter/filter.component.js +9 -8
  18. package/esm2015/app/components/filter-chip/filter-chip.component.js +4 -4
  19. package/esm2015/app/components/filter-chips/filter-chips.component.js +1 -1
  20. package/esm2015/app/components/filter-drawer/filter-drawer.component.js +15 -14
  21. package/esm2015/app/components/filters-item/autocomplete/autocomplete.component.js +3 -3
  22. package/esm2015/app/components/filters-item/autocompletechips/autocompletechips.component.js +2 -2
  23. package/esm2015/app/components/filters-item/base-item/base-item.component.js +6 -10
  24. package/esm2015/app/components/filters-item/filter-item.component.js +5 -3
  25. package/esm2015/app/fs-filter.module.js +11 -9
  26. package/esm2015/app/models/items/autocomplete/base-autocomplete-item.js +2 -1
  27. package/esm2015/app/models/items/base-item.js +6 -8
  28. package/esm2015/app/models/items/select/multiple-select-item.js +4 -6
  29. package/esm2015/app/models/items/select/simple-select-item.js +8 -10
  30. package/esm2015/app/pipes/remove-isolate-value.pipe.js +5 -7
  31. package/esm2015/app/services/filter-overlay.service.js +19 -15
  32. package/esm2015/app/services/items-store.service.js +13 -13
  33. package/fesm2015/firestitch-filter.js +128 -129
  34. package/fesm2015/firestitch-filter.js.map +1 -1
  35. package/package.json +1 -1
@@ -1,9 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Optional, Component, ChangeDetectionStrategy, Inject, InjectionToken, Input, EventEmitter, Output, Directive, Self, Pipe, ViewChild, HostListener, ViewEncapsulation, ContentChild, HostBinding, NgModule } from '@angular/core';
2
+ import { Injectable, Optional, Component, ChangeDetectionStrategy, Inject, Input, EventEmitter, Output, InjectionToken, Directive, Self, Pipe, ViewChild, HostListener, ViewEncapsulation, ContentChild, HostBinding, NgModule } from '@angular/core';
3
3
  import { BehaviorSubject, Subject, isObservable, forkJoin, of, timer, combineLatest, fromEvent, merge } from 'rxjs';
4
4
  import { tap, finalize, take, takeUntil, debounceTime, filter as filter$1, distinctUntilChanged, switchMap, mapTo, startWith, map, delay, skip } from 'rxjs/operators';
5
5
  import { filter, isArrayEqual, list, isEmpty, getNormalizedPath, remove, FsCommonModule } from '@firestitch/common';
6
- import { isFunction, isObject, clone, isString, toString, pickBy } from 'lodash-es';
6
+ import { isObject, isFunction, clone, isString, toString, pickBy } from 'lodash-es';
7
7
  import * as i3 from '@angular/common';
8
8
  import { CommonModule } from '@angular/common';
9
9
  import * as i1$1 from '@angular/router';
@@ -42,6 +42,8 @@ import * as i5 from '@firestitch/autocomplete-chips';
42
42
  import { FsAutocompleteChipsModule } from '@firestitch/autocomplete-chips';
43
43
  import * as i2$2 from '@firestitch/chip';
44
44
  import { FsChipModule } from '@firestitch/chip';
45
+ import * as i8 from '@firestitch/clear';
46
+ import { FsClearModule } from '@firestitch/clear';
45
47
  import * as i4$1 from '@firestitch/file';
46
48
  import { FsFileModule } from '@firestitch/file';
47
49
  import * as i1$5 from '@firestitch/label';
@@ -53,8 +55,6 @@ import { FsPopoverModule } from '@firestitch/popover';
53
55
  import { FsScrollModule } from '@firestitch/scroll';
54
56
  import * as i6$1 from '@firestitch/skeleton';
55
57
  import { FsSkeletonModule } from '@firestitch/skeleton';
56
- import * as i8 from '@firestitch/clear';
57
- import { FsClearModule } from '@firestitch/clear';
58
58
  import * as i1$6 from '@angular/cdk/overlay';
59
59
  import { OverlayConfig } from '@angular/cdk/overlay';
60
60
  import * as i1$7 from '@angular/cdk/layout';
@@ -69,6 +69,43 @@ function filterFromQueryParam(param) {
69
69
  return [decodeURIComponent(parts[0]), decodeURIComponent(parts[1])];
70
70
  }
71
71
 
72
+ function objectsAreEquals(obj1, obj2) {
73
+ const oldKeys = Object.keys(obj1);
74
+ const currKeys = Object.keys(obj2);
75
+ if (oldKeys.length !== currKeys.length) {
76
+ return false;
77
+ }
78
+ for (const key in obj1) {
79
+ if (obj1.hasOwnProperty(key)) {
80
+ const oldItem = obj1[key];
81
+ const currItem = obj2[key];
82
+ const isArrays = Array.isArray(oldItem) && Array.isArray(currItem);
83
+ const isObjects = isObject(oldItem) && isObject(currItem);
84
+ if (isArrays && !arraysAreEquals(oldItem, currItem)) {
85
+ return false;
86
+ }
87
+ else if (isObjects && !objectsAreEquals(oldItem, currItem)) {
88
+ return false;
89
+ }
90
+ else if (!isArrays && !isObjects && oldItem !== currItem) {
91
+ return false;
92
+ }
93
+ }
94
+ }
95
+ return true;
96
+ }
97
+ function arraysAreEquals(arr1, arr2) {
98
+ if (arr1.length !== arr2.length) {
99
+ return false;
100
+ }
101
+ for (const el of arr1) {
102
+ if (arr2.indexOf(el) === -1) {
103
+ return false;
104
+ }
105
+ }
106
+ return true;
107
+ }
108
+
72
109
  var ItemType;
73
110
  (function (ItemType) {
74
111
  ItemType["Text"] = "text";
@@ -224,13 +261,13 @@ class BaseItem {
224
261
  this._pendingDefaultValue = false;
225
262
  }));
226
263
  }
227
- initValues(persistedValue) {
264
+ initValues(filter, persistedValue) {
228
265
  // this._initialized = false;
229
266
  this.persistedValue = persistedValue;
230
267
  this._initDefaultModel();
231
268
  const isAutocomplete = this.type === ItemType.AutoComplete || this.type === ItemType.AutoCompleteChips;
232
269
  if (this._valuesFn && !isAutocomplete) {
233
- const valuesResult = this._valuesFn();
270
+ const valuesResult = this._valuesFn(null, filter);
234
271
  if (isObservable(valuesResult)) {
235
272
  this._pendingValues = true;
236
273
  }
@@ -246,10 +283,10 @@ class BaseItem {
246
283
  // this._initialized = true;
247
284
  }
248
285
  }
249
- loadAsyncValues(reload = true) {
286
+ loadAsyncValues(filter, reload = true) {
250
287
  if (reload || (!this.loading && this.hasPendingValues)) {
251
288
  this.loading = true;
252
- this._valuesFn()
289
+ this._valuesFn(null, filter)
253
290
  .pipe(take(1), takeUntil(this._destroy$))
254
291
  .subscribe((values) => {
255
292
  this.values = values;
@@ -271,7 +308,6 @@ class BaseItem {
271
308
  this._clear$.next(defaultValue);
272
309
  this._clearValue(defaultValue);
273
310
  }
274
- ;
275
311
  getChipsContent(type) {
276
312
  return '';
277
313
  }
@@ -306,7 +342,6 @@ class BaseItem {
306
342
  this.values = item.values;
307
343
  }
308
344
  }
309
- ;
310
345
  _initDefaultModel() {
311
346
  var _a;
312
347
  const model = (_a = this.persistedValue) !== null && _a !== void 0 ? _a : this.defaultValue;
@@ -352,43 +387,6 @@ class BaseSelectItem extends BaseItem {
352
387
  }
353
388
  }
354
389
 
355
- function objectsAreEquals(obj1, obj2) {
356
- const oldKeys = Object.keys(obj1);
357
- const currKeys = Object.keys(obj2);
358
- if (oldKeys.length !== currKeys.length) {
359
- return false;
360
- }
361
- for (const key in obj1) {
362
- if (obj1.hasOwnProperty(key)) {
363
- const oldItem = obj1[key];
364
- const currItem = obj2[key];
365
- const isArrays = Array.isArray(oldItem) && Array.isArray(currItem);
366
- const isObjects = isObject(oldItem) && isObject(currItem);
367
- if (isArrays && !arraysAreEquals(oldItem, currItem)) {
368
- return false;
369
- }
370
- else if (isObjects && !objectsAreEquals(oldItem, currItem)) {
371
- return false;
372
- }
373
- else if (!isArrays && !isObjects && oldItem !== currItem) {
374
- return false;
375
- }
376
- }
377
- }
378
- return true;
379
- }
380
- function arraysAreEquals(arr1, arr2) {
381
- if (arr1.length !== arr2.length) {
382
- return false;
383
- }
384
- for (const el of arr1) {
385
- if (arr2.indexOf(el) === -1) {
386
- return false;
387
- }
388
- }
389
- return true;
390
- }
391
-
392
390
  class MultipleSelectItem extends BaseSelectItem {
393
391
  constructor(itemConfig, _persistedValues) {
394
392
  super(itemConfig, _persistedValues);
@@ -453,16 +451,14 @@ class MultipleSelectItem extends BaseSelectItem {
453
451
  if (isNaN(val)) {
454
452
  return val;
455
453
  }
456
- else {
457
- return +val;
458
- }
454
+ return +val;
459
455
  });
460
456
  }
461
457
  super._setModel(value);
462
458
  }
463
459
  _validateModel() {
464
460
  const possibleValues = filter(this.model || [], (item) => {
465
- return this.values.find(value => {
461
+ return this.values.find((value) => {
466
462
  return value.value == item;
467
463
  });
468
464
  });
@@ -993,14 +989,12 @@ class SimpleSelectItem extends BaseSelectItem {
993
989
  const itemValue = findValue(this.values, this.model, this.children);
994
990
  return itemValue && itemValue.name;
995
991
  }
996
- else {
997
- const itemValue = this.values.find((val) => val.value === this.model);
998
- if (itemValue) {
999
- return itemValue.name;
1000
- }
1001
- else if (this.isolate) {
1002
- return this.isolate.label;
1003
- }
992
+ const itemValue = this.values.find((val) => val.value === this.model);
993
+ if (itemValue) {
994
+ return itemValue.name;
995
+ }
996
+ else if (this.isolate) {
997
+ return this.isolate.label;
1004
998
  }
1005
999
  }
1006
1000
  get isChipVisible() {
@@ -1026,7 +1020,7 @@ class SimpleSelectItem extends BaseSelectItem {
1026
1020
  super._setModel(value);
1027
1021
  }
1028
1022
  _validateModel() {
1029
- const item = this.values.find(value => {
1023
+ const item = this.values.find((value) => {
1030
1024
  return value.value == this.model;
1031
1025
  });
1032
1026
  const value = item ? item.value : '__all';
@@ -1216,6 +1210,7 @@ class BaseAutocompleteItem extends BaseItem {
1216
1210
  return this._valuesFn;
1217
1211
  }
1218
1212
  _validateModel() {
1213
+ //
1219
1214
  }
1220
1215
  _parseConfig(item) {
1221
1216
  var _a;
@@ -1555,12 +1550,12 @@ class FsFilterItemsStore {
1555
1550
  get visibleItems() {
1556
1551
  return this._visibleItems$.getValue();
1557
1552
  }
1558
- get visibleItems$() {
1559
- return this._visibleItems$.asObservable();
1560
- }
1561
1553
  set visibleItems(items) {
1562
1554
  this._visibleItems$.next(items);
1563
1555
  }
1556
+ get visibleItems$() {
1557
+ return this._visibleItems$.asObservable();
1558
+ }
1564
1559
  get hasKeyword() {
1565
1560
  return this._hasKeyword;
1566
1561
  }
@@ -1623,7 +1618,7 @@ class FsFilterItemsStore {
1623
1618
  loadAsyncValues() {
1624
1619
  this.items
1625
1620
  .filter((item) => item.hasPendingValues)
1626
- .forEach((item) => item.loadAsyncValues());
1621
+ .forEach((item) => item.loadAsyncValues(this.filter));
1627
1622
  }
1628
1623
  loadAsyncDefaults() {
1629
1624
  // default values can be asynchronous, and we must load them if there is no persisted value instead
@@ -1645,10 +1640,10 @@ class FsFilterItemsStore {
1645
1640
  .map((item) => item.loadDefaultValue()),
1646
1641
  ...valuesToBeLoaded
1647
1642
  .map((item) => {
1648
- item.loadAsyncValues();
1643
+ item.loadAsyncValues(this.filter);
1649
1644
  return item.loading$
1650
1645
  .pipe();
1651
- })
1646
+ }),
1652
1647
  ])
1653
1648
  .pipe(finalize(() => {
1654
1649
  this._ready$.next(true);
@@ -1710,7 +1705,7 @@ class FsFilterItemsStore {
1710
1705
  init(p) {
1711
1706
  this.items
1712
1707
  .forEach((item) => {
1713
- item.initValues(p[item.name]);
1708
+ item.initValues(this.filter, p[item.name]);
1714
1709
  });
1715
1710
  this._initSortingItems(p);
1716
1711
  this.loadAsyncDefaults();
@@ -1819,8 +1814,8 @@ class FsFilterItemsStore {
1819
1814
  }
1820
1815
  _initSortingItems(p) {
1821
1816
  if (this.sortByItem && this.sortDirectionItem) {
1822
- this.sortByItem.initValues(p[this.sortByItem.name]);
1823
- this.sortDirectionItem.initValues(p[this.sortDirectionItem.name]);
1817
+ this.sortByItem.initValues(this.filter, p[this.sortByItem.name]);
1818
+ this.sortDirectionItem.initValues(this.filter, p[this.sortDirectionItem.name]);
1824
1819
  }
1825
1820
  }
1826
1821
  _createSortingItems() {
@@ -1830,7 +1825,7 @@ class FsFilterItemsStore {
1830
1825
  name: SORT_BY_FIELD,
1831
1826
  type: ItemType.Select,
1832
1827
  label: 'Sort By',
1833
- values: this._config.sortValues
1828
+ values: this._config.sortValues,
1834
1829
  };
1835
1830
  if (this._config.sort && this._config.sort.value) {
1836
1831
  sortByItem.default = this._config.sort.value;
@@ -1842,8 +1837,8 @@ class FsFilterItemsStore {
1842
1837
  label: 'Sort Direction',
1843
1838
  values: [
1844
1839
  { name: 'Ascending', value: 'asc' },
1845
- { name: 'Descending', value: 'desc' }
1846
- ]
1840
+ { name: 'Descending', value: 'desc' },
1841
+ ],
1847
1842
  };
1848
1843
  if (this._config.sort && this._config.sort.direction) {
1849
1844
  sortDirectionItem.default = this._config.sort.direction;
@@ -2308,8 +2303,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
2308
2303
  type: Injectable
2309
2304
  }], ctorParameters: function () { return [{ type: FsFilterItemsStore }, { type: PersistanceParamsController }, { type: QueryParamsController }, { type: SavedFiltersController }]; } });
2310
2305
 
2311
- const FS_FILTER_CONFIG = new InjectionToken('fs.filter-config');
2312
-
2313
2306
  class ActionMenuItem {
2314
2307
  constructor(config = {}, _parent) {
2315
2308
  this._parent = _parent;
@@ -2660,7 +2653,7 @@ class FsFilterChipComponent {
2660
2653
  this.listenValueChangesForRanges();
2661
2654
  this._updateVisibility();
2662
2655
  if (this.item.hasPendingValues) {
2663
- this.item.loadAsyncValues(false);
2656
+ this.item.loadAsyncValues(null, false);
2664
2657
  this.item.values$
2665
2658
  .pipe(take(2), takeUntil(this._destroy$))
2666
2659
  .subscribe(() => {
@@ -2702,7 +2695,7 @@ class FsFilterChipComponent {
2702
2695
  _initDelayRender() {
2703
2696
  this.chipDelayedRender$ = combineLatest([
2704
2697
  this.item.values$,
2705
- this._chipRenderTimer$.pipe(startWith(false))
2698
+ this._chipRenderTimer$.pipe(startWith(false)),
2706
2699
  ])
2707
2700
  .pipe(map(([values, timerValue]) => {
2708
2701
  return !!values || timerValue;
@@ -2797,7 +2790,6 @@ class BaseItemComponent {
2797
2790
  set item(value) {
2798
2791
  this._item = value;
2799
2792
  }
2800
- ;
2801
2793
  get item() {
2802
2794
  return this._item;
2803
2795
  }
@@ -2811,12 +2803,7 @@ class BaseItemComponent {
2811
2803
  }
2812
2804
  ngOnChanges(changes) {
2813
2805
  if (changes.item) {
2814
- if (Array.isArray(this.item.label)) {
2815
- this.label = this.item.label[0];
2816
- }
2817
- else {
2818
- this.label = this.item.label;
2819
- }
2806
+ this.label = Array.isArray(this.item.label) ? this.item.label[0] : this.item.label;
2820
2807
  }
2821
2808
  }
2822
2809
  ngOnDestroy() {
@@ -2835,7 +2822,7 @@ class BaseItemComponent {
2835
2822
  }
2836
2823
  }
2837
2824
  BaseItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BaseItemComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
2838
- BaseItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: BaseItemComponent, selector: "base-item", inputs: { item: "item", inline: "inline" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2825
+ BaseItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: BaseItemComponent, selector: "base-item", inputs: { item: "item", inline: "inline", filter: "filter" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
2839
2826
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: BaseItemComponent, decorators: [{
2840
2827
  type: Component,
2841
2828
  args: [{
@@ -2847,6 +2834,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
2847
2834
  type: Input
2848
2835
  }], inline: [{
2849
2836
  type: Input
2837
+ }], filter: [{
2838
+ type: Input
2850
2839
  }] } });
2851
2840
 
2852
2841
  class FocusToItemDirective {
@@ -3011,11 +3000,9 @@ class FsFilterIsolateValues {
3011
3000
  if (!isolate) {
3012
3001
  return values;
3013
3002
  }
3014
- else {
3015
- return values.filter((value) => {
3016
- return value.value !== isolate.value;
3017
- });
3018
- }
3003
+ return values.filter((value) => {
3004
+ return value.value !== isolate.value;
3005
+ });
3019
3006
  }
3020
3007
  }
3021
3008
  FsFilterIsolateValues.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsFilterIsolateValues, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
@@ -3023,7 +3010,7 @@ FsFilterIsolateValues.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", vers
3023
3010
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsFilterIsolateValues, decorators: [{
3024
3011
  type: Pipe,
3025
3012
  args: [{
3026
- name: 'fsFilterIsolateValues'
3013
+ name: 'fsFilterIsolateValues',
3027
3014
  }]
3028
3015
  }] });
3029
3016
 
@@ -3253,7 +3240,7 @@ class AutocompleteComponent extends BaseItemComponent {
3253
3240
  return data ? data.name : data;
3254
3241
  };
3255
3242
  this.fetch = (keyword) => {
3256
- return this.item.valuesFn(keyword);
3243
+ return this.item.valuesFn(keyword, this.filter);
3257
3244
  };
3258
3245
  }
3259
3246
  }
@@ -3274,7 +3261,7 @@ class AutocompletechipsComponent extends BaseItemComponent {
3274
3261
  this._kvDiffers = _kvDiffers;
3275
3262
  this._cd = _cd;
3276
3263
  this.fetch = (keyword) => {
3277
- return this.item.valuesFn(keyword);
3264
+ return this.item.valuesFn(keyword, this.filter);
3278
3265
  };
3279
3266
  }
3280
3267
  // SP-T1747
@@ -3415,8 +3402,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
3415
3402
  class FilterItemComponent {
3416
3403
  constructor(_cdRef) {
3417
3404
  this._cdRef = _cdRef;
3418
- this._destroy$ = new Subject();
3419
3405
  this.itemType = ItemType;
3406
+ this._destroy$ = new Subject();
3420
3407
  }
3421
3408
  get textItem() {
3422
3409
  return this.item;
@@ -3467,7 +3454,7 @@ class FilterItemComponent {
3467
3454
  }
3468
3455
  }
3469
3456
  FilterItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterItemComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
3470
- FilterItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FilterItemComponent, selector: "filter-item", inputs: { item: "item" }, ngImport: i0, template: "<div class=\"filter filter-{{ item.type }}\">\n\n <ng-container [ngSwitch]=\"item.type\">\n <filter-item-text class=\"interface\"\n *ngSwitchCase=\"itemType.Text\"\n [item]=\"textItem\">\n </filter-item-text>\n\n <filter-item-select class=\"interface\"\n *ngSwitchCase=\"itemType.Select\"\n [item]=\"baseSelectItem\">\n </filter-item-select>\n\n <filter-item-chips class=\"interface\"\n *ngSwitchCase=\"itemType.Chips\"\n [item]=\"chipsItem\">\n </filter-item-chips>\n\n <filter-item-range class=\"interface interface-range\"\n *ngSwitchCase=\"itemType.Range\"\n [item]=\"rangeItem\">\n </filter-item-range>\n\n <filter-item-autocomplete class=\"interface\"\n *ngSwitchCase=\"itemType.AutoComplete\"\n [item]=\"autocompleteItem\">\n </filter-item-autocomplete>\n\n <filter-item-autocompletechips class=\"interface\"\n *ngSwitchCase=\"itemType.AutoCompleteChips\"\n [item]=\"autocompleteChipsItem\">\n </filter-item-autocompletechips>\n\n <filter-item-date class=\"interface interface-date\"\n *ngSwitchCase=\"itemType.Date\"\n [item]=\"dateItem\">\n </filter-item-date>\n\n <filter-item-date class=\"interface interface-date\"\n *ngSwitchCase=\"itemType.DateTime\"\n [item]=\"dateTimeItem\">\n </filter-item-date>\n\n <filter-item-date-range class=\"interface interface-date\"\n *ngSwitchCase=\"itemType.DateRange\"\n [item]=\"dateRangeItem\">\n </filter-item-date-range>\n\n <filter-item-date-range class=\"interface interface-date\"\n *ngSwitchCase=\"itemType.DateTimeRange\"\n [item]=\"dateTimeRangeItem\">\n </filter-item-date-range>\n\n <filter-item-week class=\"interface\"\n *ngSwitchCase=\"itemType.Week\"\n [item]=\"weekItem\">\n </filter-item-week>\n\n <filter-item-checkbox class=\"interface interface-checkbox\"\n *ngSwitchCase=\"itemType.Checkbox\"\n [item]=\"checkboxItem\">\n </filter-item-checkbox>\n </ng-container>\n\n</div>\n", components: [{ type: TextComponent, selector: "filter-item-text" }, { type: SelectComponent, selector: "filter-item-select" }, { type: ChipsComponent, selector: "filter-item-chips" }, { type: RangeComponent, selector: "filter-item-range" }, { type: AutocompleteComponent, selector: "filter-item-autocomplete" }, { type: AutocompletechipsComponent, selector: "filter-item-autocompletechips" }, { type: DateComponent, selector: "filter-item-date" }, { type: DateRangeComponent, selector: "filter-item-date-range" }, { type: WeekComponent, selector: "filter-item-week" }, { type: CheckboxComponent, selector: "filter-item-checkbox" }], directives: [{ type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3457
+ FilterItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FilterItemComponent, selector: "filter-item", inputs: { item: "item", filter: "filter" }, ngImport: i0, template: "<div class=\"filter filter-{{ item.type }}\">\n\n <ng-container [ngSwitch]=\"item.type\">\n <filter-item-text \n class=\"interface\"\n *ngSwitchCase=\"itemType.Text\"\n [item]=\"textItem\">\n </filter-item-text>\n\n <filter-item-select \n class=\"interface\"\n *ngSwitchCase=\"itemType.Select\"\n [item]=\"baseSelectItem\">\n </filter-item-select>\n\n <filter-item-chips \n class=\"interface\"\n *ngSwitchCase=\"itemType.Chips\"\n [item]=\"chipsItem\">\n </filter-item-chips>\n\n <filter-item-range \n class=\"interface interface-range\"\n *ngSwitchCase=\"itemType.Range\"\n [item]=\"rangeItem\">\n </filter-item-range>\n\n <filter-item-autocomplete \n class=\"interface\"\n *ngSwitchCase=\"itemType.AutoComplete\"\n [item]=\"autocompleteItem\"\n [filter]=\"filter\">\n </filter-item-autocomplete>\n\n <filter-item-autocompletechips \n class=\"interface\"\n *ngSwitchCase=\"itemType.AutoCompleteChips\"\n [item]=\"autocompleteChipsItem\"\n [filter]=\"filter\">\n </filter-item-autocompletechips>\n\n <filter-item-date \n class=\"interface interface-date\"\n *ngSwitchCase=\"itemType.Date\"\n [item]=\"dateItem\">\n </filter-item-date>\n\n <filter-item-date \n class=\"interface interface-date\"\n *ngSwitchCase=\"itemType.DateTime\"\n [item]=\"dateTimeItem\">\n </filter-item-date>\n\n <filter-item-date-range \n class=\"interface interface-date\"\n *ngSwitchCase=\"itemType.DateRange\"\n [item]=\"dateRangeItem\">\n </filter-item-date-range>\n\n <filter-item-date-range \n class=\"interface interface-date\"\n *ngSwitchCase=\"itemType.DateTimeRange\"\n [item]=\"dateTimeRangeItem\">\n </filter-item-date-range>\n\n <filter-item-week \n class=\"interface\"\n *ngSwitchCase=\"itemType.Week\"\n [item]=\"weekItem\">\n </filter-item-week>\n\n <filter-item-checkbox \n class=\"interface interface-checkbox\"\n *ngSwitchCase=\"itemType.Checkbox\"\n [item]=\"checkboxItem\">\n </filter-item-checkbox>\n </ng-container>\n\n</div>\n", components: [{ type: TextComponent, selector: "filter-item-text" }, { type: SelectComponent, selector: "filter-item-select" }, { type: ChipsComponent, selector: "filter-item-chips" }, { type: RangeComponent, selector: "filter-item-range" }, { type: AutocompleteComponent, selector: "filter-item-autocomplete" }, { type: AutocompletechipsComponent, selector: "filter-item-autocompletechips" }, { type: DateComponent, selector: "filter-item-date" }, { type: DateRangeComponent, selector: "filter-item-date-range" }, { type: WeekComponent, selector: "filter-item-week" }, { type: CheckboxComponent, selector: "filter-item-checkbox" }], directives: [{ type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3471
3458
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterItemComponent, decorators: [{
3472
3459
  type: Component,
3473
3460
  args: [{
@@ -3477,20 +3464,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
3477
3464
  }]
3478
3465
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { item: [{
3479
3466
  type: Input
3467
+ }], filter: [{
3468
+ type: Input
3480
3469
  }] } });
3481
3470
 
3482
3471
  class FilterDrawerComponent {
3483
- constructor(externalParams, _cd, _itemsStore, overlayRef, data) {
3472
+ constructor(externalParams, _cd, _itemsStore, _overlayRef, _data) {
3484
3473
  this.externalParams = externalParams;
3485
3474
  this._cd = _cd;
3486
3475
  this._itemsStore = _itemsStore;
3487
- this.overlayRef = overlayRef;
3488
- this.data = data;
3476
+ this._overlayRef = _overlayRef;
3477
+ this._data = _data;
3489
3478
  this.inline = false;
3490
3479
  this.windowDesktop = false;
3491
3480
  this._itemsStore.prepareItems();
3492
- this._clear = data.clear;
3493
- this._done = data.done;
3481
+ this._clear = _data.clear;
3482
+ this._done = _data.done;
3483
+ this.filter = _data.filter;
3494
3484
  this.updateWindowWidth();
3495
3485
  }
3496
3486
  updateWindowWidth() {
@@ -3511,19 +3501,19 @@ class FilterDrawerComponent {
3511
3501
  }
3512
3502
  done() {
3513
3503
  this._done();
3514
- this.overlayRef.detach();
3504
+ this._overlayRef.detach();
3515
3505
  }
3516
3506
  backdropClick() {
3517
3507
  this.done();
3518
3508
  }
3519
3509
  }
3520
3510
  FilterDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterDrawerComponent, deps: [{ token: ExternalParamsController }, { token: i0.ChangeDetectorRef }, { token: FsFilterItemsStore }, { token: FILTER_DRAWER_OVERLAY }, { token: FILTER_DRAWER_DATA }], target: i0.ɵɵFactoryTarget.Component });
3521
- FilterDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FilterDrawerComponent, selector: "ng-component", inputs: { inline: "inline" }, host: { listeners: { "window:resize": "updateWindowWidth()" } }, ngImport: i0, template: "<div class=\"filters\">\n <div class=\"filters-wrap\">\n\n <div class=\"filter-by\">\n <mat-icon>tune</mat-icon>\n <span class=\"text\">Filters</span>\n </div>\n\n <div class=\"overflow-shadow filter-items\">\n <div class=\"overflow-shadow-content\">\n <ng-container *fsSkeleton=\"(externalParams.pending$ | async) !== true\">\n <filter-item \n *ngFor=\"let filterItem of items$ | async\"\n class=\"filter-group\"\n [item]=\"filterItem\">\n </filter-item>\n\n <ng-container *ngIf=\"sortItem && sortItem.values && sortItem.values.length > 0\">\n <filter-item \n class=\"filter-group sort\"\n [item]=\"sortItem\">\n </filter-item>\n <filter-item \n class=\"filter-group sort\"\n [item]=\"sortDirectionItem\">\n </filter-item>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <fs-filter-drawer-actions \n class=\"filter-actions\"\n *ngIf=\"(externalParams.pending$ | async) !== true\"\n (clear)=\"clear()\"\n (done)=\"done()\">\n </fs-filter-drawer-actions>\n </div>\n</div>\n<div class=\"backdrop\" *ngIf=\"!windowDesktop\" (click)=\"backdropClick()\"></div>\n", styles: [":host ::ng-deep mat-form-field{width:100%}.filter-by{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:20px 25px}.filter-by mat-icon{margin-right:8px}.filter-by .text{font-weight:400;font-size:19px}.filter-actions{display:block;box-sizing:border-box;padding:13px}.filter-actions button{margin-right:6px}.filter-actions button:last-child{margin-right:0}.filters{position:fixed;display:block;top:0;right:0;z-index:1002;bottom:0}.filters .filters-wrap{background:#fff;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f;width:85vw;max-width:350px;display:flex;flex-direction:column;height:100%;padding-top:calc(env(safe-area-inset-top))}.filters .filters-wrap .filter-items{overflow-y:auto}.filters .filters-wrap .filter-items .overflow-shadow-content{padding:0 25px;box-sizing:border-box}.filters .filter-group{margin:10px 0 0}.filters .filter-group:first-child{margin:0}.filters .filter label{white-space:nowrap;color:#0000008a}.filters .filter .interface.interface-range input,.filters .filter .interface.interface-range .mat-input-wrapper{text-align:center}.filters .filter .interface.interface-range{text-align:center}.filters .filter .interface.interface-datetime fs-datetime.has-time .md-input{width:100%}.filters .filter .interface fs-datetime-range input{text-align:center}.filters .filter .filter-label{width:1%;white-space:nowrap;vertical-align:middle;padding-right:15px}.filters md-autocomplete-container md-input-container{margin:0}.filters .isolate{margin-top:-12px}.filters .isolate .interface{line-height:20px;padding-bottom:1.25em}.filters .isolate md-checkbox{margin:0 0 0 2px}.backdrop{position:fixed;top:0;bottom:0;left:0;right:0;z-index:900;outline:none}\n"], components: [{ type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: FilterItemComponent, selector: "filter-item", inputs: ["item"] }, { type: FsFilterDrawerActionsComponent, selector: "fs-filter-drawer-actions", outputs: ["clear", "done"] }], directives: [{ type: i6$1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i3.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
3511
+ FilterDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FilterDrawerComponent, selector: "ng-component", inputs: { inline: "inline" }, host: { listeners: { "window:resize": "updateWindowWidth()" } }, ngImport: i0, template: "<div class=\"filters\">\n <div class=\"filters-wrap\">\n\n <div class=\"filter-by\">\n <mat-icon>tune</mat-icon>\n <span class=\"text\">Filters</span>\n </div>\n\n <div class=\"overflow-shadow filter-items\">\n <div class=\"overflow-shadow-content\">\n <ng-container *fsSkeleton=\"(externalParams.pending$ | async) !== true\">\n <filter-item \n *ngFor=\"let filterItem of items$ | async\"\n class=\"filter-group\"\n [item]=\"filterItem\"\n [filter]=\"filter\">\n </filter-item>\n\n <ng-container *ngIf=\"sortItem && sortItem.values && sortItem.values.length > 0\">\n <filter-item \n class=\"filter-group sort\"\n [item]=\"sortItem\"\n [filter]=\"filter\">\n </filter-item>\n <filter-item \n class=\"filter-group sort\"\n [item]=\"sortDirectionItem\"\n [filter]=\"filter\">\n </filter-item>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <fs-filter-drawer-actions \n class=\"filter-actions\"\n *ngIf=\"(externalParams.pending$ | async) !== true\"\n (clear)=\"clear()\"\n (done)=\"done()\">\n </fs-filter-drawer-actions>\n </div>\n</div>\n<div class=\"backdrop\" *ngIf=\"!windowDesktop\" (click)=\"backdropClick()\"></div>\n", styles: [":host ::ng-deep mat-form-field{width:100%}.filter-by{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;padding:20px 25px}.filter-by mat-icon{margin-right:8px}.filter-by .text{font-weight:400;font-size:19px}.filter-actions{display:block;box-sizing:border-box;padding:13px}.filter-actions button{margin-right:6px}.filter-actions button:last-child{margin-right:0}.filters{position:fixed;display:block;top:0;right:0;z-index:1002;bottom:0}.filters .filters-wrap{background:#fff;box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f;width:85vw;max-width:350px;display:flex;flex-direction:column;height:100%;padding-top:calc(env(safe-area-inset-top))}.filters .filters-wrap .filter-items{overflow-y:auto}.filters .filters-wrap .filter-items .overflow-shadow-content{padding:0 25px;box-sizing:border-box}.filters .filter-group{margin:10px 0 0}.filters .filter-group:first-child{margin:0}.filters .filter label{white-space:nowrap;color:#0000008a}.filters .filter .interface.interface-range input,.filters .filter .interface.interface-range .mat-input-wrapper{text-align:center}.filters .filter .interface.interface-range{text-align:center}.filters .filter .interface.interface-datetime fs-datetime.has-time .md-input{width:100%}.filters .filter .interface fs-datetime-range input{text-align:center}.filters .filter .filter-label{width:1%;white-space:nowrap;vertical-align:middle;padding-right:15px}.filters md-autocomplete-container md-input-container{margin:0}.filters .isolate{margin-top:-12px}.filters .isolate .interface{line-height:20px;padding-bottom:1.25em}.filters .isolate md-checkbox{margin:0 0 0 2px}.backdrop{position:fixed;top:0;bottom:0;left:0;right:0;z-index:900;outline:none}\n"], components: [{ type: i2$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: FilterItemComponent, selector: "filter-item", inputs: ["item", "filter"] }, { type: FsFilterDrawerActionsComponent, selector: "fs-filter-drawer-actions", outputs: ["clear", "done"] }], directives: [{ type: i6$1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i3.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
3522
3512
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FilterDrawerComponent, decorators: [{
3523
3513
  type: Component,
3524
3514
  args: [{
3525
3515
  templateUrl: './filter-drawer.component.html',
3526
- styleUrls: ['filter-drawer.component.scss'],
3516
+ styleUrls: ['./filter-drawer.component.scss'],
3527
3517
  // Commented out because filter items are not updating with a delayed observable. Need to figure this out.
3528
3518
  changeDetection: ChangeDetectionStrategy.OnPush,
3529
3519
  }]
@@ -3533,11 +3523,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
3533
3523
  }] }, { type: undefined, decorators: [{
3534
3524
  type: Inject,
3535
3525
  args: [FILTER_DRAWER_DATA]
3536
- }] }]; }, propDecorators: { updateWindowWidth: [{
3526
+ }] }]; }, propDecorators: { inline: [{
3527
+ type: Input
3528
+ }], updateWindowWidth: [{
3537
3529
  type: HostListener,
3538
3530
  args: ['window:resize']
3539
- }], inline: [{
3540
- type: Input
3541
3531
  }] } });
3542
3532
 
3543
3533
  class ActionsController {
@@ -3670,9 +3660,9 @@ const FS_FILTER_META = new InjectionToken('fs.filter.meta', {
3670
3660
  });
3671
3661
 
3672
3662
  class FsFilterOverlayService {
3673
- constructor(_injector, _filterMeta, _overlay, _focusController) {
3674
- this._injector = _injector;
3663
+ constructor(_filterMeta, _injector, _overlay, _focusController) {
3675
3664
  this._filterMeta = _filterMeta;
3665
+ this._injector = _injector;
3676
3666
  this._overlay = _overlay;
3677
3667
  this._focusController = _focusController;
3678
3668
  this.detach$ = new Subject();
@@ -3693,7 +3683,7 @@ class FsFilterOverlayService {
3693
3683
  if (this._overlayRef) {
3694
3684
  this._overlayRef.detach();
3695
3685
  this._overlayRef = null;
3696
- this.removeFilterClass();
3686
+ this._removeFilterClass();
3697
3687
  }
3698
3688
  }
3699
3689
  open() {
@@ -3713,8 +3703,8 @@ class FsFilterOverlayService {
3713
3703
  .subscribe(() => {
3714
3704
  this.attach$.next();
3715
3705
  });
3716
- this.addFilterClass();
3717
- return this.openPortalPreview();
3706
+ this._addFilterClass();
3707
+ return this._openPortalPreview();
3718
3708
  }
3719
3709
  ngOnDestroy() {
3720
3710
  this._destroy$.next();
@@ -3723,12 +3713,16 @@ class FsFilterOverlayService {
3723
3713
  _createOverlay() {
3724
3714
  const overlayConfig = new OverlayConfig({
3725
3715
  hasBackdrop: true,
3726
- backdropClass: 'fs-filter-backdrop'
3716
+ backdropClass: 'fs-filter-backdrop',
3727
3717
  });
3728
3718
  return this._overlay.create(overlayConfig);
3729
3719
  }
3730
- openPortalPreview() {
3731
- const data = { done: this._doneFn, clear: this._clearFn };
3720
+ _openPortalPreview() {
3721
+ const data = {
3722
+ done: this._doneFn,
3723
+ clear: this._clearFn,
3724
+ filter: this.filter,
3725
+ };
3732
3726
  const injector = this._createInjector(this._injector, data, this._overlayRef);
3733
3727
  const containerPortal = new ComponentPortal(FilterDrawerComponent, undefined, injector);
3734
3728
  const containerRef = this._overlayRef.attach(containerPortal);
@@ -3741,13 +3735,13 @@ class FsFilterOverlayService {
3741
3735
  ]);
3742
3736
  return new PortalInjector(parentInjector, injectionTokens);
3743
3737
  }
3744
- removeFilterClass() {
3738
+ _removeFilterClass() {
3745
3739
  this._filterMeta.openedFilters--;
3746
3740
  if (this._filterMeta.openedFilters === 0) {
3747
3741
  window.document.body.classList.remove('fs-filter-open');
3748
3742
  }
3749
3743
  }
3750
- addFilterClass() {
3744
+ _addFilterClass() {
3751
3745
  this._filterMeta.openedFilters++;
3752
3746
  if (this._filterMeta.openedFilters === 1) {
3753
3747
  window.document.body.classList.add('fs-filter-open');
@@ -3763,14 +3757,14 @@ class FsFilterOverlayService {
3763
3757
  });
3764
3758
  }
3765
3759
  }
3766
- FsFilterOverlayService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsFilterOverlayService, deps: [{ token: i0.Injector }, { token: FS_FILTER_META }, { token: i1$6.Overlay }, { token: FocusControllerService }], target: i0.ɵɵFactoryTarget.Injectable });
3760
+ FsFilterOverlayService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsFilterOverlayService, deps: [{ token: FS_FILTER_META }, { token: i0.Injector }, { token: i1$6.Overlay }, { token: FocusControllerService }], target: i0.ɵɵFactoryTarget.Injectable });
3767
3761
  FsFilterOverlayService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsFilterOverlayService });
3768
3762
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsFilterOverlayService, decorators: [{
3769
3763
  type: Injectable
3770
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: undefined, decorators: [{
3764
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
3771
3765
  type: Inject,
3772
3766
  args: [FS_FILTER_META]
3773
- }] }, { type: i1$6.Overlay }, { type: FocusControllerService }]; } });
3767
+ }] }, { type: i0.Injector }, { type: i1$6.Overlay }, { type: FocusControllerService }]; } });
3774
3768
 
3775
3769
  class FilterStatusBarDirective {
3776
3770
  constructor(templateRef) {
@@ -3786,6 +3780,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
3786
3780
  }]
3787
3781
  }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
3788
3782
 
3783
+ const FS_FILTER_CONFIG = new InjectionToken('fs.filter-config');
3784
+
3789
3785
  class FilterComponent {
3790
3786
  constructor(_defaultConfig, _filterOverlay, _zone, _externalParams, _filterItems, _actions) {
3791
3787
  this._defaultConfig = _defaultConfig;
@@ -3810,6 +3806,8 @@ class FilterComponent {
3810
3806
  this._hasFilterChips$ = new BehaviorSubject(false);
3811
3807
  this._keyword$ = new Subject();
3812
3808
  this._destroy$ = new Subject();
3809
+ this._filterItems.filter = this;
3810
+ this._filterOverlay.filter = this;
3813
3811
  this._listenWhenFilterReady();
3814
3812
  this._updateWindowWidth();
3815
3813
  this._filterOverlay.attach$
@@ -4032,9 +4030,7 @@ class FilterComponent {
4032
4030
  return item.model;
4033
4031
  }));
4034
4032
  }
4035
- else {
4036
- return null;
4037
- }
4033
+ return null;
4038
4034
  }
4039
4035
  changeVisibility(state) {
4040
4036
  if (state === this.showFilterMenu) {
@@ -4119,6 +4115,7 @@ class FilterComponent {
4119
4115
  }
4120
4116
  /**
4121
4117
  * Update filter actions config
4118
+ *
4122
4119
  * @param actions
4123
4120
  */
4124
4121
  updateActions(actions) {
@@ -4167,6 +4164,9 @@ class FilterComponent {
4167
4164
  this._externalParams.initItems();
4168
4165
  this._syncSearchInputWithKeyword();
4169
4166
  }
4167
+ keywordChange(keyword) {
4168
+ this._keyword$.next(keyword);
4169
+ }
4170
4170
  _initFilterWithConfig(config) {
4171
4171
  if (this.config) {
4172
4172
  this._filterItems.destroyItems();
@@ -4209,9 +4209,6 @@ class FilterComponent {
4209
4209
  });
4210
4210
  });
4211
4211
  }
4212
- keywordChange(keyword) {
4213
- this._keyword$.next(keyword);
4214
- }
4215
4212
  _listenInputChanges() {
4216
4213
  this._keyword$
4217
4214
  .pipe(debounceTime(200), distinctUntilChanged(), takeUntil(this._destroy$))
@@ -4400,8 +4397,13 @@ class FsFilterModule {
4400
4397
  return {
4401
4398
  ngModule: FsFilterModule,
4402
4399
  providers: [
4403
- { provide: FS_FILTER_CONFIG, useValue: config || {} }
4404
- ]
4400
+ {
4401
+ provide: FS_FILTER_CONFIG,
4402
+ useValue: Object.assign({ button: {
4403
+ label: '',
4404
+ } }, config),
4405
+ },
4406
+ ],
4405
4407
  };
4406
4408
  }
4407
4409
  }
@@ -4569,9 +4571,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
4569
4571
  FilterStatusBarDirective,
4570
4572
  FsSavedFiltersMenuComponent,
4571
4573
  ],
4572
- entryComponents: [
4573
- FilterDrawerComponent
4574
- ]
4575
4574
  }]
4576
4575
  }] });
4577
4576