@firestitch/filter 18.1.0 → 18.2.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 +9 -13
- package/app/components/filter-chip/filter-chip.component.d.ts +7 -7
- package/app/components/filter-drawer/filter-drawer.component.d.ts +7 -7
- package/app/components/filter-drawer-actions/filter-drawer-actions.component.d.ts +2 -2
- package/app/components/saved-filter/index.d.ts +0 -1
- package/app/components/saved-filter/saved-filter-autocomplete-chips/saved-filter-autocomplete-chips.component.d.ts +6 -5
- package/app/components/saved-filter/saved-filter-manage/components/saved-filter-chips/index.d.ts +1 -0
- package/app/components/saved-filter/saved-filter-manage/components/saved-filter-chips/saved-filter-chips.component.d.ts +13 -0
- package/app/components/saved-filter/saved-filter-manage/saved-filter-manage.component.d.ts +6 -2
- package/app/fs-filter.module.d.ts +7 -8
- package/app/helpers/build-query-params.d.ts +2 -2
- package/app/helpers/create-filter-item.d.ts +1 -1
- package/app/interfaces/external-params.interface.d.ts +1 -1
- package/app/interfaces/saved-filters.interface.d.ts +2 -2
- package/app/models/items/autocomplete-chips-item.d.ts +1 -1
- package/app/models/items/base-item.d.ts +1 -1
- package/app/models/items/chips-item.d.ts +1 -1
- package/app/models/items/date/base-date-item.d.ts +1 -1
- package/app/models/items/date-range/base-date-range-item.d.ts +1 -1
- package/app/models/items/select/multiple-select-item.d.ts +3 -3
- package/app/models/items/select/simple-select-item.d.ts +2 -2
- package/app/models/items/week-item.d.ts +1 -1
- package/app/services/index.d.ts +5 -5
- package/app/services/{items-store.service.d.ts → item-store.service.d.ts} +9 -9
- package/app/services/{external-params-controller.service.d.ts → param-controller.service.d.ts} +9 -10
- package/app/services/{query-persistance-controller.service.d.ts → persistance-controller.service.d.ts} +3 -3
- package/app/services/query-param-controller.service.d.ts +21 -0
- package/app/services/{saved-filters-controller.service.d.ts → saved-filter-controller.service.d.ts} +6 -10
- package/esm2022/app/components/filter/filter.component.mjs +68 -77
- package/esm2022/app/components/filter-chip/filter-chip.component.mjs +22 -16
- package/esm2022/app/components/filter-chips/filter-chips.component.mjs +3 -3
- package/esm2022/app/components/filter-drawer/filter-drawer.component.mjs +18 -18
- package/esm2022/app/components/filter-drawer-actions/filter-drawer-actions.component.mjs +1 -1
- package/esm2022/app/components/filters-item/autocompletechips/autocompletechips.component.mjs +5 -5
- package/esm2022/app/components/saved-filter/index.mjs +1 -2
- package/esm2022/app/components/saved-filter/saved-filter-autocomplete-chips/saved-filter-autocomplete-chips.component.mjs +17 -16
- package/esm2022/app/components/saved-filter/saved-filter-manage/components/saved-filter-chips/index.mjs +2 -0
- package/esm2022/app/components/saved-filter/saved-filter-manage/components/saved-filter-chips/saved-filter-chips.component.mjs +28 -0
- package/esm2022/app/components/saved-filter/saved-filter-manage/saved-filter-manage.component.mjs +24 -17
- package/esm2022/app/fs-filter.module.mjs +1 -5
- package/esm2022/app/helpers/build-query-params.mjs +1 -1
- package/esm2022/app/interfaces/external-params.interface.mjs +1 -1
- package/esm2022/app/interfaces/saved-filters.interface.mjs +1 -1
- package/esm2022/app/models/items/autocomplete-chips-item.mjs +4 -4
- package/esm2022/app/models/items/base-item.mjs +4 -4
- package/esm2022/app/models/items/chips-item.mjs +5 -5
- package/esm2022/app/models/items/date/base-date-item.mjs +9 -9
- package/esm2022/app/models/items/date-range/base-date-range-item.mjs +12 -12
- package/esm2022/app/models/items/select/multiple-select-item.mjs +17 -17
- package/esm2022/app/models/items/select/simple-select-item.mjs +10 -10
- package/esm2022/app/models/items/week-item.mjs +11 -9
- package/esm2022/app/services/index.mjs +6 -6
- package/esm2022/app/services/item-store.service.mjs +356 -0
- package/esm2022/app/services/param-controller.service.mjs +149 -0
- package/esm2022/app/services/persistance-controller.service.mjs +65 -0
- package/esm2022/app/services/query-param-controller.service.mjs +65 -0
- package/esm2022/app/services/saved-filter-controller.service.mjs +169 -0
- package/esm2022/public_api.mjs +2 -3
- package/fesm2022/firestitch-filter.mjs +1714 -1787
- package/fesm2022/firestitch-filter.mjs.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +1 -2
- package/app/components/saved-filter/saved-filter-edit/index.d.ts +0 -1
- package/app/components/saved-filter/saved-filter-edit/saved-filter-edit.component.d.ts +0 -18
- package/app/services/query-params-controller.service.d.ts +0 -21
- package/esm2022/app/components/saved-filter/saved-filter-edit/index.mjs +0 -2
- package/esm2022/app/components/saved-filter/saved-filter-edit/saved-filter-edit.component.mjs +0 -72
- package/esm2022/app/services/external-params-controller.service.mjs +0 -154
- package/esm2022/app/services/items-store.service.mjs +0 -356
- package/esm2022/app/services/query-params-controller.service.mjs +0 -65
- package/esm2022/app/services/query-persistance-controller.service.mjs +0 -65
- package/esm2022/app/services/saved-filters-controller.service.mjs +0 -210
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, forkJoin, Subject } from 'rxjs';
|
|
3
|
+
import { debounceTime, filter, finalize, takeUntil } from 'rxjs/operators';
|
|
4
|
+
import { pickBy } from 'lodash-es';
|
|
5
|
+
import { ItemType } from '../enums/item-type.enum';
|
|
6
|
+
import { buildQueryParams } from '../helpers/build-query-params';
|
|
7
|
+
import { createFilterItem } from '../helpers/create-filter-item';
|
|
8
|
+
import { SortByField, SortDirectionField } from '../models/filter-config';
|
|
9
|
+
import { BaseDateRangeItem } from '../models/items/date-range/base-date-range-item';
|
|
10
|
+
import { RangeItem } from '../models/items/range-item';
|
|
11
|
+
import { MultipleSelectItem } from '../models/items/select/multiple-select-item';
|
|
12
|
+
import { SimpleSelectItem } from '../models/items/select/simple-select-item';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
export class ItemStore {
|
|
15
|
+
sortByItem = null;
|
|
16
|
+
sortDirectionItem = null;
|
|
17
|
+
keywordItem = null;
|
|
18
|
+
filter;
|
|
19
|
+
_ready$ = new BehaviorSubject(false);
|
|
20
|
+
_visibleItems$ = new BehaviorSubject([]);
|
|
21
|
+
_items = new Map();
|
|
22
|
+
_itemsValuesLoaded = false;
|
|
23
|
+
_hasKeyword = false;
|
|
24
|
+
_config;
|
|
25
|
+
_itemsChange$ = new Subject();
|
|
26
|
+
_destroy$ = new Subject();
|
|
27
|
+
constructor() {
|
|
28
|
+
this._lazyInit();
|
|
29
|
+
}
|
|
30
|
+
get items() {
|
|
31
|
+
return Array.from(this._items.values());
|
|
32
|
+
}
|
|
33
|
+
get itemNames() {
|
|
34
|
+
return this.items.map((item) => item.name);
|
|
35
|
+
}
|
|
36
|
+
get visibleItems() {
|
|
37
|
+
return this._visibleItems$.getValue();
|
|
38
|
+
}
|
|
39
|
+
set visibleItems(items) {
|
|
40
|
+
this._visibleItems$.next(items);
|
|
41
|
+
}
|
|
42
|
+
get visibleItems$() {
|
|
43
|
+
return this._visibleItems$.asObservable();
|
|
44
|
+
}
|
|
45
|
+
get hasKeyword() {
|
|
46
|
+
return this._hasKeyword;
|
|
47
|
+
}
|
|
48
|
+
get itemsChange$() {
|
|
49
|
+
return this._itemsChange$.pipe(debounceTime(30));
|
|
50
|
+
}
|
|
51
|
+
get ready$() {
|
|
52
|
+
return this._ready$.asObservable();
|
|
53
|
+
}
|
|
54
|
+
ngOnDestroy() {
|
|
55
|
+
this.destroyItems();
|
|
56
|
+
this._destroy$.next(null);
|
|
57
|
+
this._destroy$.complete();
|
|
58
|
+
}
|
|
59
|
+
setConfig(config) {
|
|
60
|
+
this._config = config;
|
|
61
|
+
this.initItems(config.items);
|
|
62
|
+
}
|
|
63
|
+
getItemByName(name) {
|
|
64
|
+
return this._items.get(name);
|
|
65
|
+
}
|
|
66
|
+
initItems(items) {
|
|
67
|
+
this._itemsValuesLoaded = false;
|
|
68
|
+
if (Array.isArray(items)) {
|
|
69
|
+
this._createItems(items);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
queryParams() {
|
|
73
|
+
return buildQueryParams(this.valuesAsQuery(), this.items);
|
|
74
|
+
}
|
|
75
|
+
filtersClear() {
|
|
76
|
+
this.items.forEach((item) => {
|
|
77
|
+
if (item instanceof RangeItem) {
|
|
78
|
+
item.clearRange(null, item.defaultValue);
|
|
79
|
+
}
|
|
80
|
+
else if (item instanceof BaseDateRangeItem) {
|
|
81
|
+
item.clearDateRange(null, item.defaultValue);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
item.clear(item.defaultValue);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
if (this.sortByItem) {
|
|
88
|
+
if (this._config.sort) {
|
|
89
|
+
this.sortByItem.model = this._config.sort.value;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
this.sortByItem.clear(this.sortByItem.defaultValue);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (this.sortDirectionItem) {
|
|
96
|
+
if (this._config.sort) {
|
|
97
|
+
this.sortDirectionItem.model = this._config.sort.direction;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
this.sortDirectionItem.clear(this.sortDirectionItem.defaultValue);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
this.keywordItem?.clear();
|
|
104
|
+
}
|
|
105
|
+
loadAsyncValues() {
|
|
106
|
+
this.items
|
|
107
|
+
.filter((item) => item.hasPendingValues)
|
|
108
|
+
.forEach((item) => item.loadAsyncValues());
|
|
109
|
+
}
|
|
110
|
+
loadAsyncDefaults() {
|
|
111
|
+
// default values can be asynchronous, and we must load them if there is no persisted value instead
|
|
112
|
+
const defaultValuesToBeLoaded = this.items
|
|
113
|
+
.filter((item) => {
|
|
114
|
+
return item.defaultValueFn
|
|
115
|
+
&& (item.persistedValue === null || item.persistedValue === undefined);
|
|
116
|
+
});
|
|
117
|
+
// special hack for isolate multiple select
|
|
118
|
+
// values for this type of select must be preloaded
|
|
119
|
+
// Read more in class MultipleSelectItem._init()
|
|
120
|
+
const valuesToBeLoaded = this.items
|
|
121
|
+
.filter((item) => {
|
|
122
|
+
return (item instanceof MultipleSelectItem) && item.hasPendingValues && item.isolate;
|
|
123
|
+
});
|
|
124
|
+
if (defaultValuesToBeLoaded.length > 0 || valuesToBeLoaded.length > 0) {
|
|
125
|
+
forkJoin([
|
|
126
|
+
...defaultValuesToBeLoaded
|
|
127
|
+
.map((item) => item.loadDefaultValue()),
|
|
128
|
+
...valuesToBeLoaded
|
|
129
|
+
.map((item) => {
|
|
130
|
+
item.loadAsyncValues();
|
|
131
|
+
return item.loading$
|
|
132
|
+
.pipe();
|
|
133
|
+
}),
|
|
134
|
+
])
|
|
135
|
+
.pipe(finalize(() => {
|
|
136
|
+
this._ready$.next(true);
|
|
137
|
+
}), takeUntil(this._destroy$))
|
|
138
|
+
.subscribe();
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
this._ready$.next(true);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
getSort() {
|
|
145
|
+
let sortBy = this.getSortByValue();
|
|
146
|
+
sortBy = sortBy === '__all' ? null : sortBy;
|
|
147
|
+
let sortDirection = this.getSortDirectionValue();
|
|
148
|
+
sortDirection = sortDirection === '__all' ? null : sortDirection;
|
|
149
|
+
return {
|
|
150
|
+
value: sortBy,
|
|
151
|
+
direction: sortDirection,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
getSortByValue() {
|
|
155
|
+
return this.sortByItem ? this.sortByItem.model : null;
|
|
156
|
+
}
|
|
157
|
+
getSortDirectionValue() {
|
|
158
|
+
return this.sortDirectionItem ? this.sortDirectionItem.model : null;
|
|
159
|
+
}
|
|
160
|
+
updateSort(sort) {
|
|
161
|
+
if (sort.sortBy) {
|
|
162
|
+
this.sortByItem.model = sort.sortBy;
|
|
163
|
+
}
|
|
164
|
+
if (sort.sortDirection) {
|
|
165
|
+
this.sortDirectionItem.model = sort.sortDirection;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
values(onlyPresented = false) {
|
|
169
|
+
return this.items
|
|
170
|
+
.reduce((acc, item) => {
|
|
171
|
+
const value = item.value;
|
|
172
|
+
if (!onlyPresented || value !== null) {
|
|
173
|
+
acc[item.name] = value;
|
|
174
|
+
}
|
|
175
|
+
return acc;
|
|
176
|
+
}, {});
|
|
177
|
+
}
|
|
178
|
+
models() {
|
|
179
|
+
return this.items
|
|
180
|
+
.reduce((acc, item) => {
|
|
181
|
+
acc[item.name] = item.model;
|
|
182
|
+
return acc;
|
|
183
|
+
}, {});
|
|
184
|
+
}
|
|
185
|
+
valuesAsQuery({ onlyPresented = true, items = null, persisted = false, } = {}) {
|
|
186
|
+
const params = {};
|
|
187
|
+
(items || this.items)
|
|
188
|
+
.forEach((filterItem) => {
|
|
189
|
+
const values = persisted
|
|
190
|
+
? filterItem.persistanceObject
|
|
191
|
+
: filterItem.queryObject;
|
|
192
|
+
Object.assign(params, values);
|
|
193
|
+
});
|
|
194
|
+
if (onlyPresented) {
|
|
195
|
+
return pickBy(params, (val) => {
|
|
196
|
+
return val !== undefined;
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
return params;
|
|
200
|
+
}
|
|
201
|
+
init(p) {
|
|
202
|
+
this.items
|
|
203
|
+
.forEach((item) => {
|
|
204
|
+
item.initValues(p[item.name]);
|
|
205
|
+
});
|
|
206
|
+
this._initSortingItems(p);
|
|
207
|
+
this.loadAsyncDefaults();
|
|
208
|
+
this._subscribeToItemsChanges();
|
|
209
|
+
}
|
|
210
|
+
updateItemsWithValues(values) {
|
|
211
|
+
this.items
|
|
212
|
+
.forEach((item) => {
|
|
213
|
+
if (values[item.name]) {
|
|
214
|
+
item.model = values[item.name];
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
if (item instanceof RangeItem) {
|
|
218
|
+
item.clearRange(null, item.defaultValue);
|
|
219
|
+
}
|
|
220
|
+
else if (item instanceof BaseDateRangeItem) {
|
|
221
|
+
item.clearDateRange(null, item.defaultValue);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
item.clear();
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
if (this.sortByItem) {
|
|
229
|
+
this.sortByItem.clear();
|
|
230
|
+
}
|
|
231
|
+
if (this.sortDirectionItem) {
|
|
232
|
+
this.sortDirectionItem.clear();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
updateSortingItemsValues(items) {
|
|
236
|
+
if (!this.sortByItem) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
this.sortByItem.values = items;
|
|
240
|
+
}
|
|
241
|
+
destroyItems() {
|
|
242
|
+
this.items
|
|
243
|
+
.forEach((item) => item.destroy());
|
|
244
|
+
this.sortByItem?.destroy();
|
|
245
|
+
this.sortDirectionItem?.destroy();
|
|
246
|
+
this._items.clear();
|
|
247
|
+
this.sortByItem = null;
|
|
248
|
+
this.sortDirectionItem = null;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Some items might need to load async values before they will be shown
|
|
252
|
+
*/
|
|
253
|
+
prepareItems() {
|
|
254
|
+
if (!this._itemsValuesLoaded) {
|
|
255
|
+
this._itemsValuesLoaded = true;
|
|
256
|
+
this.loadAsyncValues();
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
updateItemsVisiblity() {
|
|
260
|
+
this.visibleItems = this.items
|
|
261
|
+
.filter((item) => !item.isTypeKeyword && !item.hide);
|
|
262
|
+
}
|
|
263
|
+
_createItems(items) {
|
|
264
|
+
this._items = new Map(items
|
|
265
|
+
.filter((item) => !item.disable)
|
|
266
|
+
.filter((item) => {
|
|
267
|
+
if (this._items.has(item.name)) {
|
|
268
|
+
throw Error('Filter init error. Items name must be unique.');
|
|
269
|
+
}
|
|
270
|
+
return true;
|
|
271
|
+
})
|
|
272
|
+
.map((item) => {
|
|
273
|
+
const filterItem = createFilterItem(item, {}, this.filter);
|
|
274
|
+
if (filterItem.type === ItemType.Keyword) {
|
|
275
|
+
this._hasKeyword = true;
|
|
276
|
+
}
|
|
277
|
+
this._items.set(item.name, filterItem);
|
|
278
|
+
return [item.name, filterItem];
|
|
279
|
+
}));
|
|
280
|
+
this._createSortingItems();
|
|
281
|
+
}
|
|
282
|
+
_subscribeToItemsChanges() {
|
|
283
|
+
this.items
|
|
284
|
+
.forEach((item) => {
|
|
285
|
+
item.valueChange$
|
|
286
|
+
.pipe(takeUntil(item.destroy$))
|
|
287
|
+
.subscribe(() => {
|
|
288
|
+
this._itemsChange$.next(item);
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
if (this._config.sortValues?.length) {
|
|
292
|
+
this.sortByItem.valueChange$
|
|
293
|
+
.pipe(takeUntil(this.sortByItem.destroy$))
|
|
294
|
+
.subscribe(() => {
|
|
295
|
+
this._itemsChange$.next(this.sortByItem);
|
|
296
|
+
});
|
|
297
|
+
this.sortDirectionItem.valueChange$
|
|
298
|
+
.pipe(takeUntil(this.sortDirectionItem.destroy$))
|
|
299
|
+
.subscribe(() => {
|
|
300
|
+
this._itemsChange$.next(this.sortDirectionItem);
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
_lazyInit() {
|
|
305
|
+
this.ready$
|
|
306
|
+
.pipe(filter((state) => state), takeUntil(this._destroy$))
|
|
307
|
+
.subscribe(() => {
|
|
308
|
+
this.updateItemsVisiblity();
|
|
309
|
+
this._setKeywordItem();
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
_initSortingItems(p) {
|
|
313
|
+
if (this.sortByItem && this.sortDirectionItem) {
|
|
314
|
+
this.sortByItem.initValues(p[this.sortByItem.name]);
|
|
315
|
+
this.sortDirectionItem.initValues(p[this.sortDirectionItem.name]);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
_createSortingItems() {
|
|
319
|
+
if (this._config.sortValues?.length > 0) {
|
|
320
|
+
const sortByItem = {
|
|
321
|
+
name: SortByField,
|
|
322
|
+
type: ItemType.Select,
|
|
323
|
+
label: 'Sort by',
|
|
324
|
+
values: this._config.sortValues,
|
|
325
|
+
};
|
|
326
|
+
if (this._config.sort && this._config.sort.value) {
|
|
327
|
+
sortByItem.default = this._config.sort.value;
|
|
328
|
+
}
|
|
329
|
+
this.sortByItem = new SimpleSelectItem(sortByItem, null, this.filter);
|
|
330
|
+
const sortDirectionItem = {
|
|
331
|
+
name: SortDirectionField,
|
|
332
|
+
type: ItemType.Select,
|
|
333
|
+
label: 'Sort direction',
|
|
334
|
+
values: [
|
|
335
|
+
{ name: 'Ascending', value: 'asc' },
|
|
336
|
+
{ name: 'Descending', value: 'desc' },
|
|
337
|
+
],
|
|
338
|
+
};
|
|
339
|
+
if (this._config.sort && this._config.sort.direction) {
|
|
340
|
+
sortDirectionItem.default = this._config.sort.direction;
|
|
341
|
+
}
|
|
342
|
+
this.sortDirectionItem = new SimpleSelectItem(sortDirectionItem, null, this.filter);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
_setKeywordItem() {
|
|
346
|
+
this.keywordItem = this
|
|
347
|
+
.items
|
|
348
|
+
.find((item) => item.isTypeKeyword);
|
|
349
|
+
}
|
|
350
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ItemStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
351
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ItemStore });
|
|
352
|
+
}
|
|
353
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ItemStore, decorators: [{
|
|
354
|
+
type: Injectable
|
|
355
|
+
}], ctorParameters: () => [] });
|
|
356
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1zdG9yZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9zZXJ2aWNlcy9pdGVtLXN0b3JlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHbkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBU2pFLE9BQU8sRUFBa0IsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFMUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDcEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOztBQVc3RSxNQUFNLE9BQU8sU0FBUztJQUViLFVBQVUsR0FBZ0MsSUFBSSxDQUFDO0lBQy9DLGlCQUFpQixHQUFnQyxJQUFJLENBQUM7SUFDdEQsV0FBVyxHQUFhLElBQUksQ0FBQztJQUM3QixNQUFNLENBQWtCO0lBRXZCLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNy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QVEsQ0FBQyxNQUFNO2dCQUNyQixLQUFLLEVBQUUsZ0JBQWdCO2dCQUN2QixNQUFNLEVBQUU7b0JBQ04sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7b0JBQ25DLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2lCQUN0QzthQUN5QixDQUFDO1lBRTdCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3JELGlCQUFpQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDMUQsQ0FBQztZQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLGdCQUFnQixDQUMzQyxpQkFBaUIsRUFDakIsSUFBSSxFQUNKLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUk7YUFDcEIsS0FBSzthQUNMLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBYSxDQUFDO0lBQ3BELENBQUM7d0dBOWFVLFNBQVM7NEdBQVQsU0FBUzs7NEZBQVQsU0FBUztrQkFEckIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZmluYWxpemUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgcGlja0J5IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW1wb3J0IHR5cGUgeyBGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEl0ZW1UeXBlIH0gZnJvbSAnLi4vZW51bXMvaXRlbS10eXBlLmVudW0nO1xuaW1wb3J0IHsgYnVpbGRRdWVyeVBhcmFtcyB9IGZyb20gJy4uL2hlbHBlcnMvYnVpbGQtcXVlcnktcGFyYW1zJztcbmltcG9ydCB7IGNyZWF0ZUZpbHRlckl0ZW0gfSBmcm9tICcuLi9oZWxwZXJzL2NyZWF0ZS1maWx0ZXItaXRlbSc7XG5pbXBvcnQge1xuICBGaWx0ZXJTb3J0LFxuICBJRmlsdGVyQ29uZmlnSXRlbSxcbiAgU29ydEl0ZW0sXG59IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvZXh0ZXJuYWwtcGFyYW1zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJU29ydGluZ0NoYW5nZUV2ZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IElGaWx0ZXJDb25maWdTZWxlY3RJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pdGVtcy9zZWxlY3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZzRmlsdGVyQ29uZmlnLCBTb3J0QnlGaWVsZCwgU29ydERpcmVjdGlvbkZpZWxkIH0gZnJvbSAnLi4vbW9kZWxzL2ZpbHRlci1jb25maWcnO1xuaW1wb3J0IHsgQmFzZUl0ZW0gfSBmcm9tICcuLi9tb2RlbHMvaXRlbXMvYmFzZS1pdGVtJztcbmltcG9ydCB7IEJhc2VEYXRlUmFuZ2VJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL2l0ZW1zL2RhdGUtcmFuZ2UvYmFzZS1kYXRlLXJhbmdlLWl0ZW0nO1xuaW1wb3J0IHsgUmFuZ2VJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL2l0ZW1zL3JhbmdlLWl0ZW0nO1xuaW1wb3J0IHsgTXVsdGlwbGVTZWxlY3RJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL2l0ZW1zL3NlbGVjdC9tdWx0aXBsZS1zZWxlY3QtaXRlbSc7XG5pbXBvcnQgeyBTaW1wbGVTZWxlY3RJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL2l0ZW1zL3NlbGVjdC9zaW1wbGUtc2VsZWN0LWl0ZW0nO1xuaW1wb3J0IHsgVGV4dEl0ZW0gfSBmcm9tICcuLi9tb2RlbHMvaXRlbXMvdGV4dC1pdGVtJztcblxuXG5pbnRlcmZhY2UgSVZhbHVlQXNRdWVyeSB7XG4gIG9ubHlQcmVzZW50ZWQ/OiBib29sZWFuO1xuICBpdGVtcz86IEJhc2VJdGVtPElGaWx0ZXJDb25maWdJdGVtPltdO1xuICBwZXJzaXN0ZWQ/OiBib29sZWFuO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSXRlbVN0b3JlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBwdWJsaWMgc29ydEJ5SXRlbTogQmFzZUl0ZW08SUZpbHRlckNvbmZpZ0l0ZW0+ID0gbnVsbDtcbiAgcHVibGljIHNvcnREaXJlY3Rpb25JdGVtOiBCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT4gPSBudWxsO1xuICBwdWJsaWMga2V5d29yZEl0ZW06IFRleHRJdGVtID0gbnVsbDtcbiAgcHVibGljIGZpbHRlcjogRmlsdGVyQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgX3JlYWR5JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcml2YXRlIF92aXNpYmxlSXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT5bXT4oW10pO1xuICBwcml2YXRlIF9pdGVtcyA9IG5ldyBNYXA8c3RyaW5nLCBCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT4+KCk7XG4gIHByaXZhdGUgX2l0ZW1zVmFsdWVzTG9hZGVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2hhc0tleXdvcmQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY29uZmlnOiBGc0ZpbHRlckNvbmZpZztcbiAgcHJpdmF0ZSBfaXRlbXNDaGFuZ2UkID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICApIHtcbiAgICB0aGlzLl9sYXp5SW5pdCgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtcygpOiBCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT5bXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5faXRlbXMudmFsdWVzKCkpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5uYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUl0ZW1zKCk6IEJhc2VJdGVtPElGaWx0ZXJDb25maWdJdGVtPltdIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUl0ZW1zJC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldCB2aXNpYmxlSXRlbXMoaXRlbXM6IEJhc2VJdGVtPElGaWx0ZXJDb25maWdJdGVtPltdKSB7XG4gICAgdGhpcy5fdmlzaWJsZUl0ZW1zJC5uZXh0KGl0ZW1zKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmlzaWJsZUl0ZW1zJCgpOiBPYnNlcnZhYmxlPEJhc2VJdGVtPElGaWx0ZXJDb25maWdJdGVtPltdPiB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGVJdGVtcyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0tleXdvcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0tleXdvcmQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGl0ZW1zQ2hhbmdlJCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXNDaGFuZ2UkLnBpcGUoZGVib3VuY2VUaW1lKDMwKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlYWR5JCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZHkkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveUl0ZW1zKCk7XG5cbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29uZmlnKGNvbmZpZykge1xuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmluaXRJdGVtcyhjb25maWcuaXRlbXMpO1xuICB9XG5cbiAgcHVibGljIGdldEl0ZW1CeU5hbWUobmFtZTogc3RyaW5nKTogQmFzZUl0ZW08SUZpbHRlckNvbmZpZ0l0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXMuZ2V0KG5hbWUpO1xuICB9XG5cbiAgcHVibGljIGluaXRJdGVtcyhpdGVtczogSUZpbHRlckNvbmZpZ0l0ZW1bXSkge1xuICAgIHRoaXMuX2l0ZW1zVmFsdWVzTG9hZGVkID0gZmFsc2U7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICB0aGlzLl9jcmVhdGVJdGVtcyhpdGVtcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHF1ZXJ5UGFyYW1zKCk6IEtleVZhbHVlIHtcbiAgICByZXR1cm4gYnVpbGRRdWVyeVBhcmFtcyh0aGlzLnZhbHVlc0FzUXVlcnkoKSwgdGhpcy5pdGVtcyk7XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyc0NsZWFyKCkge1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBSYW5nZUl0ZW0pIHtcbiAgICAgICAgaXRlbS5jbGVhclJhbmdlKG51bGwsIGl0ZW0uZGVmYXVsdFZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIEJhc2VEYXRlUmFuZ2VJdGVtKSB7XG4gICAgICAgIGl0ZW0uY2xlYXJEYXRlUmFuZ2UobnVsbCwgaXRlbS5kZWZhdWx0VmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbS5jbGVhcihpdGVtLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zb3J0QnlJdGVtKSB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLnNvcnQpIHtcbiAgICAgICAgdGhpcy5zb3J0QnlJdGVtLm1vZGVsID0gdGhpcy5fY29uZmlnLnNvcnQudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvcnRCeUl0ZW0uY2xlYXIodGhpcy5zb3J0QnlJdGVtLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc29ydERpcmVjdGlvbkl0ZW0pIHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuc29ydCkge1xuICAgICAgICB0aGlzLnNvcnREaXJlY3Rpb25JdGVtLm1vZGVsID0gdGhpcy5fY29uZmlnLnNvcnQuZGlyZWN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uSXRlbS5jbGVhcih0aGlzLnNvcnREaXJlY3Rpb25JdGVtLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5rZXl3b3JkSXRlbT8uY2xlYXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkQXN5bmNWYWx1ZXMoKSB7XG4gICAgdGhpcy5pdGVtc1xuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5oYXNQZW5kaW5nVmFsdWVzKVxuICAgICAgLmZvckVhY2goKGl0ZW0pID0+IGl0ZW0ubG9hZEFzeW5jVmFsdWVzKCkpO1xuICB9XG5cbiAgcHVibGljIGxvYWRBc3luY0RlZmF1bHRzKCk6IHZvaWQge1xuICAgIC8vIGRlZmF1bHQgdmFsdWVzIGNhbiBiZSBhc3luY2hyb25vdXMsIGFuZCB3ZSBtdXN0IGxvYWQgdGhlbSBpZiB0aGVyZSBpcyBubyBwZXJzaXN0ZWQgdmFsdWUgaW5zdGVhZFxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXNUb0JlTG9hZGVkID0gdGhpcy5pdGVtc1xuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS5kZWZhdWx0VmFsdWVGblxuICAgICAgICAgICYmIChpdGVtLnBlcnNpc3RlZFZhbHVlID09PSBudWxsIHx8IGl0ZW0ucGVyc2lzdGVkVmFsdWUgPT09IHVuZGVmaW5lZCk7XG4gICAgICB9KTtcblxuICAgIC8vIHNwZWNpYWwgaGFjayBmb3IgaXNvbGF0ZSBtdWx0aXBsZSBzZWxlY3RcbiAgICAvLyB2YWx1ZXMgZm9yIHRoaXMgdHlwZSBvZiBzZWxlY3QgbXVzdCBiZSBwcmVsb2FkZWRcbiAgICAvLyBSZWFkIG1vcmUgaW4gY2xhc3MgTXVsdGlwbGVTZWxlY3RJdGVtLl9pbml0KClcbiAgICBjb25zdCB2YWx1ZXNUb0JlTG9hZGVkID0gdGhpcy5pdGVtc1xuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gKGl0ZW0gaW5zdGFuY2VvZiBNdWx0aXBsZVNlbGVjdEl0ZW0pICYmIGl0ZW0uaGFzUGVuZGluZ1ZhbHVlcyAmJiBpdGVtLmlzb2xhdGU7XG4gICAgICB9KTtcblxuICAgIGlmIChkZWZhdWx0VmFsdWVzVG9CZUxvYWRlZC5sZW5ndGggPiAwIHx8IHZhbHVlc1RvQmVMb2FkZWQubGVuZ3RoID4gMCkge1xuICAgICAgZm9ya0pvaW4oXG4gICAgICAgIFtcbiAgICAgICAgICAuLi5kZWZhdWx0VmFsdWVzVG9CZUxvYWRlZFxuICAgICAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS5sb2FkRGVmYXVsdFZhbHVlKCkpLFxuXG4gICAgICAgICAgLi4udmFsdWVzVG9CZUxvYWRlZFxuICAgICAgICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICBpdGVtLmxvYWRBc3luY1ZhbHVlcygpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBpdGVtLmxvYWRpbmckXG4gICAgICAgICAgICAgICAgLnBpcGUoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZWFkeSQubmV4dCh0cnVlKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVhZHkkLm5leHQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFNvcnQoKTogRmlsdGVyU29ydCB7XG4gICAgbGV0IHNvcnRCeSA9IHRoaXMuZ2V0U29ydEJ5VmFsdWUoKTtcbiAgICBzb3J0QnkgPSBzb3J0QnkgPT09ICdfX2FsbCcgPyBudWxsIDogc29ydEJ5O1xuXG4gICAgbGV0IHNvcnREaXJlY3Rpb24gPSB0aGlzLmdldFNvcnREaXJlY3Rpb25WYWx1ZSgpO1xuICAgIHNvcnREaXJlY3Rpb24gPSBzb3J0RGlyZWN0aW9uID09PSAnX19hbGwnID8gbnVsbCA6IHNvcnREaXJlY3Rpb247XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHNvcnRCeSxcbiAgICAgIGRpcmVjdGlvbjogc29ydERpcmVjdGlvbixcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldFNvcnRCeVZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnNvcnRCeUl0ZW0gPyB0aGlzLnNvcnRCeUl0ZW0ubW9kZWwgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIGdldFNvcnREaXJlY3Rpb25WYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zb3J0RGlyZWN0aW9uSXRlbSA/IHRoaXMuc29ydERpcmVjdGlvbkl0ZW0ubW9kZWwgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVNvcnQoc29ydDogSVNvcnRpbmdDaGFuZ2VFdmVudCkge1xuICAgIGlmIChzb3J0LnNvcnRCeSkge1xuICAgICAgdGhpcy5zb3J0QnlJdGVtLm1vZGVsID0gc29ydC5zb3J0Qnk7XG4gICAgfVxuXG4gICAgaWYgKHNvcnQuc29ydERpcmVjdGlvbikge1xuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uSXRlbS5tb2RlbCA9IHNvcnQuc29ydERpcmVjdGlvbjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdmFsdWVzKG9ubHlQcmVzZW50ZWQgPSBmYWxzZSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1xuICAgICAgLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbS52YWx1ZTtcblxuICAgICAgICBpZiAoIW9ubHlQcmVzZW50ZWQgfHwgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBhY2NbaXRlbS5uYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9KTtcbiAgfVxuXG4gIHB1YmxpYyBtb2RlbHMoKTogS2V5VmFsdWUge1xuICAgIHJldHVybiB0aGlzLml0ZW1zXG4gICAgICAucmVkdWNlKChhY2MsIGl0ZW0pID0+IHtcbiAgICAgICAgYWNjW2l0ZW0ubmFtZV0gPSBpdGVtLm1vZGVsO1xuXG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fSk7XG4gIH1cblxuICBwdWJsaWMgdmFsdWVzQXNRdWVyeSh7XG4gICAgb25seVByZXNlbnRlZCA9IHRydWUsXG4gICAgaXRlbXMgPSBudWxsLFxuICAgIHBlcnNpc3RlZCA9IGZhbHNlLFxuICB9OiBJVmFsdWVBc1F1ZXJ5ID0ge30pOiBLZXlWYWx1ZSB7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG5cbiAgICAoaXRlbXMgfHwgdGhpcy5pdGVtcylcbiAgICAgIC5mb3JFYWNoKChmaWx0ZXJJdGVtOiBCYXNlSXRlbTxhbnk+KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHBlcnNpc3RlZFxuICAgICAgICAgID8gZmlsdGVySXRlbS5wZXJzaXN0YW5jZU9iamVjdFxuICAgICAgICAgIDogZmlsdGVySXRlbS5xdWVyeU9iamVjdDtcblxuICAgICAgICBPYmplY3QuYXNzaWduKHBhcmFtcywgdmFsdWVzKTtcbiAgICAgIH0pO1xuXG4gICAgaWYgKG9ubHlQcmVzZW50ZWQpIHtcbiAgICAgIHJldHVybiBwaWNrQnkocGFyYW1zLCAodmFsKSA9PiB7XG4gICAgICAgIHJldHVybiB2YWwgIT09IHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBwdWJsaWMgaW5pdChwOiBLZXlWYWx1ZSkge1xuICAgIHRoaXMuaXRlbXNcbiAgICAgIC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGl0ZW0uaW5pdFZhbHVlcyhwW2l0ZW0ubmFtZV0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9pbml0U29ydGluZ0l0ZW1zKHApO1xuICAgIHRoaXMubG9hZEFzeW5jRGVmYXVsdHMoKTtcbiAgICB0aGlzLl9zdWJzY3JpYmVUb0l0ZW1zQ2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUl0ZW1zV2l0aFZhbHVlcyh2YWx1ZXM6IEtleVZhbHVlKSB7XG4gICAgdGhpcy5pdGVtc1xuICAgICAgLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKHZhbHVlc1tpdGVtLm5hbWVdKSB7XG4gICAgICAgICAgaXRlbS5tb2RlbCA9IHZhbHVlc1tpdGVtLm5hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgUmFuZ2VJdGVtKSB7XG4gICAgICAgICAgICBpdGVtLmNsZWFyUmFuZ2UobnVsbCwgaXRlbS5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIEJhc2VEYXRlUmFuZ2VJdGVtKSB7XG4gICAgICAgICAgICBpdGVtLmNsZWFyRGF0ZVJhbmdlKG51bGwsIGl0ZW0uZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5jbGVhcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5zb3J0QnlJdGVtKSB7XG4gICAgICB0aGlzLnNvcnRCeUl0ZW0uY2xlYXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc29ydERpcmVjdGlvbkl0ZW0pIHtcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbkl0ZW0uY2xlYXIoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU29ydGluZ0l0ZW1zVmFsdWVzKGl0ZW1zOiBTb3J0SXRlbVtdKSB7XG4gICAgaWYgKCF0aGlzLnNvcnRCeUl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNvcnRCeUl0ZW0udmFsdWVzID0gaXRlbXM7XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveUl0ZW1zKCkge1xuICAgIHRoaXMuaXRlbXNcbiAgICAgIC5mb3JFYWNoKChpdGVtKSA9PiBpdGVtLmRlc3Ryb3koKSk7XG4gICAgdGhpcy5zb3J0QnlJdGVtPy5kZXN0cm95KCk7XG4gICAgdGhpcy5zb3J0RGlyZWN0aW9uSXRlbT8uZGVzdHJveSgpO1xuXG4gICAgdGhpcy5faXRlbXMuY2xlYXIoKTtcbiAgICB0aGlzLnNvcnRCeUl0ZW0gPSBudWxsO1xuICAgIHRoaXMuc29ydERpcmVjdGlvbkl0ZW0gPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvbWUgaXRlbXMgbWlnaHQgbmVlZCB0byBsb2FkIGFzeW5jIHZhbHVlcyBiZWZvcmUgdGhleSB3aWxsIGJlIHNob3duXG4gICAqL1xuICBwdWJsaWMgcHJlcGFyZUl0ZW1zKCkge1xuICAgIGlmICghdGhpcy5faXRlbXNWYWx1ZXNMb2FkZWQpIHtcbiAgICAgIHRoaXMuX2l0ZW1zVmFsdWVzTG9hZGVkID0gdHJ1ZTtcblxuICAgICAgdGhpcy5sb2FkQXN5bmNWYWx1ZXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlSXRlbXNWaXNpYmxpdHkoKTogdm9pZCB7XG4gICAgdGhpcy52aXNpYmxlSXRlbXMgPSB0aGlzLml0ZW1zXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5pc1R5cGVLZXl3b3JkICYmICFpdGVtLmhpZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlSXRlbXMoaXRlbXM6IElGaWx0ZXJDb25maWdJdGVtW10pIHtcbiAgICB0aGlzLl9pdGVtcyA9IG5ldyBNYXAoXG4gICAgICBpdGVtc1xuICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5kaXNhYmxlKVxuICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2l0ZW1zLmhhcyhpdGVtLm5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcignRmlsdGVyIGluaXQgZXJyb3IuIEl0ZW1zIG5hbWUgbXVzdCBiZSB1bmlxdWUuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJJdGVtID0gY3JlYXRlRmlsdGVySXRlbShpdGVtLCB7IH0sIHRoaXMuZmlsdGVyKTtcblxuICAgICAgICAgIGlmIChmaWx0ZXJJdGVtLnR5cGUgPT09IEl0ZW1UeXBlLktleXdvcmQpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhc0tleXdvcmQgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2l0ZW1zLnNldChpdGVtLm5hbWUsIGZpbHRlckl0ZW0pO1xuXG4gICAgICAgICAgcmV0dXJuIFtpdGVtLm5hbWUsIGZpbHRlckl0ZW1dO1xuICAgICAgICB9KSxcbiAgICApO1xuXG4gICAgdGhpcy5fY3JlYXRlU29ydGluZ0l0ZW1zKCk7XG4gIH1cblxuICBwcml2YXRlIF9zdWJzY3JpYmVUb0l0ZW1zQ2hhbmdlcygpIHtcbiAgICB0aGlzLml0ZW1zXG4gICAgICAuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpdGVtLnZhbHVlQ2hhbmdlJFxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKGl0ZW0uZGVzdHJveSQpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zQ2hhbmdlJC5uZXh0KGl0ZW0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnNvcnRWYWx1ZXM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5zb3J0QnlJdGVtLnZhbHVlQ2hhbmdlJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5zb3J0QnlJdGVtLmRlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLl9pdGVtc0NoYW5nZSQubmV4dCh0aGlzLnNvcnRCeUl0ZW0pO1xuICAgICAgICB9KTtcblxuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uSXRlbS52YWx1ZUNoYW5nZSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuc29ydERpcmVjdGlvbkl0ZW0uZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2l0ZW1zQ2hhbmdlJC5uZXh0KHRoaXMuc29ydERpcmVjdGlvbkl0ZW0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9sYXp5SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlYWR5JFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoc3RhdGUpID0+IHN0YXRlKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1zVmlzaWJsaXR5KCk7XG4gICAgICAgIHRoaXMuX3NldEtleXdvcmRJdGVtKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRTb3J0aW5nSXRlbXMocDogS2V5VmFsdWUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zb3J0QnlJdGVtICYmIHRoaXMuc29ydERpcmVjdGlvbkl0ZW0pIHtcbiAgICAgIHRoaXMuc29ydEJ5SXRlbS5pbml0VmFsdWVzKHBbdGhpcy5zb3J0QnlJdGVtLm5hbWVdKTtcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbkl0ZW0uaW5pdFZhbHVlcyhwW3RoaXMuc29ydERpcmVjdGlvbkl0ZW0ubmFtZV0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZVNvcnRpbmdJdGVtcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLnNvcnRWYWx1ZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHNvcnRCeUl0ZW0gPSB7XG4gICAgICAgIG5hbWU6IFNvcnRCeUZpZWxkLFxuICAgICAgICB0eXBlOiBJdGVtVHlwZS5TZWxlY3QsXG4gICAgICAgIGxhYmVsOiAnU29ydCBieScsXG4gICAgICAgIHZhbHVlczogdGhpcy5fY29uZmlnLnNvcnRWYWx1ZXMsXG4gICAgICB9IGFzIElGaWx0ZXJDb25maWdTZWxlY3RJdGVtO1xuXG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuc29ydCAmJiB0aGlzLl9jb25maWcuc29ydC52YWx1ZSkge1xuICAgICAgICBzb3J0QnlJdGVtLmRlZmF1bHQgPSB0aGlzLl9jb25maWcuc29ydC52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb3J0QnlJdGVtID0gbmV3IFNpbXBsZVNlbGVjdEl0ZW0oXG4gICAgICAgIHNvcnRCeUl0ZW0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRoaXMuZmlsdGVyLFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc29ydERpcmVjdGlvbkl0ZW0gPSB7XG4gICAgICAgIG5hbWU6IFNvcnREaXJlY3Rpb25GaWVsZCxcbiAgICAgICAgdHlwZTogSXRlbVR5cGUuU2VsZWN0LFxuICAgICAgICBsYWJlbDogJ1NvcnQgZGlyZWN0aW9uJyxcbiAgICAgICAgdmFsdWVzOiBbXG4gICAgICAgICAgeyBuYW1lOiAnQXNjZW5kaW5nJywgdmFsdWU6ICdhc2MnIH0sXG4gICAgICAgICAgeyBuYW1lOiAnRGVzY2VuZGluZycsIHZhbHVlOiAnZGVzYycgfSxcbiAgICAgICAgXSxcbiAgICAgIH0gYXMgSUZpbHRlckNvbmZpZ1NlbGVjdEl0ZW07XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuc29ydCAmJiB0aGlzLl9jb25maWcuc29ydC5kaXJlY3Rpb24pIHtcbiAgICAgICAgc29ydERpcmVjdGlvbkl0ZW0uZGVmYXVsdCA9IHRoaXMuX2NvbmZpZy5zb3J0LmRpcmVjdGlvbjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uSXRlbSA9IG5ldyBTaW1wbGVTZWxlY3RJdGVtKFxuICAgICAgICBzb3J0RGlyZWN0aW9uSXRlbSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdGhpcy5maWx0ZXIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldEtleXdvcmRJdGVtKCkge1xuICAgIHRoaXMua2V5d29yZEl0ZW0gPSB0aGlzXG4gICAgICAuaXRlbXNcbiAgICAgIC5maW5kKChpdGVtKSA9PiBpdGVtLmlzVHlwZUtleXdvcmQpIGFzIFRleHRJdGVtO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, of, Subject } from 'rxjs';
|
|
3
|
+
import { filter, switchMap, take, takeUntil, tap } from 'rxjs/operators';
|
|
4
|
+
import { buildQueryParams } from '../helpers/build-query-params';
|
|
5
|
+
import { PersistanceController, QueryParamController, SavedFilterController, } from '.';
|
|
6
|
+
import { ItemStore } from './item-store.service';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class ParamController {
|
|
9
|
+
_pending$ = new BehaviorSubject(false);
|
|
10
|
+
_config;
|
|
11
|
+
_destroy$ = new Subject();
|
|
12
|
+
_itemStore = inject(ItemStore);
|
|
13
|
+
_persistanceController = inject(PersistanceController);
|
|
14
|
+
_queryParams = inject(QueryParamController);
|
|
15
|
+
_savedFilterController = inject(SavedFilterController);
|
|
16
|
+
get params() {
|
|
17
|
+
let result = {};
|
|
18
|
+
if (this._persistanceController.queryEnabled) {
|
|
19
|
+
result = {
|
|
20
|
+
...result,
|
|
21
|
+
...this._persistanceController.getQuery(),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
if (this._savedFilterController.enabled && this._savedFilterController.activeFilter) {
|
|
25
|
+
const query = Object.keys(result)
|
|
26
|
+
.filter((key) => !this._itemStore.itemNames.includes(key))
|
|
27
|
+
.reduce((acc, key) => {
|
|
28
|
+
return {
|
|
29
|
+
...acc,
|
|
30
|
+
[key]: result[key],
|
|
31
|
+
};
|
|
32
|
+
}, {});
|
|
33
|
+
result = {
|
|
34
|
+
...query,
|
|
35
|
+
...this._savedFilterController.activeFilterData,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
else if (this._queryParams.enabled) {
|
|
39
|
+
result = {
|
|
40
|
+
...result,
|
|
41
|
+
...this._queryParams.params,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
get pending() {
|
|
47
|
+
return this._pending$.getValue();
|
|
48
|
+
}
|
|
49
|
+
get pending$() {
|
|
50
|
+
return this._pending$.asObservable();
|
|
51
|
+
}
|
|
52
|
+
ngOnDestroy() {
|
|
53
|
+
this._destroy$.next(null);
|
|
54
|
+
this._destroy$.complete();
|
|
55
|
+
}
|
|
56
|
+
setConfig(config) {
|
|
57
|
+
this._config = config;
|
|
58
|
+
this._initQueryParams();
|
|
59
|
+
this._initSavedFilters();
|
|
60
|
+
this.initItems();
|
|
61
|
+
}
|
|
62
|
+
setActiveSavedFilter(savedFilter) {
|
|
63
|
+
this._savedFilterController.setActiveFilter(savedFilter);
|
|
64
|
+
if (savedFilter) {
|
|
65
|
+
this.reloadFiltersWithValues(savedFilter.filters);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
reloadFiltersWithValues(params) {
|
|
69
|
+
this._itemStore.updateItemsWithValues(params);
|
|
70
|
+
this._saveQueryParams();
|
|
71
|
+
this._savePersistedParams();
|
|
72
|
+
}
|
|
73
|
+
initItems() {
|
|
74
|
+
of(null)
|
|
75
|
+
.pipe(tap(() => this._pending$.next(true)), switchMap(() => {
|
|
76
|
+
return this._savedFilterController.enabled ?
|
|
77
|
+
this._savedFilterController.load()
|
|
78
|
+
.pipe(tap(() => this._savedFilterController.updateActiveFilter())) :
|
|
79
|
+
of(null);
|
|
80
|
+
}), takeUntil(this._destroy$))
|
|
81
|
+
.subscribe(() => {
|
|
82
|
+
this._initItemsValues();
|
|
83
|
+
this._pending$.next(false);
|
|
84
|
+
this._listenItemsChange();
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
_initItemsValues() {
|
|
88
|
+
this._itemStore.init(this.params);
|
|
89
|
+
this._saveQueryParams();
|
|
90
|
+
this._savePersistedParams();
|
|
91
|
+
}
|
|
92
|
+
fetchQueryParams() {
|
|
93
|
+
this._initQueryParams();
|
|
94
|
+
this._itemStore.updateItemsWithValues(this.params);
|
|
95
|
+
}
|
|
96
|
+
_initQueryParams() {
|
|
97
|
+
this._queryParams.init(this._config.queryParam);
|
|
98
|
+
}
|
|
99
|
+
_initSavedFilters() {
|
|
100
|
+
this._savedFilterController.init(this._config.savedFilters);
|
|
101
|
+
}
|
|
102
|
+
_listenItemsChange() {
|
|
103
|
+
this._itemStore.ready$
|
|
104
|
+
.pipe(filter((v) => v), take(1), takeUntil(this._destroy$))
|
|
105
|
+
.subscribe(() => {
|
|
106
|
+
this._saveQueryParams();
|
|
107
|
+
this._savePersistedParams();
|
|
108
|
+
});
|
|
109
|
+
this._itemStore
|
|
110
|
+
.itemsChange$
|
|
111
|
+
.pipe(takeUntil(this._destroy$))
|
|
112
|
+
.subscribe(() => {
|
|
113
|
+
this._saveQueryParams();
|
|
114
|
+
this._savePersistedParams();
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
_saveQueryParams() {
|
|
118
|
+
const params = buildQueryParams(this._itemStore
|
|
119
|
+
.valuesAsQuery({
|
|
120
|
+
onlyPresented: false,
|
|
121
|
+
items: this._itemStore.items,
|
|
122
|
+
persisted: true,
|
|
123
|
+
}), this._itemStore.items);
|
|
124
|
+
this._itemStore.items
|
|
125
|
+
.filter((item) => item.queryParamsDisabled || !item.isQueryParamVisible)
|
|
126
|
+
.forEach((item) => {
|
|
127
|
+
params[item.name] = undefined;
|
|
128
|
+
});
|
|
129
|
+
this._queryParams.writeStateToQueryParams(params);
|
|
130
|
+
}
|
|
131
|
+
_savePersistedParams() {
|
|
132
|
+
if (this._persistanceController.queryEnabled) {
|
|
133
|
+
const targetItems = this._itemStore.items
|
|
134
|
+
.filter((item) => !item.persistanceDisabled)
|
|
135
|
+
.filter((item) => item.value !== undefined)
|
|
136
|
+
.reduce((acc, item) => {
|
|
137
|
+
acc[item.name] = item.model;
|
|
138
|
+
return acc;
|
|
139
|
+
}, {});
|
|
140
|
+
this._persistanceController.setQuery(targetItems);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ParamController, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
144
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ParamController });
|
|
145
|
+
}
|
|
146
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ParamController, decorators: [{
|
|
147
|
+
type: Injectable
|
|
148
|
+
}] });
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW0tY29udHJvbGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9zZXJ2aWNlcy9wYXJhbS1jb250cm9sbGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFJakUsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIscUJBQXFCLEdBQ3RCLE1BQU0sR0FBRyxDQUFDO0FBQ1gsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQUlqRCxNQUFNLE9BQU8sZUFBZTtJQUVsQixTQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsT0FBTyxDQUFpQjtJQUN4QixTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUNoQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3ZELFlBQVksR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUM1QyxzQkFBc0IsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUUvRCxJQUFXLE1BQU07UUFDZixJQUFJLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFFMUIsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7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LFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUs7aUJBQ3RDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUM7aUJBQzNDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUM7aUJBQzFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDcEIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUU1QixPQUFPLEdBQUcsQ0FBQztZQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUVULElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7d0dBaExVLGVBQWU7NEdBQWYsZUFBZTs7NEZBQWYsZUFBZTtrQkFEM0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgYnVpbGRRdWVyeVBhcmFtcyB9IGZyb20gJy4uL2hlbHBlcnMvYnVpbGQtcXVlcnktcGFyYW1zJztcbmltcG9ydCB7IElGaWx0ZXJTYXZlZEZpbHRlciwgS2V5VmFsdWUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZzRmlsdGVyQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL2ZpbHRlci1jb25maWcnO1xuXG5pbXBvcnQge1xuICBQZXJzaXN0YW5jZUNvbnRyb2xsZXIsXG4gIFF1ZXJ5UGFyYW1Db250cm9sbGVyLFxuICBTYXZlZEZpbHRlckNvbnRyb2xsZXIsXG59IGZyb20gJy4nO1xuaW1wb3J0IHsgSXRlbVN0b3JlIH0gZnJvbSAnLi9pdGVtLXN0b3JlLnNlcnZpY2UnO1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQYXJhbUNvbnRyb2xsZXIgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgX3BlbmRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHByaXZhdGUgX2NvbmZpZzogRnNGaWx0ZXJDb25maWc7XG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfaXRlbVN0b3JlID0gaW5qZWN0KEl0ZW1TdG9yZSk7XG4gIHByaXZhdGUgX3BlcnNpc3RhbmNlQ29udHJvbGxlciA9IGluamVjdChQZXJzaXN0YW5jZUNvbnRyb2xsZXIpO1xuICBwcml2YXRlIF9xdWVyeVBhcmFtcyA9IGluamVjdChRdWVyeVBhcmFtQ29udHJvbGxlcik7XG4gIHByaXZhdGUgX3NhdmVkRmlsdGVyQ29udHJvbGxlciA9IGluamVjdChTYXZlZEZpbHRlckNvbnRyb2xsZXIpO1xuXG4gIHB1YmxpYyBnZXQgcGFyYW1zKCk6IEtleVZhbHVlIHtcbiAgICBsZXQgcmVzdWx0OiBLZXlWYWx1ZSA9IHt9O1xuXG4gICAgaWYgKHRoaXMuX3BlcnNpc3RhbmNlQ29udHJvbGxlci5xdWVyeUVuYWJsZWQpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgLi4ucmVzdWx0LCBcbiAgICAgICAgLi4udGhpcy5fcGVyc2lzdGFuY2VDb250cm9sbGVyLmdldFF1ZXJ5KCksXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zYXZlZEZpbHRlckNvbnRyb2xsZXIuZW5hYmxlZCAmJiB0aGlzLl9zYXZlZEZpbHRlckNvbnRyb2xsZXIuYWN0aXZlRmlsdGVyKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IE9iamVjdC5rZXlzKHJlc3VsdClcbiAgICAgICAgLmZpbHRlcigoa2V5KSA9PiAhdGhpcy5faXRlbVN0b3JlLml0ZW1OYW1lcy5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICBba2V5XTogcmVzdWx0W2tleV0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwge30pO1xuXG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIC4uLnF1ZXJ5LCBcbiAgICAgICAgLi4udGhpcy5fc2F2ZWRGaWx0ZXJDb250cm9sbGVyLmFjdGl2ZUZpbHRlckRhdGEsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAodGhpcy5fcXVlcnlQYXJhbXMuZW5hYmxlZCkge1xuICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAuLi5yZXN1bHQsIFxuICAgICAgICAuLi50aGlzLl9xdWVyeVBhcmFtcy5wYXJhbXMsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBlbmRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmckLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBlbmRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29uZmlnKGNvbmZpZykge1xuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcblxuICAgIHRoaXMuX2luaXRRdWVyeVBhcmFtcygpO1xuICAgIHRoaXMuX2luaXRTYXZlZEZpbHRlcnMoKTtcbiAgICB0aGlzLmluaXRJdGVtcygpO1xuICB9XG5cbiAgcHVibGljIHNldEFjdGl2ZVNhdmVkRmlsdGVyKHNhdmVkRmlsdGVyOiBJRmlsdGVyU2F2ZWRGaWx0ZXIpIHtcbiAgICB0aGlzLl9zYXZlZEZpbHRlckNvbnRyb2xsZXIuc2V0QWN0aXZlRmlsdGVyKHNhdmVkRmlsdGVyKTtcblxuICAgIGlmIChzYXZlZEZpbHRlcikge1xuICAgICAgdGhpcy5yZWxvYWRGaWx0ZXJzV2l0aFZhbHVlcyhzYXZlZEZpbHRlci5maWx0ZXJzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkRmlsdGVyc1dpdGhWYWx1ZXMocGFyYW1zOiBLZXlWYWx1ZSkge1xuICAgIHRoaXMuX2l0ZW1TdG9yZS51cGRhdGVJdGVtc1dpdGhWYWx1ZXMocGFyYW1zKTtcblxuICAgIHRoaXMuX3NhdmVRdWVyeVBhcmFtcygpO1xuICAgIHRoaXMuX3NhdmVQZXJzaXN0ZWRQYXJhbXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0SXRlbXMoKTogdm9pZCB7XG4gICAgb2YobnVsbClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fcGVuZGluZyQubmV4dCh0cnVlKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3NhdmVkRmlsdGVyQ29udHJvbGxlci5lbmFibGVkID8gXG4gICAgICAgICAgICB0aGlzLl9zYXZlZEZpbHRlckNvbnRyb2xsZXIubG9hZCgpXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLl9zYXZlZEZpbHRlckNvbnRyb2xsZXIudXBkYXRlQWN0aXZlRmlsdGVyKCkpLFxuICAgICAgICAgICAgICApIDogXG4gICAgICAgICAgICBvZihudWxsKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5faW5pdEl0ZW1zVmFsdWVzKCk7XG4gICAgICAgIHRoaXMuX3BlbmRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgICB0aGlzLl9saXN0ZW5JdGVtc0NoYW5nZSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgX2luaXRJdGVtc1ZhbHVlcygpIHtcbiAgICB0aGlzLl9pdGVtU3RvcmUuaW5pdCh0aGlzLnBhcmFtcyk7XG4gICAgdGhpcy5fc2F2ZVF1ZXJ5UGFyYW1zKCk7XG4gICAgdGhpcy5fc2F2ZVBlcnNpc3RlZFBhcmFtcygpO1xuICB9XG5cbiAgcHVibGljIGZldGNoUXVlcnlQYXJhbXMoKTogdm9pZCB7XG4gICAgdGhpcy5faW5pdFF1ZXJ5UGFyYW1zKCk7XG4gICAgdGhpcy5faXRlbVN0b3JlLnVwZGF0ZUl0ZW1zV2l0aFZhbHVlcyh0aGlzLnBhcmFtcyk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0UXVlcnlQYXJhbXMoKSB7XG4gICAgdGhpcy5fcXVlcnlQYXJhbXMuaW5pdCh0aGlzLl9jb25maWcucXVlcnlQYXJhbSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0U2F2ZWRGaWx0ZXJzKCkge1xuICAgIHRoaXMuX3NhdmVkRmlsdGVyQ29udHJvbGxlci5pbml0KHRoaXMuX2NvbmZpZy5zYXZlZEZpbHRlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuSXRlbXNDaGFuZ2UoKSB7XG4gICAgdGhpcy5faXRlbVN0b3JlLnJlYWR5JFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigodikgPT4gdiksXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fc2F2ZVF1ZXJ5UGFyYW1zKCk7XG4gICAgICAgIHRoaXMuX3NhdmVQZXJzaXN0ZWRQYXJhbXMoKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5faXRlbVN0b3JlXG4gICAgICAuaXRlbXNDaGFuZ2UkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zYXZlUXVlcnlQYXJhbXMoKTtcbiAgICAgICAgdGhpcy5fc2F2ZVBlcnNpc3RlZFBhcmFtcygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zYXZlUXVlcnlQYXJhbXMoKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYnVpbGRRdWVyeVBhcmFtcyhcbiAgICAgIHRoaXMuX2l0ZW1TdG9yZVxuICAgICAgICAudmFsdWVzQXNRdWVyeSh7XG4gICAgICAgICAgb25seVByZXNlbnRlZDogZmFsc2UsXG4gICAgICAgICAgaXRlbXM6IHRoaXMuX2l0ZW1TdG9yZS5pdGVtcyxcbiAgICAgICAgICBwZXJzaXN0ZWQ6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgdGhpcy5faXRlbVN0b3JlLml0ZW1zLFxuICAgICk7XG4gICBcbiAgICB0aGlzLl9pdGVtU3RvcmUuaXRlbXNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ucXVlcnlQYXJhbXNEaXNhYmxlZCB8fCAhaXRlbS5pc1F1ZXJ5UGFyYW1WaXNpYmxlKVxuICAgICAgLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgcGFyYW1zW2l0ZW0ubmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3F1ZXJ5UGFyYW1zLndyaXRlU3RhdGVUb1F1ZXJ5UGFyYW1zKHBhcmFtcyk7XG4gIH1cblxuICBwcml2YXRlIF9zYXZlUGVyc2lzdGVkUGFyYW1zKCkge1xuICAgIGlmKHRoaXMuX3BlcnNpc3RhbmNlQ29udHJvbGxlci5xdWVyeUVuYWJsZWQpIHtcbiAgICAgIGNvbnN0IHRhcmdldEl0ZW1zID0gdGhpcy5faXRlbVN0b3JlLml0ZW1zXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLnBlcnNpc3RhbmNlRGlzYWJsZWQpXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgICAgYWNjW2l0ZW0ubmFtZV0gPSBpdGVtLm1vZGVsO1xuXG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuXG4gICAgICB0aGlzLl9wZXJzaXN0YW5jZUNvbnRyb2xsZXIuc2V0UXVlcnkodGFyZ2V0SXRlbXMpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Location } from '@angular/common';
|
|
2
|
+
import { inject, Injectable } from '@angular/core';
|
|
3
|
+
import { getNormalizedPath } from '@firestitch/common';
|
|
4
|
+
import { FsStore } from '@firestitch/store';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class PersistanceController {
|
|
7
|
+
queryEnabled = false;
|
|
8
|
+
_store = inject(FsStore);
|
|
9
|
+
_name;
|
|
10
|
+
_data = {};
|
|
11
|
+
_location = inject(Location);
|
|
12
|
+
_storeKey = 'fs-filter-persist';
|
|
13
|
+
setConfig(filterConfig, inDialog) {
|
|
14
|
+
const config = this._initConfig(filterConfig.persist, inDialog);
|
|
15
|
+
if (config) {
|
|
16
|
+
this.queryEnabled = config.persistQuery;
|
|
17
|
+
this._name = config.name;
|
|
18
|
+
this._data = this._get() || {};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
setQuery(value) {
|
|
22
|
+
this._set('query', value);
|
|
23
|
+
}
|
|
24
|
+
getQuery() {
|
|
25
|
+
return this._data.query || {};
|
|
26
|
+
}
|
|
27
|
+
_set(key, value) {
|
|
28
|
+
this._data[key] = value;
|
|
29
|
+
const storeData = this._store.get(this._storeKey) || {};
|
|
30
|
+
storeData[this._name] = this._data;
|
|
31
|
+
this._store.set(this._storeKey, storeData);
|
|
32
|
+
}
|
|
33
|
+
_get() {
|
|
34
|
+
const storeData = this._store.get(this._storeKey);
|
|
35
|
+
if (storeData) {
|
|
36
|
+
return storeData[this._name];
|
|
37
|
+
}
|
|
38
|
+
return {};
|
|
39
|
+
}
|
|
40
|
+
_initConfig(config, inDialog) {
|
|
41
|
+
let persistanceConfig = this._getConfig(config);
|
|
42
|
+
if (persistanceConfig) {
|
|
43
|
+
persistanceConfig = {
|
|
44
|
+
name: persistanceConfig.name || getNormalizedPath(this._location),
|
|
45
|
+
persistQuery: !inDialog || !!persistanceConfig.name,
|
|
46
|
+
...persistanceConfig,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return persistanceConfig;
|
|
50
|
+
}
|
|
51
|
+
_getConfig(config) {
|
|
52
|
+
if (config) {
|
|
53
|
+
return {
|
|
54
|
+
...(config === true ? {} : config),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PersistanceController, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
60
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PersistanceController });
|
|
61
|
+
}
|
|
62
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PersistanceController, decorators: [{
|
|
63
|
+
type: Injectable
|
|
64
|
+
}] });
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdGFuY2UtY29udHJvbGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9zZXJ2aWNlcy9wZXJzaXN0YW5jZS1jb250cm9sbGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFPNUMsTUFBTSxPQUFPLHFCQUFxQjtJQUV6QixZQUFZLEdBQUcsS0FBSyxDQUFDO0lBRXBCLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekIsS0FBSyxDQUFTO0lBQ2QsS0FBSyxHQUFRLEVBQUUsQ0FBQztJQUNoQixTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BCLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQztJQUUxQyxTQUFTLENBQUMsWUFBNEIsRUFBRSxRQUFpQjtRQUM5RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFaEUsSUFBRyxNQUFNLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztZQUN4QyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRU0sUUFBUSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU8sSUFBSSxDQUFDLEdBQVcsRUFBRSxLQUFVO1FBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEQsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBRW5DLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLElBQUk7UUFDVixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFbEQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRU8sV0FBVyxDQUFDLE1BQTJCLEVBQUUsUUFBaUI7UUFDaEUsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWhELElBQUcsaUJBQWlCLEVBQUUsQ0FBQztZQUNyQixpQkFBaUIsR0FBRztnQkFDbEIsSUFBSSxFQUFFLGlCQUFpQixDQUFDLElBQUksSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNqRSxZQUFZLEVBQUUsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUk7Z0JBQ25ELEdBQUcsaUJBQWlCO2FBQ3JCLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO0lBRU8sVUFBVSxDQUFDLE1BQTJCO1FBQzVDLElBQUcsTUFBTSxFQUFFLENBQUM7WUFDVixPQUFPO2dCQUNMLEdBQUcsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQzthQUNuQyxDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzt3R0FwRVUscUJBQXFCOzRHQUFyQixxQkFBcUI7OzRGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgZ2V0Tm9ybWFsaXplZFBhdGggfSBmcm9tICdAZmlyZXN0aXRjaC9jb21tb24nO1xuaW1wb3J0IHsgRnNTdG9yZSB9IGZyb20gJ0BmaXJlc3RpdGNoL3N0b3JlJztcblxuaW1wb3J0IHsgRnNGaWx0ZXJQZXJzaXN0YW5jZSwgRnNGaWx0ZXJQZXJzaXN0YW5jZUNvbmZpZyB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRnNGaWx0ZXJDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvZmlsdGVyLWNvbmZpZyc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFBlcnNpc3RhbmNlQ29udHJvbGxlciB7XG5cbiAgcHVibGljIHF1ZXJ5RW5hYmxlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3N0b3JlID0gaW5qZWN0KEZzU3RvcmUpO1xuICBwcml2YXRlIF9uYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2RhdGE6IGFueSA9IHt9O1xuICBwcml2YXRlIF9sb2NhdGlvbiA9IGluamVjdChMb2NhdGlvbik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0b3JlS2V5ID0gJ2ZzLWZpbHRlci1wZXJzaXN0JztcblxuICBwdWJsaWMgc2V0Q29uZmlnKGZpbHRlckNvbmZpZzogRnNGaWx0ZXJDb25maWcsIGluRGlhbG9nOiBib29sZWFuKSB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5faW5pdENvbmZpZyhmaWx0ZXJDb25maWcucGVyc2lzdCwgaW5EaWFsb2cpO1xuXG4gICAgaWYoY29uZmlnKSB7XG4gICAgICB0aGlzLnF1ZXJ5RW5hYmxlZCA9IGNvbmZpZy5wZXJzaXN0UXVlcnk7XG4gICAgICB0aGlzLl9uYW1lID0gY29uZmlnLm5hbWU7XG4gICAgICB0aGlzLl9kYXRhID0gdGhpcy5fZ2V0KCkgfHwge307XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFF1ZXJ5KHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9zZXQoJ3F1ZXJ5JywgdmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldFF1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLnF1ZXJ5IHx8IHt9O1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fZGF0YVtrZXldID0gdmFsdWU7XG4gICAgY29uc3Qgc3RvcmVEYXRhID0gdGhpcy5fc3RvcmUuZ2V0KHRoaXMuX3N0b3JlS2V5KSB8fCB7fTtcbiAgICBzdG9yZURhdGFbdGhpcy5fbmFtZV0gPSB0aGlzLl9kYXRhO1xuXG4gICAgdGhpcy5fc3RvcmUuc2V0KHRoaXMuX3N0b3JlS2V5LCBzdG9yZURhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0KCkge1xuICAgIGNvbnN0IHN0b3JlRGF0YSA9IHRoaXMuX3N0b3JlLmdldCh0aGlzLl9zdG9yZUtleSk7XG5cbiAgICBpZiAoc3RvcmVEYXRhKSB7XG4gICAgICByZXR1cm4gc3RvcmVEYXRhW3RoaXMuX25hbWVdO1xuICAgIH1cbiBcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBwcml2YXRlIF9pbml0Q29uZmlnKGNvbmZpZzogRnNGaWx0ZXJQZXJzaXN0YW5jZSwgaW5EaWFsb2c6IGJvb2xlYW4pOiBGc0ZpbHRlclBlcnNpc3RhbmNlQ29uZmlnIHtcbiAgICBsZXQgcGVyc2lzdGFuY2VDb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcblxuICAgIGlmKHBlcnNpc3RhbmNlQ29uZmlnKSB7XG4gICAgICBwZXJzaXN0YW5jZUNvbmZpZyA9IHtcbiAgICAgICAgbmFtZTogcGVyc2lzdGFuY2VDb25maWcubmFtZSB8fCBnZXROb3JtYWxpemVkUGF0aCh0aGlzLl9sb2NhdGlvbiksXG4gICAgICAgIHBlcnNpc3RRdWVyeTogIWluRGlhbG9nIHx8ICEhcGVyc2lzdGFuY2VDb25maWcubmFtZSxcbiAgICAgICAgLi4ucGVyc2lzdGFuY2VDb25maWcsXG4gICAgICB9O1xuICAgIH1cbiAgXG4gICAgcmV0dXJuIHBlcnNpc3RhbmNlQ29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q29uZmlnKGNvbmZpZzogRnNGaWx0ZXJQZXJzaXN0YW5jZSk6IEZzRmlsdGVyUGVyc2lzdGFuY2VDb25maWcge1xuICAgIGlmKGNvbmZpZykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKGNvbmZpZyA9PT0gdHJ1ZSA/IHt9IDogY29uZmlnKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxufVxuXG4iXX0=
|