@firestitch/filter 9.8.6 → 9.9.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.
- package/app/components/filter/filter.component.d.ts +1 -0
- package/app/interfaces/items/base.interface.d.ts +3 -1
- package/app/models/items/base-item.d.ts +6 -2
- package/app/services/items-store.service.d.ts +5 -0
- package/bundles/firestitch-filter.umd.js +97 -27
- package/bundles/firestitch-filter.umd.js.map +1 -1
- package/bundles/firestitch-filter.umd.min.js +2 -2
- package/bundles/firestitch-filter.umd.min.js.map +1 -1
- package/esm2015/app/components/filter/filter.component.js +14 -21
- package/esm2015/app/interfaces/items/base.interface.js +1 -1
- package/esm2015/app/models/items/base-item.js +30 -8
- package/esm2015/app/services/items-store.service.js +38 -5
- package/esm2015/public_api.js +1 -1
- package/esm5/app/components/filter/filter.component.js +22 -22
- package/esm5/app/interfaces/items/base.interface.js +1 -1
- package/esm5/app/models/items/base-item.js +39 -8
- package/esm5/app/services/items-store.service.js +44 -5
- package/esm5/public_api.js +1 -1
- package/fesm2015/firestitch-filter.js +77 -29
- package/fesm2015/firestitch-filter.js.map +1 -1
- package/fesm5/firestitch-filter.js +99 -29
- package/fesm5/firestitch-filter.js.map +1 -1
- package/firestitch-filter.metadata.json +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +5 -4
|
@@ -45,6 +45,7 @@ export declare class FilterComponent implements OnInit, AfterViewInit, OnDestroy
|
|
|
45
45
|
get filterParamsQuery(): Record<string, unknown>;
|
|
46
46
|
get items(): BaseItem<import("../../interfaces/config.interface").IFilterConfigItem>[];
|
|
47
47
|
get visibleItems(): BaseItem<import("../../interfaces/config.interface").IFilterConfigItem>[];
|
|
48
|
+
get itemsReady$(): Observable<boolean>;
|
|
48
49
|
get hasFilterChips$(): Observable<boolean>;
|
|
49
50
|
get hasVisibleItemOrSorting(): boolean;
|
|
50
51
|
get hasKeyword(): boolean;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
1
2
|
import { ItemType } from '../../enums/item-type.enum';
|
|
2
3
|
import { BaseItem } from '../../models/items/base-item';
|
|
3
4
|
export declare type FilterConfigDateType = ItemType.Date | ItemType.DateTime | ItemType.DateRange | ItemType.DateTimeRange;
|
|
4
5
|
export declare type FilterDateRangeType = ItemType.DateRange | ItemType.DateTimeRange;
|
|
6
|
+
export declare type IFilterDefaultFn = () => Observable<unknown>;
|
|
5
7
|
export interface IFilterConfigBaseItem<T = ItemType, U = string> {
|
|
6
8
|
name: string;
|
|
7
9
|
type: T;
|
|
@@ -11,7 +13,7 @@ export interface IFilterConfigBaseItem<T = ItemType, U = string> {
|
|
|
11
13
|
disable?: boolean;
|
|
12
14
|
values?: any;
|
|
13
15
|
primary?: boolean;
|
|
14
|
-
default?:
|
|
16
|
+
default?: IFilterDefaultFn | any;
|
|
15
17
|
change?: (item: BaseItem<any>) => void;
|
|
16
18
|
clear?: boolean;
|
|
17
19
|
disablePersist?: boolean;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BehaviorSubject, Observable, Subject } from 'rxjs';
|
|
2
|
-
import { IFilterConfigBaseItem } from '../../interfaces/items/base.interface';
|
|
2
|
+
import { IFilterConfigBaseItem, IFilterDefaultFn } from '../../interfaces/items/base.interface';
|
|
3
3
|
import { IFilterItemDefaultRange } from '../../interfaces/items/range.interface';
|
|
4
4
|
export declare abstract class BaseItem<T extends IFilterConfigBaseItem> {
|
|
5
5
|
protected _additionalConfig: unknown;
|
|
@@ -8,6 +8,7 @@ export declare abstract class BaseItem<T extends IFilterConfigBaseItem> {
|
|
|
8
8
|
chipLabel: string | string[];
|
|
9
9
|
hide: boolean;
|
|
10
10
|
defaultValue: any | IFilterItemDefaultRange;
|
|
11
|
+
defaultValueFn: IFilterDefaultFn;
|
|
11
12
|
persistedValue: unknown;
|
|
12
13
|
clearAllowed: boolean;
|
|
13
14
|
persistanceDisabled: boolean;
|
|
@@ -15,8 +16,8 @@ export declare abstract class BaseItem<T extends IFilterConfigBaseItem> {
|
|
|
15
16
|
change: (item: BaseItem<T>) => void;
|
|
16
17
|
protected readonly _type: T['type'];
|
|
17
18
|
protected _model: any;
|
|
18
|
-
protected _initialized: boolean;
|
|
19
19
|
protected _pendingValues: boolean;
|
|
20
|
+
protected _pendingDefaultValue: boolean;
|
|
20
21
|
protected _loading$: BehaviorSubject<boolean>;
|
|
21
22
|
protected _value$: BehaviorSubject<any>;
|
|
22
23
|
protected _valueChange$: Subject<void>;
|
|
@@ -41,6 +42,7 @@ export declare abstract class BaseItem<T extends IFilterConfigBaseItem> {
|
|
|
41
42
|
get destroy$(): Observable<void>;
|
|
42
43
|
get type(): T['type'];
|
|
43
44
|
get hasPendingValues(): boolean;
|
|
45
|
+
get hasPendingDefaultValue(): boolean;
|
|
44
46
|
get model(): any;
|
|
45
47
|
set model(value: any);
|
|
46
48
|
set values(values: any);
|
|
@@ -53,9 +55,11 @@ export declare abstract class BaseItem<T extends IFilterConfigBaseItem> {
|
|
|
53
55
|
get loading$(): Observable<boolean>;
|
|
54
56
|
get loading(): boolean;
|
|
55
57
|
set loading(value: boolean);
|
|
58
|
+
protected get _initialized(): boolean;
|
|
56
59
|
valueChanged(): void;
|
|
57
60
|
get queryObject(): Record<string, unknown>;
|
|
58
61
|
get persistanceObject(): Record<string, unknown>;
|
|
62
|
+
loadDefaultValue(): Observable<any>;
|
|
59
63
|
initValues(persistedValue: unknown): void;
|
|
60
64
|
loadAsyncValues(reload?: boolean): void;
|
|
61
65
|
clear(defaultValue?: unknown): void;
|
|
@@ -15,6 +15,7 @@ export declare class FsFilterItemsStore implements OnDestroy {
|
|
|
15
15
|
sortByItem: BaseItem<IFilterConfigItem>;
|
|
16
16
|
sortDirectionItem: BaseItem<IFilterConfigItem>;
|
|
17
17
|
keywordItem: TextItem;
|
|
18
|
+
private _ready$;
|
|
18
19
|
private _items;
|
|
19
20
|
private _visibleItems$;
|
|
20
21
|
private _itemsByName;
|
|
@@ -22,6 +23,7 @@ export declare class FsFilterItemsStore implements OnDestroy {
|
|
|
22
23
|
private _hasKeyword;
|
|
23
24
|
private _config;
|
|
24
25
|
private _itemsChange$;
|
|
26
|
+
private _destroy$;
|
|
25
27
|
constructor();
|
|
26
28
|
get items(): BaseItem<IFilterConfigItem>[];
|
|
27
29
|
get visibleItems(): BaseItem<IFilterConfigItem>[];
|
|
@@ -29,12 +31,14 @@ export declare class FsFilterItemsStore implements OnDestroy {
|
|
|
29
31
|
set visibleItems(items: BaseItem<IFilterConfigItem>[]);
|
|
30
32
|
get hasKeyword(): boolean;
|
|
31
33
|
get itemsChange$(): Observable<unknown>;
|
|
34
|
+
get ready$(): Observable<boolean>;
|
|
32
35
|
ngOnDestroy(): void;
|
|
33
36
|
setConfig(config: any): void;
|
|
34
37
|
getItemByName(name: string): BaseItem<IFilterConfigBaseItem>;
|
|
35
38
|
initItems(items: IFilterConfigItem[]): void;
|
|
36
39
|
filtersClear(): void;
|
|
37
40
|
loadAsyncValues(): void;
|
|
41
|
+
loadAsyncDefaults(): void;
|
|
38
42
|
getSort(): FilterSort;
|
|
39
43
|
getSortByValue(): any;
|
|
40
44
|
getSortDirectionValue(): any;
|
|
@@ -51,6 +55,7 @@ export declare class FsFilterItemsStore implements OnDestroy {
|
|
|
51
55
|
updateVisibleItems(): void;
|
|
52
56
|
private _createItems;
|
|
53
57
|
private _subscribeToItemsChanges;
|
|
58
|
+
private _lazyInit;
|
|
54
59
|
private _createSortingItems;
|
|
55
60
|
private _setKeywordItem;
|
|
56
61
|
}
|
|
@@ -254,8 +254,9 @@
|
|
|
254
254
|
var BaseItem = /** @class */ (function () {
|
|
255
255
|
function BaseItem(itemConfig, _additionalConfig) {
|
|
256
256
|
this._additionalConfig = _additionalConfig;
|
|
257
|
-
|
|
257
|
+
// protected _initialized = false;
|
|
258
258
|
this._pendingValues = false;
|
|
259
|
+
this._pendingDefaultValue = false;
|
|
259
260
|
this._loading$ = new rxjs.BehaviorSubject(false);
|
|
260
261
|
this._value$ = new rxjs.BehaviorSubject(null);
|
|
261
262
|
this._valueChange$ = new rxjs.Subject();
|
|
@@ -372,6 +373,13 @@
|
|
|
372
373
|
enumerable: true,
|
|
373
374
|
configurable: true
|
|
374
375
|
});
|
|
376
|
+
Object.defineProperty(BaseItem.prototype, "hasPendingDefaultValue", {
|
|
377
|
+
get: function () {
|
|
378
|
+
return this._pendingDefaultValue;
|
|
379
|
+
},
|
|
380
|
+
enumerable: true,
|
|
381
|
+
configurable: true
|
|
382
|
+
});
|
|
375
383
|
Object.defineProperty(BaseItem.prototype, "model", {
|
|
376
384
|
get: function () {
|
|
377
385
|
return this._model;
|
|
@@ -445,6 +453,13 @@
|
|
|
445
453
|
enumerable: true,
|
|
446
454
|
configurable: true
|
|
447
455
|
});
|
|
456
|
+
Object.defineProperty(BaseItem.prototype, "_initialized", {
|
|
457
|
+
get: function () {
|
|
458
|
+
return !this._pendingDefaultValue && !this._pendingValues;
|
|
459
|
+
},
|
|
460
|
+
enumerable: true,
|
|
461
|
+
configurable: true
|
|
462
|
+
});
|
|
448
463
|
BaseItem.prototype.valueChanged = function () {
|
|
449
464
|
this._value$.next(this.value);
|
|
450
465
|
if (this.change) {
|
|
@@ -477,8 +492,18 @@
|
|
|
477
492
|
enumerable: true,
|
|
478
493
|
configurable: true
|
|
479
494
|
});
|
|
495
|
+
BaseItem.prototype.loadDefaultValue = function () {
|
|
496
|
+
var _this = this;
|
|
497
|
+
return this.defaultValueFn()
|
|
498
|
+
.pipe(operators.tap(function (value) {
|
|
499
|
+
_this.defaultValue = value;
|
|
500
|
+
_this._initDefaultModel();
|
|
501
|
+
}), operators.finalize(function () {
|
|
502
|
+
_this._pendingDefaultValue = false;
|
|
503
|
+
}));
|
|
504
|
+
};
|
|
480
505
|
BaseItem.prototype.initValues = function (persistedValue) {
|
|
481
|
-
this._initialized = false;
|
|
506
|
+
// this._initialized = false;
|
|
482
507
|
this.persistedValue = persistedValue;
|
|
483
508
|
this._initDefaultModel();
|
|
484
509
|
var isAutocomplete = this.type === exports.ItemType.AutoComplete || this.type === exports.ItemType.AutoCompleteChips;
|
|
@@ -491,12 +516,12 @@
|
|
|
491
516
|
this.values = valuesResult;
|
|
492
517
|
// Move to some other place
|
|
493
518
|
this._init();
|
|
494
|
-
this._initialized = true;
|
|
519
|
+
// this._initialized = true;
|
|
495
520
|
}
|
|
496
521
|
}
|
|
497
522
|
else {
|
|
498
523
|
this._init();
|
|
499
|
-
this._initialized = true;
|
|
524
|
+
// this._initialized = true;
|
|
500
525
|
}
|
|
501
526
|
};
|
|
502
527
|
BaseItem.prototype.loadAsyncValues = function (reload) {
|
|
@@ -512,7 +537,7 @@
|
|
|
512
537
|
_this.loading = false;
|
|
513
538
|
_this._init();
|
|
514
539
|
_this._validateModel();
|
|
515
|
-
|
|
540
|
+
// this._initialized = true;
|
|
516
541
|
});
|
|
517
542
|
}
|
|
518
543
|
};
|
|
@@ -540,7 +565,13 @@
|
|
|
540
565
|
this.name = item.name;
|
|
541
566
|
this.label = item.label;
|
|
542
567
|
this.chipLabel = item.chipLabel;
|
|
543
|
-
|
|
568
|
+
if (typeof item.default === 'function') {
|
|
569
|
+
this._pendingDefaultValue = true;
|
|
570
|
+
this.defaultValueFn = item.default;
|
|
571
|
+
}
|
|
572
|
+
else {
|
|
573
|
+
this.defaultValue = item.default;
|
|
574
|
+
}
|
|
544
575
|
this.change = item.change;
|
|
545
576
|
this.hide = item.hide;
|
|
546
577
|
this.clearAllowed = (_a = item.clear) !== null && _a !== void 0 ? _a : true;
|
|
@@ -1724,12 +1755,15 @@
|
|
|
1724
1755
|
this.sortByItem = null;
|
|
1725
1756
|
this.sortDirectionItem = null;
|
|
1726
1757
|
this.keywordItem = null;
|
|
1758
|
+
this._ready$ = new rxjs.BehaviorSubject(false);
|
|
1727
1759
|
this._items = [];
|
|
1728
1760
|
this._visibleItems$ = new rxjs.BehaviorSubject([]);
|
|
1729
1761
|
this._itemsByName = new Map();
|
|
1730
1762
|
this._itemsValuesLoaded = false;
|
|
1731
1763
|
this._hasKeyword = false;
|
|
1732
1764
|
this._itemsChange$ = new rxjs.Subject();
|
|
1765
|
+
this._destroy$ = new rxjs.Subject();
|
|
1766
|
+
this._lazyInit();
|
|
1733
1767
|
}
|
|
1734
1768
|
Object.defineProperty(FsFilterItemsStore.prototype, "items", {
|
|
1735
1769
|
get: function () {
|
|
@@ -1769,8 +1803,17 @@
|
|
|
1769
1803
|
enumerable: true,
|
|
1770
1804
|
configurable: true
|
|
1771
1805
|
});
|
|
1806
|
+
Object.defineProperty(FsFilterItemsStore.prototype, "ready$", {
|
|
1807
|
+
get: function () {
|
|
1808
|
+
return this._ready$.asObservable();
|
|
1809
|
+
},
|
|
1810
|
+
enumerable: true,
|
|
1811
|
+
configurable: true
|
|
1812
|
+
});
|
|
1772
1813
|
FsFilterItemsStore.prototype.ngOnDestroy = function () {
|
|
1773
1814
|
this.destroyItems();
|
|
1815
|
+
this._destroy$.next();
|
|
1816
|
+
this._destroy$.complete();
|
|
1774
1817
|
};
|
|
1775
1818
|
FsFilterItemsStore.prototype.setConfig = function (config) {
|
|
1776
1819
|
this._itemsByName.clear();
|
|
@@ -1784,8 +1827,6 @@
|
|
|
1784
1827
|
this._itemsValuesLoaded = false;
|
|
1785
1828
|
if (Array.isArray(items)) {
|
|
1786
1829
|
this._createItems(items);
|
|
1787
|
-
this.updateVisibleItems();
|
|
1788
|
-
this._setKeywordItem();
|
|
1789
1830
|
}
|
|
1790
1831
|
};
|
|
1791
1832
|
FsFilterItemsStore.prototype.filtersClear = function () {
|
|
@@ -1824,6 +1865,25 @@
|
|
|
1824
1865
|
.filter(function (item) { return item.hasPendingValues; })
|
|
1825
1866
|
.forEach(function (item) { return item.loadAsyncValues(); });
|
|
1826
1867
|
};
|
|
1868
|
+
FsFilterItemsStore.prototype.loadAsyncDefaults = function () {
|
|
1869
|
+
var _this = this;
|
|
1870
|
+
var pendingItems = this.items
|
|
1871
|
+
.filter(function (item) {
|
|
1872
|
+
return item.hasPendingDefaultValue
|
|
1873
|
+
&& (item.persistedValue === null || item.persistedValue === undefined);
|
|
1874
|
+
});
|
|
1875
|
+
if (pendingItems.length > 0) {
|
|
1876
|
+
rxjs.forkJoin(pendingItems
|
|
1877
|
+
.map(function (item) { return item.loadDefaultValue(); }))
|
|
1878
|
+
.pipe(operators.finalize(function () {
|
|
1879
|
+
_this._ready$.next(true);
|
|
1880
|
+
}), operators.takeUntil(this._destroy$))
|
|
1881
|
+
.subscribe();
|
|
1882
|
+
}
|
|
1883
|
+
else {
|
|
1884
|
+
this._ready$.next(true);
|
|
1885
|
+
}
|
|
1886
|
+
};
|
|
1827
1887
|
FsFilterItemsStore.prototype.getSort = function () {
|
|
1828
1888
|
var sortBy = this.getSortByValue();
|
|
1829
1889
|
sortBy = sortBy === '__all' ? null : sortBy;
|
|
@@ -1880,6 +1940,7 @@
|
|
|
1880
1940
|
item.initValues(p[item.name]);
|
|
1881
1941
|
});
|
|
1882
1942
|
this._createSortingItems(p);
|
|
1943
|
+
this.loadAsyncDefaults();
|
|
1883
1944
|
this._subscribeToItemsChanges();
|
|
1884
1945
|
};
|
|
1885
1946
|
FsFilterItemsStore.prototype.updateItemsWithValues = function (values) {
|
|
@@ -1968,6 +2029,15 @@
|
|
|
1968
2029
|
});
|
|
1969
2030
|
}
|
|
1970
2031
|
};
|
|
2032
|
+
FsFilterItemsStore.prototype._lazyInit = function () {
|
|
2033
|
+
var _this = this;
|
|
2034
|
+
this.ready$
|
|
2035
|
+
.pipe(operators.filter(function (state) { return state; }), operators.takeUntil(this._destroy$))
|
|
2036
|
+
.subscribe(function () {
|
|
2037
|
+
_this.updateVisibleItems();
|
|
2038
|
+
_this._setKeywordItem();
|
|
2039
|
+
});
|
|
2040
|
+
};
|
|
1971
2041
|
FsFilterItemsStore.prototype._createSortingItems = function (p) {
|
|
1972
2042
|
var _a;
|
|
1973
2043
|
if (((_a = this._config.sortValues) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
@@ -3425,6 +3495,13 @@
|
|
|
3425
3495
|
enumerable: true,
|
|
3426
3496
|
configurable: true
|
|
3427
3497
|
});
|
|
3498
|
+
Object.defineProperty(FilterComponent.prototype, "itemsReady$", {
|
|
3499
|
+
get: function () {
|
|
3500
|
+
return this._filterItems.ready$;
|
|
3501
|
+
},
|
|
3502
|
+
enumerable: true,
|
|
3503
|
+
configurable: true
|
|
3504
|
+
});
|
|
3428
3505
|
Object.defineProperty(FilterComponent.prototype, "hasFilterChips$", {
|
|
3429
3506
|
get: function () {
|
|
3430
3507
|
return this._hasFilterChips$.asObservable();
|
|
@@ -3489,21 +3566,6 @@
|
|
|
3489
3566
|
_this.focus();
|
|
3490
3567
|
}
|
|
3491
3568
|
});
|
|
3492
|
-
if (this.config.init) {
|
|
3493
|
-
if (this._externalParams.pending) {
|
|
3494
|
-
this._externalParams
|
|
3495
|
-
.pending$
|
|
3496
|
-
.pipe(operators.filter(function (pending) {
|
|
3497
|
-
return !pending;
|
|
3498
|
-
}), operators.takeUntil(this._destroy$))
|
|
3499
|
-
.subscribe(function () {
|
|
3500
|
-
_this.init();
|
|
3501
|
-
});
|
|
3502
|
-
}
|
|
3503
|
-
else {
|
|
3504
|
-
this.init();
|
|
3505
|
-
}
|
|
3506
|
-
}
|
|
3507
3569
|
this._listenInternalItemsChange();
|
|
3508
3570
|
this._initOverlay();
|
|
3509
3571
|
};
|
|
@@ -3904,10 +3966,18 @@
|
|
|
3904
3966
|
// We may need some time to recieve external params and after that ready can be emitted
|
|
3905
3967
|
FilterComponent.prototype._listenWhenFilterReady = function () {
|
|
3906
3968
|
var _this = this;
|
|
3907
|
-
|
|
3908
|
-
.pending
|
|
3909
|
-
|
|
3969
|
+
rxjs.combineLatest([
|
|
3970
|
+
this._externalParams.pending$,
|
|
3971
|
+
this.itemsReady$,
|
|
3972
|
+
])
|
|
3973
|
+
.pipe(operators.filter(function (_a) {
|
|
3974
|
+
var _b = __read(_a, 2), pendingParams = _b[0], itemsReady = _b[1];
|
|
3975
|
+
return !pendingParams && itemsReady;
|
|
3976
|
+
}), operators.takeUntil(this._destroy$))
|
|
3910
3977
|
.subscribe(function () {
|
|
3978
|
+
if (_this.config.init) {
|
|
3979
|
+
_this.init();
|
|
3980
|
+
}
|
|
3911
3981
|
_this.ready.emit();
|
|
3912
3982
|
});
|
|
3913
3983
|
};
|
|
@@ -3983,7 +4053,7 @@
|
|
|
3983
4053
|
FilterComponent = __decorate([
|
|
3984
4054
|
core.Component({
|
|
3985
4055
|
selector: 'fs-filter',
|
|
3986
|
-
template: "<ng-container *ngIf=\"hasKeyword; else noKeywordFilter\">\n <div class=\"filter-search-container\">\n <div class=\"filter-input-field\">\n <form autocomplete=\"off\" role=\"presentation\" *ngIf=\"keywordVisible$ | async\">\n <mat-form-field floatLabel=\"never\">\n <span matPrefix>\n <mat-icon matPrefix>search</mat-icon>\n </span>\n\n <input\n matInput\n [formControl]=\"searchText\"\n [placeholder]=\"searchPlaceholder\"\n name=\"filter-input\"\n (click)=\"filterInputEvent($event)\"\n class=\"filter-input\">\n\n <a matSuffix\n *ngIf=\"searchText.value && showFilterInput && config.clear\"\n (click)=\"clearSearchText($event)\"\n href=\"javascript:void(0)\"\n class=\"clear\">\n <mat-icon>clear</mat-icon>\n </a>\n\n <a matSuffix\n (click)=\"reload($event)\"\n class=\"reload\"\n *ngIf=\"config.reload\">\n <mat-icon>refresh</mat-icon>\n </a>\n </mat-form-field>\n </form>\n </div>\n <ng-container *ngTemplateOutlet=\"filterActions\"></ng-container>\n </div>\n <div class=\"status-actions\" *ngIf=\"keywordVisible$ | async\">\n <ng-container *ngTemplateOutlet=\"statusBarContainer\"></ng-container>\n <ng-container *ngTemplateOutlet=\"filterChips\"></ng-container>\n </div>\n</ng-container>\n\n<ng-template #noKeywordFilter>\n <div class=\"filter-searchless-container\">\n <div class=\"status-actions\">\n <ng-container *ngTemplateOutlet=\"statusBarContainer\"></ng-container>\n <ng-container *ngTemplateOutlet=\"filterChips\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"filterActions\"></ng-container>\n </div>\n</ng-template>\n\n\n<ng-template #filterActions>\n <div class=\"filter-actions\">\n <ng-container *ngIf=\"hasVisibleItemOrSorting && filtersBtnVisible$ | async
|
|
4056
|
+
template: "<ng-container *ngIf=\"hasKeyword; else noKeywordFilter\">\n <div class=\"filter-search-container\">\n <div class=\"filter-input-field\">\n <form autocomplete=\"off\" role=\"presentation\" *ngIf=\"keywordVisible$ | async\">\n <mat-form-field floatLabel=\"never\">\n <span matPrefix>\n <mat-icon matPrefix>search</mat-icon>\n </span>\n\n <input\n #searchTextInput\n matInput\n [formControl]=\"searchText\"\n [placeholder]=\"searchPlaceholder\"\n name=\"filter-input\"\n (click)=\"filterInputEvent($event)\"\n class=\"filter-input\">\n\n <a matSuffix\n *ngIf=\"searchText.value && showFilterInput && config.clear\"\n (click)=\"clearSearchText($event)\"\n href=\"javascript:void(0)\"\n class=\"clear\">\n <mat-icon>clear</mat-icon>\n </a>\n\n <a matSuffix\n (click)=\"reload($event)\"\n class=\"reload\"\n *ngIf=\"config.reload\">\n <mat-icon>refresh</mat-icon>\n </a>\n </mat-form-field>\n </form>\n </div>\n <ng-container *ngTemplateOutlet=\"filterActions\"></ng-container>\n </div>\n <div class=\"status-actions\" *ngIf=\"keywordVisible$ | async\">\n <ng-container *ngTemplateOutlet=\"statusBarContainer\"></ng-container>\n <ng-container *ngTemplateOutlet=\"filterChips\"></ng-container>\n </div>\n</ng-container>\n\n<ng-template #noKeywordFilter>\n <div class=\"filter-searchless-container\">\n <div class=\"status-actions\">\n <ng-container *ngTemplateOutlet=\"statusBarContainer\"></ng-container>\n <ng-container *ngTemplateOutlet=\"filterChips\"></ng-container>\n </div>\n <ng-container *ngTemplateOutlet=\"filterActions\"></ng-container>\n </div>\n</ng-template>\n\n\n<ng-template #filterActions>\n <div class=\"filter-actions\">\n <ng-container *ngIf=\"hasVisibleItemOrSorting && filtersBtnVisible$ | async\">\n <button\n mat-button\n class=\"filters-button\"\n [ngClass]=\"{\n 'mat-raised-button': config.button.style == 'raised',\n 'mat-button': config.button.style == 'basic',\n 'mat-icon-button': config.button.style == 'icon'\n }\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n type=\"button\"\n [color]=\"config.button.color\">\n <mat-icon *ngIf=\"config.button.icon\">{{config.button.icon}}</mat-icon>\n {{ config.button.label }}\n </button>\n </ng-container>\n\n <fs-filter-actions\n *ngIf=\"actionsVisible$ | async\"\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n</ng-template>\n\n<ng-template #filterChips>\n <fs-filter-chips\n *ngIf=\"config.chips && hasFilterChips$ | async\"\n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n</ng-template>\n\n<ng-template #statusBarContainer>\n <div class=\"status-bar\" *ngIf=\"statusBar\">\n <small><ng-container *ngTemplateOutlet=\"statusBar\"></ng-container></small>\n </div>\n</ng-template>\n",
|
|
3987
4057
|
encapsulation: core.ViewEncapsulation.None,
|
|
3988
4058
|
providers: [
|
|
3989
4059
|
FsFilterOverlayService,
|