@elderbyte/ngx-starter 16.3.4 → 16.4.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 (47) hide show
  1. package/esm2022/lib/common/data/data-context/data-context-active-page.mjs +5 -5
  2. package/esm2022/lib/common/data/data-context/data-context-auto-starter.mjs +2 -2
  3. package/esm2022/lib/common/data/data-context/data-context-base.mjs +58 -28
  4. package/esm2022/lib/common/data/data-context/data-context-continuable-base.mjs +7 -7
  5. package/esm2022/lib/common/data/data-context/data-context-continuable-paged.mjs +10 -10
  6. package/esm2022/lib/common/data/data-context/data-context-continuable-token.mjs +8 -8
  7. package/esm2022/lib/common/data/data-context/data-context-simple.mjs +6 -5
  8. package/esm2022/lib/common/data/data-context/data-context-source-event-binding.mjs +2 -2
  9. package/esm2022/lib/common/data/data-context/data-context.mjs +1 -1
  10. package/esm2022/lib/common/data/filters/filter-context.mjs +12 -26
  11. package/esm2022/lib/common/data/sort-context.mjs +2 -2
  12. package/esm2022/lib/common/utils/filter-util.mjs +19 -1
  13. package/esm2022/lib/components/data-view/table/elder-table/elder-table.component.mjs +2 -2
  14. package/esm2022/lib/components/forms/search/domain/context/search-context.mjs +52 -0
  15. package/esm2022/lib/components/forms/search/domain/context/search-context.service.mjs +42 -0
  16. package/esm2022/lib/components/forms/search/domain/input/search-input-state.mjs +81 -0
  17. package/esm2022/lib/components/forms/search/domain/input/search-input.mjs +2 -0
  18. package/esm2022/lib/components/forms/search/domain/url/elder-search-url.directive.mjs +74 -0
  19. package/esm2022/lib/components/forms/search/domain/url/elder-search-url.service.mjs +162 -0
  20. package/esm2022/lib/components/forms/search/domain/url/search-query-params-parser.mjs +81 -0
  21. package/esm2022/lib/components/forms/search/elder-search-context.directive.mjs +87 -51
  22. package/esm2022/lib/components/forms/search/elder-search-input.directive.mjs +6 -5
  23. package/esm2022/lib/components/forms/search/elder-search.module.mjs +30 -9
  24. package/fesm2022/elderbyte-ngx-starter.mjs +657 -430
  25. package/fesm2022/elderbyte-ngx-starter.mjs.map +1 -1
  26. package/lib/common/data/data-context/data-context-base.d.ts +10 -3
  27. package/lib/common/data/data-context/data-context.d.ts +6 -1
  28. package/lib/common/data/filters/filter-context.d.ts +1 -6
  29. package/lib/common/utils/filter-util.d.ts +1 -0
  30. package/lib/components/forms/search/domain/context/search-context.d.ts +37 -0
  31. package/lib/components/forms/search/domain/context/search-context.service.d.ts +25 -0
  32. package/lib/components/forms/search/{elder-search-context-url-binding.directive.d.ts → domain/url/elder-search-url.directive.d.ts} +12 -13
  33. package/lib/components/forms/search/domain/url/elder-search-url.service.d.ts +60 -0
  34. package/lib/components/forms/search/domain/url/search-query-params-parser.d.ts +36 -0
  35. package/lib/components/forms/search/elder-search-context.directive.d.ts +29 -16
  36. package/lib/components/forms/search/elder-search-input.directive.d.ts +2 -2
  37. package/lib/components/forms/search/elder-search.module.d.ts +5 -3
  38. package/package.json +1 -1
  39. package/esm2022/lib/components/forms/search/elder-search-context-url-binding.directive.mjs +0 -71
  40. package/esm2022/lib/components/forms/search/model/search-input-state.mjs +0 -81
  41. package/esm2022/lib/components/forms/search/model/search-input.mjs +0 -2
  42. package/esm2022/lib/components/forms/search/search-box/elder-search-context-filters.mjs +0 -10
  43. package/esm2022/lib/components/forms/search/search-box/elder-search-url-binding.service.mjs +0 -184
  44. package/lib/components/forms/search/search-box/elder-search-context-filters.d.ts +0 -7
  45. package/lib/components/forms/search/search-box/elder-search-url-binding.service.d.ts +0 -74
  46. /package/lib/components/forms/search/{model → domain/input}/search-input-state.d.ts +0 -0
  47. /package/lib/components/forms/search/{model → domain/input}/search-input.d.ts +0 -0
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9zZWFyY2gvbW9kZWwvc2VhcmNoLWlucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcy9pbnRlcm5hbC9PYnNlcnZhYmxlJztcbmltcG9ydCB7U2VhcmNoSW5wdXRTdGF0ZX0gZnJvbSAnLi9zZWFyY2gtaW5wdXQtc3RhdGUnO1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9kYXRhL2ZpbHRlcnMvZmlsdGVyXCI7XG5cblxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzaW5nbGUgc2VhcmNoIGNvbnRyb2wuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoSW5wdXQge1xuXG4gIC8qKlxuICAgKiBUaGUgc2VhcmNoIGlucHV0IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICByZWFkb25seSBzdGF0ZSQ6IE9ic2VydmFibGU8U2VhcmNoSW5wdXRTdGF0ZT47XG5cbiAgcmVhZG9ubHkgc3RhdGVTbmFwc2hvdDogU2VhcmNoSW5wdXRTdGF0ZTtcblxuICAvKipcbiAgICogU3RhdGVzIGlmIHRoZSBzZWFyY2ggbmFtZSBpcyBjYW5ub3QgYmUgY2hhbmdlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlYWRvbmx5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVzZXQgdGhlIG5hbWUgdmFsdWVcbiAgICovXG4gIHJlc2V0KCk6IHZvaWQ7XG5cbiAgYXBwbHlJbml0aWFsVmFsdWUodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCk6IHZvaWQ7XG59XG5cbiJdfQ==
@@ -1,10 +0,0 @@
1
- export class ElderSearchContextFilters {
2
- static empty(searchContextId) {
3
- return new ElderSearchContextFilters(searchContextId, new Map());
4
- }
5
- constructor(searchContextId, filters) {
6
- this.searchContextId = searchContextId;
7
- this.filters = filters;
8
- }
9
- }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VhcmNoLWNvbnRleHQtZmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvc2VhcmNoL3NlYXJjaC1ib3gvZWxkZXItc2VhcmNoLWNvbnRleHQtZmlsdGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8seUJBQXlCO0lBRTdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBdUI7UUFDekMsT0FBTyxJQUFJLHlCQUF5QixDQUFDLGVBQWUsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELFlBQ2tCLGVBQXVCLEVBQ3ZCLE9BQTRCO1FBRDVCLG9CQUFlLEdBQWYsZUFBZSxDQUFRO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQXFCO0lBRTlDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpbHRlciB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vZGF0YS9maWx0ZXJzL2ZpbHRlclwiO1xuXG5leHBvcnQgY2xhc3MgRWxkZXJTZWFyY2hDb250ZXh0RmlsdGVycyB7XG5cbiAgcHVibGljIHN0YXRpYyBlbXB0eShzZWFyY2hDb250ZXh0SWQ6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRWxkZXJTZWFyY2hDb250ZXh0RmlsdGVycyhzZWFyY2hDb250ZXh0SWQsIG5ldyBNYXAoKSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VhcmNoQ29udGV4dElkOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IGZpbHRlcnM6IE1hcDxzdHJpbmcsIEZpbHRlcj5cbiAgKSB7XG4gIH1cbn1cbiJdfQ==
@@ -1,184 +0,0 @@
1
- import { Injectable } from "@angular/core";
2
- import { filter, first, takeUntil } from "rxjs/operators";
3
- import { Subject } from "rxjs";
4
- import { ElderSearchContextFilters } from "./elder-search-context-filters";
5
- import { Filter } from "../../../../common/data/filters/filter";
6
- import { BehaviorSubject } from "rxjs/internal/BehaviorSubject";
7
- import { LoggerFactory } from "@elderbyte/ts-logger";
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/router";
10
- export class ElderSearchUrlBindingService {
11
- /***************************************************************************
12
- * *
13
- * Constructor *
14
- * *
15
- **************************************************************************/
16
- constructor(router, route) {
17
- this.router = router;
18
- this.route = route;
19
- //A search param has following structure: q-[searchContextId]-[filterId]=[value]
20
- //Example: search-browser1-hasStarted=true
21
- /***************************************************************************
22
- * *
23
- * Fields *
24
- * *
25
- **************************************************************************/
26
- this.log = LoggerFactory.getLogger(this.constructor.name);
27
- this._searchMap$ = new BehaviorSubject({
28
- value: new Map(),
29
- emit: true
30
- });
31
- this._initialSearchMap$ = new BehaviorSubject(new Map());
32
- this.searchParamPrefix = "q";
33
- this.unsubscribe$ = new Subject();
34
- this.router.events.pipe(first()).subscribe(() => {
35
- this.handleSearchParameters(this.route.snapshot.queryParams);
36
- });
37
- this._searchMap$.pipe(filter(searchMapUpdate => searchMapUpdate.emit), takeUntil(this.unsubscribe$)).subscribe(searchMapUpdate => {
38
- this.log.warn("SET URL");
39
- const searchMap = searchMapUpdate.value;
40
- const resetParams = this.resetSearchParams();
41
- const queryParams = { ...resetParams, ...this.buildQueryParams(searchMap) };
42
- this.log.warn("searchMap :", searchMap);
43
- this.log.warn("queryParams :", queryParams);
44
- this.router.navigate([], {
45
- queryParams: queryParams,
46
- replaceUrl: true,
47
- queryParamsHandling: "merge"
48
- });
49
- });
50
- this.router.events.subscribe((event) => this.log.warn("Type: " + event.constructor?.name, event));
51
- }
52
- /***************************************************************************
53
- * *
54
- * Life Cycle *
55
- * *
56
- **************************************************************************/
57
- ngOnDestroy() {
58
- this.unsubscribe$.next();
59
- this.unsubscribe$.complete();
60
- }
61
- /***************************************************************************
62
- * *
63
- * Properties *
64
- * *
65
- **************************************************************************/
66
- get initialSearchMap$() {
67
- return this._initialSearchMap$;
68
- }
69
- /***************************************************************************
70
- * *
71
- * Public API *
72
- * *
73
- **************************************************************************/
74
- updateFiltersForContext(searchContextId, filters) {
75
- const searchMapUpdate = this._searchMap$.getValue();
76
- const searchMap = searchMapUpdate.value;
77
- const filtersMap = new Map(filters
78
- .filter(filter => filter.value != null)
79
- .map(filter => {
80
- return [filter.key, filter];
81
- }));
82
- searchMap.set(searchContextId, new ElderSearchContextFilters(searchContextId, filtersMap));
83
- this._searchMap$.next({ value: searchMap, emit: true });
84
- }
85
- resetFilterForContext(contextId) {
86
- const searchMapUpdate = this._searchMap$.getValue();
87
- const searchMap = searchMapUpdate.value;
88
- if (searchMap.has(contextId)) {
89
- searchMap.delete(contextId);
90
- this._searchMap$.next({ value: searchMap, emit: false });
91
- }
92
- }
93
- /***************************************************************************
94
- * *
95
- * Private methods *
96
- * *
97
- **************************************************************************/
98
- handleSearchParameters(params) {
99
- const searchParamKeys = this.extractSearchParameters(params);
100
- const searchMap = this.buildSearchContextMap(params, searchParamKeys);
101
- this._searchMap$.next({ value: searchMap, emit: true });
102
- this._initialSearchMap$.next(searchMap);
103
- }
104
- extractSearchParameters(params) {
105
- return Object.getOwnPropertyNames(params).filter(param => param.startsWith(this.searchParamPrefix + "-"));
106
- }
107
- buildSearchContextMap(params, searchParamKeys) {
108
- const searchMap = new Map();
109
- for (const key of searchParamKeys) {
110
- const filterValue = params[key];
111
- const filterParamData = this.extractFilterParam(key, filterValue);
112
- const filter = this.convertFilterStringToFilter(filterValue, filterParamData);
113
- this.checkAndSetFilter(searchMap, filterParamData, filter);
114
- }
115
- return searchMap;
116
- }
117
- checkAndSetFilter(searchMap, filterParamData, filter) {
118
- if (searchMap.has(filterParamData.searchContextId)) {
119
- this.setFilter(searchMap, filterParamData, filter);
120
- }
121
- else {
122
- searchMap.set(filterParamData.searchContextId, ElderSearchContextFilters.empty(filterParamData.searchContextId));
123
- this.setFilter(searchMap, filterParamData, filter);
124
- }
125
- }
126
- setFilter(searchMap, filterParamData, filter) {
127
- const searchContext = searchMap.get(filterParamData.searchContextId);
128
- searchContext.filters.set(filterParamData.filterId, filter);
129
- }
130
- extractFilterParam(key, filterValue) {
131
- const splitParams = key.split("-");
132
- return {
133
- searchContextId: splitParams[1],
134
- filterId: splitParams[2],
135
- isArray: this.checkIfParamIsArray(filterValue)
136
- };
137
- }
138
- checkIfParamIsArray(filterValue) {
139
- return filterValue.startsWith("(") && filterValue.endsWith(")");
140
- }
141
- convertFilterStringToFilter(paramValue, filterParamData) {
142
- let value = paramValue;
143
- if (this.isSingularArrayValue(value, filterParamData)) {
144
- value = this.convertValueToArray(value);
145
- }
146
- return new Filter(filterParamData.filterId, value);
147
- }
148
- isSingularArrayValue(value, filterParamData) {
149
- return !Array.isArray(value) && filterParamData.isArray;
150
- }
151
- convertValueToArray(value) {
152
- return value.slice(1).slice(0, -1).split(",");
153
- }
154
- resetSearchParams() {
155
- let params = { ...this.route.snapshot.queryParams };
156
- const searchParams = this.extractSearchParameters(params);
157
- for (const searchParam of searchParams) {
158
- params[searchParam] = null;
159
- }
160
- return params;
161
- }
162
- buildQueryParams(searchMap) {
163
- const params = {};
164
- for (const searchContextId of searchMap.keys()) {
165
- const filters = searchMap.get(searchContextId).filters;
166
- for (const filter of filters.values()) {
167
- params[`${this.searchParamPrefix}-${searchContextId}-${filter.key}`] = this.convertValueToArrayOrSingleValue(filter.value);
168
- }
169
- }
170
- return params;
171
- }
172
- convertValueToArrayOrSingleValue(value) {
173
- return Array.isArray(value) ? `(${value.toString()})` : value;
174
- }
175
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchUrlBindingService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
176
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchUrlBindingService, providedIn: "root" }); }
177
- }
178
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElderSearchUrlBindingService, decorators: [{
179
- type: Injectable,
180
- args: [{
181
- providedIn: "root"
182
- }]
183
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }]; } });
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VhcmNoLXVybC1iaW5kaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm1zL3NlYXJjaC9zZWFyY2gtYm94L2VsZGVyLXNlYXJjaC11cmwtYmluZGluZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBZ0JyRCxNQUFNLE9BQU8sNEJBQTRCO0lBc0J2Qzs7OztnRkFJNEU7SUFHNUUsWUFBb0IsTUFBYyxFQUFVLEtBQXFCO1FBQTdDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQTNCakUsZ0ZBQWdGO1FBQ2hGLDBDQUEwQztRQUUxQzs7OztvRkFJNEU7UUFFM0QsUUFBRyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU5RCxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFrQjtZQUN6RCxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQXFDO1lBQ25ELElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQyxD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OlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IGZpbHRlciwgZmlyc3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBFbGRlclNlYXJjaENvbnRleHRGaWx0ZXJzIH0gZnJvbSBcIi4vZWxkZXItc2VhcmNoLWNvbnRleHQtZmlsdGVyc1wiO1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9kYXRhL2ZpbHRlcnMvZmlsdGVyXCI7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tIFwicnhqcy9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3RcIjtcbmltcG9ydCB7IExvZ2dlckZhY3RvcnkgfSBmcm9tIFwiQGVsZGVyYnl0ZS90cy1sb2dnZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJQYXJhbURhdGEge1xuICBzZWFyY2hDb250ZXh0SWQ6IHN0cmluZyxcbiAgZmlsdGVySWQ6IHN0cmluZyxcbiAgaXNBcnJheTogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaE1hcFVwZGF0ZSB7XG4gIHZhbHVlOiBNYXA8c3RyaW5nLCBFbGRlclNlYXJjaENvbnRleHRGaWx0ZXJzPixcbiAgZW1pdDogYm9vbGVhblxufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46IFwicm9vdFwiXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVyU2VhcmNoVXJsQmluZGluZ1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIC8vQSBzZWFyY2ggcGFyYW0gaGFzIGZvbGxvd2luZyBzdHJ1Y3R1cmU6IHEtW3NlYXJjaENvbnRleHRJZF0tW2ZpbHRlcklkXT1bdmFsdWVdXG4gIC8vRXhhbXBsZTogc2VhcmNoLWJyb3dzZXIxLWhhc1N0YXJ0ZWQ9dHJ1ZVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICBwcml2YXRlIF9zZWFyY2hNYXAkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hNYXBVcGRhdGU+KHtcbiAgICB2YWx1ZTogbmV3IE1hcDxzdHJpbmcsIEVsZGVyU2VhcmNoQ29udGV4dEZpbHRlcnM+KCksXG4gICAgZW1pdDogdHJ1ZVxuICB9KTtcbiAgcHJpdmF0ZSBfaW5pdGlhbFNlYXJjaE1hcCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hcDxzdHJpbmcsIEVsZGVyU2VhcmNoQ29udGV4dEZpbHRlcnM+PihuZXcgTWFwKCkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VhcmNoUGFyYW1QcmVmaXggPSBcInFcIjtcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcbiAgICB0aGlzLnJvdXRlci5ldmVudHMucGlwZShcbiAgICAgIGZpcnN0KClcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZVNlYXJjaFBhcmFtZXRlcnModGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zZWFyY2hNYXAkLnBpcGUoXG4gICAgICBmaWx0ZXIoc2VhcmNoTWFwVXBkYXRlID0+IHNlYXJjaE1hcFVwZGF0ZS5lbWl0KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJClcbiAgICApLnN1YnNjcmliZShzZWFyY2hNYXBVcGRhdGUgPT4ge1xuICAgICAgdGhpcy5sb2cud2FybihcIlNFVCBVUkxcIik7XG4gICAgICBjb25zdCBzZWFyY2hNYXAgPSBzZWFyY2hNYXBVcGRhdGUudmFsdWU7XG5cbiAgICAgIGNvbnN0IHJlc2V0UGFyYW1zID0gdGhpcy5yZXNldFNlYXJjaFBhcmFtcygpO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IC4uLnJlc2V0UGFyYW1zLCAuLi50aGlzLmJ1aWxkUXVlcnlQYXJhbXMoc2VhcmNoTWFwKSB9O1xuXG4gICAgICB0aGlzLmxvZy53YXJuKFwic2VhcmNoTWFwIDpcIiwgc2VhcmNoTWFwKTtcbiAgICAgIHRoaXMubG9nLndhcm4oXCJxdWVyeVBhcmFtcyA6XCIsIHF1ZXJ5UGFyYW1zKTtcblxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXG4gICAgICAgIFtdLFxuICAgICAgICB7XG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZXZlbnQpID0+XG4gICAgICB0aGlzLmxvZy53YXJuKFwiVHlwZTogXCIgKyBldmVudC5jb25zdHJ1Y3Rvcj8ubmFtZSwgZXZlbnQpKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBMaWZlIEN5Y2xlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIGdldCBpbml0aWFsU2VhcmNoTWFwJCgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5pdGlhbFNlYXJjaE1hcCQ7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgdXBkYXRlRmlsdGVyc0ZvckNvbnRleHQoc2VhcmNoQ29udGV4dElkOiBzdHJpbmcsIGZpbHRlcnM6IEZpbHRlcltdKSB7XG4gICAgY29uc3Qgc2VhcmNoTWFwVXBkYXRlID0gdGhpcy5fc2VhcmNoTWFwJC5nZXRWYWx1ZSgpO1xuICAgIGNvbnN0IHNlYXJjaE1hcCA9IHNlYXJjaE1hcFVwZGF0ZS52YWx1ZTtcblxuICAgIGNvbnN0IGZpbHRlcnNNYXAgPSBuZXcgTWFwKFxuICAgICAgZmlsdGVyc1xuICAgICAgICAuZmlsdGVyKGZpbHRlciA9PiBmaWx0ZXIudmFsdWUgIT0gbnVsbClcbiAgICAgICAgLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgICAgIHJldHVybiBbZmlsdGVyLmtleSwgZmlsdGVyXTtcbiAgICAgICAgfSlcbiAgICApO1xuICAgIHNlYXJjaE1hcC5zZXQoc2VhcmNoQ29udGV4dElkLCBuZXcgRWxkZXJTZWFyY2hDb250ZXh0RmlsdGVycyhzZWFyY2hDb250ZXh0SWQsIGZpbHRlcnNNYXApKTtcbiAgICB0aGlzLl9zZWFyY2hNYXAkLm5leHQoeyB2YWx1ZTogc2VhcmNoTWFwLCBlbWl0OiB0cnVlIH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2V0RmlsdGVyRm9yQ29udGV4dChjb250ZXh0SWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHNlYXJjaE1hcFVwZGF0ZSA9IHRoaXMuX3NlYXJjaE1hcCQuZ2V0VmFsdWUoKTtcbiAgICBjb25zdCBzZWFyY2hNYXAgPSBzZWFyY2hNYXBVcGRhdGUudmFsdWU7XG4gICAgaWYgKHNlYXJjaE1hcC5oYXMoY29udGV4dElkKSkge1xuICAgICAgc2VhcmNoTWFwLmRlbGV0ZShjb250ZXh0SWQpO1xuICAgICAgdGhpcy5fc2VhcmNoTWFwJC5uZXh0KHsgdmFsdWU6IHNlYXJjaE1hcCwgZW1pdDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBoYW5kbGVTZWFyY2hQYXJhbWV0ZXJzKHBhcmFtczogUGFyYW1zKSB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1LZXlzID0gdGhpcy5leHRyYWN0U2VhcmNoUGFyYW1ldGVycyhwYXJhbXMpO1xuICAgIGNvbnN0IHNlYXJjaE1hcCA9IHRoaXMuYnVpbGRTZWFyY2hDb250ZXh0TWFwKHBhcmFtcywgc2VhcmNoUGFyYW1LZXlzKTtcbiAgICB0aGlzLl9zZWFyY2hNYXAkLm5leHQoeyB2YWx1ZTogc2VhcmNoTWFwLCBlbWl0OiB0cnVlIH0pO1xuICAgIHRoaXMuX2luaXRpYWxTZWFyY2hNYXAkLm5leHQoc2VhcmNoTWFwKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdFNlYXJjaFBhcmFtZXRlcnMocGFyYW1zOiBQYXJhbXMpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHBhcmFtcykuZmlsdGVyKHBhcmFtID0+IHBhcmFtLnN0YXJ0c1dpdGgodGhpcy5zZWFyY2hQYXJhbVByZWZpeCArIFwiLVwiKSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VhcmNoQ29udGV4dE1hcChwYXJhbXM6IFBhcmFtcywgc2VhcmNoUGFyYW1LZXlzOiBzdHJpbmdbXSk6IE1hcDxzdHJpbmcsIEVsZGVyU2VhcmNoQ29udGV4dEZpbHRlcnM+IHtcbiAgICBjb25zdCBzZWFyY2hNYXAgPSBuZXcgTWFwPHN0cmluZywgRWxkZXJTZWFyY2hDb250ZXh0RmlsdGVycz4oKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBzZWFyY2hQYXJhbUtleXMpIHtcbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gcGFyYW1zW2tleV07XG4gICAgICBjb25zdCBmaWx0ZXJQYXJhbURhdGEgPSB0aGlzLmV4dHJhY3RGaWx0ZXJQYXJhbShrZXksIGZpbHRlclZhbHVlKTtcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuY29udmVydEZpbHRlclN0cmluZ1RvRmlsdGVyKGZpbHRlclZhbHVlLCBmaWx0ZXJQYXJhbURhdGEpO1xuICAgICAgdGhpcy5jaGVja0FuZFNldEZpbHRlcihzZWFyY2hNYXAsIGZpbHRlclBhcmFtRGF0YSwgZmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlYXJjaE1hcDtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tBbmRTZXRGaWx0ZXIoXG4gICAgc2VhcmNoTWFwOiBNYXA8c3RyaW5nLCBFbGRlclNlYXJjaENvbnRleHRGaWx0ZXJzPixcbiAgICBmaWx0ZXJQYXJhbURhdGE6IEZpbHRlclBhcmFtRGF0YSxcbiAgICBmaWx0ZXI6IEZpbHRlclxuICApIHtcbiAgICBpZiAoc2VhcmNoTWFwLmhhcyhmaWx0ZXJQYXJhbURhdGEuc2VhcmNoQ29udGV4dElkKSkge1xuICAgICAgdGhpcy5zZXRGaWx0ZXIoc2VhcmNoTWFwLCBmaWx0ZXJQYXJhbURhdGEsIGZpbHRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlYXJjaE1hcC5zZXQoZmlsdGVyUGFyYW1EYXRhLnNlYXJjaENvbnRleHRJZCwgRWxkZXJTZWFyY2hDb250ZXh0RmlsdGVycy5lbXB0eShmaWx0ZXJQYXJhbURhdGEuc2VhcmNoQ29udGV4dElkKSk7XG4gICAgICB0aGlzLnNldEZpbHRlcihzZWFyY2hNYXAsIGZpbHRlclBhcmFtRGF0YSwgZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEZpbHRlcihcbiAgICBzZWFyY2hNYXA6IE1hcDxzdHJpbmcsIEVsZGVyU2VhcmNoQ29udGV4dEZpbHRlcnM+LFxuICAgIGZpbHRlclBhcmFtRGF0YTogRmlsdGVyUGFyYW1EYXRhLFxuICAgIGZpbHRlcjogRmlsdGVyXG4gICkge1xuICAgIGNvbnN0IHNlYXJjaENvbnRleHQgPSBzZWFyY2hNYXAuZ2V0KGZpbHRlclBhcmFtRGF0YS5zZWFyY2hDb250ZXh0SWQpO1xuICAgIHNlYXJjaENvbnRleHQuZmlsdGVycy5zZXQoZmlsdGVyUGFyYW1EYXRhLmZpbHRlcklkLCBmaWx0ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0RmlsdGVyUGFyYW0oa2V5OiBzdHJpbmcsIGZpbHRlclZhbHVlOiBzdHJpbmcpOiBGaWx0ZXJQYXJhbURhdGEge1xuICAgIGNvbnN0IHNwbGl0UGFyYW1zID0ga2V5LnNwbGl0KFwiLVwiKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hDb250ZXh0SWQ6IHNwbGl0UGFyYW1zWzFdLFxuICAgICAgZmlsdGVySWQ6IHNwbGl0UGFyYW1zWzJdLFxuICAgICAgaXNBcnJheTogdGhpcy5jaGVja0lmUGFyYW1Jc0FycmF5KGZpbHRlclZhbHVlKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZQYXJhbUlzQXJyYXkoZmlsdGVyVmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmaWx0ZXJWYWx1ZS5zdGFydHNXaXRoKFwiKFwiKSAmJiBmaWx0ZXJWYWx1ZS5lbmRzV2l0aChcIilcIik7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRGaWx0ZXJTdHJpbmdUb0ZpbHRlcihwYXJhbVZhbHVlOiBzdHJpbmcsIGZpbHRlclBhcmFtRGF0YTogRmlsdGVyUGFyYW1EYXRhKTogRmlsdGVyIHtcbiAgICBsZXQgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdID0gcGFyYW1WYWx1ZTtcblxuICAgIGlmICh0aGlzLmlzU2luZ3VsYXJBcnJheVZhbHVlKHZhbHVlLCBmaWx0ZXJQYXJhbURhdGEpKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuY29udmVydFZhbHVlVG9BcnJheSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBGaWx0ZXIoZmlsdGVyUGFyYW1EYXRhLmZpbHRlcklkLCB2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGlzU2luZ3VsYXJBcnJheVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSwgZmlsdGVyUGFyYW1EYXRhOiBGaWx0ZXJQYXJhbURhdGEpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIGZpbHRlclBhcmFtRGF0YS5pc0FycmF5O1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VmFsdWVUb0FycmF5KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHZhbHVlLnNsaWNlKDEpLnNsaWNlKDAsIC0xKS5zcGxpdChcIixcIik7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0U2VhcmNoUGFyYW1zKCk6IFBhcmFtcyB7XG4gICAgbGV0IHBhcmFtcyA9IHsgLi4udGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyB9O1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMuZXh0cmFjdFNlYXJjaFBhcmFtZXRlcnMocGFyYW1zKTtcbiAgICBmb3IgKGNvbnN0IHNlYXJjaFBhcmFtIG9mIHNlYXJjaFBhcmFtcykge1xuICAgICAgcGFyYW1zW3NlYXJjaFBhcmFtXSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRRdWVyeVBhcmFtcyhzZWFyY2hNYXA6IE1hcDxzdHJpbmcsIEVsZGVyU2VhcmNoQ29udGV4dEZpbHRlcnM+KTogUGFyYW1zIHtcbiAgICBjb25zdCBwYXJhbXM6IFBhcmFtcyA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBzZWFyY2hDb250ZXh0SWQgb2Ygc2VhcmNoTWFwLmtleXMoKSkge1xuICAgICAgY29uc3QgZmlsdGVycyA9IHNlYXJjaE1hcC5nZXQoc2VhcmNoQ29udGV4dElkKS5maWx0ZXJzO1xuXG4gICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzLnZhbHVlcygpKSB7XG4gICAgICAgIHBhcmFtc1tgJHt0aGlzLnNlYXJjaFBhcmFtUHJlZml4fS0ke3NlYXJjaENvbnRleHRJZH0tJHtmaWx0ZXIua2V5fWBdID0gdGhpcy5jb252ZXJ0VmFsdWVUb0FycmF5T3JTaW5nbGVWYWx1ZShmaWx0ZXIudmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRWYWx1ZVRvQXJyYXlPclNpbmdsZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gYCgke3ZhbHVlLnRvU3RyaW5nKCl9KWAgOiB2YWx1ZTtcbiAgfVxuXG59XG5cblxuIl19
@@ -1,7 +0,0 @@
1
- import { Filter } from "../../../../common/data/filters/filter";
2
- export declare class ElderSearchContextFilters {
3
- readonly searchContextId: string;
4
- readonly filters: Map<string, Filter>;
5
- static empty(searchContextId: string): ElderSearchContextFilters;
6
- constructor(searchContextId: string, filters: Map<string, Filter>);
7
- }
@@ -1,74 +0,0 @@
1
- import { OnDestroy } from "@angular/core";
2
- import { ActivatedRoute, Router } from "@angular/router";
3
- import { ElderSearchContextFilters } from "./elder-search-context-filters";
4
- import { Filter } from "../../../../common/data/filters/filter";
5
- import { BehaviorSubject } from "rxjs/internal/BehaviorSubject";
6
- import * as i0 from "@angular/core";
7
- export interface FilterParamData {
8
- searchContextId: string;
9
- filterId: string;
10
- isArray: boolean;
11
- }
12
- export interface SearchMapUpdate {
13
- value: Map<string, ElderSearchContextFilters>;
14
- emit: boolean;
15
- }
16
- export declare class ElderSearchUrlBindingService implements OnDestroy {
17
- private router;
18
- private route;
19
- /***************************************************************************
20
- * *
21
- * Fields *
22
- * *
23
- **************************************************************************/
24
- private readonly log;
25
- private _searchMap$;
26
- private _initialSearchMap$;
27
- private readonly searchParamPrefix;
28
- private unsubscribe$;
29
- /***************************************************************************
30
- * *
31
- * Constructor *
32
- * *
33
- **************************************************************************/
34
- constructor(router: Router, route: ActivatedRoute);
35
- /***************************************************************************
36
- * *
37
- * Life Cycle *
38
- * *
39
- **************************************************************************/
40
- ngOnDestroy(): void;
41
- /***************************************************************************
42
- * *
43
- * Properties *
44
- * *
45
- **************************************************************************/
46
- get initialSearchMap$(): BehaviorSubject<Map<string, ElderSearchContextFilters>>;
47
- /***************************************************************************
48
- * *
49
- * Public API *
50
- * *
51
- **************************************************************************/
52
- updateFiltersForContext(searchContextId: string, filters: Filter[]): void;
53
- resetFilterForContext(contextId: string): void;
54
- /***************************************************************************
55
- * *
56
- * Private methods *
57
- * *
58
- **************************************************************************/
59
- private handleSearchParameters;
60
- private extractSearchParameters;
61
- private buildSearchContextMap;
62
- private checkAndSetFilter;
63
- private setFilter;
64
- private extractFilterParam;
65
- private checkIfParamIsArray;
66
- private convertFilterStringToFilter;
67
- private isSingularArrayValue;
68
- private convertValueToArray;
69
- private resetSearchParams;
70
- private buildQueryParams;
71
- private convertValueToArrayOrSingleValue;
72
- static ɵfac: i0.ɵɵFactoryDeclaration<ElderSearchUrlBindingService, never>;
73
- static ɵprov: i0.ɵɵInjectableDeclaration<ElderSearchUrlBindingService>;
74
- }