@recursyve/nice-data-filter-kit 12.1.30 → 13.0.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.
- package/_index.scss +1 -7
- package/{esm2015/lib/api/dto/saved-reports.dto.js → esm2020/lib/api/dto/saved-reports.dto.mjs} +0 -0
- package/esm2020/lib/api/filter.api.mjs +51 -0
- package/{esm2015/lib/api/models/saved-reports.model.js → esm2020/lib/api/models/saved-reports.model.mjs} +0 -0
- package/{esm2015/lib/api/public-api.js → esm2020/lib/api/public-api.mjs} +0 -0
- package/esm2020/lib/api/saved-report.api.mjs +48 -0
- package/esm2020/lib/components/base-list/base-list.component.mjs +288 -0
- package/{esm2015/lib/components/base-list/base-list.constant.js → esm2020/lib/components/base-list/base-list.constant.mjs} +0 -0
- package/esm2020/lib/components/base-list/base-list.module.mjs +171 -0
- package/{esm2015/lib/components/base-list/directives/base-list-buttons.directive.js → esm2020/lib/components/base-list/directives/base-list-buttons.directive.mjs} +3 -3
- package/{esm2015/lib/components/base-list/directives/base-list-cards.directive.js → esm2020/lib/components/base-list/directives/base-list-cards.directive.mjs} +3 -3
- package/{esm2015/lib/components/base-list/directives/base-list-custom-content.directive.js → esm2020/lib/components/base-list/directives/base-list-custom-content.directive.mjs} +3 -3
- package/{esm2015/lib/components/base-list/directives/base-list-directives.module.js → esm2020/lib/components/base-list/directives/base-list-directives.module.mjs} +4 -4
- package/{esm2015/lib/components/base-list/directives/base-list-filters.directive.js → esm2020/lib/components/base-list/directives/base-list-filters.directive.mjs} +3 -3
- package/{esm2015/lib/components/base-list/directives/base-list-table.directive.js → esm2020/lib/components/base-list/directives/base-list-table.directive.mjs} +3 -3
- package/{esm2015/lib/components/base-list/directives/base-list-title.directive.js → esm2020/lib/components/base-list/directives/base-list-title.directive.mjs} +3 -3
- package/{esm2015/lib/components/base-list/models/columns.model.js → esm2020/lib/components/base-list/models/columns.model.mjs} +0 -0
- package/{esm2015/lib/components/base-list/models/export.model.js → esm2020/lib/components/base-list/models/export.model.mjs} +0 -0
- package/esm2020/lib/components/base-list/models/layout.model.mjs +149 -0
- package/esm2020/lib/components/base-list/providers/base-filter.service.mjs +34 -0
- package/{esm2015/lib/components/base-list/providers/base-list-saved-report.service.js → esm2020/lib/components/base-list/providers/base-list-saved-report.service.mjs} +3 -3
- package/{esm2015/lib/components/base-list/public-api.js → esm2020/lib/components/base-list/public-api.mjs} +0 -0
- package/esm2020/lib/components/base-list/store/base-list.query.mjs +35 -0
- package/esm2020/lib/components/base-list/store/base-list.service.mjs +341 -0
- package/esm2020/lib/components/base-list/store/base-list.store.mjs +81 -0
- package/{esm2015/lib/components/multi-state-list/models/list-states.model.js → esm2020/lib/components/multi-state-list/models/list-states.model.mjs} +0 -0
- package/esm2020/lib/components/multi-state-list/multi-state-list.component.mjs +71 -0
- package/{esm2015/lib/components/multi-state-list/multi-state-list.constant.js → esm2020/lib/components/multi-state-list/multi-state-list.constant.mjs} +0 -0
- package/{esm2015/lib/components/multi-state-list/multi-state-list.module.js → esm2020/lib/components/multi-state-list/multi-state-list.module.mjs} +6 -14
- package/{esm2015/lib/components/multi-state-list/providers/multi-state-filter.service.js → esm2020/lib/components/multi-state-list/providers/multi-state-filter.service.mjs} +0 -0
- package/{esm2015/lib/components/multi-state-list/public-api.js → esm2020/lib/components/multi-state-list/public-api.mjs} +0 -0
- package/{esm2015/lib/components/multi-state-list/store/multi-state-list.query.js → esm2020/lib/components/multi-state-list/store/multi-state-list.query.mjs} +3 -3
- package/{esm2015/lib/components/multi-state-list/store/multi-state-list.service.js → esm2020/lib/components/multi-state-list/store/multi-state-list.service.mjs} +5 -6
- package/esm2020/lib/components/multi-state-list/store/multi-state-list.store.mjs +24 -0
- package/{esm2015/lib/components/public-api.js → esm2020/lib/components/public-api.mjs} +0 -0
- package/esm2020/lib/components/query-builder/filter-selection/filter-selection.component.mjs +41 -0
- package/{esm2015/lib/components/query-builder/pipes/filter-group-icon.pipe.js → esm2020/lib/components/query-builder/pipes/filter-group-icon.pipe.mjs} +3 -3
- package/{esm2015/lib/components/query-builder/providers/filter-group.service.js → esm2020/lib/components/query-builder/providers/filter-group.service.mjs} +0 -0
- package/{esm2015/lib/components/query-builder/public-api.js → esm2020/lib/components/query-builder/public-api.mjs} +0 -0
- package/{esm2015/lib/components/query-builder/query-builder-trigger.directive.js → esm2020/lib/components/query-builder/query-builder-trigger.directive.mjs} +3 -3
- package/esm2020/lib/components/query-builder/query-builder.component.mjs +93 -0
- package/{esm2015/lib/components/query-builder/query-builder.form.js → esm2020/lib/components/query-builder/query-builder.form.mjs} +0 -0
- package/esm2020/lib/components/query-builder/query-builder.module.mjs +116 -0
- package/esm2020/lib/components/query-builder/rule/components/date/date-filter.component.mjs +29 -0
- package/esm2020/lib/components/query-builder/rule/components/filter.component.mjs +45 -0
- package/esm2020/lib/components/query-builder/rule/components/number/number-filter.component.mjs +28 -0
- package/esm2020/lib/components/query-builder/rule/components/radio/radio-filter.component.mjs +30 -0
- package/esm2020/lib/components/query-builder/rule/components/select/select-filter.component.mjs +83 -0
- package/esm2020/lib/components/query-builder/rule/components/text/text-filter.component.mjs +31 -0
- package/esm2020/lib/components/query-builder/rule/rule.component.mjs +78 -0
- package/{esm2015/lib/components/query-builder/utils/qb-filter.utils.js → esm2020/lib/components/query-builder/utils/qb-filter.utils.mjs} +23 -9
- package/{esm2015/lib/models/filter.model.js → esm2020/lib/models/filter.model.mjs} +0 -0
- package/{esm2015/lib/models/public-api.js → esm2020/lib/models/public-api.mjs} +0 -0
- package/{esm2015/lib/models/query.model.js → esm2020/lib/models/query.model.mjs} +0 -0
- package/{esm2015/lib/utils/date.adapter.js → esm2020/lib/utils/date.adapter.mjs} +3 -3
- package/esm2020/lib/utils/filter.utils.mjs +40 -0
- package/{esm2015/lib/utils/public-api.js → esm2020/lib/utils/public-api.mjs} +0 -0
- package/{esm2015/lib/utils/query-params.utils.js → esm2020/lib/utils/query-params.utils.mjs} +0 -0
- package/{esm2015/lib/utils/string.utils.js → esm2020/lib/utils/string.utils.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/{esm2015/recursyve-nice-data-filter-kit.js → esm2020/recursyve-nice-data-filter-kit.mjs} +0 -0
- package/fesm2015/recursyve-nice-data-filter-kit.mjs +2448 -0
- package/fesm2015/recursyve-nice-data-filter-kit.mjs.map +1 -0
- package/fesm2020/recursyve-nice-data-filter-kit.mjs +2446 -0
- package/fesm2020/recursyve-nice-data-filter-kit.mjs.map +1 -0
- package/lib/components/base-list/base-list.module.d.ts +15 -16
- package/lib/components/base-list/models/layout.model.d.ts +0 -4
- package/lib/components/multi-state-list/multi-state-list.module.d.ts +15 -16
- package/lib/components/query-builder/query-builder.module.d.ts +10 -11
- package/lib/components/query-builder/rule/components/filter.component.d.ts +2 -1
- package/package.json +30 -16
- package/src/lib/components/base-list/base-list.theme.scss +5 -5
- package/src/lib/components/query-builder/rule/rule.theme.scss +1 -1
- package/src/lib/nice-data-filter.theme.scss +7 -0
- package/bundles/recursyve-nice-data-filter-kit.umd.js +0 -3173
- package/bundles/recursyve-nice-data-filter-kit.umd.js.map +0 -1
- package/esm2015/lib/api/filter.api.js +0 -52
- package/esm2015/lib/api/saved-report.api.js +0 -49
- package/esm2015/lib/components/base-list/base-list.component.js +0 -297
- package/esm2015/lib/components/base-list/base-list.module.js +0 -180
- package/esm2015/lib/components/base-list/models/layout.model.js +0 -164
- package/esm2015/lib/components/base-list/providers/base-filter.service.js +0 -40
- package/esm2015/lib/components/base-list/store/base-list.query.js +0 -35
- package/esm2015/lib/components/base-list/store/base-list.service.js +0 -330
- package/esm2015/lib/components/base-list/store/base-list.store.js +0 -78
- package/esm2015/lib/components/multi-state-list/multi-state-list.component.js +0 -75
- package/esm2015/lib/components/multi-state-list/store/multi-state-list.store.js +0 -22
- package/esm2015/lib/components/query-builder/filter-selection/filter-selection.component.js +0 -48
- package/esm2015/lib/components/query-builder/query-builder.component.js +0 -100
- package/esm2015/lib/components/query-builder/query-builder.module.js +0 -120
- package/esm2015/lib/components/query-builder/rule/components/date/date-filter.component.js +0 -35
- package/esm2015/lib/components/query-builder/rule/components/filter.component.js +0 -29
- package/esm2015/lib/components/query-builder/rule/components/number/number-filter.component.js +0 -34
- package/esm2015/lib/components/query-builder/rule/components/radio/radio-filter.component.js +0 -36
- package/esm2015/lib/components/query-builder/rule/components/select/select-filter.component.js +0 -94
- package/esm2015/lib/components/query-builder/rule/components/text/text-filter.component.js +0 -37
- package/esm2015/lib/components/query-builder/rule/rule.component.js +0 -86
- package/esm2015/lib/utils/filter.utils.js +0 -41
- package/fesm2015/recursyve-nice-data-filter-kit.js +0 -2503
- package/fesm2015/recursyve-nice-data-filter-kit.js.map +0 -1
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { QueryParamsUtils } from "../utils/query-params.utils";
|
|
2
|
-
export class NiceFilterApi {
|
|
3
|
-
constructor(filterApiUrl, path, http) {
|
|
4
|
-
this.filterApiUrl = filterApiUrl;
|
|
5
|
-
this.path = path;
|
|
6
|
-
this.http = http;
|
|
7
|
-
}
|
|
8
|
-
filter(queryModel) {
|
|
9
|
-
return this.http.post(this.url("filter"), queryModel);
|
|
10
|
-
}
|
|
11
|
-
filterCount(queryModel) {
|
|
12
|
-
return this.http.post(this.url("filter-count"), queryModel);
|
|
13
|
-
}
|
|
14
|
-
downloadData(type, queryModel) {
|
|
15
|
-
return this.http.post(this.url(`download/${type}`), queryModel, { responseType: "blob" });
|
|
16
|
-
}
|
|
17
|
-
getPrintableHtml(queryModel) {
|
|
18
|
-
return this.http.post(this.url(`download/html`), queryModel, { responseType: "text" });
|
|
19
|
-
}
|
|
20
|
-
getFilterConfig() {
|
|
21
|
-
return this.http.get(this.url("filter/config"));
|
|
22
|
-
}
|
|
23
|
-
searchFilterValue(id, value) {
|
|
24
|
-
if (value === undefined) {
|
|
25
|
-
value = "";
|
|
26
|
-
}
|
|
27
|
-
return this.http.get(this.url(`filter/config/value?id=${id}&value=${value}`));
|
|
28
|
-
}
|
|
29
|
-
searchFilterResourceValue(id, resourceId) {
|
|
30
|
-
return this.http.get(this.url(`filter/config/id?id=${id}&resourceId=${resourceId}`));
|
|
31
|
-
}
|
|
32
|
-
url(...args) {
|
|
33
|
-
const [route, queryParams] = this.transformUrlArgs(args);
|
|
34
|
-
const params = queryParams ? `?${QueryParamsUtils.fromObject(queryParams)}` : "";
|
|
35
|
-
if (route) {
|
|
36
|
-
return `${this.filterApiUrl}/${this.path}/${route}${params}`;
|
|
37
|
-
}
|
|
38
|
-
return `${this.filterApiUrl}/${this.path}${params}`;
|
|
39
|
-
}
|
|
40
|
-
transformUrlArgs(args) {
|
|
41
|
-
var _a;
|
|
42
|
-
const [routeOfQueryParams, query] = args;
|
|
43
|
-
if (args.length === 1) {
|
|
44
|
-
if (typeof routeOfQueryParams === "string") {
|
|
45
|
-
return [routeOfQueryParams];
|
|
46
|
-
}
|
|
47
|
-
return ["", routeOfQueryParams];
|
|
48
|
-
}
|
|
49
|
-
return [(_a = routeOfQueryParams) !== null && _a !== void 0 ? _a : "", query];
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtZGF0YS1maWx0ZXIta2l0L3NyYy9saWIvYXBpL2ZpbHRlci5hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFL0QsTUFBTSxPQUFPLGFBQWE7SUFDdEIsWUFBb0IsWUFBb0IsRUFBVSxJQUFZLEVBQVksSUFBZ0I7UUFBdEUsaUJBQVksR0FBWixZQUFZLENBQVE7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVksU0FBSSxHQUFKLElBQUksQ0FBWTtJQUFHLENBQUM7SUFFdkYsTUFBTSxDQUFDLFVBQTRCO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQW9CLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVNLFdBQVcsQ0FBQyxVQUE0QjtRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVNLFlBQVksQ0FBQyxJQUFZLEVBQUUsVUFBNEI7UUFDMUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsVUFBNEI7UUFDaEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFTSxlQUFlO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTZCLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRU0saUJBQWlCLENBQUMsRUFBVSxFQUFFLEtBQWE7UUFDOUMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3JCLEtBQUssR0FBRyxFQUFFLENBQUM7U0FDZDtRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXNCLElBQUksQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsVUFBVSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUVNLHlCQUF5QixDQUFDLEVBQVUsRUFBRSxVQUFrQjtRQUMzRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFvQixJQUFJLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLGVBQWUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFJUyxHQUFHLENBQUMsR0FBRyxJQUFnQztRQUM3QyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6RCxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRixJQUFJLEtBQUssRUFBRTtZQUNQLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDO1NBQ2hFO1FBRUQsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsSUFBZ0M7O1FBQ3JELE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDekMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNuQixJQUFJLE9BQU8sa0JBQWtCLEtBQUssUUFBUSxFQUFFO2dCQUN4QyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQzthQUMvQjtZQUVELE9BQU8sQ0FBQyxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztTQUNuQztRQUVELE9BQU8sQ0FBQyxNQUFDLGtCQUE2QixtQ0FBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWwsIEZpbHRlclF1ZXJ5TW9kZWwsIEZpbHRlclJlc3VsdE1vZGVsLCBTZWxlY3RGaWx0ZXJWYWx1ZSB9IGZyb20gXCIuLi9tb2RlbHMvZmlsdGVyLm1vZGVsXCI7XG5pbXBvcnQgeyBRdWVyeVBhcmFtc1V0aWxzIH0gZnJvbSBcIi4uL3V0aWxzL3F1ZXJ5LXBhcmFtcy51dGlsc1wiO1xuXG5leHBvcnQgY2xhc3MgTmljZUZpbHRlckFwaTxUPiB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBmaWx0ZXJBcGlVcmw6IHN0cmluZywgcHJpdmF0ZSBwYXRoOiBzdHJpbmcsIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50KSB7fVxuXG4gICAgcHVibGljIGZpbHRlcihxdWVyeU1vZGVsOiBGaWx0ZXJRdWVyeU1vZGVsKTogT2JzZXJ2YWJsZTxGaWx0ZXJSZXN1bHRNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8RmlsdGVyUmVzdWx0TW9kZWw+KHRoaXMudXJsKFwiZmlsdGVyXCIpLCBxdWVyeU1vZGVsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmlsdGVyQ291bnQocXVlcnlNb2RlbDogRmlsdGVyUXVlcnlNb2RlbCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxudW1iZXI+KHRoaXMudXJsKFwiZmlsdGVyLWNvdW50XCIpLCBxdWVyeU1vZGVsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZG93bmxvYWREYXRhKHR5cGU6IHN0cmluZywgcXVlcnlNb2RlbDogRmlsdGVyUXVlcnlNb2RlbCk6IE9ic2VydmFibGU8QmxvYj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy51cmwoYGRvd25sb2FkLyR7dHlwZX1gKSwgcXVlcnlNb2RlbCwgeyByZXNwb25zZVR5cGU6IFwiYmxvYlwiIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQcmludGFibGVIdG1sKHF1ZXJ5TW9kZWw6IEZpbHRlclF1ZXJ5TW9kZWwpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy51cmwoYGRvd25sb2FkL2h0bWxgKSwgcXVlcnlNb2RlbCwgeyByZXNwb25zZVR5cGU6IFwidGV4dFwiIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWx0ZXJDb25maWcoKTogT2JzZXJ2YWJsZTxGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWxbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWxbXT4odGhpcy51cmwoXCJmaWx0ZXIvY29uZmlnXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VhcmNoRmlsdGVyVmFsdWUoaWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IE9ic2VydmFibGU8U2VsZWN0RmlsdGVyVmFsdWVbXT4ge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8U2VsZWN0RmlsdGVyVmFsdWVbXT4odGhpcy51cmwoYGZpbHRlci9jb25maWcvdmFsdWU/aWQ9JHtpZH0mdmFsdWU9JHt2YWx1ZX1gKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaEZpbHRlclJlc291cmNlVmFsdWUoaWQ6IHN0cmluZywgcmVzb3VyY2VJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxTZWxlY3RGaWx0ZXJWYWx1ZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxTZWxlY3RGaWx0ZXJWYWx1ZT4odGhpcy51cmwoYGZpbHRlci9jb25maWcvaWQ/aWQ9JHtpZH0mcmVzb3VyY2VJZD0ke3Jlc291cmNlSWR9YCkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB1cmwocm91dGU/OiBzdHJpbmcsIHF1ZXJ5UGFyYW1zPzogb2JqZWN0KTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCB1cmwocXVlcnlQYXJhbXM6IG9iamVjdCk6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgdXJsKC4uLmFyZ3M6IFtzdHJpbmcgfCBvYmplY3QsIG9iamVjdD9dKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgW3JvdXRlLCBxdWVyeVBhcmFtc10gPSB0aGlzLnRyYW5zZm9ybVVybEFyZ3MoYXJncyk7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHF1ZXJ5UGFyYW1zID8gYD8ke1F1ZXJ5UGFyYW1zVXRpbHMuZnJvbU9iamVjdChxdWVyeVBhcmFtcyl9YCA6IFwiXCI7XG4gICAgICAgIGlmIChyb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuZmlsdGVyQXBpVXJsfS8ke3RoaXMucGF0aH0vJHtyb3V0ZX0ke3BhcmFtc31gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZmlsdGVyQXBpVXJsfS8ke3RoaXMucGF0aH0ke3BhcmFtc31gO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtVXJsQXJncyhhcmdzOiBbc3RyaW5nIHwgb2JqZWN0LCBvYmplY3Q/XSk6IFtyb3V0ZTogc3RyaW5nLCBxdWVyeVBhcmFtcz86IG9iamVjdF0ge1xuICAgICAgICBjb25zdCBbcm91dGVPZlF1ZXJ5UGFyYW1zLCBxdWVyeV0gPSBhcmdzO1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygcm91dGVPZlF1ZXJ5UGFyYW1zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtyb3V0ZU9mUXVlcnlQYXJhbXNdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gW1wiXCIsIHJvdXRlT2ZRdWVyeVBhcmFtc107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gWyhyb3V0ZU9mUXVlcnlQYXJhbXMgYXMgc3RyaW5nKSA/PyBcIlwiLCBxdWVyeV07XG4gICAgfVxufVxuIl19
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { QueryParamsUtils } from "../utils/query-params.utils";
|
|
2
|
-
export class NiceSavedReportsApi {
|
|
3
|
-
constructor(filterApiUrl, path, http) {
|
|
4
|
-
this.filterApiUrl = filterApiUrl;
|
|
5
|
-
this.path = path;
|
|
6
|
-
this.http = http;
|
|
7
|
-
}
|
|
8
|
-
create(dto) {
|
|
9
|
-
return this.http.post(this.url(), dto);
|
|
10
|
-
}
|
|
11
|
-
getAll() {
|
|
12
|
-
return this.http.get(this.url());
|
|
13
|
-
}
|
|
14
|
-
getByTable(table) {
|
|
15
|
-
return this.http.get(this.url(`${table}`));
|
|
16
|
-
}
|
|
17
|
-
getTopByTable(table) {
|
|
18
|
-
return this.http.get(this.url(`${table}/top`));
|
|
19
|
-
}
|
|
20
|
-
hit(id) {
|
|
21
|
-
return this.http.put(this.url(`${id}/hit`), null);
|
|
22
|
-
}
|
|
23
|
-
update(id, dto) {
|
|
24
|
-
return this.http.put(this.url(`${id}`), dto);
|
|
25
|
-
}
|
|
26
|
-
delete(id) {
|
|
27
|
-
return this.http.delete(this.url(`${id}`));
|
|
28
|
-
}
|
|
29
|
-
url(...args) {
|
|
30
|
-
const [route, queryParams] = this.transformUrlArgs(args);
|
|
31
|
-
const params = queryParams ? `?${QueryParamsUtils.fromObject(queryParams)}` : "";
|
|
32
|
-
if (route) {
|
|
33
|
-
return `${this.filterApiUrl}/${this.path}/${route}${params}`;
|
|
34
|
-
}
|
|
35
|
-
return `${this.filterApiUrl}/${this.path}${params}`;
|
|
36
|
-
}
|
|
37
|
-
transformUrlArgs(args) {
|
|
38
|
-
var _a;
|
|
39
|
-
const [routeOfQueryParams, query] = args;
|
|
40
|
-
if (args.length === 1) {
|
|
41
|
-
if (typeof routeOfQueryParams === "string") {
|
|
42
|
-
return [routeOfQueryParams];
|
|
43
|
-
}
|
|
44
|
-
return ["", routeOfQueryParams];
|
|
45
|
-
}
|
|
46
|
-
return [(_a = routeOfQueryParams) !== null && _a !== void 0 ? _a : "", query];
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZWQtcmVwb3J0LmFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtZGF0YS1maWx0ZXIta2l0L3NyYy9saWIvYXBpL3NhdmVkLXJlcG9ydC5hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFJL0QsTUFBTSxPQUFPLG1CQUFtQjtJQUM1QixZQUFvQixZQUFvQixFQUFVLElBQVksRUFBWSxJQUFnQjtRQUF0RSxpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQUFVLFNBQUksR0FBSixJQUFJLENBQVE7UUFBWSxTQUFJLEdBQUosSUFBSSxDQUFZO0lBQUcsQ0FBQztJQUV2RixNQUFNLENBQUMsR0FBdUI7UUFDakMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBbUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFTSxNQUFNO1FBQ1QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBcUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFhO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXFCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVNLGFBQWEsQ0FBQyxLQUF5QjtRQUMxQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFxQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTSxHQUFHLENBQUMsRUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTSxNQUFNLENBQUMsRUFBVSxFQUFFLEdBQXVCO1FBQzdDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQW1CLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTSxNQUFNLENBQUMsRUFBVTtRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUlTLEdBQUcsQ0FBQyxHQUFHLElBQWdDO1FBQzdDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pELE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pGLElBQUksS0FBSyxFQUFFO1lBQ1AsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUM7U0FDaEU7UUFFRCxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFnQzs7UUFDckQsTUFBTSxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztRQUN6QyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ25CLElBQUksT0FBTyxrQkFBa0IsS0FBSyxRQUFRLEVBQUU7Z0JBQ3hDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2FBQy9CO1lBRUQsT0FBTyxDQUFDLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1NBQ25DO1FBRUQsT0FBTyxDQUFDLE1BQUMsa0JBQTZCLG1DQUFJLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IFF1ZXJ5UGFyYW1zVXRpbHMgfSBmcm9tIFwiLi4vdXRpbHMvcXVlcnktcGFyYW1zLnV0aWxzXCI7XG5pbXBvcnQgeyBOaWNlU2F2ZWRSZXBvcnREdG8gfSBmcm9tIFwiLi9kdG8vc2F2ZWQtcmVwb3J0cy5kdG9cIjtcbmltcG9ydCB7IE5pY2VTYXZlZFJlcG9ydHMgfSBmcm9tIFwiLi9tb2RlbHMvc2F2ZWQtcmVwb3J0cy5tb2RlbFwiO1xuXG5leHBvcnQgY2xhc3MgTmljZVNhdmVkUmVwb3J0c0FwaSB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBmaWx0ZXJBcGlVcmw6IHN0cmluZywgcHJpdmF0ZSBwYXRoOiBzdHJpbmcsIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50KSB7fVxuXG4gICAgcHVibGljIGNyZWF0ZShkdG86IE5pY2VTYXZlZFJlcG9ydER0byk6IE9ic2VydmFibGU8TmljZVNhdmVkUmVwb3J0cz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8TmljZVNhdmVkUmVwb3J0cz4odGhpcy51cmwoKSwgZHRvKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxsKCk6IE9ic2VydmFibGU8TmljZVNhdmVkUmVwb3J0c1tdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5pY2VTYXZlZFJlcG9ydHNbXT4odGhpcy51cmwoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEJ5VGFibGUodGFibGU6IHN0cmluZyk6IE9ic2VydmFibGU8TmljZVNhdmVkUmVwb3J0c1tdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5pY2VTYXZlZFJlcG9ydHNbXT4odGhpcy51cmwoYCR7dGFibGV9YCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb3BCeVRhYmxlKHRhYmxlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPE5pY2VTYXZlZFJlcG9ydHNbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOaWNlU2F2ZWRSZXBvcnRzW10+KHRoaXMudXJsKGAke3RhYmxlfS90b3BgKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGhpdChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PHZvaWQ+KHRoaXMudXJsKGAke2lkfS9oaXRgKSwgbnVsbCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZShpZDogbnVtYmVyLCBkdG86IE5pY2VTYXZlZFJlcG9ydER0byk6IE9ic2VydmFibGU8TmljZVNhdmVkUmVwb3J0cz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxOaWNlU2F2ZWRSZXBvcnRzPih0aGlzLnVybChgJHtpZH1gKSwgZHRvKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8dm9pZD4odGhpcy51cmwoYCR7aWR9YCkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB1cmwocm91dGU/OiBzdHJpbmcsIHF1ZXJ5UGFyYW1zPzogb2JqZWN0KTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCB1cmwocXVlcnlQYXJhbXM6IG9iamVjdCk6IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgdXJsKC4uLmFyZ3M6IFtzdHJpbmcgfCBvYmplY3QsIG9iamVjdD9dKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgW3JvdXRlLCBxdWVyeVBhcmFtc10gPSB0aGlzLnRyYW5zZm9ybVVybEFyZ3MoYXJncyk7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHF1ZXJ5UGFyYW1zID8gYD8ke1F1ZXJ5UGFyYW1zVXRpbHMuZnJvbU9iamVjdChxdWVyeVBhcmFtcyl9YCA6IFwiXCI7XG4gICAgICAgIGlmIChyb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuZmlsdGVyQXBpVXJsfS8ke3RoaXMucGF0aH0vJHtyb3V0ZX0ke3BhcmFtc31gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZmlsdGVyQXBpVXJsfS8ke3RoaXMucGF0aH0ke3BhcmFtc31gO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtVXJsQXJncyhhcmdzOiBbc3RyaW5nIHwgb2JqZWN0LCBvYmplY3Q/XSk6IFtyb3V0ZTogc3RyaW5nLCBxdWVyeVBhcmFtcz86IG9iamVjdF0ge1xuICAgICAgICBjb25zdCBbcm91dGVPZlF1ZXJ5UGFyYW1zLCBxdWVyeV0gPSBhcmdzO1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygcm91dGVPZlF1ZXJ5UGFyYW1zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtyb3V0ZU9mUXVlcnlQYXJhbXNdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gW1wiXCIsIHJvdXRlT2ZRdWVyeVBhcmFtc107XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gWyhyb3V0ZU9mUXVlcnlQYXJhbXMgYXMgc3RyaW5nKSA/PyBcIlwiLCBxdWVyeV07XG4gICAgfVxufVxuIl19
|
|
@@ -1,297 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
|
-
import { Component, ContentChild, ContentChildren, EventEmitter, Inject, Input, Optional, Output, TemplateRef } from "@angular/core";
|
|
3
|
-
import { MediaObserver } from "@angular/flex-layout";
|
|
4
|
-
import { MatBottomSheet } from "@angular/material/bottom-sheet";
|
|
5
|
-
import { ActivatedRoute, Router } from "@angular/router";
|
|
6
|
-
import { ExportBottomSheetComponent } from "@recursyve/nice-ui-kit.v2";
|
|
7
|
-
import { Subject } from "rxjs";
|
|
8
|
-
import { debounceTime, distinctUntilChanged, map, switchMap } from "rxjs/operators";
|
|
9
|
-
import { BASE_LIST_LAYOUT, ENABLE_QUERY_BUILDER, EXPORTS_SETTINGS, TABLE_COLUMNS } from "./base-list.constant";
|
|
10
|
-
import { NiceBaseListButtonsDirective } from "./directives/base-list-buttons.directive";
|
|
11
|
-
import { NiceBaseListCardsDirective } from "./directives/base-list-cards.directive";
|
|
12
|
-
import { NiceBaseListCustomContentDirective } from "./directives/base-list-custom-content.directive";
|
|
13
|
-
import { NiceBaseListFiltersDirective } from "./directives/base-list-filters.directive";
|
|
14
|
-
import { NiceBaseListTableDirective } from "./directives/base-list-table.directive";
|
|
15
|
-
import { NiceBaseListTitleDirective } from "./directives/base-list-title.directive";
|
|
16
|
-
import { LayoutContent } from "./models/layout.model";
|
|
17
|
-
import { NiceBaseListQuery } from "./store/base-list.query";
|
|
18
|
-
import { NiceBaseListService } from "./store/base-list.service";
|
|
19
|
-
import { NiceBaseListStore } from "./store/base-list.store";
|
|
20
|
-
import * as i0 from "@angular/core";
|
|
21
|
-
import * as i1 from "./store/base-list.query";
|
|
22
|
-
import * as i2 from "./store/base-list.service";
|
|
23
|
-
import * as i3 from "@angular/router";
|
|
24
|
-
import * as i4 from "@angular/material/bottom-sheet";
|
|
25
|
-
import * as i5 from "@angular/flex-layout";
|
|
26
|
-
import * as i6 from "@angular/material/icon";
|
|
27
|
-
import * as i7 from "@angular/material/button";
|
|
28
|
-
import * as i8 from "@angular/material/paginator";
|
|
29
|
-
import * as i9 from "@angular/material/card";
|
|
30
|
-
import * as i10 from "../query-builder/query-builder.component";
|
|
31
|
-
import * as i11 from "@angular/material/table";
|
|
32
|
-
import * as i12 from "@angular/material/sort";
|
|
33
|
-
import * as i13 from "@angular/common";
|
|
34
|
-
import * as i14 from "@angular/forms";
|
|
35
|
-
import * as i15 from "../query-builder/query-builder-trigger.directive";
|
|
36
|
-
import * as i16 from "@angular/material/tooltip";
|
|
37
|
-
import * as i17 from "@angular/material/badge";
|
|
38
|
-
import * as i18 from "@recursyve/nice-ui-kit.v2";
|
|
39
|
-
import * as i19 from "@angular/material/core";
|
|
40
|
-
import * as i20 from "@ngx-translate/core";
|
|
41
|
-
export class NiceBaseListComponent {
|
|
42
|
-
constructor(enableQueryBuilder, listLayout, columns, exportsSettings, query, service, activatedRoute, bottomSheet, router, mediaObserver) {
|
|
43
|
-
this.enableQueryBuilder = enableQueryBuilder;
|
|
44
|
-
this.listLayout = listLayout;
|
|
45
|
-
this.columns = columns;
|
|
46
|
-
this.exportsSettings = exportsSettings;
|
|
47
|
-
this.query = query;
|
|
48
|
-
this.service = service;
|
|
49
|
-
this.activatedRoute = activatedRoute;
|
|
50
|
-
this.bottomSheet = bottomSheet;
|
|
51
|
-
this.router = router;
|
|
52
|
-
this.mediaObserver = mediaObserver;
|
|
53
|
-
this.mode = "normal";
|
|
54
|
-
this.layout = "page";
|
|
55
|
-
this.layoutContent = LayoutContent.Table;
|
|
56
|
-
this.autoChangeLayout = true;
|
|
57
|
-
this.autoLoad = true;
|
|
58
|
-
this.canExport = true;
|
|
59
|
-
this.disableRouting = false;
|
|
60
|
-
this.customExport = [];
|
|
61
|
-
this.newPage = new EventEmitter();
|
|
62
|
-
this.defaultPageSizeOptions = [10, 25, 50, 100];
|
|
63
|
-
this.columnNames = [];
|
|
64
|
-
this.loading$ = this.query.selectLoading();
|
|
65
|
-
this.filterResult$ = this.query.selectFilterResult();
|
|
66
|
-
this.data$ = this.query.selectData();
|
|
67
|
-
this.recordsFiltered$ = this.filterResult$.pipe(map(f => f && f.total));
|
|
68
|
-
this.showQueryBuilder$ = this.query.selectShowQueryBuilder();
|
|
69
|
-
this.filterParameters$ = this.query.selectFilterParameters();
|
|
70
|
-
this.index$ = this.filterParameters$.pipe(map(f => { var _a, _b; return Math.floor(((_a = f.start) !== null && _a !== void 0 ? _a : 0) / ((_b = f.length) !== null && _b !== void 0 ? _b : 1)); }));
|
|
71
|
-
this.length$ = this.filterParameters$.pipe(map(f => f.length));
|
|
72
|
-
this.isEmpty$ = this.recordsFiltered$.pipe(map(r => r === 0));
|
|
73
|
-
this.searchQuery$ = this.filterParameters$.pipe(map(f => f.search));
|
|
74
|
-
this.filterConfig$ = this.query.selectFilterConfig();
|
|
75
|
-
this.sortColumn$ = this.filterParameters$.pipe(map(f => { var _a; return (_a = (f.order && f.order.column)) !== null && _a !== void 0 ? _a : ""; }));
|
|
76
|
-
this.sortDirection$ = this.filterParameters$.pipe(map(f => f.order && f.order.direction));
|
|
77
|
-
this.filterConfigLoading$ = this.query.selectFilterConfigLoading();
|
|
78
|
-
this.rules$ = this.filterParameters$.pipe(map(parameters => parameters.rules));
|
|
79
|
-
this.rulesCount$ = this.filterParameters$.pipe(map(parameters => { var _a, _b; return (_b = (_a = parameters.rules) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0; }));
|
|
80
|
-
this.searchText$ = new Subject();
|
|
81
|
-
this.setColumn(columns);
|
|
82
|
-
}
|
|
83
|
-
get prefixButtons() {
|
|
84
|
-
var _a, _b;
|
|
85
|
-
return (_b = (_a = this.buttons) === null || _a === void 0 ? void 0 : _a.find(x => x.position === "prefix")) === null || _b === void 0 ? void 0 : _b.template;
|
|
86
|
-
}
|
|
87
|
-
get suffixButtons() {
|
|
88
|
-
var _a, _b;
|
|
89
|
-
return (_b = (_a = this.buttons) === null || _a === void 0 ? void 0 : _a.find(x => x.position === "suffix")) === null || _b === void 0 ? void 0 : _b.template;
|
|
90
|
-
}
|
|
91
|
-
ngOnInit() {
|
|
92
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
93
|
-
yield this.service.init();
|
|
94
|
-
this.service.loadQueryParams(this.autoLoad);
|
|
95
|
-
this.searchText$
|
|
96
|
-
.pipe(debounceTime(300), distinctUntilChanged(), switchMap((search) => {
|
|
97
|
-
this.service.resetPaging();
|
|
98
|
-
return this.service.searchData(search);
|
|
99
|
-
}))
|
|
100
|
-
.subscribe();
|
|
101
|
-
this.mediaObserver.asObservable().subscribe(() => {
|
|
102
|
-
if (!this.autoChangeLayout) {
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
if (this.mediaObserver.isActive("lt-md") && this.layoutContent === LayoutContent.Table) {
|
|
106
|
-
this.layoutContent = LayoutContent.Cards;
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
this.layoutContent = LayoutContent.Table;
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
ngOnDestroy() {
|
|
115
|
-
this.service.closeSubscriptions();
|
|
116
|
-
}
|
|
117
|
-
ngOnChanges(changes) {
|
|
118
|
-
if ("mode" in changes) {
|
|
119
|
-
this.service.setMode(changes.mode.currentValue);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
setLoading(loading) {
|
|
123
|
-
this.service.setLoading(loading);
|
|
124
|
-
}
|
|
125
|
-
clickToggleShowQueryBuilder() {
|
|
126
|
-
this.service.toggleQueryBuilder();
|
|
127
|
-
}
|
|
128
|
-
onUpdateRules(rules) {
|
|
129
|
-
this.service.updateGlobalRules(rules);
|
|
130
|
-
}
|
|
131
|
-
onQueryBuilderFilterSelected(filterConfigurationModel) {
|
|
132
|
-
this.service.addRuleFromConfig(filterConfigurationModel);
|
|
133
|
-
}
|
|
134
|
-
onUpdatePage(pageEvent) {
|
|
135
|
-
this.service.loadNewPage(pageEvent.pageIndex * pageEvent.pageSize, pageEvent.pageSize);
|
|
136
|
-
this.newPage.emit(pageEvent);
|
|
137
|
-
}
|
|
138
|
-
onUpdateSearch(search) {
|
|
139
|
-
this.searchText$.next(search);
|
|
140
|
-
}
|
|
141
|
-
getFilterRule$(id) {
|
|
142
|
-
return this.filterParameters$.pipe(map(f => {
|
|
143
|
-
return (f.rules &&
|
|
144
|
-
f.rules[0] &&
|
|
145
|
-
f.rules[0].rules &&
|
|
146
|
-
f.rules[0].rules.find((r) => r.id === id));
|
|
147
|
-
}));
|
|
148
|
-
}
|
|
149
|
-
onUpdateSort(sort) {
|
|
150
|
-
if (!sort.active || !sort.direction) {
|
|
151
|
-
sort = {
|
|
152
|
-
active: "id",
|
|
153
|
-
direction: "asc"
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
this.service.loadData({
|
|
157
|
-
order: sort.active && sort.direction ? { column: sort.active, direction: sort.direction } : null
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
updateRule(id, newRule) {
|
|
161
|
-
this.service.updateRule(id, newRule);
|
|
162
|
-
}
|
|
163
|
-
updateRules(rules) {
|
|
164
|
-
this.service.updateRules(rules);
|
|
165
|
-
}
|
|
166
|
-
clickExport() {
|
|
167
|
-
const exports = [];
|
|
168
|
-
if (this.exportsSettings.xlsx) {
|
|
169
|
-
exports.push({
|
|
170
|
-
type: "xlsx",
|
|
171
|
-
onClickExport: () => this.clickXlsx()
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
else if (this.exportsSettings.csv) {
|
|
175
|
-
exports.push({
|
|
176
|
-
type: "csv",
|
|
177
|
-
onClickExport: () => this.clickCsv()
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
else if (this.exportsSettings.pdf) {
|
|
181
|
-
exports.push({
|
|
182
|
-
type: "pdf",
|
|
183
|
-
onClickExport: () => this.clickPdf()
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
this.bottomSheet.open(ExportBottomSheetComponent, {
|
|
187
|
-
data: {
|
|
188
|
-
exportStrategies: [
|
|
189
|
-
...exports,
|
|
190
|
-
...this.customExport
|
|
191
|
-
]
|
|
192
|
-
}
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
navigate(item) {
|
|
196
|
-
if (this.navigateFn) {
|
|
197
|
-
this.navigateFn(this.baseRoute, item);
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
const route = this.routeFn ? this.routeFn(item) : [(this.baseRoute || "") + (item === null || item === void 0 ? void 0 : item.id)];
|
|
201
|
-
this.router.navigate(typeof route === "string" ? [route] : route, { relativeTo: this.activatedRoute });
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
clickXlsx() {
|
|
205
|
-
this.service.downloadData("xlsx");
|
|
206
|
-
}
|
|
207
|
-
clickCsv() {
|
|
208
|
-
this.service.downloadData("csv");
|
|
209
|
-
}
|
|
210
|
-
clickPrint() {
|
|
211
|
-
this.service.printData();
|
|
212
|
-
}
|
|
213
|
-
clickPdf() {
|
|
214
|
-
this.service.downloadData("pdf");
|
|
215
|
-
}
|
|
216
|
-
setColumn(columns) {
|
|
217
|
-
this.columns = columns;
|
|
218
|
-
this.columnNames = columns.map(x => x.id);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
NiceBaseListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.0", ngImport: i0, type: NiceBaseListComponent, deps: [{ token: ENABLE_QUERY_BUILDER, optional: true }, { token: BASE_LIST_LAYOUT }, { token: TABLE_COLUMNS }, { token: EXPORTS_SETTINGS }, { token: i1.NiceBaseListQuery }, { token: i2.NiceBaseListService }, { token: i3.ActivatedRoute }, { token: i4.MatBottomSheet }, { token: i3.Router }, { token: i5.MediaObserver }], target: i0.ɵɵFactoryTarget.Component });
|
|
222
|
-
NiceBaseListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.0", type: NiceBaseListComponent, selector: "nice-base-list", inputs: { mode: "mode", layout: "layout", layoutContent: "layoutContent", autoChangeLayout: "autoChangeLayout", baseRoute: "baseRoute", routeFn: "routeFn", navigateFn: "navigateFn", autoLoad: "autoLoad", pageTitle: "pageTitle", canExport: "canExport", disableRouting: "disableRouting", customExport: "customExport" }, outputs: { newPage: "newPage" }, providers: [
|
|
223
|
-
NiceBaseListQuery,
|
|
224
|
-
NiceBaseListService,
|
|
225
|
-
NiceBaseListStore
|
|
226
|
-
], queries: [{ propertyName: "title", first: true, predicate: NiceBaseListTitleDirective, descendants: true, read: TemplateRef }, { propertyName: "table", first: true, predicate: NiceBaseListTableDirective, descendants: true, read: TemplateRef }, { propertyName: "cards", first: true, predicate: NiceBaseListCardsDirective, descendants: true, read: TemplateRef }, { propertyName: "customContent", first: true, predicate: NiceBaseListCustomContentDirective, descendants: true, read: TemplateRef }, { propertyName: "filters", first: true, predicate: NiceBaseListFiltersDirective, descendants: true, read: TemplateRef }, { propertyName: "buttons", predicate: NiceBaseListButtonsDirective }], usesOnChanges: true, ngImport: i0, template: "<div class=\"list page-layout carded fullwidth inner-scroll\" *ngIf=\"layout === 'page'; else content\">\n <div class=\"center\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n</div>\n\n<ng-template #content>\n <ng-container *ngIf=\"listLayout.xl\">\n <div fxHide fxShow.xl>\n <ng-container *ngTemplateOutlet=\"pageLayout; context: { layout: listLayout.xl }\"></ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"listLayout.lg\">\n <div fxHide fxShow.lg>\n <ng-container *ngTemplateOutlet=\"pageLayout; context: { layout: listLayout.lg }\"></ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"listLayout.md\">\n <div fxHide fxShow.md>\n <ng-container *ngTemplateOutlet=\"pageLayout; context: { layout: listLayout.md }\"></ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"listLayout.sm\">\n <div fxHide fxShow.sm>\n <ng-container *ngTemplateOutlet=\"pageLayout; context: { layout: listLayout.sm }\"></ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"listLayout.xs\">\n <div fxHide fxShow.xs>\n <ng-container *ngTemplateOutlet=\"pageLayout; context: { layout: listLayout.xs }\"></ng-container>\n </div>\n </ng-container>\n\n <div\n [fxHide.xs]=\"!!listLayout.xs\"\n [fxHide.sm]=\"!!listLayout.sm\"\n [fxHide.md]=\"!!listLayout.md\"\n [fxHide.lg]=\"!!listLayout.lg\"\n [fxHide.xl]=\"!!listLayout.xl\"\n >\n <ng-container *ngTemplateOutlet=\"pageLayout; context: { layout: listLayout.default }\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #pageLayout let-layout=\"layout\">\n <ng-container *ngIf=\"layout?.length; else isObject\">\n <ng-container *ngTemplateOutlet=\"contentLayout; context: { layout: { type: 'column', items: layout } }\"></ng-container>\n </ng-container>\n\n <ng-template #isObject>\n <ng-container *ngTemplateOutlet=\"contentLayout; context: { layout: layout }\"></ng-container>\n </ng-template>\n</ng-template>\n\n<ng-template #contentLayout let-layout=\"layout\">\n <div [fxFlex]=\"layout.flex\" [fxLayout]=\"layout.type\" [fxLayoutAlign]=\"layout.align || ''\" [ngClass]=\"layout.classes\">\n <ng-container *ngFor=\"let item of layout.items\">\n <ng-container *ngIf=\"item.name; else childIsLayout\">\n <ng-container *ngTemplateOutlet=\"layoutItem; context: { item: item }\"></ng-container>\n </ng-container>\n <ng-template #childIsLayout>\n <ng-container *ngTemplateOutlet=\"contentLayout; context: { layout: item }\"></ng-container>\n </ng-template>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #layoutItem let-item=\"item\">\n <ng-container *ngIf=\"item.name === 'title' && title\">\n <div [fxFlex]=\"item.flex\" [ngClass]=\"item.classes\">\n <ng-container *ngTemplateOutlet=\"title\"></ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"item.name === 'search'\">\n <div [fxFlex]=\"item.flex\" [fxLayoutAlign]=\"item.align || ''\" [ngClass]=\"item.classes\">\n <div class=\"search-wrapper mx-md-0\">\n <div class=\"search\" fxFlex fxLayout=\"row\" fxLayoutAlign=\"start center\">\n <mat-icon>search</mat-icon>\n <input [ngModel]=\"searchQuery$ | async\" (ngModelChange)=\"onUpdateSearch($event)\" [placeholder]=\"'general.search' | translate\" />\n <ng-container *ngIf=\"enableQueryBuilder\">\n <button\n *ngIf=\"!(showQueryBuilder$ | async) && !(rulesCount$ | async)\"\n mat-icon-button\n niceQueryBuilderTrigger\n [queryBuilderFilters]=\"filterConfig$ | async\"\n [queryBuilderFiltersLoading]=\"(filterConfigLoading$ | async) || false\"\n (queryBuilderFilterSelected)=\"onQueryBuilderFilterSelected($event)\"\n [matTooltip]=\"'general.query_builder.show_advanced_search' | translate\"\n >\n <mat-icon\n [matBadge]=\"rulesCount$ | async\"\n [matBadgeHidden]=\"!(rulesCount$ | async)\"\n matBadgeColor=\"accent\"\n >\n filter_list\n </mat-icon>\n </button>\n <button\n mat-icon-button\n *ngIf=\"!(showQueryBuilder$ | async) && (rulesCount$ | async)\"\n [disabled]=\"filterConfigLoading$ | async\"\n (click)=\"clickToggleShowQueryBuilder()\"\n [matTooltip]=\"'general.query_builder.show_advanced_search' | translate\"\n >\n <mat-icon\n [matBadge]=\"rulesCount$ | async\"\n [matBadgeHidden]=\"!(rulesCount$ | async)\"\n matBadgeColor=\"accent\"\n >\n filter_list\n </mat-icon>\n </button>\n <button\n mat-icon-button\n *ngIf=\"showQueryBuilder$ | async\"\n (click)=\"clickToggleShowQueryBuilder()\"\n [matTooltip]=\"'general.query_builder.close_advanced_search' | translate\"\n >\n <mat-icon>\n clear\n </mat-icon>\n </button>\n </ng-container>\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"item.name === 'prefixButtons' && prefixButtons\">\n <div [fxFlex]=\"item.flex\" [fxLayoutAlign]=\"item.align || ''\" [ngClass]=\"item.classes\">\n <ng-container *ngTemplateOutlet=\"prefixButtons\"></ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"item.name === 'suffixButtons' && suffixButtons\">\n <div [fxFlex]=\"item.flex\" [fxLayoutAlign]=\"item.align || ''\" [ngClass]=\"item.classes\">\n <ng-container *ngTemplateOutlet=\"suffixButtons\"></ng-container>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"item.name === 'exportButtons' && canExport\">\n <div [fxFlex]=\"item.flex\" [fxLayoutAlign]=\"item.align || ''\" [ngClass]=\"item.classes\" [class.mr-2]=\"!!suffixButtons\" [class.ml-2]=\"!!prefixButtons\">\n <button\n (click)=\"clickPrint()\"\n [disabled]=\"loading$ | async\"\n [matTooltip]=\"'general.print' | translate\"\n class=\"list-button mr-2\"\n mat-mini-fab\n >\n <mat-icon>print</mat-icon>\n </button>\n\n <button\n (click)=\"clickExport()\"\n [disabled]=\"loading$ | async\"\n [matTooltip]=\"'general.export' | translate\"\n class=\"list-button mr-2\"\n mat-mini-fab\n >\n <mat-icon>cloud_download</mat-icon>\n </button>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"item.name === 'content'\">\n <ng-container *ngIf=\"layoutContent === 'table' && table\">\n <ng-container *ngTemplateOutlet=\"tableLayout; context: { item: item }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"layoutContent === 'cards' && cards\">\n <ng-container *ngTemplateOutlet=\"cardsLayout; context: { item: item }\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"layoutContent === 'custom' && customContent\">\n <ng-container *ngTemplateOutlet=\"customLayout; context: { item: item }\"></ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"item.name === 'pagination' && layoutContent !== 'custom'\">\n <div [fxFlex]=\"item.flex\" [ngClass]=\"item.classes\">\n <mat-paginator\n (page)=\"onUpdatePage($event)\"\n [length]=\"recordsFiltered$ | async\"\n [pageIndex]=\"index$ | async\"\n [pageSizeOptions]=\"defaultPageSizeOptions\"\n [pageSize]=\"length$ | async\"\n [showFirstLastButtons]=\"true\"\n >\n </mat-paginator>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"item.name === 'queryBuilder' && enableQueryBuilder\">\n <div fxLayout=\"column\" *ngIf=\"showQueryBuilder$ | async\">\n <mat-card class=\"my-4\" [niceLoadingOverlay]=\"filterConfigLoading$ | async\">\n <mat-card-content fxLayout=\"column\">\n <div fxFlex>\n <nice-query-builder\n [filterConfigs]=\"filterConfig$ | async\"\n [ngModel]=\"rules$ | async\"\n (ngModelChange)=\"onUpdateRules($event)\"\n (close)=\"clickToggleShowQueryBuilder()\"\n ></nice-query-builder>\n </div>\n </mat-card-content>\n </mat-card>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"item.name === 'filters' && filters\">\n <div [fxFlex]=\"item.flex\" [fxLayoutAlign]=\"item.align || ''\" [ngClass]=\"item.classes\">\n <ng-container *ngTemplateOutlet=\"filters\"></ng-container>\n </div>\n </ng-container>\n</ng-template>\n\n<ng-template #tableLayout let-item=\"item\">\n <div [fxFlex]=\"item.flex\" [ngClass]=\"item.classes\">\n <div\n [niceLoadingOverlay]=\"loading$ | async\"\n class=\"content-card base-list\"\n fxLayout=\"column\"\n fxLayoutAlign=\"space-between\"\n >\n <mat-table\n (matSortChange)=\"onUpdateSort($event)\"\n [dataSource]=\"data$\"\n [matSortActive]=\"(sortColumn$ | async) || ''\"\n [matSortDirection]=\"(sortDirection$ | async) || ''\"\n fxFlex=\"1 1 auto\"\n matSort\n >\n <mat-header-row *matHeaderRowDef=\"columnNames; sticky: true\"></mat-header-row>\n\n <ng-container *ngFor=\"let column of columns\" [matColumnDef]=\"column.id\">\n <ng-container *ngIf=\"column.sortable\">\n <mat-header-cell *matHeaderCellDef mat-sort-header>\n <ng-container\n *ngTemplateOutlet=\"table; context: { column: column.id, header: true }\"\n ></ng-container>\n </mat-header-cell>\n </ng-container>\n <ng-container *ngIf=\"!column.sortable\">\n <mat-header-cell *matHeaderCellDef>\n <ng-container\n *ngTemplateOutlet=\"table; context: { column: column.id, header: true }\"\n ></ng-container>\n </mat-header-cell>\n </ng-container>\n\n <mat-cell *matCellDef=\"let item\">\n <ng-container\n *ngTemplateOutlet=\"table; context: { column: column.id, data: true, item: item }\"\n ></ng-container>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"disableRouting; else withRouting\">\n <mat-row *matRowDef=\"let item; columns: columnNames;\" class=\"item\"></mat-row>\n </ng-container>\n\n <ng-template #withRouting>\n <mat-row\n *matRowDef=\"let item; columns: columnNames;\"\n (click)=\"navigate(item)\"\n class=\"item clickable\"\n matRipple\n >\n </mat-row>\n </ng-template>\n </mat-table>\n </div>\n </div>\n</ng-template>\n\n<ng-template #cardsLayout let-item=\"item\">\n <div [fxFlex]=\"item.flex\" [ngClass]=\"item.classes\">\n <ng-container *ngFor=\"let data of data$ | async\">\n <ng-container *ngTemplateOutlet=\"cards; context: { item: data }\"></ng-container>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #customLayout let-item=\"item\">\n <div [fxFlex]=\"item.flex\" [ngClass]=\"item.classes\">\n <ng-container *ngTemplateOutlet=\"customContent; context: { data: data$ | async }\"></ng-container>\n </div>\n</ng-template>\n", components: [{ type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i8.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { type: i9.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i10.QueryBuilderComponent, selector: "nice-query-builder", inputs: ["filterConfigs", "currentSavedReport", "loading"], outputs: ["close", "createReport", "updateReport"] }, { type: i11.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i11.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i12.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "arrowPosition", "disableClear", "mat-sort-header", "start"], exportAs: ["matSortHeader"] }, { type: i11.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }], directives: [{ type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i5.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i5.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i5.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i14.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i15.QueryBuilderTriggerDirective, selector: "[niceQueryBuilderTrigger]", inputs: ["queryBuilderFilters", "queryBuilderFiltersLoading"], outputs: ["queryBuilderFilterSelected"] }, { type: i16.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i17.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgePosition", "matBadgeSize", "matBadgeColor", "matBadgeOverlap", "matBadgeDescription", "matBadgeHidden", "matBadge"] }, { type: i18.NiceLoadingDirective, selector: "[niceLoadingOverlay]", inputs: ["niceLoadingOverlay"] }, { type: i9.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i12.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortActive"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i11.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i11.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i11.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i11.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i11.MatCellDef, selector: "[matCellDef]" }, { type: i11.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i11.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i19.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleRadius", "matRippleDisabled", "matRippleTrigger", "matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleAnimation"], exportAs: ["matRipple"] }], pipes: { "async": i13.AsyncPipe, "translate": i20.TranslatePipe } });
|
|
227
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.0", ngImport: i0, type: NiceBaseListComponent, decorators: [{
|
|
228
|
-
type: Component,
|
|
229
|
-
args: [{
|
|
230
|
-
selector: "nice-base-list",
|
|
231
|
-
templateUrl: "./base-list.template.html",
|
|
232
|
-
providers: [
|
|
233
|
-
NiceBaseListQuery,
|
|
234
|
-
NiceBaseListService,
|
|
235
|
-
NiceBaseListStore
|
|
236
|
-
]
|
|
237
|
-
}]
|
|
238
|
-
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
239
|
-
type: Optional
|
|
240
|
-
}, {
|
|
241
|
-
type: Inject,
|
|
242
|
-
args: [ENABLE_QUERY_BUILDER]
|
|
243
|
-
}] }, { type: undefined, decorators: [{
|
|
244
|
-
type: Inject,
|
|
245
|
-
args: [BASE_LIST_LAYOUT]
|
|
246
|
-
}] }, { type: undefined, decorators: [{
|
|
247
|
-
type: Inject,
|
|
248
|
-
args: [TABLE_COLUMNS]
|
|
249
|
-
}] }, { type: undefined, decorators: [{
|
|
250
|
-
type: Inject,
|
|
251
|
-
args: [EXPORTS_SETTINGS]
|
|
252
|
-
}] }, { type: i1.NiceBaseListQuery }, { type: i2.NiceBaseListService }, { type: i3.ActivatedRoute }, { type: i4.MatBottomSheet }, { type: i3.Router }, { type: i5.MediaObserver }]; }, propDecorators: { title: [{
|
|
253
|
-
type: ContentChild,
|
|
254
|
-
args: [NiceBaseListTitleDirective, { read: TemplateRef }]
|
|
255
|
-
}], buttons: [{
|
|
256
|
-
type: ContentChildren,
|
|
257
|
-
args: [NiceBaseListButtonsDirective]
|
|
258
|
-
}], table: [{
|
|
259
|
-
type: ContentChild,
|
|
260
|
-
args: [NiceBaseListTableDirective, { read: TemplateRef }]
|
|
261
|
-
}], cards: [{
|
|
262
|
-
type: ContentChild,
|
|
263
|
-
args: [NiceBaseListCardsDirective, { read: TemplateRef }]
|
|
264
|
-
}], customContent: [{
|
|
265
|
-
type: ContentChild,
|
|
266
|
-
args: [NiceBaseListCustomContentDirective, { read: TemplateRef }]
|
|
267
|
-
}], filters: [{
|
|
268
|
-
type: ContentChild,
|
|
269
|
-
args: [NiceBaseListFiltersDirective, { read: TemplateRef }]
|
|
270
|
-
}], mode: [{
|
|
271
|
-
type: Input
|
|
272
|
-
}], layout: [{
|
|
273
|
-
type: Input
|
|
274
|
-
}], layoutContent: [{
|
|
275
|
-
type: Input
|
|
276
|
-
}], autoChangeLayout: [{
|
|
277
|
-
type: Input
|
|
278
|
-
}], baseRoute: [{
|
|
279
|
-
type: Input
|
|
280
|
-
}], routeFn: [{
|
|
281
|
-
type: Input
|
|
282
|
-
}], navigateFn: [{
|
|
283
|
-
type: Input
|
|
284
|
-
}], autoLoad: [{
|
|
285
|
-
type: Input
|
|
286
|
-
}], pageTitle: [{
|
|
287
|
-
type: Input
|
|
288
|
-
}], canExport: [{
|
|
289
|
-
type: Input
|
|
290
|
-
}], disableRouting: [{
|
|
291
|
-
type: Input
|
|
292
|
-
}], customExport: [{
|
|
293
|
-
type: Input
|
|
294
|
-
}], newPage: [{
|
|
295
|
-
type: Output
|
|
296
|
-
}] } });
|
|
297
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtZGF0YS1maWx0ZXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlLWxpc3QvYmFzZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25pY2UtZGF0YS1maWx0ZXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlLWxpc3QvYmFzZS1saXN0LnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsRUFDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLDBCQUEwQixFQUFrQixNQUFNLDJCQUEyQixDQUFDO0FBQ3ZGLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9HLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3BGLE9B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RSxXQUFXLEVBQUU7Z0JBSTFELElBQUk7c0JBRFYsS0FBSztnQkFJQyxNQUFNO3NCQURaLEtBQUs7Z0JBSUMsYUFBYTtzQkFEbkIsS0FBSztnQkFJQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBSUMsU0FBUztzQkFEZixLQUFLO2dCQUlDLE9BQU87c0JBRGIsS0FBSztnQkFJQyxVQUFVO3NCQURoQixLQUFLO2dCQUlDLFFBQVE7c0JBRGQsS0FBSztnQkFJQyxTQUFTO3NCQURmLEtBQUs7Z0JBSUMsU0FBUztzQkFEZixLQUFLO2dCQUlDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBSUMsWUFBWTtzQkFEbEIsS0FBSztnQkFJQyxPQUFPO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBNZWRpYU9ic2VydmVyIH0gZnJvbSBcIkBhbmd1bGFyL2ZsZXgtbGF5b3V0XCI7XG5pbXBvcnQgeyBNYXRCb3R0b21TaGVldCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9ib3R0b20tc2hlZXRcIjtcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3JcIjtcbmltcG9ydCB7IFNvcnQgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydFwiO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IEV4cG9ydEJvdHRvbVNoZWV0Q29tcG9uZW50LCBFeHBvcnRTdHJhdGVneSB9IGZyb20gXCJAcmVjdXJzeXZlL25pY2UtdWkta2l0LnYyXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2ZpbHRlci5tb2RlbFwiO1xuaW1wb3J0IHsgUXVlcnlNb2RlbCwgUXVlcnlSdWxlTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3F1ZXJ5Lm1vZGVsXCI7XG5pbXBvcnQgeyBCQVNFX0xJU1RfTEFZT1VULCBFTkFCTEVfUVVFUllfQlVJTERFUiwgRVhQT1JUU19TRVRUSU5HUywgVEFCTEVfQ09MVU1OUyB9IGZyb20gXCIuL2Jhc2UtbGlzdC5jb25zdGFudFwiO1xuaW1wb3J0IHsgTmljZUJhc2VMaXN0QnV0dG9uc0RpcmVjdGl2ZSB9IGZyb20gXCIuL2RpcmVjdGl2ZXMvYmFzZS1saXN0LWJ1dHRvbnMuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBOaWNlQmFzZUxpc3RDYXJkc0RpcmVjdGl2ZSB9IGZyb20gXCIuL2RpcmVjdGl2ZXMvYmFzZS1saXN0LWNhcmRzLmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgTmljZUJhc2VMaXN0Q3VzdG9tQ29udGVudERpcmVjdGl2ZSB9IGZyb20gXCIuL2RpcmVjdGl2ZXMvYmFzZS1saXN0LWN1c3RvbS1jb250ZW50LmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgTmljZUJhc2VMaXN0RmlsdGVyc0RpcmVjdGl2ZSB9IGZyb20gXCIuL2RpcmVjdGl2ZXMvYmFzZS1saXN0LWZpbHRlcnMuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBOaWNlQmFzZUxpc3RUYWJsZURpcmVjdGl2ZSB9IGZyb20gXCIuL2RpcmVjdGl2ZXMvYmFzZS1saXN0LXRhYmxlLmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgTmljZUJhc2VMaXN0VGl0bGVEaXJlY3RpdmUgfSBmcm9tIFwiLi9kaXJlY3RpdmVzL2Jhc2UtbGlzdC10aXRsZS5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IFRhYmxlQ29sdW1ucyB9IGZyb20gXCIuL21vZGVscy9jb2x1bW5zLm1vZGVsXCI7XG5pbXBvcnQgeyBFeHBvcnRTZXR0aW5ncyB9IGZyb20gXCIuL21vZGVscy9leHBvcnQubW9kZWxcIjtcbmltcG9ydCB7IEJhc2VMaXN0TGF5b3V0LCBMYXlvdXRDb250ZW50IH0gZnJvbSBcIi4vbW9kZWxzL2xheW91dC5tb2RlbFwiO1xuaW1wb3J0IHsgTmljZUJhc2VMaXN0UXVlcnkgfSBmcm9tIFwiLi9zdG9yZS9iYXNlLWxpc3QucXVlcnlcIjtcbmltcG9ydCB7IE5pY2VCYXNlTGlzdFNlcnZpY2UgfSBmcm9tIFwiLi9zdG9yZS9iYXNlLWxpc3Quc2VydmljZVwiO1xuaW1wb3J0IHsgTmljZUJhc2VMaXN0U3RvcmUgfSBmcm9tIFwiLi9zdG9yZS9iYXNlLWxpc3Quc3RvcmVcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibmljZS1iYXNlLWxpc3RcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL2Jhc2UtbGlzdC50ZW1wbGF0ZS5odG1sXCIsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIE5pY2VCYXNlTGlzdFF1ZXJ5LFxuICAgICAgICBOaWNlQmFzZUxpc3RTZXJ2aWNlLFxuICAgICAgICBOaWNlQmFzZUxpc3RTdG9yZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmljZUJhc2VMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gICAgQENvbnRlbnRDaGlsZChOaWNlQmFzZUxpc3RUaXRsZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHB1YmxpYyB0aXRsZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oTmljZUJhc2VMaXN0QnV0dG9uc0RpcmVjdGl2ZSlcbiAgICBwdWJsaWMgYnV0dG9uczogTmljZUJhc2VMaXN0QnV0dG9uc0RpcmVjdGl2ZVtdO1xuXG4gICAgQENvbnRlbnRDaGlsZChOaWNlQmFzZUxpc3RUYWJsZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHB1YmxpYyB0YWJsZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBDb250ZW50Q2hpbGQoTmljZUJhc2VMaXN0Q2FyZHNEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwdWJsaWMgY2FyZHM6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKE5pY2VCYXNlTGlzdEN1c3RvbUNvbnRlbnREaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICBwdWJsaWMgY3VzdG9tQ29udGVudDogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBDb250ZW50Q2hpbGQoTmljZUJhc2VMaXN0RmlsdGVyc0RpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHB1YmxpYyBmaWx0ZXJzOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbW9kZTogXCJub3JtYWxcIiB8IFwiaW5maW5pdGUtc2Nyb2xsXCIgPSBcIm5vcm1hbFwiO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbGF5b3V0OiBcInBhZ2VcIiB8IFwiY29tcG9uZW50XCIgPSBcInBhZ2VcIjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxheW91dENvbnRlbnQgPSBMYXlvdXRDb250ZW50LlRhYmxlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXV0b0NoYW5nZUxheW91dCA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBiYXNlUm91dGU6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJvdXRlRm46IChpdGVtOiBhbnkpID0+IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbmF2aWdhdGVGbjogKGJhc2VSb3V0ZTogc3RyaW5nLCBpdGVtOiBhbnkpID0+IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGF1dG9Mb2FkID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBhZ2VUaXRsZTogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY2FuRXhwb3J0ID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVSb3V0aW5nID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXN0b21FeHBvcnQ6IEV4cG9ydFN0cmF0ZWd5W10gPSBbXTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBuZXdQYWdlID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdlRXZlbnQ+KCk7XG5cbiAgICBwdWJsaWMgZGVmYXVsdFBhZ2VTaXplT3B0aW9ucyA9IFsxMCwgMjUsIDUwLCAxMDBdO1xuICAgIHB1YmxpYyBjb2x1bW5OYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIHB1YmxpYyBsb2FkaW5nJCA9IHRoaXMucXVlcnkuc2VsZWN0TG9hZGluZygpO1xuXG4gICAgcHVibGljIGZpbHRlclJlc3VsdCQgPSB0aGlzLnF1ZXJ5LnNlbGVjdEZpbHRlclJlc3VsdCgpO1xuICAgIHB1YmxpYyBkYXRhJCA9IHRoaXMucXVlcnkuc2VsZWN0RGF0YSgpO1xuICAgIHB1YmxpYyByZWNvcmRzRmlsdGVyZWQkID0gdGhpcy5maWx0ZXJSZXN1bHQkLnBpcGUobWFwKGYgPT4gZiAmJiBmLnRvdGFsKSk7XG5cbiAgICBwdWJsaWMgc2hvd1F1ZXJ5QnVpbGRlciQgPSB0aGlzLnF1ZXJ5LnNlbGVjdFNob3dRdWVyeUJ1aWxkZXIoKTtcbiAgICBwdWJsaWMgZmlsdGVyUGFyYW1ldGVycyQgPSB0aGlzLnF1ZXJ5LnNlbGVjdEZpbHRlclBhcmFtZXRlcnMoKTtcbiAgICBwdWJsaWMgaW5kZXgkID0gdGhpcy5maWx0ZXJQYXJhbWV0ZXJzJC5waXBlKG1hcChmID0+IE1hdGguZmxvb3IoKGYuc3RhcnQgPz8gMCkgLyAoZi5sZW5ndGggPz8gMSkpKSk7XG4gICAgcHVibGljIGxlbmd0aCQgPSB0aGlzLmZpbHRlclBhcmFtZXRlcnMkLnBpcGUobWFwKGYgPT4gZi5sZW5ndGgpKTtcbiAgICBwdWJsaWMgaXNFbXB0eSQgPSB0aGlzLnJlY29yZHNGaWx0ZXJlZCQucGlwZShtYXAociA9PiByID09PSAwKSk7XG4gICAgcHVibGljIHNlYXJjaFF1ZXJ5JCA9IHRoaXMuZmlsdGVyUGFyYW1ldGVycyQucGlwZShtYXAoZiA9PiBmLnNlYXJjaCkpO1xuICAgIHB1YmxpYyBmaWx0ZXJDb25maWckID0gdGhpcy5xdWVyeS5zZWxlY3RGaWx0ZXJDb25maWcoKTtcbiAgICBwdWJsaWMgc29ydENvbHVtbiQgPSB0aGlzLmZpbHRlclBhcmFtZXRlcnMkLnBpcGUobWFwKGYgPT4gKGYub3JkZXIgJiYgZi5vcmRlci5jb2x1bW4pID8/IFwiXCIpKTtcbiAgICBwdWJsaWMgc29ydERpcmVjdGlvbiQgPSB0aGlzLmZpbHRlclBhcmFtZXRlcnMkLnBpcGUobWFwKGYgPT4gZi5vcmRlciAmJiBmLm9yZGVyLmRpcmVjdGlvbikpO1xuXG4gICAgcHVibGljIGZpbHRlckNvbmZpZ0xvYWRpbmckID0gdGhpcy5xdWVyeS5zZWxlY3RGaWx0ZXJDb25maWdMb2FkaW5nKCk7XG4gICAgcHVibGljIHJ1bGVzJCA9IHRoaXMuZmlsdGVyUGFyYW1ldGVycyQucGlwZShtYXAocGFyYW1ldGVycyA9PiBwYXJhbWV0ZXJzLnJ1bGVzKSk7XG4gICAgcHVibGljIHJ1bGVzQ291bnQkID0gdGhpcy5maWx0ZXJQYXJhbWV0ZXJzJC5waXBlKG1hcChwYXJhbWV0ZXJzID0+IHBhcmFtZXRlcnMucnVsZXM/Lmxlbmd0aCA/PyAwKSk7XG5cbiAgICBwcml2YXRlIHNlYXJjaFRleHQkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBJbmplY3QoRU5BQkxFX1FVRVJZX0JVSUxERVIpXG4gICAgICAgIHB1YmxpYyBlbmFibGVRdWVyeUJ1aWxkZXI6IGJvb2xlYW4sXG4gICAgICAgIEBJbmplY3QoQkFTRV9MSVNUX0xBWU9VVClcbiAgICAgICAgcHVibGljIGxpc3RMYXlvdXQ6IEJhc2VMaXN0TGF5b3V0LFxuICAgICAgICBASW5qZWN0KFRBQkxFX0NPTFVNTlMpXG4gICAgICAgIHB1YmxpYyBjb2x1bW5zOiBUYWJsZUNvbHVtbnNbXSxcbiAgICAgICAgQEluamVjdChFWFBPUlRTX1NFVFRJTkdTKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGV4cG9ydHNTZXR0aW5nczogRXhwb3J0U2V0dGluZ3MsXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBxdWVyeTogTmljZUJhc2VMaXN0UXVlcnksXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlOiBOaWNlQmFzZUxpc3RTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBib3R0b21TaGVldDogTWF0Qm90dG9tU2hlZXQsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgbWVkaWFPYnNlcnZlcjogTWVkaWFPYnNlcnZlclxuICAgICkge1xuICAgICAgICB0aGlzLnNldENvbHVtbihjb2x1bW5zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByZWZpeEJ1dHRvbnMoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1dHRvbnM/LmZpbmQoeCA9PiB4LnBvc2l0aW9uID09PSBcInByZWZpeFwiKT8udGVtcGxhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzdWZmaXhCdXR0b25zKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5idXR0b25zPy5maW5kKHggPT4geC5wb3NpdGlvbiA9PT0gXCJzdWZmaXhcIik/LnRlbXBsYXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmluaXQoKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmxvYWRRdWVyeVBhcmFtcyh0aGlzLmF1dG9Mb2FkKTtcblxuICAgICAgICB0aGlzLnNlYXJjaFRleHQkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoc2VhcmNoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZS5yZXNldFBhZ2luZygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLnNlYXJjaERhdGEoc2VhcmNoKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgICAgIHRoaXMubWVkaWFPYnNlcnZlci5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmF1dG9DaGFuZ2VMYXlvdXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1lZGlhT2JzZXJ2ZXIuaXNBY3RpdmUoXCJsdC1tZFwiKSAmJiB0aGlzLmxheW91dENvbnRlbnQgPT09IExheW91dENvbnRlbnQuVGFibGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dENvbnRlbnQgPSBMYXlvdXRDb250ZW50LkNhcmRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxheW91dENvbnRlbnQgPSBMYXlvdXRDb250ZW50LlRhYmxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VydmljZS5jbG9zZVN1YnNjcmlwdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoXCJtb2RlXCIgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLnNldE1vZGUoY2hhbmdlcy5tb2RlLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TG9hZGluZyhsb2FkaW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VydmljZS5zZXRMb2FkaW5nKGxvYWRpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGlja1RvZ2dsZVNob3dRdWVyeUJ1aWxkZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VydmljZS50b2dnbGVRdWVyeUJ1aWxkZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25VcGRhdGVSdWxlcyhydWxlczogUXVlcnlNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VydmljZS51cGRhdGVHbG9iYWxSdWxlcyhydWxlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUXVlcnlCdWlsZGVyRmlsdGVyU2VsZWN0ZWQoZmlsdGVyQ29uZmlndXJhdGlvbk1vZGVsOiBGaWx0ZXJDb25maWd1cmF0aW9uTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmFkZFJ1bGVGcm9tQ29uZmlnKGZpbHRlckNvbmZpZ3VyYXRpb25Nb2RlbCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVXBkYXRlUGFnZShwYWdlRXZlbnQ6IFBhZ2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlcnZpY2UubG9hZE5ld1BhZ2UocGFnZUV2ZW50LnBhZ2VJbmRleCAqIHBhZ2VFdmVudC5wYWdlU2l6ZSwgcGFnZUV2ZW50LnBhZ2VTaXplKTtcbiAgICAgICAgdGhpcy5uZXdQYWdlLmVtaXQocGFnZUV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25VcGRhdGVTZWFyY2goc2VhcmNoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0JC5uZXh0KHNlYXJjaCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpbHRlclJ1bGUkKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFF1ZXJ5UnVsZU1vZGVsIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlclBhcmFtZXRlcnMkLnBpcGUoXG4gICAgICAgICAgICBtYXAoZiA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgZi5ydWxlcyAmJlxuICAgICAgICAgICAgICAgICAgICBmLnJ1bGVzWzBdICYmXG4gICAgICAgICAgICAgICAgICAgIGYucnVsZXNbMF0ucnVsZXMgJiZcbiAgICAgICAgICAgICAgICAgICAgKGYucnVsZXNbMF0ucnVsZXMuZmluZCgocikgPT4gKHIgYXMgUXVlcnlSdWxlTW9kZWwpLmlkID09PSBpZCkgYXMgUXVlcnlSdWxlTW9kZWwpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVXBkYXRlU29ydChzb3J0OiBTb3J0KTogdm9pZCB7XG4gICAgICAgIGlmICghc29ydC5hY3RpdmUgfHwgIXNvcnQuZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBzb3J0ID0ge1xuICAgICAgICAgICAgICAgIGFjdGl2ZTogXCJpZFwiLFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogXCJhc2NcIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VydmljZS5sb2FkRGF0YSh7XG4gICAgICAgICAgICBvcmRlcjogc29ydC5hY3RpdmUgJiYgc29ydC5kaXJlY3Rpb24gPyB7IGNvbHVtbjogc29ydC5hY3RpdmUsIGRpcmVjdGlvbjogc29ydC5kaXJlY3Rpb24gfSA6IG51bGxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVJ1bGUoaWQ6IHN0cmluZywgbmV3UnVsZTogUXVlcnlSdWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnVwZGF0ZVJ1bGUoaWQsIG5ld1J1bGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVSdWxlcyhydWxlczogUXVlcnlSdWxlTW9kZWxbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlcnZpY2UudXBkYXRlUnVsZXMocnVsZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGlja0V4cG9ydCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXhwb3J0cyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5leHBvcnRzU2V0dGluZ3MueGxzeCkge1xuICAgICAgICAgICAgZXhwb3J0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInhsc3hcIixcbiAgICAgICAgICAgICAgICBvbkNsaWNrRXhwb3J0OiAoKSA9PiB0aGlzLmNsaWNrWGxzeCgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmV4cG9ydHNTZXR0aW5ncy5jc3YpIHtcbiAgICAgICAgICAgIGV4cG9ydHMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJjc3ZcIixcbiAgICAgICAgICAgICAgICBvbkNsaWNrRXhwb3J0OiAoKSA9PiB0aGlzLmNsaWNrQ3N2KClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXhwb3J0c1NldHRpbmdzLnBkZikge1xuICAgICAgICAgICAgZXhwb3J0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInBkZlwiLFxuICAgICAgICAgICAgICAgIG9uQ2xpY2tFeHBvcnQ6ICgpID0+IHRoaXMuY2xpY2tQZGYoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ib3R0b21TaGVldC5vcGVuKEV4cG9ydEJvdHRvbVNoZWV0Q29tcG9uZW50LCB7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZXhwb3J0U3RyYXRlZ2llczogW1xuICAgICAgICAgICAgICAgICAgICAuLi5leHBvcnRzLFxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmN1c3RvbUV4cG9ydFxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5hdmlnYXRlKGl0ZW06IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZUZuKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlRm4odGhpcy5iYXNlUm91dGUsIGl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgcm91dGUgPSB0aGlzLnJvdXRlRm4gPyB0aGlzLnJvdXRlRm4oaXRlbSkgOiBbKHRoaXMuYmFzZVJvdXRlIHx8IFwiXCIpICsgaXRlbT8uaWRdO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUodHlwZW9mIHJvdXRlID09PSBcInN0cmluZ1wiID8gW3JvdXRlXSA6IHJvdXRlLCB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgY2xpY2tYbHN4KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlcnZpY2UuZG93bmxvYWREYXRhKFwieGxzeFwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xpY2tDc3YoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VydmljZS5kb3dubG9hZERhdGEoXCJjc3ZcIik7XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrUHJpbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VydmljZS5wcmludERhdGEoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xpY2tQZGYoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VydmljZS5kb3dubG9hZERhdGEoXCJwZGZcIik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldENvbHVtbihjb2x1bW5zOiBUYWJsZUNvbHVtbnNbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xuICAgICAgICB0aGlzLmNvbHVtbk5hbWVzID0gY29sdW1ucy5tYXAoeCA9PiB4LmlkKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibGlzdCBwYWdlLWxheW91dCBjYXJkZWQgZnVsbHdpZHRoIGlubmVyLXNjcm9sbFwiICpuZ0lmPVwibGF5b3V0ID09PSAncGFnZSc7IGVsc2UgY29udGVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjZW50ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2NvbnRlbnQ+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxpc3RMYXlvdXQueGxcIj5cbiAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93LnhsPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VMYXlvdXQ7IGNvbnRleHQ6IHsgbGF5b3V0OiBsaXN0TGF5b3V0LnhsIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGlzdExheW91dC5sZ1wiPlxuICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cubGc+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFnZUxheW91dDsgY29udGV4dDogeyBsYXlvdXQ6IGxpc3RMYXlvdXQubGcgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsaXN0TGF5b3V0Lm1kXCI+XG4gICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5tZD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdlTGF5b3V0OyBjb250ZXh0OiB7IGxheW91dDogbGlzdExheW91dC5tZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxpc3RMYXlvdXQuc21cIj5cbiAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93LnNtPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VMYXlvdXQ7IGNvbnRleHQ6IHsgbGF5b3V0OiBsaXN0TGF5b3V0LnNtIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGlzdExheW91dC54c1wiPlxuICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cueHM+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFnZUxheW91dDsgY29udGV4dDogeyBsYXlvdXQ6IGxpc3RMYXlvdXQueHMgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXZcbiAgICAgICAgICAgIFtmeEhpZGUueHNdPVwiISFsaXN0TGF5b3V0LnhzXCJcbiAgICAgICAgICAgIFtmeEhpZGUuc21dPVwiISFsaXN0TGF5b3V0LnNtXCJcbiAgICAgICAgICAgIFtmeEhpZGUubWRdPVwiISFsaXN0TGF5b3V0Lm1kXCJcbiAgICAgICAgICAgIFtmeEhpZGUubGddPVwiISFsaXN0TGF5b3V0LmxnXCJcbiAgICAgICAgICAgIFtmeEhpZGUueGxdPVwiISFsaXN0TGF5b3V0LnhsXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdlTGF5b3V0OyBjb250ZXh0OiB7IGxheW91dDogbGlzdExheW91dC5kZWZhdWx0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcGFnZUxheW91dCBsZXQtbGF5b3V0PVwibGF5b3V0XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dD8ubGVuZ3RoOyBlbHNlIGlzT2JqZWN0XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50TGF5b3V0OyBjb250ZXh0OiB7IGxheW91dDogeyB0eXBlOiAnY29sdW1uJywgaXRlbXM6IGxheW91dCB9IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjaXNPYmplY3Q+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50TGF5b3V0OyBjb250ZXh0OiB7IGxheW91dDogbGF5b3V0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb250ZW50TGF5b3V0IGxldC1sYXlvdXQ9XCJsYXlvdXRcIj5cbiAgICA8ZGl2IFtmeEZsZXhdPVwibGF5b3V0LmZsZXhcIiBbZnhMYXlvdXRdPVwibGF5b3V0LnR5cGVcIiBbZnhMYXlvdXRBbGlnbl09XCJsYXlvdXQuYWxpZ24gfHwgJydcIiBbbmdDbGFzc109XCJsYXlvdXQuY2xhc3Nlc1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxheW91dC5pdGVtc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0ubmFtZTsgZWxzZSBjaGlsZElzTGF5b3V0XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxheW91dEl0ZW07IGNvbnRleHQ6IHsgaXRlbTogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hpbGRJc0xheW91dD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudExheW91dDsgY29udGV4dDogeyBsYXlvdXQ6IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xheW91dEl0ZW0gbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0ubmFtZSA9PT0gJ3RpdGxlJyAmJiB0aXRsZVwiPlxuICAgICAgICA8ZGl2IFtmeEZsZXhdPVwiaXRlbS5mbGV4XCIgW25nQ2xhc3NdPVwiaXRlbS5jbGFzc2VzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGl0bGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5uYW1lID09PSAnc2VhcmNoJ1wiPlxuICAgICAgICA8ZGl2IFtmeEZsZXhdPVwiaXRlbS5mbGV4XCIgW2Z4TGF5b3V0QWxpZ25dPVwiaXRlbS5hbGlnbiB8fCAnJ1wiIFtuZ0NsYXNzXT1cIml0ZW0uY2xhc3Nlc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC13cmFwcGVyIG14LW1kLTBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoXCIgZnhGbGV4IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuZ01vZGVsXT1cInNlYXJjaFF1ZXJ5JCB8IGFzeW5jXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25VcGRhdGVTZWFyY2goJGV2ZW50KVwiIFtwbGFjZWhvbGRlcl09XCInZ2VuZXJhbC5zZWFyY2gnIHwgdHJhbnNsYXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVuYWJsZVF1ZXJ5QnVpbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiEoc2hvd1F1ZXJ5QnVpbGRlciQgfCBhc3luYykgJiYgIShydWxlc0NvdW50JCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWNlUXVlcnlCdWlsZGVyVHJpZ2dlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcXVlcnlCdWlsZGVyRmlsdGVyc109XCJmaWx0ZXJDb25maWckIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcXVlcnlCdWlsZGVyRmlsdGVyc0xvYWRpbmddPVwiKGZpbHRlckNvbmZpZ0xvYWRpbmckIHwgYXN5bmMpIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHF1ZXJ5QnVpbGRlckZpbHRlclNlbGVjdGVkKT1cIm9uUXVlcnlCdWlsZGVyRmlsdGVyU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidnZW5lcmFsLnF1ZXJ5X2J1aWxkZXIuc2hvd19hZHZhbmNlZF9zZWFyY2gnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlXT1cInJ1bGVzQ291bnQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwiIShydWxlc0NvdW50JCB8IGFzeW5jKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdEJhZGdlQ29sb3I9XCJhY2NlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX2xpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiEoc2hvd1F1ZXJ5QnVpbGRlciQgfCBhc3luYykgJiYgKHJ1bGVzQ291bnQkIHwgYXN5bmMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpbHRlckNvbmZpZ0xvYWRpbmckIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tUb2dnbGVTaG93UXVlcnlCdWlsZGVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInZ2VuZXJhbC5xdWVyeV9idWlsZGVyLnNob3dfYWR2YW5jZWRfc2VhcmNoJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZV09XCJydWxlc0NvdW50JCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIiEocnVsZXNDb3VudCQgfCBhc3luYylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRCYWRnZUNvbG9yPVwiYWNjZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9saXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd1F1ZXJ5QnVpbGRlciQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrVG9nZ2xlU2hvd1F1ZXJ5QnVpbGRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInZ2VuZXJhbC5xdWVyeV9idWlsZGVyLmNsb3NlX2FkdmFuY2VkX3NlYXJjaCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0ubmFtZSA9PT0gJ3ByZWZpeEJ1dHRvbnMnICYmIHByZWZpeEJ1dHRvbnNcIj5cbiAgICAgICAgPGRpdiBbZnhGbGV4XT1cIml0ZW0uZmxleFwiIFtmeExheW91dEFsaWduXT1cIml0ZW0uYWxpZ24gfHwgJydcIiBbbmdDbGFzc109XCJpdGVtLmNsYXNzZXNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcmVmaXhCdXR0b25zXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0ubmFtZSA9PT0gJ3N1ZmZpeEJ1dHRvbnMnICYmIHN1ZmZpeEJ1dHRvbnNcIj5cbiAgICAgICAgPGRpdiBbZnhGbGV4XT1cIml0ZW0uZmxleFwiIFtmeExheW91dEFsaWduXT1cIml0ZW0uYWxpZ24gfHwgJydcIiBbbmdDbGFzc109XCJpdGVtLmNsYXNzZXNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWZmaXhCdXR0b25zXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0ubmFtZSA9PT0gJ2V4cG9ydEJ1dHRvbnMnICYmIGNhbkV4cG9ydFwiPlxuICAgICAgICA8ZGl2IFtmeEZsZXhdPVwiaXRlbS5mbGV4XCIgW2Z4TGF5b3V0QWxpZ25dPVwiaXRlbS5hbGlnbiB8fCAnJ1wiIFtuZ0NsYXNzXT1cIml0ZW0uY2xhc3Nlc1wiIFtjbGFzcy5tci0yXT1cIiEhc3VmZml4QnV0dG9uc1wiIFtjbGFzcy5tbC0yXT1cIiEhcHJlZml4QnV0dG9uc1wiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xpY2tQcmludCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmckIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInZ2VuZXJhbC5wcmludCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpc3QtYnV0dG9uIG1yLTJcIlxuICAgICAgICAgICAgICAgICAgICBtYXQtbWluaS1mYWJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpbnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrRXhwb3J0KClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidnZW5lcmFsLmV4cG9ydCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpc3QtYnV0dG9uIG1yLTJcIlxuICAgICAgICAgICAgICAgICAgICBtYXQtbWluaS1mYWJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvdWRfZG93bmxvYWQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0ubmFtZSA9PT0gJ2NvbnRlbnQnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsYXlvdXRDb250ZW50ID09PSAndGFibGUnICYmIHRhYmxlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVMYXlvdXQ7IGNvbnRleHQ6IHsgaXRlbTogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGF5b3V0Q29udGVudCA9PT0gJ2NhcmRzJyAmJiBjYXJkc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhcmRzTGF5b3V0OyBjb250ZXh0OiB7IGl0ZW06IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxheW91dENvbnRlbnQgPT09ICdjdXN0b20nICYmIGN1c3RvbUNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21MYXlvdXQ7IGNvbnRleHQ6IHsgaXRlbTogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0ubmFtZSA9PT0gJ3BhZ2luYXRpb24nICYmIGxheW91dENvbnRlbnQgIT09ICdjdXN0b20nXCI+XG4gICAgICAgIDxkaXYgW2Z4RmxleF09XCJpdGVtLmZsZXhcIiBbbmdDbGFzc109XCJpdGVtLmNsYXNzZXNcIj5cbiAgICAgICAgICAgIDxtYXQtcGFnaW5hdG9yXG4gICAgICAgICAgICAgICAgKHBhZ2UpPVwib25VcGRhdGVQYWdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtsZW5ndGhdPVwicmVjb3Jkc0ZpbHRlcmVkJCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBbcGFnZUluZGV4XT1cImluZGV4JCB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT1cImRlZmF1bHRQYWdlU2l6ZU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJsZW5ndGgkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbWF0LXBhZ2luYXRvcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5uYW1lID09PSAncXVlcnlCdWlsZGVyJyAmJiBlbmFibGVRdWVyeUJ1aWxkZXJcIj5cbiAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiICpuZ0lmPVwic2hvd1F1ZXJ5QnVpbGRlciQgfCBhc3luY1wiPlxuICAgICAgICAgICAgPG1hdC1jYXJkIGNsYXNzPVwibXktNFwiIFtuaWNlTG9hZGluZ092ZXJsYXldPVwiZmlsdGVyQ29uZmlnTG9hZGluZyQgfCBhc3luY1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2FyZC1jb250ZW50IGZ4TGF5b3V0PVwiY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5pY2UtcXVlcnktYnVpbGRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJDb25maWdzXT1cImZpbHRlckNvbmZpZyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicnVsZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uVXBkYXRlUnVsZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlKT1cImNsaWNrVG9nZ2xlU2hvd1F1ZXJ5QnVpbGRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25pY2UtcXVlcnktYnVpbGRlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgPC9tYXQtY2FyZD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5uYW1lID09PSAnZmlsdGVycycgJiYgZmlsdGVyc1wiPlxuICAgICAgICA8ZGl2IFtmeEZsZXhdPVwiaXRlbS5mbGV4XCIgW2Z4TGF5b3V0QWxpZ25dPVwiaXRlbS5hbGlnbiB8fCAnJ1wiIFtuZ0NsYXNzXT1cIml0ZW0uY2xhc3Nlc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlcnNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RhYmxlTGF5b3V0IGxldC1pdGVtPVwiaXRlbVwiPlxuICAgIDxkaXYgW2Z4RmxleF09XCJpdGVtLmZsZXhcIiBbbmdDbGFzc109XCJpdGVtLmNsYXNzZXNcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIFtuaWNlTG9hZGluZ092ZXJsYXldPVwibG9hZGluZyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb250ZW50LWNhcmQgYmFzZS1saXN0XCJcbiAgICAgICAgICAgICAgICBmeExheW91dD1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW5cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LXRhYmxlXG4gICAgICAgICAgICAgICAgICAgIChtYXRTb3J0Q2hhbmdlKT1cIm9uVXBkYXRlU29ydCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YSRcIlxuICAgICAgICAgICAgICAgICAgICBbbWF0U29ydEFjdGl2ZV09XCIoc29ydENvbHVtbiQgfCBhc3luYykgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICBbbWF0U29ydERpcmVjdGlvbl09XCIoc29ydERpcmVjdGlvbiQgfCBhc3luYykgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICBmeEZsZXg9XCIxIDEgYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgIG1hdFNvcnRcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImNvbHVtbk5hbWVzOyBzdGlja3k6IHRydWVcIj48L21hdC1oZWFkZXItcm93PlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5pZFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnNvcnRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlOyBjb250ZXh0OiB7IGNvbHVtbjogY29sdW1uLmlkLCBoZWFkZXI6IHRydWUgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbi5zb3J0YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlOyBjb250ZXh0OiB7IGNvbHVtbjogY29sdW1uLmlkLCBoZWFkZXI6IHRydWUgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGU7IGNvbnRleHQ6IHsgY29sdW1uOiBjb2x1bW4uaWQsIGRhdGE6IHRydWUsIGl0ZW06IGl0ZW0gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzYWJsZVJvdXRpbmc7IGVsc2Ugd2l0aFJvdXRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCBpdGVtOyBjb2x1bW5zOiBjb2x1bW5OYW1lcztcIiBjbGFzcz1cIml0ZW1cIj48L21hdC1yb3c+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3dpdGhSb3V0aW5nPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICptYXRSb3dEZWY9XCJsZXQgaXRlbTsgY29sdW1uczogY29sdW1uTmFtZXM7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGUoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbSBjbGlja2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFJpcHBsZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXJvdz5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjYXJkc0xheW91dCBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgICA8ZGl2IFtmeEZsZXhdPVwiaXRlbS5mbGV4XCIgW25nQ2xhc3NdPVwiaXRlbS5jbGFzc2VzXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgZGF0YSQgfCBhc3luY1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhcmRzOyBjb250ZXh0OiB7IGl0ZW06IGRhdGEgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tTGF5b3V0IGxldC1pdGVtPVwiaXRlbVwiPlxuICAgIDxkaXYgW2Z4RmxleF09XCJpdGVtLmZsZXhcIiBbbmdDbGFzc109XCJpdGVtLmNsYXNzZXNcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUNvbnRlbnQ7IGNvbnRleHQ6IHsgZGF0YTogZGF0YSQgfCBhc3luYyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|