@c8y/ngx-components 1020.28.11 → 1020.33.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bookmarks/bookmarks.service.d.ts +3 -2
- package/bookmarks/bookmarks.service.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
- package/context-dashboard/device-info-dashboard/device-info-dashboard.component.d.ts.map +1 -1
- package/core/common/common.module.d.ts +2 -2
- package/core/common/humanize-app-name.model.d.ts +2 -2
- package/core/common/humanize-app-name.pipe.d.ts.map +1 -1
- package/core/dashboard/dashboard.model.d.ts +1 -0
- package/core/dashboard/dashboard.model.d.ts.map +1 -1
- package/core/dashboard/widgets-dashboard.component.d.ts +1 -0
- package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
- package/core/data-grid/data-grid.model.d.ts +1 -1
- package/core/data-grid/data-grid.model.d.ts.map +1 -1
- package/core/data-grid/visible-controls.pipe.d.ts +3 -2
- package/core/data-grid/visible-controls.pipe.d.ts.map +1 -1
- package/esm2022/bookmarks/bookmarks.service.mjs +9 -7
- package/esm2022/context-dashboard/context-dashboard.service.mjs +6 -3
- package/esm2022/context-dashboard/device-info-dashboard/device-info-dashboard.component.mjs +39 -3
- package/esm2022/core/common/common.module.mjs +3 -3
- package/esm2022/core/common/humanize-app-name.model.mjs +3 -3
- package/esm2022/core/common/humanize-app-name.pipe.mjs +6 -5
- package/esm2022/core/dashboard/dashboard.model.mjs +2 -2
- package/esm2022/core/dashboard/widgets-dashboard.component.mjs +12 -3
- package/esm2022/core/data-grid/data-grid.component.mjs +3 -3
- package/esm2022/core/data-grid/data-grid.model.mjs +1 -1
- package/esm2022/core/data-grid/visible-controls.pipe.mjs +5 -4
- package/esm2022/core/docs/defaults.items.mjs +2 -2
- package/esm2022/protocol-opcua/opcua-device-protocol-data-reporting.component.mjs +3 -3
- package/esm2022/repository/configuration/list/configuration-list.component.mjs +107 -60
- package/esm2022/repository/shared/columns/device-type.cell-renderer.component.mjs +7 -3
- package/esm2022/repository/shared/columns/device-type.grid-column.mjs +2 -2
- package/esm2022/repository/shared/columns/file.cell-renderer.component.mjs +39 -0
- package/esm2022/repository/shared/columns/file.grid-column.mjs +13 -0
- package/esm2022/repository/shared/columns/name.cell-renderer.component.mjs +26 -5
- package/esm2022/repository/shared/columns/name.grid-column.mjs +1 -1
- package/esm2022/repository/shared/columns/type.cell-renderer.component.mjs +18 -0
- package/esm2022/repository/shared/columns/type.filtering-form-renderer.component.mjs +115 -0
- package/esm2022/repository/shared/columns/type.grid-column.mjs +29 -0
- package/esm2022/repository/shared/index.mjs +10 -1
- package/esm2022/repository/software/list/software-list.component.mjs +9 -4
- package/esm2022/repository/software/list/software-repository-list.module.mjs +3 -15
- package/esm2022/widgets/definitions/device-management-welcome/index.mjs +2 -2
- package/esm2022/widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.mjs +22 -5
- package/fesm2022/c8y-ngx-components-bookmarks.mjs +7 -5
- package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +43 -4
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +2 -2
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +118 -68
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +283 -81
- package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs +31 -154
- package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +24 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +27 -17
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +6 -0
- package/locales/es.po +6 -0
- package/locales/fr.po +6 -0
- package/locales/ja_JP.po +6 -0
- package/locales/locales.pot +38 -23
- package/locales/nl.po +6 -0
- package/locales/pl.po +6 -0
- package/locales/pt_BR.po +6 -0
- package/package.json +1 -1
- package/repository/configuration/list/configuration-list.component.d.ts +21 -17
- package/repository/configuration/list/configuration-list.component.d.ts.map +1 -1
- package/repository/shared/columns/device-type.cell-renderer.component.d.ts +4 -1
- package/repository/shared/columns/device-type.cell-renderer.component.d.ts.map +1 -1
- package/repository/shared/columns/device-type.grid-column.d.ts +1 -0
- package/repository/shared/columns/device-type.grid-column.d.ts.map +1 -1
- package/repository/shared/columns/file.cell-renderer.component.d.ts +15 -0
- package/repository/shared/columns/file.cell-renderer.component.d.ts.map +1 -0
- package/repository/shared/columns/file.grid-column.d.ts +8 -0
- package/repository/shared/columns/file.grid-column.d.ts.map +1 -0
- package/repository/shared/columns/name.cell-renderer.component.d.ts.map +1 -1
- package/repository/shared/columns/name.grid-column.d.ts +3 -1
- package/repository/shared/columns/name.grid-column.d.ts.map +1 -1
- package/repository/shared/columns/type.cell-renderer.component.d.ts +9 -0
- package/repository/shared/columns/type.cell-renderer.component.d.ts.map +1 -0
- package/repository/{software/list/columns/software-type.filtering-form-renderer.component.d.ts → shared/columns/type.filtering-form-renderer.component.d.ts} +9 -8
- package/repository/shared/columns/type.filtering-form-renderer.component.d.ts.map +1 -0
- package/repository/shared/columns/type.grid-column.d.ts +20 -0
- package/repository/shared/columns/type.grid-column.d.ts.map +1 -0
- package/repository/shared/index.d.ts +9 -0
- package/repository/shared/index.d.ts.map +1 -1
- package/repository/software/list/software-list.component.d.ts.map +1 -1
- package/repository/software/list/software-repository-list.module.d.ts +8 -10
- package/repository/software/list/software-repository-list.module.d.ts.map +1 -1
- package/widgets/definitions/device-management-welcome/index.d.ts +1 -1
- package/widgets/definitions/device-management-welcome/index.d.ts.map +1 -1
- package/widgets/device-management/index.d.ts +1 -1
- package/widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.d.ts +5 -1
- package/widgets/implementations/info-gauge/info-gauge-widget-view/info-gauge-widget-view.component.d.ts.map +1 -1
- package/esm2022/repository/software/list/columns/software-type.cell-renderer.component.mjs +0 -17
- package/esm2022/repository/software/list/columns/software-type.filtering-form-renderer.component.mjs +0 -93
- package/esm2022/repository/software/list/columns/software-type.grid-column.mjs +0 -28
- package/repository/software/list/columns/software-type.cell-renderer.component.d.ts +0 -9
- package/repository/software/list/columns/software-type.cell-renderer.component.d.ts.map +0 -1
- package/repository/software/list/columns/software-type.filtering-form-renderer.component.d.ts.map +0 -1
- package/repository/software/list/columns/software-type.grid-column.d.ts +0 -5
- package/repository/software/list/columns/software-type.grid-column.d.ts.map +0 -1
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { RepositoryService, RepositoryType } from '@c8y/ngx-components/repository/shared';
|
|
1
|
+
import { Component, EventEmitter, ViewChild } from '@angular/core';
|
|
2
|
+
import { InventoryBinaryService } from '@c8y/client';
|
|
3
|
+
import { AlertService, DataGridService, FilterInputComponent, gettext, ModalService, Status } from '@c8y/ngx-components';
|
|
4
|
+
import { DescriptionGridColumn, DeviceTypeGridColumn, FileGridColumn, RepositoryItemNameGridColumn, RepositoryService, RepositoryType, TypeGridColumn } from '@c8y/ngx-components/repository/shared';
|
|
6
5
|
import { TranslateService } from '@ngx-translate/core';
|
|
7
6
|
import { saveAs } from 'file-saver';
|
|
8
|
-
import { property } from 'lodash-es';
|
|
9
7
|
import { BsModalService } from 'ngx-bootstrap/modal';
|
|
10
|
-
import { of, pipe } from 'rxjs';
|
|
11
|
-
import { map } from 'rxjs/operators';
|
|
12
8
|
import { ConfigurationDetailComponent } from './configuration-detail.component';
|
|
13
9
|
import * as i0 from "@angular/core";
|
|
14
10
|
import * as i1 from "@c8y/ngx-components";
|
|
@@ -17,28 +13,109 @@ import * as i3 from "ngx-bootstrap/modal";
|
|
|
17
13
|
import * as i4 from "@ngx-translate/core";
|
|
18
14
|
import * as i5 from "@c8y/client";
|
|
19
15
|
import * as i6 from "@angular/common";
|
|
20
|
-
import * as i7 from "ngx-bootstrap/tooltip";
|
|
21
16
|
export class ConfigurationListComponent {
|
|
22
|
-
constructor(alert, repositoryService, bsModalService, modalService, translateService, inventoryBinaryService
|
|
17
|
+
constructor(alert, gridService, repositoryService, bsModalService, modalService, translateService, inventoryBinaryService) {
|
|
23
18
|
this.alert = alert;
|
|
19
|
+
this.gridService = gridService;
|
|
24
20
|
this.repositoryService = repositoryService;
|
|
25
21
|
this.bsModalService = bsModalService;
|
|
26
22
|
this.modalService = modalService;
|
|
27
23
|
this.translateService = translateService;
|
|
28
24
|
this.inventoryBinaryService = inventoryBinaryService;
|
|
29
|
-
this.
|
|
30
|
-
this.
|
|
31
|
-
|
|
25
|
+
this.refresh$ = new EventEmitter();
|
|
26
|
+
this.pagination = {
|
|
27
|
+
pageSize: 50,
|
|
28
|
+
currentPage: 1
|
|
29
|
+
};
|
|
30
|
+
this.noResultsMessage = gettext('No results to display.');
|
|
31
|
+
this.noDataMessage = gettext('There are no configuration snapshots defined.');
|
|
32
|
+
this.noResultsSubtitle = gettext('Refine your search terms or check your spelling.');
|
|
33
|
+
this.noDataSubtitle = gettext('Add a configuration snapshot first.');
|
|
34
|
+
this.actionControls = [];
|
|
35
|
+
this.columns = [
|
|
36
|
+
new RepositoryItemNameGridColumn({
|
|
37
|
+
filterLabel: gettext('Filter configurations by name'),
|
|
38
|
+
placeholder: gettext('SSH'),
|
|
39
|
+
callback: this.edit.bind(this)
|
|
40
|
+
}),
|
|
41
|
+
new DescriptionGridColumn({
|
|
42
|
+
filterLabel: gettext('Filter configurations by description'),
|
|
43
|
+
placeholder: gettext('SSH configuration')
|
|
44
|
+
}),
|
|
45
|
+
new FileGridColumn(),
|
|
46
|
+
new DeviceTypeGridColumn({
|
|
47
|
+
path: 'deviceType',
|
|
48
|
+
filterLabel: gettext('Filter configurations by device type')
|
|
49
|
+
}),
|
|
50
|
+
new TypeGridColumn({
|
|
51
|
+
header: gettext('Configuration type'),
|
|
52
|
+
filterLabel: gettext('Filter by configuration type'),
|
|
53
|
+
example: 'ssh',
|
|
54
|
+
path: 'configurationType',
|
|
55
|
+
repositoryType: RepositoryType.CONFIGURATION
|
|
56
|
+
})
|
|
57
|
+
];
|
|
58
|
+
this.sizeRequestDone = false;
|
|
32
59
|
this.DELETED_SUCCESS_MSG = gettext('Configuration deleted.');
|
|
60
|
+
this.serverSideDataCallback = this.onDataSourceModifier.bind(this);
|
|
33
61
|
}
|
|
34
62
|
ngOnInit() {
|
|
35
|
-
this.
|
|
63
|
+
this.actionControls.push({
|
|
64
|
+
type: "EDIT" /* BuiltInActionType.Edit */,
|
|
65
|
+
callback: this.edit.bind(this)
|
|
66
|
+
});
|
|
67
|
+
this.actionControls.push({
|
|
68
|
+
type: "DELETE" /* BuiltInActionType.Delete */,
|
|
69
|
+
callback: this.delete.bind(this)
|
|
70
|
+
});
|
|
71
|
+
this.actionControls.push({
|
|
72
|
+
type: 'download',
|
|
73
|
+
icon: 'download',
|
|
74
|
+
text: gettext('Download'),
|
|
75
|
+
showIf: row => this.isBinaryFile(row),
|
|
76
|
+
callback: this.download.bind(this)
|
|
77
|
+
});
|
|
36
78
|
}
|
|
37
|
-
async
|
|
38
|
-
this.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
79
|
+
async onDataSourceModifier(dataSourceModifier) {
|
|
80
|
+
const dataRequest = this.repositoryService.listRepositoryEntries(RepositoryType.CONFIGURATION, {
|
|
81
|
+
query: this.gridService.getQueryObj(dataSourceModifier.columns),
|
|
82
|
+
skipDefaultOrder: true,
|
|
83
|
+
params: {
|
|
84
|
+
pageSize: dataSourceModifier.pagination.pageSize,
|
|
85
|
+
currentPage: dataSourceModifier.pagination.currentPage,
|
|
86
|
+
withTotalPages: true
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
const filtererdSizeRequest = this.repositoryService
|
|
90
|
+
.listRepositoryEntries(RepositoryType.CONFIGURATION, {
|
|
91
|
+
query: this.gridService.getQueryObj(dataSourceModifier.columns),
|
|
92
|
+
skipDefaultOrder: true,
|
|
93
|
+
params: { pageSize: 1 }
|
|
94
|
+
})
|
|
95
|
+
.then(response => response?.paging?.totalPages);
|
|
96
|
+
this.size$ = this.repositoryService
|
|
97
|
+
.listRepositoryEntries(RepositoryType.CONFIGURATION, {
|
|
98
|
+
skipDefaultOrder: true,
|
|
99
|
+
params: { pageSize: 1 }
|
|
100
|
+
})
|
|
101
|
+
.then(response => {
|
|
102
|
+
this.sizeRequestDone = true;
|
|
103
|
+
return response?.paging?.totalPages;
|
|
104
|
+
});
|
|
105
|
+
const [dataResponse, size, filteredSize] = await Promise.all([
|
|
106
|
+
dataRequest,
|
|
107
|
+
this.size$,
|
|
108
|
+
filtererdSizeRequest
|
|
109
|
+
]);
|
|
110
|
+
const { res, data, paging } = dataResponse;
|
|
111
|
+
const serverSideDataResult = {
|
|
112
|
+
res,
|
|
113
|
+
data,
|
|
114
|
+
paging,
|
|
115
|
+
filteredSize,
|
|
116
|
+
size
|
|
117
|
+
};
|
|
118
|
+
return serverSideDataResult;
|
|
42
119
|
}
|
|
43
120
|
async add() {
|
|
44
121
|
try {
|
|
@@ -49,7 +126,7 @@ export class ConfigurationListComponent {
|
|
|
49
126
|
ignoreBackdropClick: true,
|
|
50
127
|
keyboard: false
|
|
51
128
|
}).content.result;
|
|
52
|
-
|
|
129
|
+
this.refresh$.next();
|
|
53
130
|
}
|
|
54
131
|
catch (ex) {
|
|
55
132
|
// intended empty
|
|
@@ -75,7 +152,7 @@ export class ConfigurationListComponent {
|
|
|
75
152
|
}).content;
|
|
76
153
|
modal.mo = configuration;
|
|
77
154
|
await modal.result;
|
|
78
|
-
|
|
155
|
+
this.refresh$.next();
|
|
79
156
|
}
|
|
80
157
|
catch (ex) {
|
|
81
158
|
// intended empty
|
|
@@ -86,9 +163,6 @@ export class ConfigurationListComponent {
|
|
|
86
163
|
? !!this.inventoryBinaryService.getIdFromUrl(configuration.url)
|
|
87
164
|
: false;
|
|
88
165
|
}
|
|
89
|
-
getBinaryName(configuration) {
|
|
90
|
-
return this.repositoryService.getBinaryName$(configuration.url);
|
|
91
|
-
}
|
|
92
166
|
async download(configuration) {
|
|
93
167
|
const fileBinary = await this.repositoryService.getBinaryFile(configuration.url, {
|
|
94
168
|
allowExternal: false
|
|
@@ -114,7 +188,7 @@ export class ConfigurationListComponent {
|
|
|
114
188
|
await this.modalService.confirm(title, body, Status.DANGER, labels);
|
|
115
189
|
await this.repositoryService.delete(configuration);
|
|
116
190
|
this.alert.success(this.DELETED_SUCCESS_MSG);
|
|
117
|
-
|
|
191
|
+
this.refresh$.next();
|
|
118
192
|
}
|
|
119
193
|
catch (ex) {
|
|
120
194
|
if (ex) {
|
|
@@ -122,44 +196,17 @@ export class ConfigurationListComponent {
|
|
|
122
196
|
}
|
|
123
197
|
}
|
|
124
198
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
this.filterPipe = pipe(map(data => {
|
|
128
|
-
this.data =
|
|
129
|
-
filterTerm.trim().length === 0
|
|
130
|
-
? data
|
|
131
|
-
: data.filter(mo => this.filterContainString(mo.name, filterTerm) ||
|
|
132
|
-
this.filterContainString(mo.configurationType, filterTerm) ||
|
|
133
|
-
this.filterContainString(mo.deviceType, filterTerm) ||
|
|
134
|
-
this.filterContainString(mo.description, filterTerm));
|
|
135
|
-
return this.data;
|
|
136
|
-
}));
|
|
137
|
-
}
|
|
138
|
-
shouldShowEmptyState() {
|
|
139
|
-
return !(this.data && this.data.length > 0);
|
|
140
|
-
}
|
|
141
|
-
reset() {
|
|
142
|
-
this.filter.filterTerm = '';
|
|
143
|
-
this.setPipe('');
|
|
144
|
-
}
|
|
145
|
-
filterContainString(name, filterTerm) {
|
|
146
|
-
const term = filterTerm.toLowerCase().trim();
|
|
147
|
-
return name && name.toLowerCase().indexOf(term) > -1;
|
|
199
|
+
trackByName(_index, column) {
|
|
200
|
+
return column.name;
|
|
148
201
|
}
|
|
149
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: ConfigurationListComponent, deps: [{ token: i1.AlertService }, { token:
|
|
150
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: ConfigurationListComponent, selector: "c8y-configuration-list", viewQueries: [{ propertyName: "filter", first: true, predicate: FilterInputComponent, descendants: true }], ngImport: i0, template: "<c8y-title>\n <span\n class=\"m-r-4\"\n translate\n >\n Configuration repository\n </span>\n <small *ngIf=\"(configurations$ | async)?.paging.totalPages === 1 && !filterTerm\">\n {{ (configurations$ | async).data.length }}\n <span translate>snapshots</span>\n </small>\n <small\n [tooltip]=\"'More data available. Scroll to the bottom of the list to load it.' | translate\"\n container=\"body\"\n *ngIf=\"(configurations$ | async)?.paging.totalPages > 1 && !filterTerm\"\n >\n {{ (configurations$ | async).paging.pageSize }}+\n <span translate>snapshots</span>\n </small>\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"gears\"\n label=\"{{ 'Configuration repository' | translate }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item itemClass=\"navbar-form\">\n <c8y-filter\n [icon]=\"'search'\"\n (onSearch)=\"setPipe($event)\"\n ></c8y-filter>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add configuration snapshot' | translate }}\"\n type=\"button\"\n (click)=\"add()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add configuration snapshot' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"loadConfigurations()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': reloading }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/device-management-application/managing-device-data/#managing-configurations\"\n></c8y-help>\n\n<!-- empty state -->\n<c8y-ui-empty-state\n [icon]=\"'gears'\"\n [title]=\"'There are no configuration snapshots defined.' | translate\"\n [subtitle]=\"'Add a configuration snapshot first.' | translate\"\n *ngIf=\"!filterTerm && (configurations$ | async)?.data.length === 0\"\n>\n <div>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add configuration snapshot' | translate }}\"\n type=\"button\"\n (click)=\"add()\"\n >\n {{ 'Add configuration snapshot' | translate }}\n </button>\n </div>\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a\n c8y-guide-href=\"/docs/device-management-application/managing-device-data/#managing-configurations\"\n >\n user documentation\n </a>\n .\n </small>\n </p>\n</c8y-ui-empty-state>\n\n<!-- no results empty state -->\n<c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'Refine your search terms or check your spelling.' | translate\"\n *ngIf=\"shouldShowEmptyState() && (configurations$ | async)?.data.length > 0\"\n></c8y-ui-empty-state>\n\n<c8y-list-group\n class=\"m-b-24\"\n *ngIf=\"(configurations$ | async)?.data.length > 0\"\n [ngClass]=\"{\n 'dd-low': data && data.length ? data.length < 10 : (configurations$ | async)?.data.length < 10\n }\"\n>\n <c8y-li\n class=\"page-sticky-header hidden-xs\"\n [emptyActions]=\"true\"\n *ngIf=\"!shouldShowEmptyState()\"\n >\n <c8y-li-icon>\n <i class=\"p-l-24\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-60\">\n <div class=\"col-2\">\n {{ 'Configuration' | translate }}\n </div>\n <div class=\"col-3\">\n {{ 'Description' | translate }}\n </div>\n <div class=\"col-3\">\n {{ 'File' | translate }}\n </div>\n <div class=\"col-2\">\n {{ 'Device type' | translate }}\n </div>\n <div class=\"col-2\">\n {{ 'Configuration type' | translate }}\n </div>\n </c8y-li-body>\n </c8y-li>\n\n <c8y-li *c8yFor=\"let configuration of configurations$; pipe: filterPipe\">\n <c8y-li-icon icon=\"gears\"></c8y-li-icon>\n <div class=\"content-flex-60\">\n <button\n class=\"btn-clean col-2\"\n title=\"{{ configuration.name || '-' }}\"\n type=\"button\"\n (click)=\"edit(configuration)\"\n >\n <span class=\"text-truncate\">\n <c8y-highlight\n [text]=\"configuration.name || '-'\"\n elementClass=\"text-info\"\n [pattern]=\"filterTerm\"\n ></c8y-highlight>\n </span>\n </button>\n <div class=\"col-3\">\n <div class=\"text-label-small visible-xs-inline m-r-4\">\n {{ 'Description' | translate }}\n </div>\n <small\n class=\"text-truncate\"\n title=\"configuration.description\"\n *ngIf=\"configuration.description; else emptyDescription\"\n >\n <c8y-highlight\n [text]=\"configuration.description || '-'\"\n elementClass=\"text-info\"\n [pattern]=\"filterTerm\"\n ></c8y-highlight>\n </small>\n </div>\n <div class=\"col-3\">\n <span class=\"text-truncate\">\n <span\n class=\"text-label-small m-r-4 visible-xs-inline\"\n translate\n >\n File\n </span>\n <small\n title=\"{{ getBinaryName(configuration) | async }}\"\n *ngIf=\"isBinaryFile(configuration); else noFile\"\n >\n {{ getBinaryName(configuration) | async }}\n </small>\n <ng-template #noFile>\n <small title=\"{{ configuration.url }}\">\n {{ configuration.url }}\n </small>\n </ng-template>\n </span>\n </div>\n <div class=\"col-2\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Device type' | translate }}: {{ configuration.deviceType || '-' }}\"\n >\n <span\n class=\"text-label-small visible-xs-inline m-r-4\"\n translate\n >\n Device type\n </span>\n <span *ngIf=\"configuration.deviceType; else emptyText\">\n <c8y-highlight\n [text]=\"configuration.deviceType || '-'\"\n elementClass=\"text-info\"\n [pattern]=\"filterTerm\"\n ></c8y-highlight>\n </span>\n </div>\n </div>\n <div class=\"col-2\">\n <div\n class=\"text-truncate\"\n title=\"{{ configuration.configurationType }}\"\n >\n <span\n class=\"label label-primary\"\n *ngIf=\"configuration.configurationType; else emptyText\"\n >\n <c8y-highlight\n [text]=\"configuration.configurationType\"\n elementClass=\"text-info\"\n [pattern]=\"filterTerm\"\n ></c8y-highlight>\n </span>\n </div>\n </div>\n </div>\n <c8y-li-action\n icon=\"pencil\"\n (click)=\"edit(configuration)\"\n label=\"{{ 'Edit' | translate }}\"\n ></c8y-li-action>\n <c8y-li-action\n icon=\"delete\"\n (click)=\"delete(configuration)\"\n label=\"{{ 'Delete' | translate }}\"\n ></c8y-li-action>\n <c8y-li-action\n icon=\"download\"\n *ngIf=\"isBinaryFile(configuration)\"\n (click)=\"download(configuration)\"\n label=\"{{ 'Download' | translate }}\"\n ></c8y-li-action>\n <ng-template #emptyText>\n <small class=\"text-muted\">\n <em>{{ 'Undefined' | translate }}</em>\n </small>\n </ng-template>\n <ng-template #emptyDescription>\n <small class=\"text-muted\">\n <em>{{ 'No description' | translate }}</em>\n </small>\n </ng-template>\n </c8y-li>\n</c8y-list-group>\n", dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i1.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i1.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i1.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i1.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i1.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i1.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i1.FilterInputComponent, selector: "c8y-filter", inputs: ["icon"], outputs: ["onSearch"] }, { kind: "directive", type: i1.GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "component", type: i1.GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "component", type: i1.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i1.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i1.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i1.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i1.ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "component", type: i1.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: i7.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] }); }
|
|
202
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: ConfigurationListComponent, deps: [{ token: i1.AlertService }, { token: i1.DataGridService }, { token: i2.RepositoryService }, { token: i3.BsModalService }, { token: i1.ModalService }, { token: i4.TranslateService }, { token: i5.InventoryBinaryService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
203
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: ConfigurationListComponent, selector: "c8y-configuration-list", viewQueries: [{ propertyName: "filter", first: true, predicate: FilterInputComponent, descendants: true }], ngImport: i0, template: "<c8y-title>\n <span\n class=\"m-r-4\"\n translate\n >\n Configuration repository\n </span>\n <small>\n {{ size$ | async }}\n <span translate>snapshots</span>\n </small>\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"gears\"\n label=\"{{ 'Configuration repository' | translate }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add configuration snapshot' | translate }}\"\n type=\"button\"\n (click)=\"add()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add configuration snapshot' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/device-management-application/managing-device-data/#managing-configurations\"\n></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"'Configurations' | translate\"\n [refresh]=\"refresh$\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'gears'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <ng-container *ngIf=\"stats?.size === 0\">\n <p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add configuration snapshot' | translate }}\"\n type=\"button\"\n (click)=\"add()\"\n >\n {{ 'Add configuration snapshot' | translate }}\n </button>\n </p>\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a\n c8y-guide-href=\"/docs/device-management-application/managing-device-data/#managing-configurations\"\n >\n user documentation\n </a>\n .\n </small>\n </p>\n </ng-container>\n </c8y-ui-empty-state>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n", dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i1.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i1.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i1.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i1.EmptyStateContextDirective, selector: "[emptyStateContext]" }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i1.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i1.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: i1.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i1.GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "component", type: i1.GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "component", type: i1.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] }); }
|
|
151
204
|
}
|
|
152
|
-
__decorate([
|
|
153
|
-
memoize(property('id')),
|
|
154
|
-
__metadata("design:type", Function),
|
|
155
|
-
__metadata("design:paramtypes", [Object]),
|
|
156
|
-
__metadata("design:returntype", void 0)
|
|
157
|
-
], ConfigurationListComponent.prototype, "getBinaryName", null);
|
|
158
205
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: ConfigurationListComponent, decorators: [{
|
|
159
206
|
type: Component,
|
|
160
|
-
args: [{ selector: 'c8y-configuration-list', template: "<c8y-title>\n <span\n class=\"m-r-4\"\n translate\n >\n Configuration repository\n </span>\n <small
|
|
161
|
-
}], ctorParameters: () => [{ type: i1.AlertService }, { type:
|
|
207
|
+
args: [{ selector: 'c8y-configuration-list', template: "<c8y-title>\n <span\n class=\"m-r-4\"\n translate\n >\n Configuration repository\n </span>\n <small>\n {{ size$ | async }}\n <span translate>snapshots</span>\n </small>\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-management\"\n label=\"{{ 'Management' | translate }}\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n icon=\"gears\"\n label=\"{{ 'Configuration repository' | translate }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add configuration snapshot' | translate }}\"\n type=\"button\"\n (click)=\"add()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add configuration snapshot' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/device-management-application/managing-device-data/#managing-configurations\"\n></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"'Configurations' | translate\"\n [refresh]=\"refresh$\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'gears'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (noDataSubtitle | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"stats?.size > 0\"\n >\n <ng-container *ngIf=\"stats?.size === 0\">\n <p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add configuration snapshot' | translate }}\"\n type=\"button\"\n (click)=\"add()\"\n >\n {{ 'Add configuration snapshot' | translate }}\n </button>\n </p>\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a\n c8y-guide-href=\"/docs/device-management-application/managing-device-data/#managing-configurations\"\n >\n user documentation\n </a>\n .\n </small>\n </p>\n </ng-container>\n </c8y-ui-empty-state>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n" }]
|
|
208
|
+
}], ctorParameters: () => [{ type: i1.AlertService }, { type: i1.DataGridService }, { type: i2.RepositoryService }, { type: i3.BsModalService }, { type: i1.ModalService }, { type: i4.TranslateService }, { type: i5.InventoryBinaryService }], propDecorators: { filter: [{
|
|
162
209
|
type: ViewChild,
|
|
163
210
|
args: [FilterInputComponent, { static: false }]
|
|
164
|
-
}]
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3JlcG9zaXRvcnkvY29uZmlndXJhdGlvbi9saXN0L2NvbmZpZ3VyYXRpb24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L2NvbmZpZ3VyYXRpb24vbGlzdC9jb25maWd1cmF0aW9uLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBK0Isc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEcsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFFcEIsWUFBWSxFQUNaLE1BQU0sRUFDTixPQUFPLEVBQ1AsT0FBTyxFQUNSLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7QUFNaEYsTUFBTSxPQUFPLDBCQUEwQjtJQVNyQyxZQUNVLEtBQW1CLEVBQ25CLGlCQUFvQyxFQUNwQyxj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QixDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQ3ZELENBQUM7WUFFUixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxJQUFZLEVBQUUsVUFBa0I7UUFDMUQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdDLE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQzs4R0EzSlUsMEJBQTBCO2tHQUExQiwwQkFBMEIsc0dBQzFCLG9CQUFvQixnREN6QmpDLHFzUEF5UUE7O0FEOUpFO0lBREMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7OzsrREFHdkI7MkZBckZVLDBCQUEwQjtrQkFKdEMsU0FBUzsrQkFDRSx3QkFBd0I7NFFBSWtCLE1BQU07c0JBQXpELFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQWtGbEQsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJUmVzdWx0TGlzdCwgSW52ZW50b3J5QmluYXJ5U2VydmljZSwgSW52ZW50b3J5U2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgRmlsdGVySW5wdXRDb21wb25lbnQsXG4gIEZvck9mRmlsdGVyUGlwZSxcbiAgTW9kYWxTZXJ2aWNlLFxuICBTdGF0dXMsXG4gIGdldHRleHQsXG4gIG1lbW9pemVcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBSZXBvc2l0b3J5U2VydmljZSwgUmVwb3NpdG9yeVR5cGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3JlcG9zaXRvcnkvc2hhcmVkJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBwaXBlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRGV0YWlsQ29tcG9uZW50IH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLWRldGFpbC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktY29uZmlndXJhdGlvbi1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpZ3VyYXRpb24tbGlzdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbkxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBAVmlld0NoaWxkKEZpbHRlcklucHV0Q29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSkgZmlsdGVyOiBGaWx0ZXJJbnB1dENvbXBvbmVudDtcbiAgY29uZmlndXJhdGlvbnMkOiBPYnNlcnZhYmxlPElSZXN1bHRMaXN0PElNYW5hZ2VkT2JqZWN0Pj47XG4gIGZpbHRlclBpcGU6IEZvck9mRmlsdGVyUGlwZTxJTWFuYWdlZE9iamVjdD47XG4gIGZpbHRlclRlcm0gPSAnJztcbiAgcmVsb2FkaW5nID0gZmFsc2U7XG4gIGRhdGE7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVMRVRFRF9TVUNDRVNTX01TRyA9IGdldHRleHQoJ0NvbmZpZ3VyYXRpb24gZGVsZXRlZC4nKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZXBvc2l0b3J5U2VydmljZTogUmVwb3NpdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBic01vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlCaW5hcnlTZXJ2aWNlOiBJbnZlbnRvcnlCaW5hcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5U2VydmljZTogSW52ZW50b3J5U2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sb2FkQ29uZmlndXJhdGlvbnMoKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRDb25maWd1cmF0aW9ucygpIHtcbiAgICB0aGlzLnJlbG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5jb25maWd1cmF0aW9ucyQgPSBvZihcbiAgICAgIGF3YWl0IHRoaXMucmVwb3NpdG9yeVNlcnZpY2UubGlzdFJlcG9zaXRvcnlFbnRyaWVzKFJlcG9zaXRvcnlUeXBlLkNPTkZJR1VSQVRJT04pXG4gICAgKTtcbiAgICB0aGlzLnJlbG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIGFzeW5jIGFkZCgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgKFxuICAgICAgICB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coQ29uZmlndXJhdGlvbkRldGFpbENvbXBvbmVudCwge1xuICAgICAgICAgIGNsYXNzOiAnbW9kYWwtc20nLFxuICAgICAgICAgIGFyaWFEZXNjcmliZWRieTogJ2NvbmZpZ3VyYXRpb25Nb2RhbERlc2NyaXB0aW9uJyxcbiAgICAgICAgICBhcmlhTGFiZWxsZWRCeTogJ2NvbmZpZ3VyYXRpb25Nb2RhbFRpdGxlJyxcbiAgICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgICAgIGtleWJvYXJkOiBmYWxzZVxuICAgICAgICB9KS5jb250ZW50IGFzIENvbmZpZ3VyYXRpb25EZXRhaWxDb21wb25lbnRcbiAgICAgICkucmVzdWx0O1xuICAgICAgYXdhaXQgdGhpcy5sb2FkQ29uZmlndXJhdGlvbnMoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gaW50ZW5kZWQgZW1wdHlcbiAgICB9XG4gIH1cblxuICBhc3luYyBlZGl0KGNvbmZpZ3VyYXRpb246IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgZmlsZUJpbmFyeTogRmlsZSA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeVNlcnZpY2UuZ2V0QmluYXJ5RmlsZShjb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgYWxsb3dFeHRlcm5hbDogZmFsc2VcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbW9kYWwgPSB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coQ29uZmlndXJhdGlvbkRldGFpbENvbXBvbmVudCwge1xuICAgICAgICBjbGFzczogJ21vZGFsLXNtJyxcbiAgICAgICAgYXJpYURlc2NyaWJlZGJ5OiAnY29uZmlndXJhdGlvbk1vZGFsRGVzY3JpcHRpb24nLFxuICAgICAgICBhcmlhTGFiZWxsZWRCeTogJ2NvbmZpZ3VyYXRpb25Nb2RhbFRpdGxlJyxcbiAgICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxuXG4gICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgIHZlcnNpb246IGNvbmZpZ3VyYXRpb24ubmFtZSxcbiAgICAgICAgICBkZXZpY2VUeXBlOiBjb25maWd1cmF0aW9uLmRldmljZVR5cGUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGNvbmZpZ3VyYXRpb24uZGVzY3JpcHRpb24sXG4gICAgICAgICAgYmluYXJ5OiB7IGZpbGU6IGZpbGVCaW5hcnksIHVybDogY29uZmlndXJhdGlvbi51cmwgfVxuICAgICAgICB9XG4gICAgICB9KS5jb250ZW50IGFzIENvbmZpZ3VyYXRpb25EZXRhaWxDb21wb25lbnQ7XG4gICAgICBtb2RhbC5tbyA9IGNvbmZpZ3VyYXRpb247XG4gICAgICBhd2FpdCBtb2RhbC5yZXN1bHQ7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRDb25maWd1cmF0aW9ucygpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBpbnRlbmRlZCBlbXB0eVxuICAgIH1cbiAgfVxuXG4gIGlzQmluYXJ5RmlsZShjb25maWd1cmF0aW9uOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiBjb25maWd1cmF0aW9uLnVybFxuICAgICAgPyAhIXRoaXMuaW52ZW50b3J5QmluYXJ5U2VydmljZS5nZXRJZEZyb21VcmwoY29uZmlndXJhdGlvbi51cmwpXG4gICAgICA6IGZhbHNlO1xuICB9XG5cbiAgQG1lbW9pemUocHJvcGVydHkoJ2lkJykpXG4gIGdldEJpbmFyeU5hbWUoY29uZmlndXJhdGlvbjogSU1hbmFnZWRPYmplY3QpIHtcbiAgICByZXR1cm4gdGhpcy5yZXBvc2l0b3J5U2VydmljZS5nZXRCaW5hcnlOYW1lJChjb25maWd1cmF0aW9uLnVybCk7XG4gIH1cblxuICBhc3luYyBkb3dubG9hZChjb25maWd1cmF0aW9uOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGZpbGVCaW5hcnk6IEZpbGUgPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlLmdldEJpbmFyeUZpbGUoY29uZmlndXJhdGlvbi51cmwsIHtcbiAgICAgIGFsbG93RXh0ZXJuYWw6IGZhbHNlXG4gICAgfSk7XG4gICAgc2F2ZUFzKGZpbGVCaW5hcnkpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKGNvbmZpZ3VyYXRpb246IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRpdGxlID0gZ2V0dGV4dCgnRGVsZXRlIGNvbmZpZ3VyYXRpb24gc25hcHNob3QnKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1hdGlvblRleHQgPSBnZXR0ZXh0KFxuICAgICAgICAnWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIGNvbmZpZ3VyYXRpb24gc25hcHNob3Qge3sgbmFtZSB9fS4nXG4gICAgICApO1xuICAgICAgY29uc3QgaGludCA9IGdldHRleHQoJ1RoaXMgb3BlcmF0aW9uIGlzIGlycmV2ZXJzaWJsZS4nKTtcbiAgICAgIGNvbnN0IHByb2NlZWQgPSBnZXR0ZXh0KCdEbyB5b3Ugd2FudCB0byBwcm9jZWVkPycpO1xuICAgICAgY29uc3QgYm9keSA9IFtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoY29uZmlybWF0aW9uVGV4dCwge1xuICAgICAgICAgIG5hbWU6IGNvbmZpZ3VyYXRpb24ubmFtZVxuICAgICAgICB9KSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoaGludCksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHByb2NlZWQpXG4gICAgICBdLmpvaW4oJyAnKTtcbiAgICAgIGNvbnN0IGxhYmVscyA9IHtcbiAgICAgICAgb2s6IGdldHRleHQoJ0RlbGV0ZScpXG4gICAgICB9O1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2UuY29uZmlybSh0aXRsZSwgYm9keSwgU3RhdHVzLkRBTkdFUiwgbGFiZWxzKTtcbiAgICAgIGF3YWl0IHRoaXMucmVwb3NpdG9yeVNlcnZpY2UuZGVsZXRlKGNvbmZpZ3VyYXRpb24pO1xuICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKHRoaXMuREVMRVRFRF9TVUNDRVNTX01TRyk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRDb25maWd1cmF0aW9ucygpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRQaXBlKGZpbHRlclRlcm06IHN0cmluZykge1xuICAgIHRoaXMuZmlsdGVyVGVybSA9IGZpbHRlclRlcm07XG4gICAgdGhpcy5maWx0ZXJQaXBlID0gcGlwZShcbiAgICAgIG1hcChkYXRhID0+IHtcbiAgICAgICAgdGhpcy5kYXRhID1cbiAgICAgICAgICBmaWx0ZXJUZXJtLnRyaW0oKS5sZW5ndGggPT09IDBcbiAgICAgICAgICAgID8gZGF0YVxuICAgICAgICAgICAgOiBkYXRhLmZpbHRlcihcbiAgICAgICAgICAgICAgICBtbyA9PlxuICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJDb250YWluU3RyaW5nKG1vLm5hbWUsIGZpbHRlclRlcm0pIHx8XG4gICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckNvbnRhaW5TdHJpbmcobW8uY29uZmlndXJhdGlvblR5cGUsIGZpbHRlclRlcm0pIHx8XG4gICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckNvbnRhaW5TdHJpbmcobW8uZGV2aWNlVHlwZSwgZmlsdGVyVGVybSkgfHxcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyQ29udGFpblN0cmluZyhtby5kZXNjcmlwdGlvbiwgZmlsdGVyVGVybSlcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgc2hvdWxkU2hvd0VtcHR5U3RhdGUoKSB7XG4gICAgcmV0dXJuICEodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5sZW5ndGggPiAwKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuZmlsdGVyLmZpbHRlclRlcm0gPSAnJztcbiAgICB0aGlzLnNldFBpcGUoJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJDb250YWluU3RyaW5nKG5hbWU6IHN0cmluZywgZmlsdGVyVGVybTogc3RyaW5nKSB7XG4gICAgY29uc3QgdGVybSA9IGZpbHRlclRlcm0udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgcmV0dXJuIG5hbWUgJiYgbmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGVybSkgPiAtMTtcbiAgfVxufVxuIiwiPGM4eS10aXRsZT5cbiAgPHNwYW5cbiAgICBjbGFzcz1cIm0tci00XCJcbiAgICB0cmFuc2xhdGVcbiAgPlxuICAgIENvbmZpZ3VyYXRpb24gcmVwb3NpdG9yeVxuICA8L3NwYW4+XG4gIDxzbWFsbCAqbmdJZj1cIihjb25maWd1cmF0aW9ucyQgfCBhc3luYyk/LnBhZ2luZy50b3RhbFBhZ2VzID09PSAxICYmICFmaWx0ZXJUZXJtXCI+XG4gICAge3sgKGNvbmZpZ3VyYXRpb25zJCB8IGFzeW5jKS5kYXRhLmxlbmd0aCB9fVxuICAgIDxzcGFuIHRyYW5zbGF0ZT5zbmFwc2hvdHM8L3NwYW4+XG4gIDwvc21hbGw+XG4gIDxzbWFsbFxuICAgIFt0b29sdGlwXT1cIidNb3JlIGRhdGEgYXZhaWxhYmxlLiBTY3JvbGwgdG8gdGhlIGJvdHRvbSBvZiB0aGUgbGlzdCB0byBsb2FkIGl0LicgfCB0cmFuc2xhdGVcIlxuICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICpuZ0lmPVwiKGNvbmZpZ3VyYXRpb25zJCB8IGFzeW5jKT8ucGFnaW5nLnRvdGFsUGFnZXMgPiAxICYmICFmaWx0ZXJUZXJtXCJcbiAgPlxuICAgIHt7IChjb25maWd1cmF0aW9ucyQgfCBhc3luYykucGFnaW5nLnBhZ2VTaXplIH19K1xuICAgIDxzcGFuIHRyYW5zbGF0ZT5zbmFwc2hvdHM8L3NwYW4+XG4gIDwvc21hbGw+XG48L2M4eS10aXRsZT5cblxuPGM4eS1icmVhZGNydW1iPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIGljb249XCJjOHktbWFuYWdlbWVudFwiXG4gICAgbGFiZWw9XCJ7eyAnTWFuYWdlbWVudCcgfCB0cmFuc2xhdGUgfX1cIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIGljb249XCJnZWFyc1wiXG4gICAgbGFiZWw9XCJ7eyAnQ29uZmlndXJhdGlvbiByZXBvc2l0b3J5JyB8IHRyYW5zbGF0ZSB9fVwiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG48L2M4eS1icmVhZGNydW1iPlxuXG48Yzh5LWFjdGlvbi1iYXItaXRlbSBpdGVtQ2xhc3M9XCJuYXZiYXItZm9ybVwiPlxuICA8Yzh5LWZpbHRlclxuICAgIFtpY29uXT1cIidzZWFyY2gnXCJcbiAgICAob25TZWFyY2gpPVwic2V0UGlwZSgkZXZlbnQpXCJcbiAgPjwvYzh5LWZpbHRlcj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW0gW3BsYWNlbWVudF09XCIncmlnaHQnXCI+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgdGl0bGU9XCJ7eyAnQWRkIGNvbmZpZ3VyYXRpb24gc25hcHNob3QnIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwiYWRkKClcIlxuICA+XG4gICAgPGkgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCI+PC9pPlxuICAgIHt7ICdBZGQgY29uZmlndXJhdGlvbiBzbmFwc2hvdCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIHRpdGxlPVwie3sgJ1JlbG9hZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIChjbGljayk9XCJsb2FkQ29uZmlndXJhdGlvbnMoKVwiXG4gID5cbiAgICA8aVxuICAgICAgYzh5SWNvbj1cInJlZnJlc2hcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnaWNvbi1zcGluJzogcmVsb2FkaW5nIH1cIlxuICAgID48L2k+XG4gICAge3sgJ1JlbG9hZCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktaGVscFxuICBzcmM9XCIvZG9jcy9kZXZpY2UtbWFuYWdlbWVudC1hcHBsaWNhdGlvbi9tYW5hZ2luZy1kZXZpY2UtZGF0YS8jbWFuYWdpbmctY29uZmlndXJhdGlvbnNcIlxuPjwvYzh5LWhlbHA+XG5cbjwhLS0gZW1wdHkgc3RhdGUgLS0+XG48Yzh5LXVpLWVtcHR5LXN0YXRlXG4gIFtpY29uXT1cIidnZWFycydcIlxuICBbdGl0bGVdPVwiJ1RoZXJlIGFyZSBubyBjb25maWd1cmF0aW9uIHNuYXBzaG90cyBkZWZpbmVkLicgfCB0cmFuc2xhdGVcIlxuICBbc3VidGl0bGVdPVwiJ0FkZCBhIGNvbmZpZ3VyYXRpb24gc25hcHNob3QgZmlyc3QuJyB8IHRyYW5zbGF0ZVwiXG4gICpuZ0lmPVwiIWZpbHRlclRlcm0gJiYgKGNvbmZpZ3VyYXRpb25zJCB8IGFzeW5jKT8uZGF0YS5sZW5ndGggPT09IDBcIlxuPlxuICA8ZGl2PlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgIHRpdGxlPVwie3sgJ0FkZCBjb25maWd1cmF0aW9uIHNuYXBzaG90JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJhZGQoKVwiXG4gICAgPlxuICAgICAge3sgJ0FkZCBjb25maWd1cmF0aW9uIHNuYXBzaG90JyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPHAgYzh5LWd1aWRlLWRvY3M+XG4gICAgPHNtYWxsXG4gICAgICB0cmFuc2xhdGVcbiAgICAgIG5nTm9uQmluZGFibGVcbiAgICA+XG4gICAgICBGaW5kIG91dCBtb3JlIGluIHRoZVxuICAgICAgPGFcbiAgICAgICAgYzh5LWd1aWRlLWhyZWY9XCIvZG9jcy9kZXZpY2UtbWFuYWdlbWVudC1hcHBsaWNhdGlvbi9tYW5hZ2luZy1kZXZpY2UtZGF0YS8jbWFuYWdpbmctY29uZmlndXJhdGlvbnNcIlxuICAgICAgPlxuICAgICAgICB1c2VyIGRvY3VtZW50YXRpb25cbiAgICAgIDwvYT5cbiAgICAgIC5cbiAgICA8L3NtYWxsPlxuICA8L3A+XG48L2M4eS11aS1lbXB0eS1zdGF0ZT5cblxuPCEtLSBubyByZXN1bHRzIGVtcHR5IHN0YXRlIC0tPlxuPGM4eS11aS1lbXB0eS1zdGF0ZVxuICBbaWNvbl09XCInc2VhcmNoJ1wiXG4gIFt0aXRsZV09XCInTm8gcmVzdWx0cyB0byBkaXNwbGF5LicgfCB0cmFuc2xhdGVcIlxuICBbc3VidGl0bGVdPVwiJ1JlZmluZSB5b3VyIHNlYXJjaCB0ZXJtcyBvciBjaGVjayB5b3VyIHNwZWxsaW5nLicgfCB0cmFuc2xhdGVcIlxuICAqbmdJZj1cInNob3VsZFNob3dFbXB0eVN0YXRlKCkgJiYgKGNvbmZpZ3VyYXRpb25zJCB8IGFzeW5jKT8uZGF0YS5sZW5ndGggPiAwXCJcbj48L2M4eS11aS1lbXB0eS1zdGF0ZT5cblxuPGM4eS1saXN0LWdyb3VwXG4gIGNsYXNzPVwibS1iLTI0XCJcbiAgKm5nSWY9XCIoY29uZmlndXJhdGlvbnMkIHwgYXN5bmMpPy5kYXRhLmxlbmd0aCA+IDBcIlxuICBbbmdDbGFzc109XCJ7XG4gICAgJ2RkLWxvdyc6IGRhdGEgJiYgZGF0YS5sZW5ndGggPyBkYXRhLmxlbmd0aCA8IDEwIDogKGNvbmZpZ3VyYXRpb25zJCB8IGFzeW5jKT8uZGF0YS5sZW5ndGggPCAxMFxuICB9XCJcbj5cbiAgPGM4eS1saVxuICAgIGNsYXNzPVwicGFnZS1zdGlja3ktaGVhZGVyIGhpZGRlbi14c1wiXG4gICAgW2VtcHR5QWN0aW9uc109XCJ0cnVlXCJcbiAgICAqbmdJZj1cIiFzaG91bGRTaG93RW1wdHlTdGF0ZSgpXCJcbiAgPlxuICAgIDxjOHktbGktaWNvbj5cbiAgICAgIDxpIGNsYXNzPVwicC1sLTI0XCI+PC9pPlxuICAgIDwvYzh5LWxpLWljb24+XG4gICAgPGM4eS1saS1ib2R5IGNsYXNzPVwiY29udGVudC1mbGV4LTYwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cbiAgICAgICAge3sgJ0NvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxuICAgICAgICB7eyAnRGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxuICAgICAgICB7eyAnRmlsZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XG4gICAgICAgIHt7ICdEZXZpY2UgdHlwZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XG4gICAgICAgIHt7ICdDb25maWd1cmF0aW9uIHR5cGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2M4eS1saS1ib2R5PlxuICA8L2M4eS1saT5cblxuICA8Yzh5LWxpICpjOHlGb3I9XCJsZXQgY29uZmlndXJhdGlvbiBvZiBjb25maWd1cmF0aW9ucyQ7IHBpcGU6IGZpbHRlclBpcGVcIj5cbiAgICA8Yzh5LWxpLWljb24gaWNvbj1cImdlYXJzXCI+PC9jOHktbGktaWNvbj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1mbGV4LTYwXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuLWNsZWFuIGNvbC0yXCJcbiAgICAgICAgdGl0bGU9XCJ7eyBjb25maWd1cmF0aW9uLm5hbWUgfHwgJy0nIH19XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJlZGl0KGNvbmZpZ3VyYXRpb24pXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgICAgPGM4eS1oaWdobGlnaHRcbiAgICAgICAgICAgIFt0ZXh0XT1cImNvbmZpZ3VyYXRpb24ubmFtZSB8fCAnLSdcIlxuICAgICAgICAgICAgZWxlbWVudENsYXNzPVwidGV4dC1pbmZvXCJcbiAgICAgICAgICAgIFtwYXR0ZXJuXT1cImZpbHRlclRlcm1cIlxuICAgICAgICAgID48L2M4eS1oaWdobGlnaHQ+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIHZpc2libGUteHMtaW5saW5lIG0tci00XCI+XG4gICAgICAgICAge3sgJ0Rlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNtYWxsXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICB0aXRsZT1cImNvbmZpZ3VyYXRpb24uZGVzY3JpcHRpb25cIlxuICAgICAgICAgICpuZ0lmPVwiY29uZmlndXJhdGlvbi5kZXNjcmlwdGlvbjsgZWxzZSBlbXB0eURlc2NyaXB0aW9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktaGlnaGxpZ2h0XG4gICAgICAgICAgICBbdGV4dF09XCJjb25maWd1cmF0aW9uLmRlc2NyaXB0aW9uIHx8ICctJ1wiXG4gICAgICAgICAgICBlbGVtZW50Q2xhc3M9XCJ0ZXh0LWluZm9cIlxuICAgICAgICAgICAgW3BhdHRlcm5dPVwiZmlsdGVyVGVybVwiXG4gICAgICAgICAgPjwvYzh5LWhpZ2hsaWdodD5cbiAgICAgICAgPC9zbWFsbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1yLTQgdmlzaWJsZS14cy1pbmxpbmVcIlxuICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgRmlsZVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c21hbGxcbiAgICAgICAgICAgIHRpdGxlPVwie3sgZ2V0QmluYXJ5TmFtZShjb25maWd1cmF0aW9uKSB8IGFzeW5jIH19XCJcbiAgICAgICAgICAgICpuZ0lmPVwiaXNCaW5hcnlGaWxlKGNvbmZpZ3VyYXRpb24pOyBlbHNlIG5vRmlsZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgZ2V0QmluYXJ5TmFtZShjb25maWd1cmF0aW9uKSB8IGFzeW5jIH19XG4gICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI25vRmlsZT5cbiAgICAgICAgICAgIDxzbWFsbCB0aXRsZT1cInt7IGNvbmZpZ3VyYXRpb24udXJsIH19XCI+XG4gICAgICAgICAgICAgIHt7IGNvbmZpZ3VyYXRpb24udXJsIH19XG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIHRpdGxlPVwie3sgJ0RldmljZSB0eXBlJyB8IHRyYW5zbGF0ZSB9fToge3sgY29uZmlndXJhdGlvbi5kZXZpY2VUeXBlIHx8ICctJyB9fVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIHZpc2libGUteHMtaW5saW5lIG0tci00XCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIERldmljZSB0eXBlXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29uZmlndXJhdGlvbi5kZXZpY2VUeXBlOyBlbHNlIGVtcHR5VGV4dFwiPlxuICAgICAgICAgICAgPGM4eS1oaWdobGlnaHRcbiAgICAgICAgICAgICAgW3RleHRdPVwiY29uZmlndXJhdGlvbi5kZXZpY2VUeXBlIHx8ICctJ1wiXG4gICAgICAgICAgICAgIGVsZW1lbnRDbGFzcz1cInRleHQtaW5mb1wiXG4gICAgICAgICAgICAgIFtwYXR0ZXJuXT1cImZpbHRlclRlcm1cIlxuICAgICAgICAgICAgPjwvYzh5LWhpZ2hsaWdodD5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyBjb25maWd1cmF0aW9uLmNvbmZpZ3VyYXRpb25UeXBlIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cImxhYmVsIGxhYmVsLXByaW1hcnlcIlxuICAgICAgICAgICAgKm5nSWY9XCJjb25maWd1cmF0aW9uLmNvbmZpZ3VyYXRpb25UeXBlOyBlbHNlIGVtcHR5VGV4dFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGM4eS1oaWdobGlnaHRcbiAgICAgICAgICAgICAgW3RleHRdPVwiY29uZmlndXJhdGlvbi5jb25maWd1cmF0aW9uVHlwZVwiXG4gICAgICAgICAgICAgIGVsZW1lbnRDbGFzcz1cInRleHQtaW5mb1wiXG4gICAgICAgICAgICAgIFtwYXR0ZXJuXT1cImZpbHRlclRlcm1cIlxuICAgICAgICAgICAgPjwvYzh5LWhpZ2hsaWdodD5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGM4eS1saS1hY3Rpb25cbiAgICAgIGljb249XCJwZW5jaWxcIlxuICAgICAgKGNsaWNrKT1cImVkaXQoY29uZmlndXJhdGlvbilcIlxuICAgICAgbGFiZWw9XCJ7eyAnRWRpdCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgID48L2M4eS1saS1hY3Rpb24+XG4gICAgPGM4eS1saS1hY3Rpb25cbiAgICAgIGljb249XCJkZWxldGVcIlxuICAgICAgKGNsaWNrKT1cImRlbGV0ZShjb25maWd1cmF0aW9uKVwiXG4gICAgICBsYWJlbD1cInt7ICdEZWxldGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICA+PC9jOHktbGktYWN0aW9uPlxuICAgIDxjOHktbGktYWN0aW9uXG4gICAgICBpY29uPVwiZG93bmxvYWRcIlxuICAgICAgKm5nSWY9XCJpc0JpbmFyeUZpbGUoY29uZmlndXJhdGlvbilcIlxuICAgICAgKGNsaWNrKT1cImRvd25sb2FkKGNvbmZpZ3VyYXRpb24pXCJcbiAgICAgIGxhYmVsPVwie3sgJ0Rvd25sb2FkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgPjwvYzh5LWxpLWFjdGlvbj5cbiAgICA8bmctdGVtcGxhdGUgI2VtcHR5VGV4dD5cbiAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj5cbiAgICAgICAgPGVtPnt7ICdVbmRlZmluZWQnIHwgdHJhbnNsYXRlIH19PC9lbT5cbiAgICAgIDwvc21hbGw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2VtcHR5RGVzY3JpcHRpb24+XG4gICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+XG4gICAgICAgIDxlbT57eyAnTm8gZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIH19PC9lbT5cbiAgICAgIDwvc21hbGw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9jOHktbGk+XG48L2M4eS1saXN0LWdyb3VwPlxuIl19
|
|
211
|
+
}] } });
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3JlcG9zaXRvcnkvY29uZmlndXJhdGlvbi9saXN0L2NvbmZpZ3VyYXRpb24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L2NvbmZpZ3VyYXRpb24vbGlzdC9jb25maWd1cmF0aW9uLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBa0Isc0JBQXNCLEVBQWUsTUFBTSxhQUFhLENBQUM7QUFDbEYsT0FBTyxFQUVMLFlBQVksRUFHWixlQUFlLEVBRWYsb0JBQW9CLEVBQ3BCLE9BQU8sRUFDUCxZQUFZLEVBR1osTUFBTSxFQUNQLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsY0FBYyxFQUNkLDRCQUE0QixFQUM1QixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLGNBQWMsRUFDZixNQUFNLHVDQUF1QyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7OztBQU1oRixNQUFNLE9BQU8sMEJBQTBCO0lBeUNyQyxZQUNVLEtBQW1CLEVBQ25CLFdBQTRCLEVBQzVCLGlCQUFvQyxFQUNwQyxjQUE4QixFQUM5QixZQUEwQixFQUMxQixnQkFBa0MsRUFDbEMsc0JBQThDO1FBTjlDLFVBQUssR0FBTCxLQUFLLENB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QVcsQ0FBQyxNQUFNLEVBQUUsTUFBYztRQUNoQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQzs4R0FsTlUsMEJBQTBCO2tHQUExQiwwQkFBMEIsc0dBQzFCLG9CQUFvQixnRENuQ2pDLG9sRkF5RkE7OzJGRHZEYSwwQkFBMEI7a0JBSnRDLFNBQVM7K0JBQ0Usd0JBQXdCOzJRQUlrQixNQUFNO3NCQUF6RCxTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeUJpbmFyeVNlcnZpY2UsIElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQWxlcnRTZXJ2aWNlLFxuICBCdWlsdEluQWN0aW9uVHlwZSxcbiAgQ29sdW1uLFxuICBEYXRhR3JpZFNlcnZpY2UsXG4gIERhdGFTb3VyY2VNb2RpZmllcixcbiAgRmlsdGVySW5wdXRDb21wb25lbnQsXG4gIGdldHRleHQsXG4gIE1vZGFsU2VydmljZSxcbiAgU2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgU2VydmVyU2lkZURhdGFSZXN1bHQsXG4gIFN0YXR1c1xufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIERlc2NyaXB0aW9uR3JpZENvbHVtbixcbiAgRGV2aWNlVHlwZUdyaWRDb2x1bW4sXG4gIEZpbGVHcmlkQ29sdW1uLFxuICBSZXBvc2l0b3J5SXRlbU5hbWVHcmlkQ29sdW1uLFxuICBSZXBvc2l0b3J5U2VydmljZSxcbiAgUmVwb3NpdG9yeVR5cGUsXG4gIFR5cGVHcmlkQ29sdW1uXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvcmVwb3NpdG9yeS9zaGFyZWQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkRldGFpbENvbXBvbmVudCB9IGZyb20gJy4vY29uZmlndXJhdGlvbi1kZXRhaWwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWNvbmZpZ3VyYXRpb24tbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25maWd1cmF0aW9uLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25MaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQFZpZXdDaGlsZChGaWx0ZXJJbnB1dENvbXBvbmVudCwgeyBzdGF0aWM6IGZhbHNlIH0pIGZpbHRlcjogRmlsdGVySW5wdXRDb21wb25lbnQ7XG4gIHJlZnJlc2gkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHBhZ2luYXRpb24gPSB7XG4gICAgcGFnZVNpemU6IDUwLFxuICAgIGN1cnJlbnRQYWdlOiAxXG4gIH07XG4gIG5vUmVzdWx0c01lc3NhZ2UgPSBnZXR0ZXh0KCdObyByZXN1bHRzIHRvIGRpc3BsYXkuJyk7XG4gIG5vRGF0YU1lc3NhZ2UgPSBnZXR0ZXh0KCdUaGVyZSBhcmUgbm8gY29uZmlndXJhdGlvbiBzbmFwc2hvdHMgZGVmaW5lZC4nKTtcbiAgbm9SZXN1bHRzU3VidGl0bGUgPSBnZXR0ZXh0KCdSZWZpbmUgeW91ciBzZWFyY2ggdGVybXMgb3IgY2hlY2sgeW91ciBzcGVsbGluZy4nKTtcbiAgbm9EYXRhU3VidGl0bGUgPSBnZXR0ZXh0KCdBZGQgYSBjb25maWd1cmF0aW9uIHNuYXBzaG90IGZpcnN0LicpO1xuICBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gW107XG4gIGNvbHVtbnM6IENvbHVtbltdID0gW1xuICAgIG5ldyBSZXBvc2l0b3J5SXRlbU5hbWVHcmlkQ29sdW1uKHtcbiAgICAgIGZpbHRlckxhYmVsOiBnZXR0ZXh0KCdGaWx0ZXIgY29uZmlndXJhdGlvbnMgYnkgbmFtZScpLFxuICAgICAgcGxhY2Vob2xkZXI6IGdldHRleHQoJ1NTSCcpLFxuICAgICAgY2FsbGJhY2s6IHRoaXMuZWRpdC5iaW5kKHRoaXMpXG4gICAgfSksXG4gICAgbmV3IERlc2NyaXB0aW9uR3JpZENvbHVtbih7XG4gICAgICBmaWx0ZXJMYWJlbDogZ2V0dGV4dCgnRmlsdGVyIGNvbmZpZ3VyYXRpb25zIGJ5IGRlc2NyaXB0aW9uJyksXG4gICAgICBwbGFjZWhvbGRlcjogZ2V0dGV4dCgnU1NIIGNvbmZpZ3VyYXRpb24nKVxuICAgIH0pLFxuICAgIG5ldyBGaWxlR3JpZENvbHVtbigpLFxuICAgIG5ldyBEZXZpY2VUeXBlR3JpZENvbHVtbih7XG4gICAgICBwYXRoOiAnZGV2aWNlVHlwZScsXG4gICAgICBmaWx0ZXJMYWJlbDogZ2V0dGV4dCgnRmlsdGVyIGNvbmZpZ3VyYXRpb25zIGJ5IGRldmljZSB0eXBlJylcbiAgICB9KSxcbiAgICBuZXcgVHlwZUdyaWRDb2x1bW4oe1xuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdDb25maWd1cmF0aW9uIHR5cGUnKSxcbiAgICAgIGZpbHRlckxhYmVsOiBnZXR0ZXh0KCdGaWx0ZXIgYnkgY29uZmlndXJhdGlvbiB0eXBlJyksXG4gICAgICBleGFtcGxlOiAnc3NoJyxcbiAgICAgIHBhdGg6ICdjb25maWd1cmF0aW9uVHlwZScsXG4gICAgICByZXBvc2l0b3J5VHlwZTogUmVwb3NpdG9yeVR5cGUuQ09ORklHVVJBVElPTlxuICAgIH0pXG4gIF07XG4gIHNpemUkOiBQcm9taXNlPG51bWJlcj47XG4gIHNpemVSZXF1ZXN0RG9uZSA9IGZhbHNlO1xuICBzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrOiBTZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgREVMRVRFRF9TVUNDRVNTX01TRyA9IGdldHRleHQoJ0NvbmZpZ3VyYXRpb24gZGVsZXRlZC4nKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogRGF0YUdyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVwb3NpdG9yeVNlcnZpY2U6IFJlcG9zaXRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5QmluYXJ5U2VydmljZTogSW52ZW50b3J5QmluYXJ5U2VydmljZVxuICApIHtcbiAgICB0aGlzLnNlcnZlclNpZGVEYXRhQ2FsbGJhY2sgPSB0aGlzLm9uRGF0YVNvdXJjZU1vZGlmaWVyLmJpbmQodGhpcyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLnB1c2goe1xuICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRWRpdCxcbiAgICAgIGNhbGxiYWNrOiB0aGlzLmVkaXQuYmluZCh0aGlzKVxuICAgIH0pO1xuICAgIHRoaXMuYWN0aW9uQ29udHJvbHMucHVzaCh7XG4gICAgICB0eXBlOiBCdWlsdEluQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgICBjYWxsYmFjazogdGhpcy5kZWxldGUuYmluZCh0aGlzKVxuICAgIH0pO1xuICAgIHRoaXMuYWN0aW9uQ29udHJvbHMucHVzaCh7XG4gICAgICB0eXBlOiAnZG93bmxvYWQnLFxuICAgICAgaWNvbjogJ2Rvd25sb2FkJyxcbiAgICAgIHRleHQ6IGdldHRleHQoJ0Rvd25sb2FkJyksXG4gICAgICBzaG93SWY6IHJvdyA9PiB0aGlzLmlzQmluYXJ5RmlsZShyb3cgYXMgdW5rbm93biBhcyBJTWFuYWdlZE9iamVjdCksXG4gICAgICBjYWxsYmFjazogdGhpcy5kb3dubG9hZC5iaW5kKHRoaXMpXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBvbkRhdGFTb3VyY2VNb2RpZmllcihcbiAgICBkYXRhU291cmNlTW9kaWZpZXI6IERhdGFTb3VyY2VNb2RpZmllclxuICApOiBQcm9taXNlPFNlcnZlclNpZGVEYXRhUmVzdWx0PiB7XG4gICAgY29uc3QgZGF0YVJlcXVlc3Q6IFByb21pc2U8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+PiA9XG4gICAgICB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlLmxpc3RSZXBvc2l0b3J5RW50cmllcyhSZXBvc2l0b3J5VHlwZS5DT05GSUdVUkFUSU9OLCB7XG4gICAgICAgIHF1ZXJ5OiB0aGlzLmdyaWRTZXJ2aWNlLmdldFF1ZXJ5T2JqKGRhdGFTb3VyY2VNb2RpZmllci5jb2x1bW5zKSxcbiAgICAgICAgc2tpcERlZmF1bHRPcmRlcjogdHJ1ZSxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgcGFnZVNpemU6IGRhdGFTb3VyY2VNb2RpZmllci5wYWdpbmF0aW9uLnBhZ2VTaXplLFxuICAgICAgICAgIGN1cnJlbnRQYWdlOiBkYXRhU291cmNlTW9kaWZpZXIucGFnaW5hdGlvbi5jdXJyZW50UGFnZSxcbiAgICAgICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGNvbnN0IGZpbHRlcmVyZFNpemVSZXF1ZXN0OiBQcm9taXNlPG51bWJlcj4gPSB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlXG4gICAgICAubGlzdFJlcG9zaXRvcnlFbnRyaWVzKFJlcG9zaXRvcnlUeXBlLkNPTkZJR1VSQVRJT04sIHtcbiAgICAgICAgcXVlcnk6IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0UXVlcnlPYmooZGF0YVNvdXJjZU1vZGlmaWVyLmNvbHVtbnMpLFxuICAgICAgICBza2lwRGVmYXVsdE9yZGVyOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IHsgcGFnZVNpemU6IDEgfVxuICAgICAgfSlcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlPy5wYWdpbmc/LnRvdGFsUGFnZXMpO1xuXG4gICAgdGhpcy5zaXplJCA9IHRoaXMucmVwb3NpdG9yeVNlcnZpY2VcbiAgICAgIC5saXN0UmVwb3NpdG9yeUVudHJpZXMoUmVwb3NpdG9yeVR5cGUuQ09ORklHVVJBVElPTiwge1xuICAgICAgICBza2lwRGVmYXVsdE9yZGVyOiB0cnVlLFxuICAgICAgICBwYXJhbXM6IHsgcGFnZVNpemU6IDEgfVxuICAgICAgfSlcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5zaXplUmVxdWVzdERvbmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U/LnBhZ2luZz8udG90YWxQYWdlcztcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgW2RhdGFSZXNwb25zZSwgc2l6ZSwgZmlsdGVyZWRTaXplXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGRhdGFSZXF1ZXN0LFxuICAgICAgdGhpcy5zaXplJCxcbiAgICAgIGZpbHRlcmVyZFNpemVSZXF1ZXN0XG4gICAgXSk7XG5cbiAgICBjb25zdCB7IHJlcywgZGF0YSwgcGFnaW5nIH0gPSBkYXRhUmVzcG9uc2U7XG5cbiAgICBjb25zdCBzZXJ2ZXJTaWRlRGF0YVJlc3VsdDogU2VydmVyU2lkZURhdGFSZXN1bHQgPSB7XG4gICAgICByZXMsXG4gICAgICBkYXRhLFxuICAgICAgcGFnaW5nLFxuICAgICAgZmlsdGVyZWRTaXplLFxuICAgICAgc2l6ZVxuICAgIH07XG5cbiAgICByZXR1cm4gc2VydmVyU2lkZURhdGFSZXN1bHQ7XG4gIH1cblxuICBhc3luYyBhZGQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IChcbiAgICAgICAgdGhpcy5ic01vZGFsU2VydmljZS5zaG93KENvbmZpZ3VyYXRpb25EZXRhaWxDb21wb25lbnQsIHtcbiAgICAgICAgICBjbGFzczogJ21vZGFsLXNtJyxcbiAgICAgICAgICBhcmlhRGVzY3JpYmVkYnk6ICdjb25maWd1cmF0aW9uTW9kYWxEZXNjcmlwdGlvbicsXG4gICAgICAgICAgYXJpYUxhYmVsbGVkQnk6ICdjb25maWd1cmF0aW9uTW9kYWxUaXRsZScsXG4gICAgICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgICAgICBrZXlib2FyZDogZmFsc2VcbiAgICAgICAgfSkuY29udGVudCBhcyBDb25maWd1cmF0aW9uRGV0YWlsQ29tcG9uZW50XG4gICAgICApLnJlc3VsdDtcbiAgICAgIHRoaXMucmVmcmVzaCQubmV4dCgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBpbnRlbmRlZCBlbXB0eVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGVkaXQoY29uZmlndXJhdGlvbjogSU1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCBmaWxlQmluYXJ5OiBGaWxlID0gYXdhaXQgdGhpcy5yZXBvc2l0b3J5U2VydmljZS5nZXRCaW5hcnlGaWxlKGNvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBhbGxvd0V4dGVybmFsOiBmYWxzZVxuICAgIH0pO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtb2RhbCA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhDb25maWd1cmF0aW9uRGV0YWlsQ29tcG9uZW50LCB7XG4gICAgICAgIGNsYXNzOiAnbW9kYWwtc20nLFxuICAgICAgICBhcmlhRGVzY3JpYmVkYnk6ICdjb25maWd1cmF0aW9uTW9kYWxEZXNjcmlwdGlvbicsXG4gICAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnY29uZmlndXJhdGlvbk1vZGFsVGl0bGUnLFxuICAgICAgICBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlLFxuICAgICAgICBrZXlib2FyZDogZmFsc2UsXG5cbiAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgdmVyc2lvbjogY29uZmlndXJhdGlvbi5uYW1lLFxuICAgICAgICAgIGRldmljZVR5cGU6IGNvbmZpZ3VyYXRpb24uZGV2aWNlVHlwZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogY29uZmlndXJhdGlvbi5kZXNjcmlwdGlvbixcbiAgICAgICAgICBiaW5hcnk6IHsgZmlsZTogZmlsZUJpbmFyeSwgdXJsOiBjb25maWd1cmF0aW9uLnVybCB9XG4gICAgICAgIH1cbiAgICAgIH0pLmNvbnRlbnQgYXMgQ29uZmlndXJhdGlvbkRldGFpbENvbXBvbmVudDtcbiAgICAgIG1vZGFsLm1vID0gY29uZmlndXJhdGlvbjtcbiAgICAgIGF3YWl0IG1vZGFsLnJlc3VsdDtcbiAgICAgIHRoaXMucmVmcmVzaCQubmV4dCgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBpbnRlbmRlZCBlbXB0eVxuICAgIH1cbiAgfVxuXG4gIGlzQmluYXJ5RmlsZShjb25maWd1cmF0aW9uOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiBjb25maWd1cmF0aW9uLnVybFxuICAgICAgPyAhIXRoaXMuaW52ZW50b3J5QmluYXJ5U2VydmljZS5nZXRJZEZyb21VcmwoY29uZmlndXJhdGlvbi51cmwpXG4gICAgICA6IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZG93bmxvYWQoY29uZmlndXJhdGlvbjogSU1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCBmaWxlQmluYXJ5OiBGaWxlID0gYXdhaXQgdGhpcy5yZXBvc2l0b3J5U2VydmljZS5nZXRCaW5hcnlGaWxlKGNvbmZpZ3VyYXRpb24udXJsLCB7XG4gICAgICBhbGxvd0V4dGVybmFsOiBmYWxzZVxuICAgIH0pO1xuICAgIHNhdmVBcyhmaWxlQmluYXJ5KTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShjb25maWd1cmF0aW9uOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0aXRsZSA9IGdldHRleHQoJ0RlbGV0ZSBjb25maWd1cmF0aW9uIHNuYXBzaG90Jyk7XG4gICAgICBjb25zdCBjb25maXJtYXRpb25UZXh0ID0gZ2V0dGV4dChcbiAgICAgICAgJ1lvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIHRoZSBjb25maWd1cmF0aW9uIHNuYXBzaG90IHt7IG5hbWUgfX0uJ1xuICAgICAgKTtcbiAgICAgIGNvbnN0IGhpbnQgPSBnZXR0ZXh0KCdUaGlzIG9wZXJhdGlvbiBpcyBpcnJldmVyc2libGUuJyk7XG4gICAgICBjb25zdCBwcm9jZWVkID0gZ2V0dGV4dCgnRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nKTtcbiAgICAgIGNvbnN0IGJvZHkgPSBbXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGNvbmZpcm1hdGlvblRleHQsIHtcbiAgICAgICAgICBuYW1lOiBjb25maWd1cmF0aW9uLm5hbWVcbiAgICAgICAgfSksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGhpbnQpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChwcm9jZWVkKVxuICAgICAgXS5qb2luKCcgJyk7XG4gICAgICBjb25zdCBsYWJlbHMgPSB7XG4gICAgICAgIG9rOiBnZXR0ZXh0KCdEZWxldGUnKVxuICAgICAgfTtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0odGl0bGUsIGJvZHksIFN0YXR1cy5EQU5HRVIsIGxhYmVscyk7XG4gICAgICBhd2FpdCB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlLmRlbGV0ZShjb25maWd1cmF0aW9uKTtcbiAgICAgIHRoaXMuYWxlcnQuc3VjY2Vzcyh0aGlzLkRFTEVURURfU1VDQ0VTU19NU0cpO1xuICAgICAgdGhpcy5yZWZyZXNoJC5uZXh0KCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCkge1xuICAgICAgICB0aGlzLmFsZXJ0LmFkZFNlcnZlckZhaWx1cmUoZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRyYWNrQnlOYW1lKF9pbmRleCwgY29sdW1uOiBDb2x1bW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBjb2x1bW4ubmFtZTtcbiAgfVxufVxuIiwiPGM4eS10aXRsZT5cbiAgPHNwYW5cbiAgICBjbGFzcz1cIm0tci00XCJcbiAgICB0cmFuc2xhdGVcbiAgPlxuICAgIENvbmZpZ3VyYXRpb24gcmVwb3NpdG9yeVxuICA8L3NwYW4+XG4gIDxzbWFsbD5cbiAgICB7eyBzaXplJCB8IGFzeW5jIH19XG4gICAgPHNwYW4gdHJhbnNsYXRlPnNuYXBzaG90czwvc3Bhbj5cbiAgPC9zbWFsbD5cbjwvYzh5LXRpdGxlPlxuXG48Yzh5LWJyZWFkY3J1bWI+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgaWNvbj1cImM4eS1tYW5hZ2VtZW50XCJcbiAgICBsYWJlbD1cInt7ICdNYW5hZ2VtZW50JyB8IHRyYW5zbGF0ZSB9fVwiXG4gID48L2M4eS1icmVhZGNydW1iLWl0ZW0+XG4gIDxjOHktYnJlYWRjcnVtYi1pdGVtXG4gICAgaWNvbj1cImdlYXJzXCJcbiAgICBsYWJlbD1cInt7ICdDb25maWd1cmF0aW9uIHJlcG9zaXRvcnknIHwgdHJhbnNsYXRlIH19XCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG5cbjxjOHktYWN0aW9uLWJhci1pdGVtIFtwbGFjZW1lbnRdPVwiJ3JpZ2h0J1wiPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIHRpdGxlPVwie3sgJ0FkZCBjb25maWd1cmF0aW9uIHNuYXBzaG90JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgKGNsaWNrKT1cImFkZCgpXCJcbiAgPlxuICAgIDxpIGM4eUljb249XCJwbHVzLWNpcmNsZVwiPjwvaT5cbiAgICB7eyAnQWRkIGNvbmZpZ3VyYXRpb24gc25hcHNob3QnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWhlbHBcbiAgc3JjPVwiL2RvY3MvZGV2aWNlLW1hbmFnZW1lbnQtYXBwbGljYXRpb24vbWFuYWdpbmctZGV2aWNlLWRhdGEvI21hbmFnaW5nLWNvbmZpZ3VyYXRpb25zXCJcbj48L2M4eS1oZWxwPlxuXG48ZGl2IGNsYXNzPVwiY29udGVudC1mdWxscGFnZSBib3JkZXItdG9wIGJvcmRlci1ib3R0b21cIj5cbiAgPGM4eS1kYXRhLWdyaWRcbiAgICBbdGl0bGVdPVwiJ0NvbmZpZ3VyYXRpb25zJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3JlZnJlc2hdPVwicmVmcmVzaCRcIlxuICAgIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgW2luZmluaXRlU2Nyb2xsXT1cIidhdXRvJ1wiXG4gICAgW3NlcnZlclNpZGVEYXRhQ2FsbGJhY2tdPVwic2VydmVyU2lkZURhdGFDYWxsYmFja1wiXG4gID5cbiAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICBbaWNvbl09XCJzdGF0cz8uc2l6ZSA+IDAgPyAnc2VhcmNoJyA6ICdnZWFycydcIlxuICAgICAgW3RpdGxlXT1cInN0YXRzPy5zaXplID4gMCA/IChub1Jlc3VsdHNNZXNzYWdlIHwgdHJhbnNsYXRlKSA6IChub0RhdGFNZXNzYWdlIHwgdHJhbnNsYXRlKVwiXG4gICAgICBbc3VidGl0bGVdPVwic3RhdHM/LnNpemUgPiAwID8gKG5vUmVzdWx0c1N1YnRpdGxlIHwgdHJhbnNsYXRlKSA6IChub0RhdGFTdWJ0aXRsZSB8IHRyYW5zbGF0ZSlcIlxuICAgICAgKmVtcHR5U3RhdGVDb250ZXh0PVwibGV0IHN0YXRzXCJcbiAgICAgIFtob3Jpem9udGFsXT1cInN0YXRzPy5zaXplID4gMFwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRzPy5zaXplID09PSAwXCI+XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FkZCBjb25maWd1cmF0aW9uIHNuYXBzaG90JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhZGQoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ0FkZCBjb25maWd1cmF0aW9uIHNuYXBzaG90JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L3A+XG4gICAgICAgIDxwIGM4eS1ndWlkZS1kb2NzPlxuICAgICAgICAgIDxzbWFsbFxuICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICBuZ05vbkJpbmRhYmxlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgRmluZCBvdXQgbW9yZSBpbiB0aGVcbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGM4eS1ndWlkZS1ocmVmPVwiL2RvY3MvZGV2aWNlLW1hbmFnZW1lbnQtYXBwbGljYXRpb24vbWFuYWdpbmctZGV2aWNlLWRhdGEvI21hbmFnaW5nLWNvbmZpZ3VyYXRpb25zXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgdXNlciBkb2N1bWVudGF0aW9uXG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAuXG4gICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgPC9wPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jOHktdWktZW1wdHktc3RhdGU+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlOYW1lXCI+XG4gICAgICA8Yzh5LWNvbHVtbiBbbmFtZV09XCJjb2x1bW4ubmFtZVwiPjwvYzh5LWNvbHVtbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9jOHktZGF0YS1ncmlkPlxuPC9kaXY+XG4iXX0=
|
|
@@ -2,6 +2,7 @@ import { Component } from '@angular/core';
|
|
|
2
2
|
import { RouterModule } from '@angular/router';
|
|
3
3
|
import { CellRendererContext, CommonModule } from '@c8y/ngx-components';
|
|
4
4
|
import { DeviceGridModule } from '@c8y/ngx-components/device-grid';
|
|
5
|
+
import { get } from 'lodash-es';
|
|
5
6
|
import { TooltipModule } from 'ngx-bootstrap/tooltip';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "@c8y/ngx-components";
|
|
@@ -10,11 +11,14 @@ export class DeviceTypeCellRendererComponent {
|
|
|
10
11
|
constructor(context) {
|
|
11
12
|
this.context = context;
|
|
12
13
|
}
|
|
14
|
+
ngOnInit() {
|
|
15
|
+
this.deviceType = get(this.context?.item, this.context?.property?.path);
|
|
16
|
+
}
|
|
13
17
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: DeviceTypeCellRendererComponent, deps: [{ token: i1.CellRendererContext }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: DeviceTypeCellRendererComponent, isStandalone: true, selector: "c8y-device-type-cell-renderer", ngImport: i0, template: "<span *ngIf=\"
|
|
18
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: DeviceTypeCellRendererComponent, isStandalone: true, selector: "c8y-device-type-cell-renderer", ngImport: i0, template: "<span *ngIf=\"deviceType; else emptyText\">\n {{ deviceType }}\n</span>\n<ng-template #emptyText>\n <small class=\"text-muted\">\n <em translate>Undefined`device type`</em>\n </small>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: DeviceGridModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "ngmodule", type: RouterModule }] }); }
|
|
15
19
|
}
|
|
16
20
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: DeviceTypeCellRendererComponent, decorators: [{
|
|
17
21
|
type: Component,
|
|
18
|
-
args: [{ selector: 'c8y-device-type-cell-renderer', standalone: true, imports: [CommonModule, DeviceGridModule, TooltipModule, RouterModule], template: "<span *ngIf=\"
|
|
22
|
+
args: [{ selector: 'c8y-device-type-cell-renderer', standalone: true, imports: [CommonModule, DeviceGridModule, TooltipModule, RouterModule], template: "<span *ngIf=\"deviceType; else emptyText\">\n {{ deviceType }}\n</span>\n<ng-template #emptyText>\n <small class=\"text-muted\">\n <em translate>Undefined`device type`</em>\n </small>\n</ng-template>\n" }]
|
|
19
23
|
}], ctorParameters: () => [{ type: i1.CellRendererContext }] });
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLXR5cGUuY2VsbC1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L3NoYXJlZC9jb2x1bW5zL2RldmljZS10eXBlLmNlbGwtcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcmVwb3NpdG9yeS9zaGFyZWQvY29sdW1ucy9kZXZpY2UtdHlwZS5jZWxsLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQVF0RCxNQUFNLE9BQU8sK0JBQStCO0lBRzFDLFlBQW1CLE9BQTRCO1FBQTVCLFlBQU8sR0FBUCxPQUFPLENBQXFCO0lBQUcsQ0FBQztJQUVuRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUUsQ0FBQzs4R0FQVSwrQkFBK0I7a0dBQS9CLCtCQUErQix5RkNiNUMsaU5BUUEsMkNER1ksWUFBWSxrT0FBRSxnQkFBZ0IsOEJBQUUsYUFBYSw4QkFBRSxZQUFZOzsyRkFFMUQsK0JBQStCO2tCQU4zQyxTQUFTOytCQUVFLCtCQUErQixjQUM3QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ2VsbFJlbmRlcmVyQ29udGV4dCwgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBEZXZpY2VHcmlkTW9kdWxlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kZXZpY2UtZ3JpZCc7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvdG9vbHRpcCc7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vZGV2aWNlLXR5cGUuY2VsbC1yZW5kZXJlci5jb21wb25lbnQuaHRtbCcsXG4gIHNlbGVjdG9yOiAnYzh5LWRldmljZS10eXBlLWNlbGwtcmVuZGVyZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBEZXZpY2VHcmlkTW9kdWxlLCBUb29sdGlwTW9kdWxlLCBSb3V0ZXJNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIERldmljZVR5cGVDZWxsUmVuZGVyZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBkZXZpY2VUeXBlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNvbnRleHQ6IENlbGxSZW5kZXJlckNvbnRleHQpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kZXZpY2VUeXBlID0gZ2V0KHRoaXMuY29udGV4dD8uaXRlbSwgdGhpcy5jb250ZXh0Py5wcm9wZXJ0eT8ucGF0aCk7XG4gIH1cbn1cbiIsIjxzcGFuICpuZ0lmPVwiZGV2aWNlVHlwZTsgZWxzZSBlbXB0eVRleHRcIj5cbiAge3sgZGV2aWNlVHlwZSB9fVxuPC9zcGFuPlxuPG5nLXRlbXBsYXRlICNlbXB0eVRleHQ+XG4gIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWRcIj5cbiAgICA8ZW0gdHJhbnNsYXRlPlVuZGVmaW5lZGBkZXZpY2UgdHlwZWA8L2VtPlxuICA8L3NtYWxsPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -4,7 +4,7 @@ export class DeviceTypeGridColumn extends BaseColumn {
|
|
|
4
4
|
constructor(initialColumnConfig) {
|
|
5
5
|
super(initialColumnConfig);
|
|
6
6
|
this.name = 'deviceType';
|
|
7
|
-
this.path = 'c8y_Filter.type';
|
|
7
|
+
this.path = initialColumnConfig?.path ?? 'c8y_Filter.type';
|
|
8
8
|
this.header = gettext('Device type');
|
|
9
9
|
this.cellRendererComponent = DeviceTypeCellRendererComponent;
|
|
10
10
|
this.filterable = true;
|
|
@@ -51,4 +51,4 @@ export class DeviceTypeGridColumn extends BaseColumn {
|
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlLXR5cGUuZ3JpZC1jb2x1bW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9yZXBvc2l0b3J5L3NoYXJlZC9jb2x1bW5zL2RldmljZS10eXBlLmdyaWQtY29sdW1uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxVQUFVLEVBRVYsaUNBQWlDLEVBQ2pDLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXhGLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxVQUFVO0lBQ2xELFlBQ0UsbUJBSUM7UUFFRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLG1CQUFtQixFQUFFLElBQUksSUFBSSxpQkFBaUIsQ0FBQztRQUMzRCxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsK0JBQStCLENBQUM7UUFFN0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFdkIsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQixNQUFNLEVBQUU7Z0JBQ04sR0FBRyxpQ0FBaUMsQ0FBQztvQkFDbkMsR0FBRyxFQUFFLE9BQU87b0JBQ1osS0FBSyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsSUFBSSxPQUFPLENBQUMsNEJBQTRCLENBQUM7b0JBQ2hGLE9BQU8sRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7b0JBQ2xDLE9BQU8sRUFBRSxPQUFPLENBQUMsK0JBQStCLENBQUM7b0JBQ2pELFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLElBQUksV0FBVztvQkFDNUQsUUFBUSxFQUFFLElBQUk7aUJBQ2YsQ0FBQztnQkFDRjtvQkFDRSxHQUFHLEVBQUUsY0FBYztvQkFDbkIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsZUFBZSxFQUFFO3dCQUNmLEtBQUssRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUM7cUJBQ2pDO2lCQUNGO2FBQ0Y7WUFDRCxTQUFTLENBQUMsS0FBVTtnQkFDbEIsTUFBTSxNQUFNLEdBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztvQkFDeEIsTUFBTSxDQUFDLElBQUksR0FBRzt3QkFDWixpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFO3FCQUN6QyxDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ3ZCLE1BQU0sQ0FBQyxJQUFJLEdBQUc7d0JBQ1osR0FBRyxNQUFNLENBQUMsSUFBSTt3QkFDZCxJQUFJLEVBQUU7NEJBQ0osS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFOzRCQUNuQyxpQkFBaUIsRUFBRSxFQUFFO3lCQUN0QjtxQkFDRixDQUFDO2dCQUNKLENBQUM7Z0JBQ0QsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztTQUNGLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLGtCQUFrQixFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzFDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlQ29sdW1uLFxuICBDb2x1bW5Db25maWcsXG4gIGdldEJhc2ljSW5wdXRBcnJheUZvcm1GaWVsZENvbmZpZyxcbiAgZ2V0dGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IERldmljZVR5cGVDZWxsUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuL2RldmljZS10eXBlLmNlbGwtcmVuZGVyZXIuY29tcG9uZW50JztcblxuZXhwb3J0IGNsYXNzIERldmljZVR5cGVHcmlkQ29sdW1uIGV4dGVuZHMgQmFzZUNvbHVtbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGluaXRpYWxDb2x1bW5Db25maWc/OiBDb2x1bW5Db25maWcgJiB7XG4gICAgICBmaWx0ZXJMYWJlbD86IHN0cmluZztcbiAgICAgIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAgICAgcGF0aD86IHN0cmluZztcbiAgICB9XG4gICkge1xuICAgIHN1cGVyKGluaXRpYWxDb2x1bW5Db25maWcpO1xuICAgIHRoaXMubmFtZSA9ICdkZXZpY2VUeXBlJztcbiAgICB0aGlzLnBhdGggPSBpbml0aWFsQ29sdW1uQ29uZmlnPy5wYXRoID8/ICdjOHlfRmlsdGVyLnR5cGUnO1xuICAgIHRoaXMuaGVhZGVyID0gZ2V0dGV4dCgnRGV2aWNlIHR5cGUnKTtcbiAgICB0aGlzLmNlbGxSZW5kZXJlckNvbXBvbmVudCA9IERldmljZVR5cGVDZWxsUmVuZGVyZXJDb21wb25lbnQ7XG5cbiAgICB0aGlzLmZpbHRlcmFibGUgPSB0cnVlO1xuXG4gICAgdGhpcy5maWx0ZXJpbmdDb25maWcgPSB7XG4gICAgICBmaWVsZHM6IFtcbiAgICAgICAgLi4uZ2V0QmFzaWNJbnB1dEFycmF5Rm9ybUZpZWxkQ29uZmlnKHtcbiAgICAgICAgICBrZXk6ICd0eXBlcycsXG4gICAgICAgICAgbGFiZWw6IGluaXRpYWxDb2x1bW5Db25maWc/LmZpbHRlckxhYmVsID8/IGdldHRleHQoJ0ZpbHRlciBpdGVtIGJ5IGRldmljZSB0eXBlJyksXG4gICAgICAgICAgYWRkVGV4dDogZ2V0dGV4dCgnQWRkIG5leHRgdHlwZWAnKSxcbiAgICAgICAgICB0b29sdGlwOiBnZXR0ZXh0KCdVc2UgKiBhcyBhIHdpbGRjYXJkIGNoYXJhY3RlcicpLFxuICAgICAgICAgIHBsYWNlaG9sZGVyOiBpbml0aWFsQ29sdW1uQ29uZmlnPy5wbGFjZWhvbGRlciA/PyAnYzh5X0xpbnV4JyxcbiAgICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgIGtleTogJ25vRGV2aWNlVHlwZScsXG4gICAgICAgICAgdHlwZTogJ3N3aXRjaCcsXG4gICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICBsYWJlbDogZ2V0dGV4dCgnTm8gZGV2aWNlIHR5cGUnKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGdldEZpbHRlcihtb2RlbDogYW55KTogYW55IHtcbiAgICAgICAgY29uc3QgZmlsdGVyOiBhbnkgPSB7IF9fb3I6IHt9IH07XG4gICAgICAgIGlmIChtb2RlbC50eXBlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgZmlsdGVyLl9fb3IgPSB7XG4gICAgICAgICAgICAnYzh5X0ZpbHRlci50eXBlJzogeyBfX2luOiBtb2RlbC50eXBlcyB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kZWwubm9EZXZpY2VUeXBlKSB7XG4gICAgICAgICAgZmlsdGVyLl9fb3IgPSB7XG4gICAgICAgICAgICAuLi5maWx0ZXIuX19vcixcbiAgICAgICAgICAgIF9fb3I6IHtcbiAgICAgICAgICAgICAgX19ub3Q6IHsgX19oYXM6ICdjOHlfRmlsdGVyLnR5cGUnIH0sXG4gICAgICAgICAgICAgICdjOHlfRmlsdGVyLnR5cGUnOiAnJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5zb3J0YWJsZSA9IHRydWU7XG4gICAgdGhpcy5zb3J0aW5nQ29uZmlnID0ge1xuICAgICAgcGF0aFNvcnRpbmdDb25maWdzOiBbeyBwYXRoOiB0aGlzLnBhdGggfV1cbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { Component } from '@angular/core';
|
|
3
|
+
import { InventoryBinaryService } from '@c8y/client';
|
|
4
|
+
import { CellRendererContext, CommonModule, memoize } from '@c8y/ngx-components';
|
|
5
|
+
import { property } from 'lodash-es';
|
|
6
|
+
import { RepositoryService } from '../repository.service';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@c8y/ngx-components";
|
|
9
|
+
import * as i2 from "@c8y/client";
|
|
10
|
+
import * as i3 from "../repository.service";
|
|
11
|
+
import * as i4 from "@angular/common";
|
|
12
|
+
export class FileCellRendererComponent {
|
|
13
|
+
constructor(context, inventoryBinaryService, repositoryService) {
|
|
14
|
+
this.context = context;
|
|
15
|
+
this.inventoryBinaryService = inventoryBinaryService;
|
|
16
|
+
this.repositoryService = repositoryService;
|
|
17
|
+
}
|
|
18
|
+
isBinaryFile() {
|
|
19
|
+
return this.context.item?.url
|
|
20
|
+
? !!this.inventoryBinaryService.getIdFromUrl(this.context.item.url)
|
|
21
|
+
: false;
|
|
22
|
+
}
|
|
23
|
+
getBinaryName(configuration) {
|
|
24
|
+
return this.repositoryService.getBinaryName$(configuration.url);
|
|
25
|
+
}
|
|
26
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: FileCellRendererComponent, deps: [{ token: i1.CellRendererContext }, { token: i2.InventoryBinaryService }, { token: i3.RepositoryService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: FileCellRendererComponent, isStandalone: true, selector: "c8y-file-cell-renderer", providers: [RepositoryService], ngImport: i0, template: "<small\n title=\"{{ getBinaryName(context.item) | async }}\"\n *ngIf=\"isBinaryFile(); else noFile\"\n>\n {{ getBinaryName(context.item) | async }}\n</small>\n<ng-template #noFile>\n <small title=\"{{ context.item?.url }}\">\n {{ context.item?.url }}\n </small>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }] }); }
|
|
28
|
+
}
|
|
29
|
+
__decorate([
|
|
30
|
+
memoize(property('id')),
|
|
31
|
+
__metadata("design:type", Function),
|
|
32
|
+
__metadata("design:paramtypes", [Object]),
|
|
33
|
+
__metadata("design:returntype", void 0)
|
|
34
|
+
], FileCellRendererComponent.prototype, "getBinaryName", null);
|
|
35
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: FileCellRendererComponent, decorators: [{
|
|
36
|
+
type: Component,
|
|
37
|
+
args: [{ selector: 'c8y-file-cell-renderer', standalone: true, imports: [CommonModule], providers: [RepositoryService], template: "<small\n title=\"{{ getBinaryName(context.item) | async }}\"\n *ngIf=\"isBinaryFile(); else noFile\"\n>\n {{ getBinaryName(context.item) | async }}\n</small>\n<ng-template #noFile>\n <small title=\"{{ context.item?.url }}\">\n {{ context.item?.url }}\n </small>\n</ng-template>\n" }]
|
|
38
|
+
}], ctorParameters: () => [{ type: i1.CellRendererContext }, { type: i2.InventoryBinaryService }, { type: i3.RepositoryService }], propDecorators: { getBinaryName: [] } });
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5jZWxsLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3JlcG9zaXRvcnkvc2hhcmVkL2NvbHVtbnMvZmlsZS5jZWxsLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3JlcG9zaXRvcnkvc2hhcmVkL2NvbHVtbnMvZmlsZS5jZWxsLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBa0Isc0JBQXNCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7QUFTMUQsTUFBTSxPQUFPLHlCQUF5QjtJQUNwQyxZQUNTLE9BQTRCLEVBQzNCLHNCQUE4QyxFQUM5QyxpQkFBb0M7UUFGckMsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFDM0IsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQzNDLENBQUM7SUFFSixZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHO1lBQzNCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDbkUsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNaLENBQUM7SUFHRCxhQUFhLENBQUMsYUFBNkI7UUFDekMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRSxDQUFDOzhHQWhCVSx5QkFBeUI7a0dBQXpCLHlCQUF5QixxRUFGekIsQ0FBQyxpQkFBaUIsQ0FBQywwQkNYaEMsaVNBV0EsMkNERFksWUFBWTs7QUFpQnRCO0lBREMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Ozs4REFHdkI7MkZBaEJVLHlCQUF5QjtrQkFQckMsU0FBUzsrQkFFRSx3QkFBd0IsY0FDdEIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLGFBQ1osQ0FBQyxpQkFBaUIsQ0FBQzs2SkFnQjlCLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlCaW5hcnlTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQ2VsbFJlbmRlcmVyQ29udGV4dCwgQ29tbW9uTW9kdWxlLCBtZW1vaXplIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBSZXBvc2l0b3J5U2VydmljZSB9IGZyb20gJy4uL3JlcG9zaXRvcnkuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS5jZWxsLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc2VsZWN0b3I6ICdjOHktZmlsZS1jZWxsLXJlbmRlcmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHByb3ZpZGVyczogW1JlcG9zaXRvcnlTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlQ2VsbFJlbmRlcmVyQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvbnRleHQ6IENlbGxSZW5kZXJlckNvbnRleHQsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlCaW5hcnlTZXJ2aWNlOiBJbnZlbnRvcnlCaW5hcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVwb3NpdG9yeVNlcnZpY2U6IFJlcG9zaXRvcnlTZXJ2aWNlXG4gICkge31cblxuICBpc0JpbmFyeUZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5pdGVtPy51cmxcbiAgICAgID8gISF0aGlzLmludmVudG9yeUJpbmFyeVNlcnZpY2UuZ2V0SWRGcm9tVXJsKHRoaXMuY29udGV4dC5pdGVtLnVybClcbiAgICAgIDogZmFsc2U7XG4gIH1cblxuICBAbWVtb2l6ZShwcm9wZXJ0eSgnaWQnKSlcbiAgZ2V0QmluYXJ5TmFtZShjb25maWd1cmF0aW9uOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHJldHVybiB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlLmdldEJpbmFyeU5hbWUkKGNvbmZpZ3VyYXRpb24udXJsKTtcbiAgfVxufVxuIiwiPHNtYWxsXG4gIHRpdGxlPVwie3sgZ2V0QmluYXJ5TmFtZShjb250ZXh0Lml0ZW0pIHwgYXN5bmMgfX1cIlxuICAqbmdJZj1cImlzQmluYXJ5RmlsZSgpOyBlbHNlIG5vRmlsZVwiXG4+XG4gIHt7IGdldEJpbmFyeU5hbWUoY29udGV4dC5pdGVtKSB8IGFzeW5jIH19XG48L3NtYWxsPlxuPG5nLXRlbXBsYXRlICNub0ZpbGU+XG4gIDxzbWFsbCB0aXRsZT1cInt7IGNvbnRleHQuaXRlbT8udXJsIH19XCI+XG4gICAge3sgY29udGV4dC5pdGVtPy51cmwgfX1cbiAgPC9zbWFsbD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BaseColumn, gettext } from '@c8y/ngx-components';
|
|
2
|
+
import { FileCellRendererComponent } from './file.cell-renderer.component';
|
|
3
|
+
export class FileGridColumn extends BaseColumn {
|
|
4
|
+
constructor(initialColumnConfig) {
|
|
5
|
+
super(initialColumnConfig);
|
|
6
|
+
this.name = 'file';
|
|
7
|
+
this.header = gettext('File');
|
|
8
|
+
this.cellRendererComponent = FileCellRendererComponent;
|
|
9
|
+
this.filterable = false;
|
|
10
|
+
this.sortable = false;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5ncmlkLWNvbHVtbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3JlcG9zaXRvcnkvc2hhcmVkL2NvbHVtbnMvZmlsZS5ncmlkLWNvbHVtbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFnQixPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUzRSxNQUFNLE9BQU8sY0FBZSxTQUFRLFVBQVU7SUFDNUMsWUFBWSxtQkFBbUY7UUFDN0YsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLHlCQUF5QixDQUFDO1FBRXZELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VDb2x1bW4sIENvbHVtbkNvbmZpZywgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgRmlsZUNlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vZmlsZS5jZWxsLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjbGFzcyBGaWxlR3JpZENvbHVtbiBleHRlbmRzIEJhc2VDb2x1bW4ge1xuICBjb25zdHJ1Y3Rvcihpbml0aWFsQ29sdW1uQ29uZmlnPzogQ29sdW1uQ29uZmlnICYgeyBmaWx0ZXJMYWJlbD86IHN0cmluZzsgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfSkge1xuICAgIHN1cGVyKGluaXRpYWxDb2x1bW5Db25maWcpO1xuICAgIHRoaXMubmFtZSA9ICdmaWxlJztcbiAgICB0aGlzLmhlYWRlciA9IGdldHRleHQoJ0ZpbGUnKTtcbiAgICB0aGlzLmNlbGxSZW5kZXJlckNvbXBvbmVudCA9IEZpbGVDZWxsUmVuZGVyZXJDb21wb25lbnQ7XG5cbiAgICB0aGlzLmZpbHRlcmFibGUgPSBmYWxzZTtcbiAgICB0aGlzLnNvcnRhYmxlID0gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|