@openziti/ziti-console-lib 0.4.9 → 0.5.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/assets/styles/global.scss +30 -0
- package/esm2022/lib/features/data-table/cells/table-cell-name/table-cell-name.component.mjs +11 -3
- package/esm2022/lib/features/data-table/data-table-filter.service.mjs +76 -5
- package/esm2022/lib/features/data-table/data-table.component.mjs +13 -4
- package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +11 -5
- package/esm2022/lib/features/preview-list/preview-list.component.mjs +20 -4
- package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +2 -2
- package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +3 -3
- package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +106 -21
- package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +9 -2
- package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +1 -1
- package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +248 -0
- package/esm2022/lib/features/projectable-forms/terminator/terminator-form.service.mjs +131 -0
- package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.helper.mjs +2 -4
- package/esm2022/lib/models/terminator.mjs +14 -0
- package/esm2022/lib/pages/configurations/configurations-page.component.mjs +1 -1
- package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.component.mjs +1 -1
- package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +1 -1
- package/esm2022/lib/pages/identities/identities-page.component.mjs +1 -1
- package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.mjs +1 -1
- package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +1 -1
- package/esm2022/lib/pages/services/services-page.component.mjs +1 -1
- package/esm2022/lib/pages/terminators/terminators-page.component.mjs +96 -0
- package/esm2022/lib/pages/terminators/terminators-page.service.mjs +185 -0
- package/esm2022/lib/services/ziti-controller-data.service.mjs +7 -3
- package/esm2022/lib/services/ziti-data.service.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/lib/ziti-console-lib.module.mjs +20 -8
- package/esm2022/public-api.mjs +6 -1
- package/fesm2022/openziti-ziti-console-lib.mjs +4168 -3343
- package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
- package/lib/features/data-table/cells/table-cell-name/table-cell-name.component.d.ts +1 -0
- package/lib/features/data-table/cells/table-cell-name/table-cell-name.component.d.ts.map +1 -1
- package/lib/features/data-table/data-table-filter.service.d.ts +11 -1
- package/lib/features/data-table/data-table-filter.service.d.ts.map +1 -1
- package/lib/features/data-table/data-table.component.d.ts +4 -1
- package/lib/features/data-table/data-table.component.d.ts.map +1 -1
- package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts +3 -1
- package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts.map +1 -1
- package/lib/features/preview-list/preview-list.component.d.ts +2 -1
- package/lib/features/preview-list/preview-list.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +1 -1
- package/lib/features/projectable-forms/service/service-form.component.d.ts +1 -1
- package/lib/features/projectable-forms/service/service-form.service.d.ts +16 -2
- package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -1
- package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
- package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts +59 -0
- package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts.map +1 -0
- package/lib/features/projectable-forms/terminator/terminator-form.service.d.ts +33 -0
- package/lib/features/projectable-forms/terminator/terminator-form.service.d.ts.map +1 -0
- package/lib/features/visualizer/identity-service-path/identity-service-path.helper.d.ts.map +1 -1
- package/lib/models/terminator.d.ts +11 -0
- package/lib/models/terminator.d.ts.map +1 -0
- package/lib/pages/terminators/terminators-page.component.d.ts +29 -0
- package/lib/pages/terminators/terminators-page.component.d.ts.map +1 -0
- package/lib/pages/terminators/terminators-page.service.d.ts +31 -0
- package/lib/pages/terminators/terminators-page.service.d.ts.map +1 -0
- package/lib/services/ziti-controller-data.service.d.ts +1 -1
- package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
- package/lib/services/ziti-data.service.d.ts +1 -1
- package/lib/services/ziti-data.service.d.ts.map +1 -1
- package/lib/ziti-console-lib.module.d.ts +20 -18
- package/lib/ziti-console-lib.module.d.ts.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +5 -0
- package/public-api.d.ts.map +1 -1
|
@@ -232,6 +232,19 @@ input {
|
|
|
232
232
|
height: 14px;
|
|
233
233
|
}
|
|
234
234
|
|
|
235
|
+
.form-field-count {
|
|
236
|
+
background-color: #4c5566;
|
|
237
|
+
color: var(--white);
|
|
238
|
+
display: flex;
|
|
239
|
+
align-items: center;
|
|
240
|
+
font-weight: 700;
|
|
241
|
+
border-radius: 14px;
|
|
242
|
+
height: 24px;
|
|
243
|
+
padding-left: 13px;
|
|
244
|
+
padding-right: 13px;
|
|
245
|
+
font-size: 13px;
|
|
246
|
+
}
|
|
247
|
+
|
|
235
248
|
.button-row-right {
|
|
236
249
|
width: 100%;
|
|
237
250
|
display: flex;
|
|
@@ -340,6 +353,17 @@ input {
|
|
|
340
353
|
width: calc(40% - 15px);
|
|
341
354
|
min-width: 280px;
|
|
342
355
|
}
|
|
356
|
+
&.one-half {
|
|
357
|
+
width: calc(50% - 15px);
|
|
358
|
+
min-width: 420px;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
.form-field-label-container {
|
|
363
|
+
display: flex;
|
|
364
|
+
flex-direction: column;
|
|
365
|
+
gap: 15px;
|
|
366
|
+
width: 100%;
|
|
343
367
|
}
|
|
344
368
|
|
|
345
369
|
.form-row {
|
|
@@ -348,6 +372,12 @@ input {
|
|
|
348
372
|
flex-wrap: wrap;
|
|
349
373
|
position: relative;
|
|
350
374
|
width: 100%;
|
|
375
|
+
|
|
376
|
+
&.space-between {
|
|
377
|
+
justify-content: space-between;
|
|
378
|
+
margin-top: 10px;
|
|
379
|
+
margin-bottom: 5px;
|
|
380
|
+
}
|
|
351
381
|
}
|
|
352
382
|
|
|
353
383
|
.form-column {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
|
+
import { isEmpty, get } from 'lodash';
|
|
2
3
|
import * as i0 from "@angular/core";
|
|
3
4
|
import * as i1 from "@angular/material/dialog";
|
|
4
5
|
import * as i2 from "@angular/router";
|
|
@@ -22,12 +23,19 @@ class TableCellNameComponent {
|
|
|
22
23
|
event.stopPropagation();
|
|
23
24
|
event.preventDefault();
|
|
24
25
|
}
|
|
26
|
+
get cellText() {
|
|
27
|
+
let val = get(this.item, this.cellParams?.colDef?.field);
|
|
28
|
+
if (isEmpty(val)) {
|
|
29
|
+
val = this.item.name;
|
|
30
|
+
}
|
|
31
|
+
return val;
|
|
32
|
+
}
|
|
25
33
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableCellNameComponent, deps: [{ token: i1.MatDialog }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableCellNameComponent, selector: "lib-table-cell-name", ngImport: i0, template: "<span class=\"cell-name-container\">\n <a href=\"./{{cellParams.pathRoot}}/{{item.id}}\" (click)=\"linkClicked($event)\">\n <div class=\"col cell-name-renderer\" data-id=\"{{item.id}}\">\n <div *ngIf=\"cellParams.showIdentityIcons\" class=\"cell-status-container\">\n <span class=\"circle {{item.hasApiSession}}\" title=\"Api Session\"></span>\n <span class=\"circle {{item.hasEdgeRouterConnection}}\" title=\"Edge Router Connected\"></span>\n </div>\n <div *ngIf=\"cellParams.showRouterIcons\" class=\"cell-status-container\">\n <span class=\"circle {{item.isVerified}}\" title=\"Api Session\"></span>\n <span class=\"circle {{item.isOnline}}\" title=\"Edge Router Connected\"></span>\n </div>\n <strong>{{
|
|
34
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableCellNameComponent, selector: "lib-table-cell-name", ngImport: i0, template: "<span class=\"cell-name-container\">\n <a href=\"./{{cellParams.pathRoot}}/{{item.id}}\" (click)=\"linkClicked($event)\">\n <div class=\"col cell-name-renderer\" data-id=\"{{item.id}}\">\n <div *ngIf=\"cellParams.showIdentityIcons\" class=\"cell-status-container\">\n <span class=\"circle {{item.hasApiSession}}\" title=\"Api Session\"></span>\n <span class=\"circle {{item.hasEdgeRouterConnection}}\" title=\"Edge Router Connected\"></span>\n </div>\n <div *ngIf=\"cellParams.showRouterIcons\" class=\"cell-status-container\">\n <span class=\"circle {{item.isVerified}}\" title=\"Api Session\"></span>\n <span class=\"circle {{item.isOnline}}\" title=\"Edge Router Connected\"></span>\n </div>\n <strong>{{cellText}}</strong>\n </div>\n </a>\n</span>\n", styles: [".cell-name-renderer{display:flex;flex-direction:row;gap:5px}.cell-name-container{display:flex;flex-direction:row;flex-wrap:nowrap}.cell-status-container{position:relative;display:flex;align-items:center;justify-content:center;gap:4px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
27
35
|
}
|
|
28
36
|
export { TableCellNameComponent };
|
|
29
37
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableCellNameComponent, decorators: [{
|
|
30
38
|
type: Component,
|
|
31
|
-
args: [{ selector: 'lib-table-cell-name', template: "<span class=\"cell-name-container\">\n <a href=\"./{{cellParams.pathRoot}}/{{item.id}}\" (click)=\"linkClicked($event)\">\n <div class=\"col cell-name-renderer\" data-id=\"{{item.id}}\">\n <div *ngIf=\"cellParams.showIdentityIcons\" class=\"cell-status-container\">\n <span class=\"circle {{item.hasApiSession}}\" title=\"Api Session\"></span>\n <span class=\"circle {{item.hasEdgeRouterConnection}}\" title=\"Edge Router Connected\"></span>\n </div>\n <div *ngIf=\"cellParams.showRouterIcons\" class=\"cell-status-container\">\n <span class=\"circle {{item.isVerified}}\" title=\"Api Session\"></span>\n <span class=\"circle {{item.isOnline}}\" title=\"Edge Router Connected\"></span>\n </div>\n <strong>{{
|
|
39
|
+
args: [{ selector: 'lib-table-cell-name', template: "<span class=\"cell-name-container\">\n <a href=\"./{{cellParams.pathRoot}}/{{item.id}}\" (click)=\"linkClicked($event)\">\n <div class=\"col cell-name-renderer\" data-id=\"{{item.id}}\">\n <div *ngIf=\"cellParams.showIdentityIcons\" class=\"cell-status-container\">\n <span class=\"circle {{item.hasApiSession}}\" title=\"Api Session\"></span>\n <span class=\"circle {{item.hasEdgeRouterConnection}}\" title=\"Edge Router Connected\"></span>\n </div>\n <div *ngIf=\"cellParams.showRouterIcons\" class=\"cell-status-container\">\n <span class=\"circle {{item.isVerified}}\" title=\"Api Session\"></span>\n <span class=\"circle {{item.isOnline}}\" title=\"Edge Router Connected\"></span>\n </div>\n <strong>{{cellText}}</strong>\n </div>\n </a>\n</span>\n", styles: [".cell-name-renderer{display:flex;flex-direction:row;gap:5px}.cell-name-container{display:flex;flex-direction:row;flex-wrap:nowrap}.cell-status-container{position:relative;display:flex;align-items:center;justify-content:center;gap:4px}\n"] }]
|
|
32
40
|
}], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i2.Router }]; } });
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY2VsbC1uYW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy9kYXRhLXRhYmxlL2NlbGxzL3RhYmxlLWNlbGwtbmFtZS90YWJsZS1jZWxsLW5hbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL2RhdGEtdGFibGUvY2VsbHMvdGFibGUtY2VsbC1uYW1lL3RhYmxlLWNlbGwtbmFtZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTTFDLE9BQU8sRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFDLE1BQU0sUUFBUSxDQUFDOzs7OztBQUVwQyxNQUthLHNCQUFzQjtJQU1qQyxZQUFtQixVQUFxQixFQUFVLE1BQWM7UUFBN0MsZUFBVSxHQUFWLFVBQVUsQ0FBVztRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDaEUsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUEyQjtRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUFnQztRQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQUs7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6RSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNoQixHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDdEI7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7K0dBaENVLHNCQUFzQjttR0FBdEIsc0JBQXNCLDJEQ2JuQywwM0JBZUE7O1NERmEsc0JBQXNCOzRGQUF0QixzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0lDZWxsUmVuZGVyZXJBbmd1bGFyQ29tcH0gZnJvbSBcImFnLWdyaWQtYW5ndWxhclwiO1xuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcbmltcG9ydCB7SUNlbGxSZW5kZXJlclBhcmFtc30gZnJvbSBcImFnLWdyaWQtY29tbXVuaXR5XCI7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuXG5pbXBvcnQge2lzRW1wdHksIGdldH0gZnJvbSAnbG9kYXNoJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXRhYmxlLWNlbGwtbmFtZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1jZWxsLW5hbWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1jZWxsLW5hbWUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNlbGxOYW1lQ29tcG9uZW50ICBpbXBsZW1lbnRzIElDZWxsUmVuZGVyZXJBbmd1bGFyQ29tcCB7XG5cbiAgY2VsbFBhcmFtczogYW55O1xuICBpdGVtOiBhbnk7XG4gIGRpYWxvZ1JlZjogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2dGb3JtOiBNYXREaWFsb2csIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHtcbiAgfVxuXG4gIGFnSW5pdChwYXJhbXM6IElDZWxsUmVuZGVyZXJQYXJhbXMpOiB2b2lkIHtcbiAgICB0aGlzLmNlbGxQYXJhbXMgPSBwYXJhbXM7XG4gICAgdGhpcy5pdGVtID0gcGFyYW1zLmRhdGE7XG4gIH1cblxuICByZWZyZXNoKHBhcmFtczogSUNlbGxSZW5kZXJlclBhcmFtczxhbnk+KTogYm9vbGVhbiB7XG4gICAgdGhpcy5jZWxsUGFyYW1zID0gcGFyYW1zO1xuICAgIHRoaXMuaXRlbSA9IHBhcmFtcy5kYXRhO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbGlua0NsaWNrZWQoZXZlbnQpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAke3RoaXMuY2VsbFBhcmFtcy5wYXRoUm9vdH0vJHt0aGlzLml0ZW0uaWR9YCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIGdldCBjZWxsVGV4dCgpIHtcbiAgICBsZXQgdmFsID0gZ2V0KHRoaXMuaXRlbSwgdGhpcy5jZWxsUGFyYW1zPy5jb2xEZWY/LmZpZWxkKTtcbiAgICBpZiAoaXNFbXB0eSh2YWwpKSB7XG4gICAgICB2YWwgPSB0aGlzLml0ZW0ubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxufVxuIiwiPHNwYW4gY2xhc3M9XCJjZWxsLW5hbWUtY29udGFpbmVyXCI+XG4gICAgPGEgaHJlZj1cIi4ve3tjZWxsUGFyYW1zLnBhdGhSb290fX0ve3tpdGVtLmlkfX1cIiAoY2xpY2spPVwibGlua0NsaWNrZWQoJGV2ZW50KVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIGNlbGwtbmFtZS1yZW5kZXJlclwiIGRhdGEtaWQ9XCJ7e2l0ZW0uaWR9fVwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNlbGxQYXJhbXMuc2hvd0lkZW50aXR5SWNvbnNcIiBjbGFzcz1cImNlbGwtc3RhdHVzLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2lyY2xlIHt7aXRlbS5oYXNBcGlTZXNzaW9ufX1cIiB0aXRsZT1cIkFwaSBTZXNzaW9uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2lyY2xlIHt7aXRlbS5oYXNFZGdlUm91dGVyQ29ubmVjdGlvbn19XCIgdGl0bGU9XCJFZGdlIFJvdXRlciBDb25uZWN0ZWRcIj48L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjZWxsUGFyYW1zLnNob3dSb3V0ZXJJY29uc1wiIGNsYXNzPVwiY2VsbC1zdGF0dXMtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaXJjbGUge3tpdGVtLmlzVmVyaWZpZWR9fVwiIHRpdGxlPVwiQXBpIFNlc3Npb25cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaXJjbGUge3tpdGVtLmlzT25saW5lfX1cIiB0aXRsZT1cIkVkZ2UgUm91dGVyIENvbm5lY3RlZFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHN0cm9uZz57e2NlbGxUZXh0fX08L3N0cm9uZz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9hPlxuPC9zcGFuPlxuIl19
|
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject } from "rxjs";
|
|
3
|
-
import { isEmpty } from "lodash";
|
|
3
|
+
import { forEach, isEmpty } from "lodash";
|
|
4
|
+
import { HttpParams } from "@angular/common/http";
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
import * as i2 from "@angular/router";
|
|
5
8
|
class DataTableFilterService {
|
|
6
|
-
constructor() {
|
|
9
|
+
constructor(location, router, activatedRoute) {
|
|
10
|
+
this.location = location;
|
|
11
|
+
this.router = router;
|
|
12
|
+
this.activatedRoute = activatedRoute;
|
|
7
13
|
this.filters = [];
|
|
8
14
|
this.currentPage = 1;
|
|
9
15
|
this.filtersChanged = new BehaviorSubject(this.filters);
|
|
10
16
|
this.pageChanged = new BehaviorSubject(this.currentPage);
|
|
17
|
+
this.currentQueryParams = [];
|
|
11
18
|
}
|
|
12
19
|
updateFilter(filterObj) {
|
|
13
20
|
if (isEmpty(filterObj.value) && (isNaN(filterObj.value) || filterObj.value === ''))
|
|
@@ -25,6 +32,7 @@ class DataTableFilterService {
|
|
|
25
32
|
this.filters.push(filterObj);
|
|
26
33
|
}
|
|
27
34
|
}
|
|
35
|
+
this.updateUrlParameters();
|
|
28
36
|
this.filtersChanged.next(this.filters);
|
|
29
37
|
}
|
|
30
38
|
removeFilter(filterObj) {
|
|
@@ -34,6 +42,7 @@ class DataTableFilterService {
|
|
|
34
42
|
break;
|
|
35
43
|
}
|
|
36
44
|
}
|
|
45
|
+
this.updateUrlParameters([filterObj]);
|
|
37
46
|
this.filtersChanged.next(this.filters);
|
|
38
47
|
}
|
|
39
48
|
getFilterString(key) {
|
|
@@ -51,9 +60,71 @@ class DataTableFilterService {
|
|
|
51
60
|
}
|
|
52
61
|
clearFilters() {
|
|
53
62
|
this.filters = [];
|
|
63
|
+
this.updateUrlParameters();
|
|
54
64
|
this.filtersChanged.next(this.filters);
|
|
55
65
|
}
|
|
56
|
-
|
|
66
|
+
storeFilters() {
|
|
67
|
+
localStorage.setItem('search_filters', JSON.stringify(this.filters));
|
|
68
|
+
}
|
|
69
|
+
getStoredFilters() {
|
|
70
|
+
const storageItem = localStorage.getItem('search_filters');
|
|
71
|
+
const filters = storageItem ? JSON.parse(storageItem) : [];
|
|
72
|
+
return filters;
|
|
73
|
+
}
|
|
74
|
+
updateUrlParameters(filtersToRemove = []) {
|
|
75
|
+
const urlFiltersMap = this.getUrlFiltersMap();
|
|
76
|
+
let params = new HttpParams();
|
|
77
|
+
this.filters.forEach(filter => {
|
|
78
|
+
urlFiltersMap[filter.columnId] = filter;
|
|
79
|
+
});
|
|
80
|
+
const newFilters = [];
|
|
81
|
+
forEach(urlFiltersMap, (value, key) => {
|
|
82
|
+
const filterRemoved = filtersToRemove.some((removed) => {
|
|
83
|
+
return removed.columnId === key;
|
|
84
|
+
});
|
|
85
|
+
if (!filterRemoved) {
|
|
86
|
+
params = params.append(key, value.value);
|
|
87
|
+
newFilters.push(value);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
this.filters = newFilters;
|
|
91
|
+
const path = this.router.url.split("?")[0];
|
|
92
|
+
this.location.replaceState(path, params.toString());
|
|
93
|
+
this.storeFilters();
|
|
94
|
+
}
|
|
95
|
+
getUrlFiltersMap() {
|
|
96
|
+
const paramString = window.location.href.split("?")[1];
|
|
97
|
+
const params = new HttpParams({ fromString: paramString });
|
|
98
|
+
const storedFilters = this.getStoredFilters();
|
|
99
|
+
const appliedFiltersMap = {};
|
|
100
|
+
params.keys().forEach((key) => {
|
|
101
|
+
const storedFilter = storedFilters.find((filter) => {
|
|
102
|
+
return filter.columnId === key;
|
|
103
|
+
});
|
|
104
|
+
if (storedFilter) {
|
|
105
|
+
appliedFiltersMap[key] = storedFilter;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
let val = params.get(key);
|
|
109
|
+
let type = 'TEXTINPUT';
|
|
110
|
+
let label = val;
|
|
111
|
+
if (val?.split(',')?.length > 1) {
|
|
112
|
+
val = val?.split(',');
|
|
113
|
+
label = val[0];
|
|
114
|
+
type = 'ATTRIBUTE';
|
|
115
|
+
}
|
|
116
|
+
appliedFiltersMap[key] = {
|
|
117
|
+
columnId: key,
|
|
118
|
+
value: val,
|
|
119
|
+
label: decodeURIComponent(label),
|
|
120
|
+
filterName: key,
|
|
121
|
+
type: type
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
return appliedFiltersMap;
|
|
126
|
+
}
|
|
127
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataTableFilterService, deps: [{ token: i1.Location }, { token: i2.Router }, { token: i2.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
57
128
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataTableFilterService, providedIn: 'root' }); }
|
|
58
129
|
}
|
|
59
130
|
export { DataTableFilterService };
|
|
@@ -62,5 +133,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
62
133
|
args: [{
|
|
63
134
|
providedIn: 'root'
|
|
64
135
|
}]
|
|
65
|
-
}], ctorParameters: function () { return []; } });
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy9kYXRhLXRhYmxlL2RhdGEtdGFibGUtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxRQUFRLENBQUM7O0FBWS9CLE1BR2Esc0JBQXNCO0lBUy9CO1FBUEEsWUFBTyxHQUFnQixFQUFFLENBQUM7UUFDMUIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsbUJBQWMsR0FDUixJQUFJLGVBQWUsQ0FBYyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFcEQsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBTSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFHekQsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFvQjtRQUM3QixJQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMzRztZQUNELElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNwQixLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQ2hELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLFFBQVEsRUFBRTtvQkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUM7b0JBQzlCLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ2YsTUFBTTtpQkFDVDthQUNKO1lBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDVixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNoQztTQUNKO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBb0I7UUFDN0IsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2hELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLFFBQVEsRUFBRTtnQkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixNQUFNO2FBQ1Q7U0FDSjtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQVc7UUFDdkIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ2hELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEtBQUssR0FBRyxFQUFFO2dCQUNwQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ2hDLE1BQU07YUFDVDtTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFTO1FBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7K0dBMURRLHNCQUFzQjttSEFBdEIsc0JBQXNCLGNBRm5CLE1BQU07O1NBRVQsc0JBQXNCOzRGQUF0QixzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtpc0VtcHR5fSBmcm9tIFwibG9kYXNoXCI7XG5cbmV4cG9ydCB0eXBlIEZpbHRlck9iaiA9IHtcbiAgICBmaWx0ZXJOYW1lOiBzdHJpbmc7XG4gICAgY29sdW1uSWQ6IHN0cmluZztcbiAgICB2YWx1ZTogYW55O1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgdHlwZT86IHN0cmluZztcbiAgICBoaWRkZW4/OiBib29sZWFuO1xuICAgIHZlcmI/OiBzdHJpbmdcbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVGaWx0ZXJTZXJ2aWNlIHtcblxuICAgIGZpbHRlcnM6IEZpbHRlck9ialtdID0gW107XG4gICAgY3VycmVudFBhZ2UgPSAxO1xuICAgIGZpbHRlcnNDaGFuZ2VkXG4gICAgICAgID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXJPYmpbXT4odGhpcy5maWx0ZXJzKVxuXG4gICAgcGFnZUNoYW5nZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odGhpcy5jdXJyZW50UGFnZSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICB9XG5cbiAgICB1cGRhdGVGaWx0ZXIoZmlsdGVyT2JqOiBGaWx0ZXJPYmopIHtcbiAgICAgICAgaWYoaXNFbXB0eShmaWx0ZXJPYmoudmFsdWUpICYmIChpc05hTihmaWx0ZXJPYmoudmFsdWUpIHx8IGZpbHRlck9iai52YWx1ZSA9PT0gJycpKSB0aGlzLnJlbW92ZUZpbHRlcihmaWx0ZXJPYmopO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBpc0ZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCB0aGlzLmZpbHRlcnMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnNbaWR4XS5jb2x1bW5JZCA9PT0gZmlsdGVyT2JqLmNvbHVtbklkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyc1tpZHhdID0gZmlsdGVyT2JqO1xuICAgICAgICAgICAgICAgICAgICBpc0ZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0ZvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzLnB1c2goZmlsdGVyT2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLm5leHQodGhpcy5maWx0ZXJzKTtcbiAgICB9XG5cbiAgICByZW1vdmVGaWx0ZXIoZmlsdGVyT2JqOiBGaWx0ZXJPYmopIHtcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgdGhpcy5maWx0ZXJzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnNbaWR4XS5jb2x1bW5JZCA9PT0gZmlsdGVyT2JqLmNvbHVtbklkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyc0NoYW5nZWQubmV4dCh0aGlzLmZpbHRlcnMpO1xuICAgIH1cblxuICAgIGdldEZpbHRlclN0cmluZyhrZXk6IHN0cmluZykge1xuICAgICAgICBsZXQgdmFsdWUgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgdGhpcy5maWx0ZXJzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnNbaWR4XS5jb2x1bW5JZCA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmZpbHRlcnNbaWR4XS52YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY2hhbmdlUGFnZShwYWdlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5uZXh0KHBhZ2UpO1xuICAgIH1cblxuICAgIGNsZWFyRmlsdGVycygpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gW107XG4gICAgICAgIHRoaXMuZmlsdGVyc0NoYW5nZWQubmV4dCh0aGlzLmZpbHRlcnMpO1xuICAgIH1cbn1cbiJdfQ==
|
|
136
|
+
}], ctorParameters: function () { return [{ type: i1.Location }, { type: i2.Router }, { type: i2.ActivatedRoute }]; } });
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy9kYXRhLXRhYmxlL2RhdGEtdGFibGUtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQWNoRCxNQUdhLHNCQUFzQjtJQVcvQixZQUFvQixRQUFrQixFQUFVLE1BQWMsRUFBVSxjQUE4QjtRQUFsRixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQVR0RyxZQUFPLEdBQWdCLEVBQUUsQ0FBQztRQUMxQixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUNoQixtQkFBYyxHQUNSLElBQUksZUFBZSxDQUFjLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUVwRCxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV6RCx1QkFBa0IsR0FBRyxFQUFFLENBQUM7SUFHeEIsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFvQjtRQUM3QixJQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FB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QUNiLENBQUM7YUFDTDtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDOytHQWhJUSxzQkFBc0I7bUhBQXRCLHNCQUFzQixjQUZuQixNQUFNOztTQUVULHNCQUFzQjs0RkFBdEIsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7Zm9yRWFjaCwgaXNFbXB0eX0gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHtIdHRwUGFyYW1zfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHtMb2NhdGlvbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJPYmogPSB7XG4gICAgZmlsdGVyTmFtZTogc3RyaW5nO1xuICAgIGNvbHVtbklkOiBzdHJpbmc7XG4gICAgdmFsdWU6IGFueTtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgaGlkZGVuPzogYm9vbGVhbjtcbiAgICB2ZXJiPzogc3RyaW5nXG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlRmlsdGVyU2VydmljZSB7XG5cbiAgICBmaWx0ZXJzOiBGaWx0ZXJPYmpbXSA9IFtdO1xuICAgIGN1cnJlbnRQYWdlID0gMTtcbiAgICBmaWx0ZXJzQ2hhbmdlZFxuICAgICAgICA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RmlsdGVyT2JqW10+KHRoaXMuZmlsdGVycylcblxuICAgIHBhZ2VDaGFuZ2VkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHRoaXMuY3VycmVudFBhZ2UpO1xuXG4gICAgY3VycmVudFF1ZXJ5UGFyYW1zID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbiwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUpIHtcbiAgICB9XG5cbiAgICB1cGRhdGVGaWx0ZXIoZmlsdGVyT2JqOiBGaWx0ZXJPYmopIHtcbiAgICAgICAgaWYoaXNFbXB0eShmaWx0ZXJPYmoudmFsdWUpICYmIChpc05hTihmaWx0ZXJPYmoudmFsdWUpIHx8IGZpbHRlck9iai52YWx1ZSA9PT0gJycpKSB0aGlzLnJlbW92ZUZpbHRlcihmaWx0ZXJPYmopO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBpc0ZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCB0aGlzLmZpbHRlcnMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnNbaWR4XS5jb2x1bW5JZCA9PT0gZmlsdGVyT2JqLmNvbHVtbklkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyc1tpZHhdID0gZmlsdGVyT2JqO1xuICAgICAgICAgICAgICAgICAgICBpc0ZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0ZvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzLnB1c2goZmlsdGVyT2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVVybFBhcmFtZXRlcnMoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJzQ2hhbmdlZC5uZXh0KHRoaXMuZmlsdGVycyk7XG4gICAgfVxuXG4gICAgcmVtb3ZlRmlsdGVyKGZpbHRlck9iajogRmlsdGVyT2JqKSB7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHRoaXMuZmlsdGVycy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJzW2lkeF0uY29sdW1uSWQgPT09IGZpbHRlck9iai5jb2x1bW5JZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVycy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVVybFBhcmFtZXRlcnMoW2ZpbHRlck9ial0pO1xuICAgICAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLm5leHQodGhpcy5maWx0ZXJzKTtcbiAgICB9XG5cbiAgICBnZXRGaWx0ZXJTdHJpbmcoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gJyc7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IHRoaXMuZmlsdGVycy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJzW2lkeF0uY29sdW1uSWQgPT09IGtleSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5maWx0ZXJzW2lkeF0udmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNoYW5nZVBhZ2UocGFnZTogYW55KSB7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZWQubmV4dChwYWdlKTtcbiAgICB9XG5cbiAgICBjbGVhckZpbHRlcnMoKSB7XG4gICAgICAgIHRoaXMuZmlsdGVycyA9IFtdO1xuICAgICAgICB0aGlzLnVwZGF0ZVVybFBhcmFtZXRlcnMoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJzQ2hhbmdlZC5uZXh0KHRoaXMuZmlsdGVycyk7XG4gICAgfVxuXG4gICAgc3RvcmVGaWx0ZXJzKCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc2VhcmNoX2ZpbHRlcnMnLCBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlcnMpKTtcbiAgICB9XG5cbiAgICBnZXRTdG9yZWRGaWx0ZXJzKCkge1xuICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzZWFyY2hfZmlsdGVycycpO1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gc3RvcmFnZUl0ZW0gPyBKU09OLnBhcnNlKHN0b3JhZ2VJdGVtKSA6IFtdO1xuICAgICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG5cbiAgICB1cGRhdGVVcmxQYXJhbWV0ZXJzKGZpbHRlcnNUb1JlbW92ZTogYW55W10gPSBbXSkge1xuICAgICAgICBjb25zdCB1cmxGaWx0ZXJzTWFwID0gdGhpcy5nZXRVcmxGaWx0ZXJzTWFwKCk7XG4gICAgICAgIGxldCBwYXJhbXM6IEh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgICAgICB0aGlzLmZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgICAgICAgdXJsRmlsdGVyc01hcFtmaWx0ZXIuY29sdW1uSWRdID0gZmlsdGVyO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbmV3RmlsdGVycyA9IFtdO1xuICAgICAgICBmb3JFYWNoKHVybEZpbHRlcnNNYXAsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJSZW1vdmVkID0gZmlsdGVyc1RvUmVtb3ZlLnNvbWUoKHJlbW92ZWQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVtb3ZlZC5jb2x1bW5JZCA9PT0ga2V5O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGlmICghZmlsdGVyUmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgbmV3RmlsdGVycy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmlsdGVycyA9IG5ld0ZpbHRlcnM7XG4gICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnJvdXRlci51cmwuc3BsaXQoXCI/XCIpWzBdO1xuICAgICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShwYXRoLCBwYXJhbXMudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMuc3RvcmVGaWx0ZXJzKCk7XG4gICAgfVxuXG4gICAgZ2V0VXJsRmlsdGVyc01hcCgpOiBhbnkge1xuICAgICAgICBjb25zdCBwYXJhbVN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiP1wiKVsxXTtcbiAgICAgICAgY29uc3QgcGFyYW1zOiBIdHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoeyBmcm9tU3RyaW5nOiBwYXJhbVN0cmluZyB9KTtcbiAgICAgICAgY29uc3Qgc3RvcmVkRmlsdGVycyA9IHRoaXMuZ2V0U3RvcmVkRmlsdGVycygpO1xuICAgICAgICBjb25zdCBhcHBsaWVkRmlsdGVyc01hcCA9IHt9O1xuXG4gICAgICAgIHBhcmFtcy5rZXlzKCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdG9yZWRGaWx0ZXIgPSBzdG9yZWRGaWx0ZXJzLmZpbmQoKGZpbHRlcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXIuY29sdW1uSWQgPT09IGtleTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHN0b3JlZEZpbHRlcikge1xuICAgICAgICAgICAgICAgIGFwcGxpZWRGaWx0ZXJzTWFwW2tleV0gPSBzdG9yZWRGaWx0ZXI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCB2YWw6IGFueSA9IHBhcmFtcy5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICBsZXQgdHlwZSA9ICdURVhUSU5QVVQnXG4gICAgICAgICAgICAgICAgbGV0IGxhYmVsID0gdmFsO1xuICAgICAgICAgICAgICAgIGlmICh2YWw/LnNwbGl0KCcsJyk/Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsPy5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IHZhbFswXTtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICdBVFRSSUJVVEUnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFwcGxpZWRGaWx0ZXJzTWFwW2tleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbklkOiBrZXksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBkZWNvZGVVUklDb21wb25lbnQobGFiZWwpLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJOYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFwcGxpZWRGaWx0ZXJzTWFwO1xuICAgIH1cblxufVxuIl19
|