@c8y/ngx-components 1019.2.4 → 1019.2.9
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/NOTICES +26 -0
- package/core/common/forOf.directive.d.ts +10 -1
- package/core/common/forOf.directive.d.ts.map +1 -1
- package/core/common/geo.service.d.ts +9 -0
- package/core/common/geo.service.d.ts.map +1 -0
- package/core/common/index.d.ts +1 -0
- package/core/common/index.d.ts.map +1 -1
- package/core/common/load-more.component.d.ts +1 -0
- package/core/common/load-more.component.d.ts.map +1 -1
- package/core/core.module.d.ts +50 -49
- package/core/core.module.d.ts.map +1 -1
- package/core/index.d.ts +1 -0
- package/core/index.d.ts.map +1 -1
- package/core/realtime/realtime-button.component.d.ts +5 -2
- package/core/realtime/realtime-button.component.d.ts.map +1 -1
- package/core/router/context-route.service.d.ts +6 -5
- package/core/router/context-route.service.d.ts.map +1 -1
- package/core/time-interval/index.d.ts +3 -0
- package/core/time-interval/index.d.ts.map +1 -0
- package/core/time-interval/time-interval.component.d.ts +26 -0
- package/core/time-interval/time-interval.component.d.ts.map +1 -0
- package/core/time-interval/time-interval.model.d.ts +33 -0
- package/core/time-interval/time-interval.model.d.ts.map +1 -0
- package/esm2022/context-dashboard/report-dashboard/report-dashboard-list.component.mjs +1 -1
- package/esm2022/core/audit-log/audit-log.component.mjs +1 -1
- package/esm2022/core/bootstrap/bootstrap.component.mjs +3 -3
- package/esm2022/core/common/forOf.directive.mjs +18 -2
- package/esm2022/core/common/geo.service.mjs +30 -0
- package/esm2022/core/common/index.mjs +2 -1
- package/esm2022/core/common/load-more.component.mjs +5 -2
- package/esm2022/core/core.module.mjs +11 -7
- package/esm2022/core/dynamic-forms/typeahead/typeahead.type.component.mjs +1 -1
- package/esm2022/core/index.mjs +2 -1
- package/esm2022/core/realtime/realtime-button.component.mjs +10 -4
- package/esm2022/core/router/context-route.service.mjs +10 -4
- package/esm2022/core/search/search-input.component.mjs +1 -1
- package/esm2022/core/time-interval/index.mjs +3 -0
- package/esm2022/core/time-interval/time-interval.component.mjs +85 -0
- package/esm2022/core/time-interval/time-interval.model.mjs +54 -0
- package/esm2022/datapoint-library/list/datapoint-library-list.component.mjs +2 -2
- package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +1 -1
- package/esm2022/device-profile/device-profile-list.component.mjs +1 -1
- package/esm2022/device-profile/device-tab-profile/device-tab-profile.component.mjs +1 -1
- package/esm2022/device-shell/shell/shell.component.mjs +1 -1
- package/esm2022/diagnostics/diagnostics.component.mjs +1 -1
- package/esm2022/ecosystem/applications/install-from-package/install-from-package.component.mjs +1 -1
- package/esm2022/ecosystem/shared/package-version-select/package-version-select.component.mjs +1 -1
- package/esm2022/location/location.component.mjs +1 -1
- package/esm2022/map/cluster-map.component.mjs +7 -7
- package/esm2022/map/map.component.mjs +92 -36
- package/esm2022/map/map.model.mjs +3 -2
- package/esm2022/operations/bulk-operations-list/bulk-operations-list.component.mjs +1 -1
- package/esm2022/operations/bulk-single-operations-list/single-operations-list.component.mjs +1 -1
- package/esm2022/operations/operations-list/operations-list.component.mjs +1 -1
- package/esm2022/operations/operations-timeline/operations-timeline.component.mjs +1 -1
- package/esm2022/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.component.mjs +1 -1
- package/esm2022/operations/stepper-bulk-type-device-profile/select-device-profile-step.component.mjs +1 -1
- package/esm2022/operations/stepper-bulk-type-firmware/select-firmware.component.mjs +1 -1
- package/esm2022/operations/stepper-bulk-type-firmware/version-or-patch.component.mjs +1 -1
- package/esm2022/operations/stepper-bulk-type-software/select-software-step.component.mjs +1 -1
- package/esm2022/protocol-lpwan/lpwan-set-connections.component.mjs +1 -1
- package/esm2022/protocol-lpwan/lpwan-set-device-protocol.component.mjs +1 -1
- package/esm2022/repository/configuration/list/configuration-detail.component.mjs +1 -1
- package/esm2022/repository/configuration/list/configuration-list.component.mjs +1 -1
- package/esm2022/repository/firmware/list/add-firmware-modal.component.mjs +1 -1
- package/esm2022/repository/firmware/list/add-firmware-patch-modal.component.mjs +1 -1
- package/esm2022/repository/firmware/list/firmware-details.component.mjs +1 -1
- package/esm2022/repository/firmware/list/firmware-list.component.mjs +1 -1
- package/esm2022/repository/shared/software-type/software-type.component.mjs +1 -1
- package/esm2022/repository/software/device-tab/device-software-list.component.mjs +1 -1
- package/esm2022/repository/software/list/add-software-modal.component.mjs +1 -1
- package/esm2022/repository/software/list/columns/software-type.filtering-form-renderer.component.mjs +1 -1
- package/esm2022/repository/software/list/software-details.component.mjs +1 -1
- package/esm2022/sub-assets/location/asset-location.component.mjs +1 -1
- package/esm2022/tracking/c8y-ngx-components-tracking.mjs +5 -0
- package/esm2022/tracking/index.mjs +6 -0
- package/esm2022/tracking/tracking-marker-popup.component.mjs +34 -0
- package/esm2022/tracking/tracking-tab.guard.mjs +25 -0
- package/esm2022/tracking/tracking.component.mjs +92 -0
- package/esm2022/tracking/tracking.feature.mjs +16 -0
- package/esm2022/tracking/tracking.service.mjs +124 -0
- package/esm2022/trusted-certificates/crl/crl-settings.component.mjs +5 -5
- package/esm2022/trusted-certificates/list/trusted-certificate-list.component.mjs +1 -1
- package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +2 -2
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs +2 -2
- package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-shell.mjs +1 -1
- package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-diagnostics.mjs +1 -1
- package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-location.mjs +1 -1
- package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-map.mjs +95 -38
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +2 -2
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +2 -2
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +2 -2
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +4 -4
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs +4 -4
- package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tracking.mjs +271 -0
- package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +5 -5
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +204 -16
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +158 -83
- package/locales/en.po +6 -0
- package/locales/es.po +361 -205
- package/locales/fr.po +342 -186
- package/locales/locales.pot +40 -7
- package/locales/nl.po +326 -170
- package/locales/pl.po +60 -59
- package/locales/pt_BR.po +342 -186
- package/map/cluster-map.component.d.ts +3 -3
- package/map/cluster-map.component.d.ts.map +1 -1
- package/map/map.component.d.ts +17 -7
- package/map/map.component.d.ts.map +1 -1
- package/map/map.model.d.ts +14 -6
- package/map/map.model.d.ts.map +1 -1
- package/package.json +1 -1
- package/tracking/c8y-ngx-components-tracking.d.ts.map +1 -0
- package/tracking/index.d.ts +6 -0
- package/tracking/index.d.ts.map +1 -0
- package/tracking/tracking-marker-popup.component.d.ts +17 -0
- package/tracking/tracking-marker-popup.component.d.ts.map +1 -0
- package/tracking/tracking-tab.guard.d.ts +12 -0
- package/tracking/tracking-tab.guard.d.ts.map +1 -0
- package/tracking/tracking.component.d.ts +33 -0
- package/tracking/tracking.component.d.ts.map +1 -0
- package/tracking/tracking.feature.d.ts +3 -0
- package/tracking/tracking.feature.d.ts.map +1 -0
- package/tracking/tracking.service.d.ts +38 -0
- package/tracking/tracking.service.d.ts.map +1 -0
- package/trusted-certificates/crl/crl-settings.component.d.ts +1 -1
- package/trusted-certificates/crl/crl-settings.component.d.ts.map +1 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { gettext } from '../i18n/gettext';
|
|
2
|
+
export const LAST_MINUTE = {
|
|
3
|
+
label: gettext('Last minute'),
|
|
4
|
+
getStartDate: () => {
|
|
5
|
+
const start = new Date();
|
|
6
|
+
start.setMinutes(start.getMinutes() - 1);
|
|
7
|
+
return start;
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
export const LAST_HOUR = {
|
|
11
|
+
label: gettext('Last hour'),
|
|
12
|
+
getStartDate: () => {
|
|
13
|
+
const start = new Date();
|
|
14
|
+
start.setHours(start.getHours() - 1);
|
|
15
|
+
return start;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
export const LAST_DAY = {
|
|
19
|
+
label: gettext('Last day'),
|
|
20
|
+
getStartDate: () => {
|
|
21
|
+
const start = new Date();
|
|
22
|
+
start.setDate(start.getDate() - 1);
|
|
23
|
+
start.setHours(0, 0, 0, 0);
|
|
24
|
+
return start;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
export const LAST_WEEK = {
|
|
28
|
+
label: gettext('Last week'),
|
|
29
|
+
getStartDate: () => {
|
|
30
|
+
const start = new Date();
|
|
31
|
+
start.setDate(start.getDate() - 7);
|
|
32
|
+
start.setHours(0, 0, 0, 0);
|
|
33
|
+
return start;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
export const LAST_MONTH = {
|
|
37
|
+
label: gettext('Last month'),
|
|
38
|
+
getStartDate: () => {
|
|
39
|
+
const start = new Date();
|
|
40
|
+
start.setMonth(start.getMonth() - 1);
|
|
41
|
+
start.setHours(0, 0, 0, 0);
|
|
42
|
+
return start;
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
export const CUSTOM = { label: gettext('Custom') };
|
|
46
|
+
export const INTERVAL_OPTIONS = [
|
|
47
|
+
LAST_MINUTE,
|
|
48
|
+
LAST_HOUR,
|
|
49
|
+
LAST_DAY,
|
|
50
|
+
LAST_WEEK,
|
|
51
|
+
LAST_MONTH,
|
|
52
|
+
CUSTOM
|
|
53
|
+
];
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1pbnRlcnZhbC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvdGltZS1pbnRlcnZhbC90aW1lLWludGVydmFsLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQWUxQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQXVCO0lBQzdDLEtBQUssRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDO0lBQzdCLFlBQVksRUFBRSxHQUFHLEVBQUU7UUFDakIsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHO0lBQ3ZCLEtBQUssRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDO0lBQzNCLFlBQVksRUFBRSxHQUFHLEVBQUU7UUFDakIsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHO0lBQ3RCLEtBQUssRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDO0lBQzFCLFlBQVksRUFBRSxHQUFHLEVBQUU7UUFDakIsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUc7SUFDdkIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDM0IsWUFBWSxFQUFFLEdBQUcsRUFBRTtRQUNqQixNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25DLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixLQUFLLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQztJQUM1QixZQUFZLEVBQUUsR0FBRyxFQUFFO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDekIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDckMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBRW5ELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUF5QjtJQUNwRCxXQUFXO0lBQ1gsU0FBUztJQUNULFFBQVE7SUFDUixTQUFTO0lBQ1QsVUFBVTtJQUNWLE1BQU07Q0FDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnNEYXRlcmFuZ2VwaWNrZXJDb25maWcgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIERhdGVSYW5nZVBpY2tlckNvbmZpZyBleHRlbmRzIFBhcnRpYWw8QnNEYXRlcmFuZ2VwaWNrZXJDb25maWc+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltZUludGVydmFsIHtcbiAgZGF0ZUZyb206IERhdGU7XG4gIGRhdGVUbzogRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUaW1lSW50ZXJ2YWxPcHRpb24ge1xuICBsYWJlbDogc3RyaW5nO1xuICBnZXRTdGFydERhdGU/OiAoKSA9PiBEYXRlO1xufVxuXG5leHBvcnQgY29uc3QgTEFTVF9NSU5VVEU6IFRpbWVJbnRlcnZhbE9wdGlvbiA9IHtcbiAgbGFiZWw6IGdldHRleHQoJ0xhc3QgbWludXRlJyksXG4gIGdldFN0YXJ0RGF0ZTogKCkgPT4ge1xuICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKTtcbiAgICBzdGFydC5zZXRNaW51dGVzKHN0YXJ0LmdldE1pbnV0ZXMoKSAtIDEpO1xuICAgIHJldHVybiBzdGFydDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IExBU1RfSE9VUiA9IHtcbiAgbGFiZWw6IGdldHRleHQoJ0xhc3QgaG91cicpLFxuICBnZXRTdGFydERhdGU6ICgpID0+IHtcbiAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCk7XG4gICAgc3RhcnQuc2V0SG91cnMoc3RhcnQuZ2V0SG91cnMoKSAtIDEpO1xuICAgIHJldHVybiBzdGFydDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IExBU1RfREFZID0ge1xuICBsYWJlbDogZ2V0dGV4dCgnTGFzdCBkYXknKSxcbiAgZ2V0U3RhcnREYXRlOiAoKSA9PiB7XG4gICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSgpO1xuICAgIHN0YXJ0LnNldERhdGUoc3RhcnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgc3RhcnQuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgcmV0dXJuIHN0YXJ0O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgTEFTVF9XRUVLID0ge1xuICBsYWJlbDogZ2V0dGV4dCgnTGFzdCB3ZWVrJyksXG4gIGdldFN0YXJ0RGF0ZTogKCkgPT4ge1xuICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKTtcbiAgICBzdGFydC5zZXREYXRlKHN0YXJ0LmdldERhdGUoKSAtIDcpO1xuICAgIHN0YXJ0LnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHJldHVybiBzdGFydDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IExBU1RfTU9OVEggPSB7XG4gIGxhYmVsOiBnZXR0ZXh0KCdMYXN0IG1vbnRoJyksXG4gIGdldFN0YXJ0RGF0ZTogKCkgPT4ge1xuICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKTtcbiAgICBzdGFydC5zZXRNb250aChzdGFydC5nZXRNb250aCgpIC0gMSk7XG4gICAgc3RhcnQuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgcmV0dXJuIHN0YXJ0O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgQ1VTVE9NID0geyBsYWJlbDogZ2V0dGV4dCgnQ3VzdG9tJykgfTtcblxuZXhwb3J0IGNvbnN0IElOVEVSVkFMX09QVElPTlM6IFRpbWVJbnRlcnZhbE9wdGlvbltdID0gW1xuICBMQVNUX01JTlVURSxcbiAgTEFTVF9IT1VSLFxuICBMQVNUX0RBWSxcbiAgTEFTVF9XRUVLLFxuICBMQVNUX01PTlRILFxuICBDVVNUT01cbl07XG4iXX0=
|
|
@@ -65,10 +65,10 @@ export class DatapointLibraryListComponent {
|
|
|
65
65
|
this.reload$.next();
|
|
66
66
|
}
|
|
67
67
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DatapointLibraryListComponent, deps: [{ token: i1.InventoryService }, { token: i2.Router }, { token: i3.ModalService }, { token: i4.TranslateService }, { token: i3.AlertService }, { token: i5.DatapointParserService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
68
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DatapointLibraryListComponent, isStandalone: true, selector: "c8y-datapoint-library-list", ngImport: i0, template: "<c8y-title>{{ title | translate }}</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-tools'\"\n [label]=\"'Configuration' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-tools'\"\n [label]=\"title | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *c8yIfAllowed=\"['ROLE_INVENTORY_ADMIN']\"\n [priority]=\"1\"\n>\n <button\n class=\"btn btn-link\"\n [title]=\"'Add data point' | translate\"\n type=\"button\"\n (click)=\"addDatapointEntry()\"\n data-cy=\"c8y-datapoint-library-list--add-data-point\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add data point' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"0\"\n>\n <button\n class=\"btn btn-link\"\n [title]=\"'Reload' | translate\"\n type=\"button\"\n [disabled]=\"isLoading\"\n (click)=\"reload()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form hidden-xs\"\n>\n <c8y-list-display-switch\n (onListClassChange)=\"listClass = $event\"\n [listLength]=\"(datapoints$ | async)?.data?.length\"\n ></c8y-list-display-switch>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/cockpit/data-point-library/#data-point-library\"></c8y-help>\n\n<!-- empty state\n-->\n<c8y-ui-empty-state\n [icon]=\"'c8y-data-points'\"\n [title]=\"'No data points to display.' | translate\"\n [subtitle]=\"'Add a data point using the button below.' | translate\"\n *ngIf=\"(datapoints$ | async)?.data?.length === 0\"\n>\n <p>\n <button\n class=\"btn btn-primary\"\n [title]=\"'Add data point' | translate\"\n type=\"button\"\n (click)=\"addDatapointEntry()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add data point' | translate }}\n </button>\n </p>\n</c8y-ui-empty-state>\n\n<!-- loading indicator -->\n<div\n class=\"d-flex j-c-center\"\n *ngIf=\"isLoading\"\n>\n <c8y-loading></c8y-loading>\n</div>\n\n<div\n class=\"card-group\"\n [ngClass]=\"listClass\"\n *ngIf=\"!isLoading && (datapoints$ | async) as datapoints\"\n>\n <div\n class=\"page-sticky-header hidden-xs\"\n *ngIf=\"datapoints.data.length\"\n >\n <div class=\"d-flex\">\n <div class=\"card-header\">\n <div class=\"card-icon\"></div>\n <p translate>Label</p>\n </div>\n <div class=\"card-actions\"></div>\n <div class=\"card-block p-l-0\">\n <div class=\"col-sm-3 p-l-16\">\n <p translate>Fragment</p>\n </div>\n <div class=\"col-sm-2\">\n <p translate>Series</p>\n </div>\n <div class=\"col-sm-1\">\n <span translate>Unit</span>\n </div>\n <div class=\"col-sm-2\">\n <span translate>Target</span>\n </div>\n <div class=\"col-sm-4\">\n <span translate>Range</span>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"col-sm-6 col-md-4 col-lg-3 col-xs-12\"\n *c8yFor=\"let datapoint of datapoints; loadMore: 'hidden'; pipe: parsePipe\"\n >\n <div\n class=\"card pointer\"\n (click)=\"editDatapointEntry(datapoint)\"\n >\n <div\n class=\"card-actions\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"dropdown settings pull-right\"\n dropdown\n #datapointOptionsDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"datapointOptionsDropdown.isOpen\"\n >\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n [title]=\"'Actions' | translate\"\n type=\"button\"\n dropdownToggle\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul\n class=\"dropdown-menu\"\n *dropdownMenu\n >\n <li>\n <button\n [title]=\"'Edit' | translate\"\n type=\"button\"\n (click)=\"editDatapointEntry(datapoint)\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n </li>\n <li>\n <button\n [title]=\"'Remove' | translate\"\n type=\"button\"\n (click)=\"removeDatapointEntry(datapoint)\"\n >\n <i c8yIcon=\"delete\"></i>\n {{ 'Remove' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"card-header separator\">\n <div class=\"card-icon\">\n <i\n c8yIcon=\"circle\"\n [style.color]=\"datapoint.c8y_Kpi?.color\"\n ></i>\n </div>\n <div\n class=\"card-title text-truncate\"\n [title]=\"datapoint.c8y_Kpi?.label\"\n >\n {{ datapoint.c8y_Kpi?.label }}\n </div>\n </div>\n <div class=\"card-block bg-level-1 p-b-24 card-hidden-list\">\n <div class=\"col-sm-3 col-md-2\">\n <c8y-range-display\n [config]=\"datapoint.c8y_Kpi\"\n [display]=\"'compact'\"\n ></c8y-range-display>\n </div>\n </div>\n <div class=\"card-block\">\n <div class=\"col-sm-3 text-truncate\">\n <span>\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Fragment\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.fragment\">\n {{ datapoint.c8y_Kpi?.fragment }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-2 text-truncate\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Series\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.series\">\n {{ datapoint.c8y_Kpi?.series }}\n </span>\n </div>\n <div class=\"col-sm-1 text-truncate card-hidden-grid\">\n <span *ngIf=\"datapoint.c8y_Kpi?.unit\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Unit\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.unit\">\n {{ datapoint.c8y_Kpi?.unit }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-2 text-truncate\">\n <span *ngIf=\"datapoint.c8y_Kpi?.target\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Target\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.target\">\n {{ datapoint.c8y_Kpi?.target }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-4 card-hidden-grid\">\n <c8y-range-display\n [config]=\"datapoint.c8y_Kpi\"\n [display]=\"'inline'\"\n ></c8y-range-display>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i6.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "ngmodule", type: CoreModule }, { kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i3.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "directive", type: i3.IfAllowedDirective, selector: "[c8yIfAllowed]", inputs: ["c8yIfAllowed", "c8yIfAllowedAllowAny"] }, { kind: "directive", type: i3.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading" }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "component", type: i3.RangeDisplayComponent, selector: "c8y-range-display", inputs: ["config", "display"] }, { kind: "component", type: i3.ListDisplaySwitchComponent, selector: "c8y-list-display-switch", inputs: ["listKey", "listLength", "filterPipe"], outputs: ["onListClassChange"] }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "directive", type: i8.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i8.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i8.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "ngmodule", type: RouterModule }] }); }
|
|
68
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DatapointLibraryListComponent, isStandalone: true, selector: "c8y-datapoint-library-list", ngImport: i0, template: "<c8y-title>{{ title | translate }}</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-tools'\"\n [label]=\"'Configuration' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-tools'\"\n [label]=\"title | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *c8yIfAllowed=\"['ROLE_INVENTORY_ADMIN']\"\n [priority]=\"1\"\n>\n <button\n class=\"btn btn-link\"\n [title]=\"'Add data point' | translate\"\n type=\"button\"\n (click)=\"addDatapointEntry()\"\n data-cy=\"c8y-datapoint-library-list--add-data-point\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add data point' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"0\"\n>\n <button\n class=\"btn btn-link\"\n [title]=\"'Reload' | translate\"\n type=\"button\"\n [disabled]=\"isLoading\"\n (click)=\"reload()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form hidden-xs\"\n>\n <c8y-list-display-switch\n (onListClassChange)=\"listClass = $event\"\n [listLength]=\"(datapoints$ | async)?.data?.length\"\n ></c8y-list-display-switch>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/cockpit/data-point-library/#data-point-library\"></c8y-help>\n\n<!-- empty state\n-->\n<c8y-ui-empty-state\n [icon]=\"'c8y-data-points'\"\n [title]=\"'No data points to display.' | translate\"\n [subtitle]=\"'Add a data point using the button below.' | translate\"\n *ngIf=\"(datapoints$ | async)?.data?.length === 0\"\n>\n <p>\n <button\n class=\"btn btn-primary\"\n [title]=\"'Add data point' | translate\"\n type=\"button\"\n (click)=\"addDatapointEntry()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add data point' | translate }}\n </button>\n </p>\n</c8y-ui-empty-state>\n\n<!-- loading indicator -->\n<div\n class=\"d-flex j-c-center\"\n *ngIf=\"isLoading\"\n>\n <c8y-loading></c8y-loading>\n</div>\n\n<div\n class=\"card-group\"\n [ngClass]=\"listClass\"\n *ngIf=\"!isLoading && (datapoints$ | async) as datapoints\"\n>\n <div\n class=\"page-sticky-header hidden-xs\"\n *ngIf=\"datapoints.data.length\"\n >\n <div class=\"d-flex\">\n <div class=\"card-header\">\n <div class=\"card-icon\"></div>\n <p translate>Label</p>\n </div>\n <div class=\"card-actions\"></div>\n <div class=\"card-block p-l-0\">\n <div class=\"col-sm-3 p-l-16\">\n <p translate>Fragment</p>\n </div>\n <div class=\"col-sm-2\">\n <p translate>Series</p>\n </div>\n <div class=\"col-sm-1\">\n <span translate>Unit</span>\n </div>\n <div class=\"col-sm-2\">\n <span translate>Target</span>\n </div>\n <div class=\"col-sm-4\">\n <span translate>Range</span>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"col-sm-6 col-md-4 col-lg-3 col-xs-12\"\n *c8yFor=\"let datapoint of datapoints; loadMore: 'hidden'; pipe: parsePipe\"\n >\n <div\n class=\"card pointer\"\n (click)=\"editDatapointEntry(datapoint)\"\n >\n <div\n class=\"card-actions\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"dropdown settings pull-right\"\n dropdown\n #datapointOptionsDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"datapointOptionsDropdown.isOpen\"\n >\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n [title]=\"'Actions' | translate\"\n type=\"button\"\n dropdownToggle\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul\n class=\"dropdown-menu\"\n *dropdownMenu\n >\n <li>\n <button\n [title]=\"'Edit' | translate\"\n type=\"button\"\n (click)=\"editDatapointEntry(datapoint)\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n </li>\n <li>\n <button\n [title]=\"'Remove' | translate\"\n type=\"button\"\n (click)=\"removeDatapointEntry(datapoint)\"\n >\n <i c8yIcon=\"delete\"></i>\n {{ 'Remove' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"card-header separator\">\n <div class=\"card-icon\">\n <i\n c8yIcon=\"circle\"\n [style.color]=\"datapoint.c8y_Kpi?.color\"\n ></i>\n </div>\n <div\n class=\"card-title text-truncate\"\n [title]=\"datapoint.c8y_Kpi?.label\"\n >\n {{ datapoint.c8y_Kpi?.label }}\n </div>\n </div>\n <div class=\"card-block bg-level-1 p-b-24 card-hidden-list\">\n <div class=\"col-sm-3 col-md-2\">\n <c8y-range-display\n [config]=\"datapoint.c8y_Kpi\"\n [display]=\"'compact'\"\n ></c8y-range-display>\n </div>\n </div>\n <div class=\"card-block\">\n <div class=\"col-sm-3 text-truncate\">\n <span>\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Fragment\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.fragment\">\n {{ datapoint.c8y_Kpi?.fragment }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-2 text-truncate\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Series\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.series\">\n {{ datapoint.c8y_Kpi?.series }}\n </span>\n </div>\n <div class=\"col-sm-1 text-truncate card-hidden-grid\">\n <span *ngIf=\"datapoint.c8y_Kpi?.unit\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Unit\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.unit\">\n {{ datapoint.c8y_Kpi?.unit }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-2 text-truncate\">\n <span *ngIf=\"datapoint.c8y_Kpi?.target\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Target\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.target\">\n {{ datapoint.c8y_Kpi?.target }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-4 card-hidden-grid\">\n <c8y-range-display\n [config]=\"datapoint.c8y_Kpi\"\n [display]=\"'inline'\"\n ></c8y-range-display>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i6.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "ngmodule", type: CoreModule }, { kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i3.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "directive", type: i3.IfAllowedDirective, selector: "[c8yIfAllowed]", inputs: ["c8yIfAllowed", "c8yIfAllowedAllowAny"] }, { kind: "directive", type: i3.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForLoadMoreComponent"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading" }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "component", type: i3.RangeDisplayComponent, selector: "c8y-range-display", inputs: ["config", "display"] }, { kind: "component", type: i3.ListDisplaySwitchComponent, selector: "c8y-list-display-switch", inputs: ["listKey", "listLength", "filterPipe"], outputs: ["onListClassChange"] }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "directive", type: i8.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i8.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i8.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "ngmodule", type: RouterModule }] }); }
|
|
69
69
|
}
|
|
70
70
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DatapointLibraryListComponent, decorators: [{
|
|
71
71
|
type: Component,
|
|
72
72
|
args: [{ selector: 'c8y-datapoint-library-list', standalone: true, imports: [A11yModule, CoreModule, BsDropdownModule, RouterModule], template: "<c8y-title>{{ title | translate }}</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-tools'\"\n [label]=\"'Configuration' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-tools'\"\n [label]=\"title | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *c8yIfAllowed=\"['ROLE_INVENTORY_ADMIN']\"\n [priority]=\"1\"\n>\n <button\n class=\"btn btn-link\"\n [title]=\"'Add data point' | translate\"\n type=\"button\"\n (click)=\"addDatapointEntry()\"\n data-cy=\"c8y-datapoint-library-list--add-data-point\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add data point' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"0\"\n>\n <button\n class=\"btn btn-link\"\n [title]=\"'Reload' | translate\"\n type=\"button\"\n [disabled]=\"isLoading\"\n (click)=\"reload()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form hidden-xs\"\n>\n <c8y-list-display-switch\n (onListClassChange)=\"listClass = $event\"\n [listLength]=\"(datapoints$ | async)?.data?.length\"\n ></c8y-list-display-switch>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/cockpit/data-point-library/#data-point-library\"></c8y-help>\n\n<!-- empty state\n-->\n<c8y-ui-empty-state\n [icon]=\"'c8y-data-points'\"\n [title]=\"'No data points to display.' | translate\"\n [subtitle]=\"'Add a data point using the button below.' | translate\"\n *ngIf=\"(datapoints$ | async)?.data?.length === 0\"\n>\n <p>\n <button\n class=\"btn btn-primary\"\n [title]=\"'Add data point' | translate\"\n type=\"button\"\n (click)=\"addDatapointEntry()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add data point' | translate }}\n </button>\n </p>\n</c8y-ui-empty-state>\n\n<!-- loading indicator -->\n<div\n class=\"d-flex j-c-center\"\n *ngIf=\"isLoading\"\n>\n <c8y-loading></c8y-loading>\n</div>\n\n<div\n class=\"card-group\"\n [ngClass]=\"listClass\"\n *ngIf=\"!isLoading && (datapoints$ | async) as datapoints\"\n>\n <div\n class=\"page-sticky-header hidden-xs\"\n *ngIf=\"datapoints.data.length\"\n >\n <div class=\"d-flex\">\n <div class=\"card-header\">\n <div class=\"card-icon\"></div>\n <p translate>Label</p>\n </div>\n <div class=\"card-actions\"></div>\n <div class=\"card-block p-l-0\">\n <div class=\"col-sm-3 p-l-16\">\n <p translate>Fragment</p>\n </div>\n <div class=\"col-sm-2\">\n <p translate>Series</p>\n </div>\n <div class=\"col-sm-1\">\n <span translate>Unit</span>\n </div>\n <div class=\"col-sm-2\">\n <span translate>Target</span>\n </div>\n <div class=\"col-sm-4\">\n <span translate>Range</span>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"col-sm-6 col-md-4 col-lg-3 col-xs-12\"\n *c8yFor=\"let datapoint of datapoints; loadMore: 'hidden'; pipe: parsePipe\"\n >\n <div\n class=\"card pointer\"\n (click)=\"editDatapointEntry(datapoint)\"\n >\n <div\n class=\"card-actions\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"dropdown settings pull-right\"\n dropdown\n #datapointOptionsDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"datapointOptionsDropdown.isOpen\"\n >\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n [title]=\"'Actions' | translate\"\n type=\"button\"\n dropdownToggle\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul\n class=\"dropdown-menu\"\n *dropdownMenu\n >\n <li>\n <button\n [title]=\"'Edit' | translate\"\n type=\"button\"\n (click)=\"editDatapointEntry(datapoint)\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n </li>\n <li>\n <button\n [title]=\"'Remove' | translate\"\n type=\"button\"\n (click)=\"removeDatapointEntry(datapoint)\"\n >\n <i c8yIcon=\"delete\"></i>\n {{ 'Remove' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"card-header separator\">\n <div class=\"card-icon\">\n <i\n c8yIcon=\"circle\"\n [style.color]=\"datapoint.c8y_Kpi?.color\"\n ></i>\n </div>\n <div\n class=\"card-title text-truncate\"\n [title]=\"datapoint.c8y_Kpi?.label\"\n >\n {{ datapoint.c8y_Kpi?.label }}\n </div>\n </div>\n <div class=\"card-block bg-level-1 p-b-24 card-hidden-list\">\n <div class=\"col-sm-3 col-md-2\">\n <c8y-range-display\n [config]=\"datapoint.c8y_Kpi\"\n [display]=\"'compact'\"\n ></c8y-range-display>\n </div>\n </div>\n <div class=\"card-block\">\n <div class=\"col-sm-3 text-truncate\">\n <span>\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Fragment\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.fragment\">\n {{ datapoint.c8y_Kpi?.fragment }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-2 text-truncate\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Series\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.series\">\n {{ datapoint.c8y_Kpi?.series }}\n </span>\n </div>\n <div class=\"col-sm-1 text-truncate card-hidden-grid\">\n <span *ngIf=\"datapoint.c8y_Kpi?.unit\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Unit\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.unit\">\n {{ datapoint.c8y_Kpi?.unit }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-2 text-truncate\">\n <span *ngIf=\"datapoint.c8y_Kpi?.target\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Target\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.target\">\n {{ datapoint.c8y_Kpi?.target }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-4 card-hidden-grid\">\n <c8y-range-display\n [config]=\"datapoint.c8y_Kpi\"\n [display]=\"'inline'\"\n ></c8y-range-display>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
73
73
|
}], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: i2.Router }, { type: i3.ModalService }, { type: i4.TranslateService }, { type: i3.AlertService }, { type: i5.DatapointParserService }]; } });
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50LWxpYnJhcnktbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9kYXRhcG9pbnQtbGlicmFyeS9saXN0L2RhdGFwb2ludC1saWJyYXJ5LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vZGF0YXBvaW50LWxpYnJhcnkvbGlzdC9kYXRhcG9pbnQtbGlicmFyeS1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQWtCLGdCQUFnQixFQUFlLE1BQU0sYUFBYSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDckYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDOzs7Ozs7Ozs7O0FBUXhGLE1BQU0sT0FBTyw2QkFBNkI7SUFrQnhDLFlBQ1UsU0FBMkIsRUFDM0IsTUFBYyxFQUNkLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNsQyxZQUEwQixFQUMxQixNQUE4QjtRQUw5QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUF3QjtRQXZCL0IsVUFBSyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQy9DLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLFlBQU8sR0FBMEIsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsZ0JBQVcsR0FBNEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3RFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN4QixDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQ3JDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDLENBQUMsRUFDRixXQUFXLEVBQUUsQ0FDZCxDQUFDO1FBRUYsY0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFzQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFTbEYsQ0FBQztJQUVKLGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQXFCO1FBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxLQUFxQjtRQUM5QyxJQUFJO1lBQ0YsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDN0IsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQzNCLE9BQU8sQ0FBQyw2RUFBNkUsQ0FBQyxFQUN0RixFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUNqQyxFQUNELFFBQVEsQ0FDVCxDQUFDO1NBQ0g7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU87U0FDUjtRQUNELElBQUk7WUFDRixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3JCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RCLENBQUM7K0dBOURVLDZCQUE2QjttR0FBN0IsNkJBQTZCLHNGQ2xCMUMsK25PQW1RQSwyQ0RuUFksVUFBVSx5TEFBRSxVQUFVLHVyRUFBRSxnQkFBZ0Isc2xCQUFFLFlBQVk7OzRGQUVyRCw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0UsNEJBQTRCLGNBRTFCLElBQUksV0FDUCxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSwgSVJlc3VsdExpc3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UsIENvcmVNb2R1bGUsIGdldHRleHQsIE1vZGFsU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBwaXBlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHBhdGhUb0RhdGFwb2ludExpYnJhcnkgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RhdGFwb2ludC1saWJyYXJ5L21vZGVsJztcbmltcG9ydCB7IEExMXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBCc0Ryb3Bkb3duTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQgeyBEYXRhcG9pbnRQYXJzZXJTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnQtbGlicmFyeS9zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnQtbGlicmFyeS1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludC1saWJyYXJ5LWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQTExeU1vZHVsZSwgQ29yZU1vZHVsZSwgQnNEcm9wZG93bk1vZHVsZSwgUm91dGVyTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhcG9pbnRMaWJyYXJ5TGlzdENvbXBvbmVudCB7XG4gIHJlYWRvbmx5IHRpdGxlID0gZ2V0dGV4dCgnRGF0YSBwb2ludCBsaWJyYXJ5Jyk7XG4gIGxpc3RDbGFzcyA9ICcnO1xuICBpc0xvYWRpbmcgPSB0cnVlO1xuICByZWxvYWQkOiBCZWhhdmlvclN1YmplY3Q8dm9pZD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICBkYXRhcG9pbnRzJDogT2JzZXJ2YWJsZTxJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4+ID0gdGhpcy5yZWxvYWQkLnBpcGUoXG4gICAgdGFwKCgpID0+IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB9KSxcbiAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5nZXREYXRhcG9pbnRzKCkpLFxuICAgIHRhcCgoKSA9PiB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KClcbiAgKTtcblxuICBwYXJzZVBpcGUgPSBwaXBlKG1hcCgoZGF0YTogSU1hbmFnZWRPYmplY3RbXSkgPT4gdGhpcy5wYXJzZXIucGFyc2VEYXRhcG9pbnRzKGRhdGEpKSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGFyc2VyOiBEYXRhcG9pbnRQYXJzZXJTZXJ2aWNlXG4gICkge31cblxuICBnZXREYXRhcG9pbnRzKCk6IFByb21pc2U8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+PiB7XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5Lmxpc3QoeyBwYWdlU2l6ZTogMjAsIGZyYWdtZW50VHlwZTogJ2M4eV9LcGknLCB3aXRoVG90YWxQYWdlczogdHJ1ZSB9KTtcbiAgfVxuXG4gIGFkZERhdGFwb2ludEVudHJ5KCkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwYXRoVG9EYXRhcG9pbnRMaWJyYXJ5LCAnbmV3J10pO1xuICB9XG5cbiAgZWRpdERhdGFwb2ludEVudHJ5KGVudHJ5OiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwYXRoVG9EYXRhcG9pbnRMaWJyYXJ5LCBlbnRyeS5pZF0pO1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlRGF0YXBvaW50RW50cnkoZW50cnk6IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICAgIGdldHRleHQoJ0RlbGV0ZSBkYXRhIHBvaW50JyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoJ1lvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIGRhdGEgcG9pbnQgXCJ7eyBkcExhYmVsIH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/JyksXG4gICAgICAgICAgeyBkcExhYmVsOiBlbnRyeS5jOHlfS3BpLmxhYmVsIH1cbiAgICAgICAgKSxcbiAgICAgICAgJ2RhbmdlcidcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGVsZXRlKGVudHJ5LmlkKTtcbiAgICAgIHRoaXMucmVsb2FkJC5uZXh0KCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICB9XG4gIH1cblxuICByZWxvYWQoKSB7XG4gICAgdGhpcy5yZWxvYWQkLm5leHQoKTtcbiAgfVxufVxuIiwiPGM4eS10aXRsZT57eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fTwvYzh5LXRpdGxlPlxuPGM4eS1icmVhZGNydW1iPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cIidjOHktdG9vbHMnXCJcbiAgICBbbGFiZWxdPVwiJ0NvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInYzh5LXRvb2xzJ1wiXG4gICAgW2xhYmVsXT1cInRpdGxlIHwgdHJhbnNsYXRlXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICAqYzh5SWZBbGxvd2VkPVwiWydST0xFX0lOVkVOVE9SWV9BRE1JTiddXCJcbiAgW3ByaW9yaXR5XT1cIjFcIlxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIFt0aXRsZV09XCInQWRkIGRhdGEgcG9pbnQnIHwgdHJhbnNsYXRlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwiYWRkRGF0YXBvaW50RW50cnkoKVwiXG4gICAgZGF0YS1jeT1cImM4eS1kYXRhcG9pbnQtbGlicmFyeS1saXN0LS1hZGQtZGF0YS1wb2ludFwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAge3sgJ0FkZCBkYXRhIHBvaW50JyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgW3ByaW9yaXR5XT1cIjBcIlxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIFt0aXRsZV09XCInUmVsb2FkJyB8IHRyYW5zbGF0ZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZ1wiXG4gICAgKGNsaWNrKT1cInJlbG9hZCgpXCJcbiAgPlxuICAgIDxpXG4gICAgICBjOHlJY29uPVwicmVmcmVzaFwiXG4gICAgICBbbmdDbGFzc109XCJ7ICdpY29uLXNwaW4nOiBpc0xvYWRpbmcgfVwiXG4gICAgPjwvaT5cbiAgICB7eyAnUmVsb2FkJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCInbGVmdCdcIlxuICBpdGVtQ2xhc3M9XCJuYXZiYXItZm9ybSBoaWRkZW4teHNcIlxuPlxuICA8Yzh5LWxpc3QtZGlzcGxheS1zd2l0Y2hcbiAgICAob25MaXN0Q2xhc3NDaGFuZ2UpPVwibGlzdENsYXNzID0gJGV2ZW50XCJcbiAgICBbbGlzdExlbmd0aF09XCIoZGF0YXBvaW50cyQgfCBhc3luYyk/LmRhdGE/Lmxlbmd0aFwiXG4gID48L2M4eS1saXN0LWRpc3BsYXktc3dpdGNoPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWhlbHAgc3JjPVwiL2RvY3MvY29ja3BpdC9kYXRhLXBvaW50LWxpYnJhcnkvI2RhdGEtcG9pbnQtbGlicmFyeVwiPjwvYzh5LWhlbHA+XG5cbjwhLS0gZW1wdHkgc3RhdGVcbi0tPlxuPGM4eS11aS1lbXB0eS1zdGF0ZVxuICBbaWNvbl09XCInYzh5LWRhdGEtcG9pbnRzJ1wiXG4gIFt0aXRsZV09XCInTm8gZGF0YSBwb2ludHMgdG8gZGlzcGxheS4nIHwgdHJhbnNsYXRlXCJcbiAgW3N1YnRpdGxlXT1cIidBZGQgYSBkYXRhIHBvaW50IHVzaW5nIHRoZSBidXR0b24gYmVsb3cuJyB8IHRyYW5zbGF0ZVwiXG4gICpuZ0lmPVwiKGRhdGFwb2ludHMkIHwgYXN5bmMpPy5kYXRhPy5sZW5ndGggPT09IDBcIlxuPlxuICA8cD5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICBbdGl0bGVdPVwiJ0FkZCBkYXRhIHBvaW50JyB8IHRyYW5zbGF0ZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJhZGREYXRhcG9pbnRFbnRyeSgpXCJcbiAgICA+XG4gICAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAgICB7eyAnQWRkIGRhdGEgcG9pbnQnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvcD5cbjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuXG48IS0tIGxvYWRpbmcgaW5kaWNhdG9yIC0tPlxuPGRpdlxuICBjbGFzcz1cImQtZmxleCBqLWMtY2VudGVyXCJcbiAgKm5nSWY9XCJpc0xvYWRpbmdcIlxuPlxuICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbjwvZGl2PlxuXG48ZGl2XG4gIGNsYXNzPVwiY2FyZC1ncm91cFwiXG4gIFtuZ0NsYXNzXT1cImxpc3RDbGFzc1wiXG4gICpuZ0lmPVwiIWlzTG9hZGluZyAmJiAoZGF0YXBvaW50cyQgfCBhc3luYykgYXMgZGF0YXBvaW50c1wiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cInBhZ2Utc3RpY2t5LWhlYWRlciBoaWRkZW4teHNcIlxuICAgICpuZ0lmPVwiZGF0YXBvaW50cy5kYXRhLmxlbmd0aFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaWNvblwiPjwvZGl2PlxuICAgICAgICA8cCB0cmFuc2xhdGU+TGFiZWw8L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWFjdGlvbnNcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHAtbC0wXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMyBwLWwtMTZcIj5cbiAgICAgICAgICA8cCB0cmFuc2xhdGU+RnJhZ21lbnQ8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTJcIj5cbiAgICAgICAgICA8cCB0cmFuc2xhdGU+U2VyaWVzPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xXCI+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlVuaXQ8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTJcIj5cbiAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+VGFyZ2V0PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlJhbmdlPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY29sLXNtLTYgY29sLW1kLTQgY29sLWxnLTMgY29sLXhzLTEyXCJcbiAgICAqYzh5Rm9yPVwibGV0IGRhdGFwb2ludCBvZiBkYXRhcG9pbnRzOyBsb2FkTW9yZTogJ2hpZGRlbic7IHBpcGU6IHBhcnNlUGlwZVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNhcmQgcG9pbnRlclwiXG4gICAgICAoY2xpY2spPVwiZWRpdERhdGFwb2ludEVudHJ5KGRhdGFwb2ludClcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjYXJkLWFjdGlvbnNcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24gc2V0dGluZ3MgcHVsbC1yaWdodFwiXG4gICAgICAgICAgZHJvcGRvd25cbiAgICAgICAgICAjZGF0YXBvaW50T3B0aW9uc0Ryb3Bkb3duPVwiYnMtZHJvcGRvd25cIlxuICAgICAgICAgIFtjZGtUcmFwRm9jdXNdPVwiZGF0YXBvaW50T3B0aW9uc0Ryb3Bkb3duLmlzT3BlblwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLXRvZ2dsZSBjOHktZHJvcGRvd25cIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidBY3Rpb25zJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cImVsbGlwc2lzLXZcIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHVsXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIlxuICAgICAgICAgICAgKmRyb3Bkb3duTWVudVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInRWRpdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJlZGl0RGF0YXBvaW50RW50cnkoZGF0YXBvaW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwicGVuY2lsXCI+PC9pPlxuICAgICAgICAgICAgICAgIHt7ICdFZGl0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1JlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVEYXRhcG9pbnRFbnRyeShkYXRhcG9pbnQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJkZWxldGVcIj48L2k+XG4gICAgICAgICAgICAgICAge3sgJ1JlbW92ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBzZXBhcmF0b3JcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaWNvblwiPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjOHlJY29uPVwiY2lyY2xlXCJcbiAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJkYXRhcG9pbnQuYzh5X0twaT8uY29sb3JcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjYXJkLXRpdGxlIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIFt0aXRsZV09XCJkYXRhcG9pbnQuYzh5X0twaT8ubGFiZWxcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZGF0YXBvaW50LmM4eV9LcGk/LmxhYmVsIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBiZy1sZXZlbC0xIHAtYi0yNCBjYXJkLWhpZGRlbi1saXN0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMyBjb2wtbWQtMlwiPlxuICAgICAgICAgIDxjOHktcmFuZ2UtZGlzcGxheVxuICAgICAgICAgICAgW2NvbmZpZ109XCJkYXRhcG9pbnQuYzh5X0twaVwiXG4gICAgICAgICAgICBbZGlzcGxheV09XCInY29tcGFjdCdcIlxuICAgICAgICAgID48L2M4eS1yYW5nZS1kaXNwbGF5PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2tcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0zIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1yLTRcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgRnJhZ21lbnRcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiZGF0YXBvaW50LmM4eV9LcGk/LmZyYWdtZW50XCI+XG4gICAgICAgICAgICAgIHt7IGRhdGFwb2ludC5jOHlfS3BpPy5mcmFnbWVudCB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMiB0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1yLTRcIlxuICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2VyaWVzXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiZGF0YXBvaW50LmM4eV9LcGk/LnNlcmllc1wiPlxuICAgICAgICAgICAge3sgZGF0YXBvaW50LmM4eV9LcGk/LnNlcmllcyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMSB0ZXh0LXRydW5jYXRlIGNhcmQtaGlkZGVuLWdyaWRcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGFwb2ludC5jOHlfS3BpPy51bml0XCI+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tci00XCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFVuaXRcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiZGF0YXBvaW50LmM4eV9LcGk/LnVuaXRcIj5cbiAgICAgICAgICAgICAge3sgZGF0YXBvaW50LmM4eV9LcGk/LnVuaXQgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTIgdGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YXBvaW50LmM4eV9LcGk/LnRhcmdldFwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLXItNFwiXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBUYXJnZXRcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiZGF0YXBvaW50LmM4eV9LcGk/LnRhcmdldFwiPlxuICAgICAgICAgICAgICB7eyBkYXRhcG9pbnQuYzh5X0twaT8udGFyZ2V0IH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00IGNhcmQtaGlkZGVuLWdyaWRcIj5cbiAgICAgICAgICA8Yzh5LXJhbmdlLWRpc3BsYXlcbiAgICAgICAgICAgIFtjb25maWddPVwiZGF0YXBvaW50LmM4eV9LcGlcIlxuICAgICAgICAgICAgW2Rpc3BsYXldPVwiJ2lubGluZSdcIlxuICAgICAgICAgID48L2M4eS1yYW5nZS1kaXNwbGF5PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50LWxpYnJhcnktbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9kYXRhcG9pbnQtbGlicmFyeS9saXN0L2RhdGFwb2ludC1saWJyYXJ5LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vZGF0YXBvaW50LWxpYnJhcnkvbGlzdC9kYXRhcG9pbnQtbGlicmFyeS1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQWtCLGdCQUFnQixFQUFlLE1BQU0sYUFBYSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDckYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDOzs7Ozs7Ozs7O0FBUXhGLE1BQU0sT0FBTyw2QkFBNkI7SUFrQnhDLFlBQ1UsU0FBMkIsRUFDM0IsTUFBYyxFQUNkLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNsQyxZQUEwQixFQUMxQixNQUE4QjtRQUw5QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUF3QjtRQXZCL0IsVUFBSyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQy9DLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLFlBQU8sR0FBMEIsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsZ0JBQVcsR0FBNEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3RFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN4QixDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQ3JDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDLENBQUMsRUFDRixXQUFXLEVBQUUsQ0FDZCxDQUFDO1FBRUYsY0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFzQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFTbEYsQ0FBQztJQUVKLGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQXFCO1FBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxLQUFxQjtRQUM5QyxJQUFJO1lBQ0YsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDN0IsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQzNCLE9BQU8sQ0FBQyw2RUFBNkUsQ0FBQyxFQUN0RixFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUNqQyxFQUNELFFBQVEsQ0FDVCxDQUFDO1NBQ0g7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU87U0FDUjtRQUNELElBQUk7WUFDRixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3JCO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RCLENBQUM7K0dBOURVLDZCQUE2QjttR0FBN0IsNkJBQTZCLHNGQ2xCMUMsK25PQW1RQSwyQ0RuUFksVUFBVSx5TEFBRSxVQUFVLHd1RUFBRSxnQkFBZ0Isc2xCQUFFLFlBQVk7OzRGQUVyRCw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0UsNEJBQTRCLGNBRTFCLElBQUksV0FDUCxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSwgSVJlc3VsdExpc3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UsIENvcmVNb2R1bGUsIGdldHRleHQsIE1vZGFsU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBwaXBlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHBhdGhUb0RhdGFwb2ludExpYnJhcnkgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2RhdGFwb2ludC1saWJyYXJ5L21vZGVsJztcbmltcG9ydCB7IEExMXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBCc0Ryb3Bkb3duTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQgeyBEYXRhcG9pbnRQYXJzZXJTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kYXRhcG9pbnQtbGlicmFyeS9zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnQtbGlicmFyeS1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludC1saWJyYXJ5LWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQTExeU1vZHVsZSwgQ29yZU1vZHVsZSwgQnNEcm9wZG93bk1vZHVsZSwgUm91dGVyTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhcG9pbnRMaWJyYXJ5TGlzdENvbXBvbmVudCB7XG4gIHJlYWRvbmx5IHRpdGxlID0gZ2V0dGV4dCgnRGF0YSBwb2ludCBsaWJyYXJ5Jyk7XG4gIGxpc3RDbGFzcyA9ICcnO1xuICBpc0xvYWRpbmcgPSB0cnVlO1xuICByZWxvYWQkOiBCZWhhdmlvclN1YmplY3Q8dm9pZD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICBkYXRhcG9pbnRzJDogT2JzZXJ2YWJsZTxJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4+ID0gdGhpcy5yZWxvYWQkLnBpcGUoXG4gICAgdGFwKCgpID0+IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB9KSxcbiAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5nZXREYXRhcG9pbnRzKCkpLFxuICAgIHRhcCgoKSA9PiB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KClcbiAgKTtcblxuICBwYXJzZVBpcGUgPSBwaXBlKG1hcCgoZGF0YTogSU1hbmFnZWRPYmplY3RbXSkgPT4gdGhpcy5wYXJzZXIucGFyc2VEYXRhcG9pbnRzKGRhdGEpKSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGFyc2VyOiBEYXRhcG9pbnRQYXJzZXJTZXJ2aWNlXG4gICkge31cblxuICBnZXREYXRhcG9pbnRzKCk6IFByb21pc2U8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+PiB7XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5Lmxpc3QoeyBwYWdlU2l6ZTogMjAsIGZyYWdtZW50VHlwZTogJ2M4eV9LcGknLCB3aXRoVG90YWxQYWdlczogdHJ1ZSB9KTtcbiAgfVxuXG4gIGFkZERhdGFwb2ludEVudHJ5KCkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwYXRoVG9EYXRhcG9pbnRMaWJyYXJ5LCAnbmV3J10pO1xuICB9XG5cbiAgZWRpdERhdGFwb2ludEVudHJ5KGVudHJ5OiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwYXRoVG9EYXRhcG9pbnRMaWJyYXJ5LCBlbnRyeS5pZF0pO1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlRGF0YXBvaW50RW50cnkoZW50cnk6IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICAgIGdldHRleHQoJ0RlbGV0ZSBkYXRhIHBvaW50JyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoJ1lvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIGRhdGEgcG9pbnQgXCJ7eyBkcExhYmVsIH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/JyksXG4gICAgICAgICAgeyBkcExhYmVsOiBlbnRyeS5jOHlfS3BpLmxhYmVsIH1cbiAgICAgICAgKSxcbiAgICAgICAgJ2RhbmdlcidcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGVsZXRlKGVudHJ5LmlkKTtcbiAgICAgIHRoaXMucmVsb2FkJC5uZXh0KCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICB9XG4gIH1cblxuICByZWxvYWQoKSB7XG4gICAgdGhpcy5yZWxvYWQkLm5leHQoKTtcbiAgfVxufVxuIiwiPGM4eS10aXRsZT57eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fTwvYzh5LXRpdGxlPlxuPGM4eS1icmVhZGNydW1iPlxuICA8Yzh5LWJyZWFkY3J1bWItaXRlbVxuICAgIFtpY29uXT1cIidjOHktdG9vbHMnXCJcbiAgICBbbGFiZWxdPVwiJ0NvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBbaWNvbl09XCInYzh5LXRvb2xzJ1wiXG4gICAgW2xhYmVsXT1cInRpdGxlIHwgdHJhbnNsYXRlXCJcbiAgPjwvYzh5LWJyZWFkY3J1bWItaXRlbT5cbjwvYzh5LWJyZWFkY3J1bWI+XG48Yzh5LWFjdGlvbi1iYXItaXRlbVxuICBbcGxhY2VtZW50XT1cIidyaWdodCdcIlxuICAqYzh5SWZBbGxvd2VkPVwiWydST0xFX0lOVkVOVE9SWV9BRE1JTiddXCJcbiAgW3ByaW9yaXR5XT1cIjFcIlxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIFt0aXRsZV09XCInQWRkIGRhdGEgcG9pbnQnIHwgdHJhbnNsYXRlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAoY2xpY2spPVwiYWRkRGF0YXBvaW50RW50cnkoKVwiXG4gICAgZGF0YS1jeT1cImM4eS1kYXRhcG9pbnQtbGlicmFyeS1saXN0LS1hZGQtZGF0YS1wb2ludFwiXG4gID5cbiAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAge3sgJ0FkZCBkYXRhIHBvaW50JyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgW3ByaW9yaXR5XT1cIjBcIlxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJidG4gYnRuLWxpbmtcIlxuICAgIFt0aXRsZV09XCInUmVsb2FkJyB8IHRyYW5zbGF0ZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZ1wiXG4gICAgKGNsaWNrKT1cInJlbG9hZCgpXCJcbiAgPlxuICAgIDxpXG4gICAgICBjOHlJY29uPVwicmVmcmVzaFwiXG4gICAgICBbbmdDbGFzc109XCJ7ICdpY29uLXNwaW4nOiBpc0xvYWRpbmcgfVwiXG4gICAgPjwvaT5cbiAgICB7eyAnUmVsb2FkJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvYzh5LWFjdGlvbi1iYXItaXRlbT5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCInbGVmdCdcIlxuICBpdGVtQ2xhc3M9XCJuYXZiYXItZm9ybSBoaWRkZW4teHNcIlxuPlxuICA8Yzh5LWxpc3QtZGlzcGxheS1zd2l0Y2hcbiAgICAob25MaXN0Q2xhc3NDaGFuZ2UpPVwibGlzdENsYXNzID0gJGV2ZW50XCJcbiAgICBbbGlzdExlbmd0aF09XCIoZGF0YXBvaW50cyQgfCBhc3luYyk/LmRhdGE/Lmxlbmd0aFwiXG4gID48L2M4eS1saXN0LWRpc3BsYXktc3dpdGNoPlxuPC9jOHktYWN0aW9uLWJhci1pdGVtPlxuXG48Yzh5LWhlbHAgc3JjPVwiL2RvY3MvY29ja3BpdC9kYXRhLXBvaW50LWxpYnJhcnkvI2RhdGEtcG9pbnQtbGlicmFyeVwiPjwvYzh5LWhlbHA+XG5cbjwhLS0gZW1wdHkgc3RhdGVcbi0tPlxuPGM4eS11aS1lbXB0eS1zdGF0ZVxuICBbaWNvbl09XCInYzh5LWRhdGEtcG9pbnRzJ1wiXG4gIFt0aXRsZV09XCInTm8gZGF0YSBwb2ludHMgdG8gZGlzcGxheS4nIHwgdHJhbnNsYXRlXCJcbiAgW3N1YnRpdGxlXT1cIidBZGQgYSBkYXRhIHBvaW50IHVzaW5nIHRoZSBidXR0b24gYmVsb3cuJyB8IHRyYW5zbGF0ZVwiXG4gICpuZ0lmPVwiKGRhdGFwb2ludHMkIHwgYXN5bmMpPy5kYXRhPy5sZW5ndGggPT09IDBcIlxuPlxuICA8cD5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICBbdGl0bGVdPVwiJ0FkZCBkYXRhIHBvaW50JyB8IHRyYW5zbGF0ZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJhZGREYXRhcG9pbnRFbnRyeSgpXCJcbiAgICA+XG4gICAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAgICB7eyAnQWRkIGRhdGEgcG9pbnQnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvcD5cbjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuXG48IS0tIGxvYWRpbmcgaW5kaWNhdG9yIC0tPlxuPGRpdlxuICBjbGFzcz1cImQtZmxleCBqLWMtY2VudGVyXCJcbiAgKm5nSWY9XCJpc0xvYWRpbmdcIlxuPlxuICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbjwvZGl2PlxuXG48ZGl2XG4gIGNsYXNzPVwiY2FyZC1ncm91cFwiXG4gIFtuZ0NsYXNzXT1cImxpc3RDbGFzc1wiXG4gICpuZ0lmPVwiIWlzTG9hZGluZyAmJiAoZGF0YXBvaW50cyQgfCBhc3luYykgYXMgZGF0YXBvaW50c1wiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cInBhZ2Utc3RpY2t5LWhlYWRlciBoaWRkZW4teHNcIlxuICAgICpuZ0lmPVwiZGF0YXBvaW50cy5kYXRhLmxlbmd0aFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaWNvblwiPjwvZGl2PlxuICAgICAgICA8cCB0cmFuc2xhdGU+TGFiZWw8L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWFjdGlvbnNcIj48L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHAtbC0wXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMyBwLWwtMTZcIj5cbiAgICAgICAgICA8cCB0cmFuc2xhdGU+RnJhZ21lbnQ8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTJcIj5cbiAgICAgICAgICA8cCB0cmFuc2xhdGU+U2VyaWVzPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xXCI+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlVuaXQ8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTJcIj5cbiAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+VGFyZ2V0PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPlJhbmdlPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY29sLXNtLTYgY29sLW1kLTQgY29sLWxnLTMgY29sLXhzLTEyXCJcbiAgICAqYzh5Rm9yPVwibGV0IGRhdGFwb2ludCBvZiBkYXRhcG9pbnRzOyBsb2FkTW9yZTogJ2hpZGRlbic7IHBpcGU6IHBhcnNlUGlwZVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNhcmQgcG9pbnRlclwiXG4gICAgICAoY2xpY2spPVwiZWRpdERhdGFwb2ludEVudHJ5KGRhdGFwb2ludClcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjYXJkLWFjdGlvbnNcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24gc2V0dGluZ3MgcHVsbC1yaWdodFwiXG4gICAgICAgICAgZHJvcGRvd25cbiAgICAgICAgICAjZGF0YXBvaW50T3B0aW9uc0Ryb3Bkb3duPVwiYnMtZHJvcGRvd25cIlxuICAgICAgICAgIFtjZGtUcmFwRm9jdXNdPVwiZGF0YXBvaW50T3B0aW9uc0Ryb3Bkb3duLmlzT3BlblwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLXRvZ2dsZSBjOHktZHJvcGRvd25cIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidBY3Rpb25zJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cImVsbGlwc2lzLXZcIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHVsXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIlxuICAgICAgICAgICAgKmRyb3Bkb3duTWVudVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInRWRpdCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJlZGl0RGF0YXBvaW50RW50cnkoZGF0YXBvaW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwicGVuY2lsXCI+PC9pPlxuICAgICAgICAgICAgICAgIHt7ICdFZGl0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1JlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVEYXRhcG9pbnRFbnRyeShkYXRhcG9pbnQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJkZWxldGVcIj48L2k+XG4gICAgICAgICAgICAgICAge3sgJ1JlbW92ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBzZXBhcmF0b3JcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaWNvblwiPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjOHlJY29uPVwiY2lyY2xlXCJcbiAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJkYXRhcG9pbnQuYzh5X0twaT8uY29sb3JcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJjYXJkLXRpdGxlIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIFt0aXRsZV09XCJkYXRhcG9pbnQuYzh5X0twaT8ubGFiZWxcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZGF0YXBvaW50LmM4eV9LcGk/LmxhYmVsIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBiZy1sZXZlbC0xIHAtYi0yNCBjYXJkLWhpZGRlbi1saXN0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMyBjb2wtbWQtMlwiPlxuICAgICAgICAgIDxjOHktcmFuZ2UtZGlzcGxheVxuICAgICAgICAgICAgW2NvbmZpZ109XCJkYXRhcG9pbnQuYzh5X0twaVwiXG4gICAgICAgICAgICBbZGlzcGxheV09XCInY29tcGFjdCdcIlxuICAgICAgICAgID48L2M4eS1yYW5nZS1kaXNwbGF5PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYmxvY2tcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0zIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1yLTRcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgRnJhZ21lbnRcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiZGF0YXBvaW50LmM4eV9LcGk/LmZyYWdtZW50XCI+XG4gICAgICAgICAgICAgIHt7IGRhdGFwb2ludC5jOHlfS3BpPy5mcmFnbWVudCB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMiB0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtbGFiZWwtc21hbGwgbS1yLTRcIlxuICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2VyaWVzXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiZGF0YXBvaW50LmM4eV9LcGk/LnNlcmllc1wiPlxuICAgICAgICAgICAge3sgZGF0YXBvaW50LmM4eV9LcGk/LnNlcmllcyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMSB0ZXh0LXRydW5jYXRlIGNhcmQtaGlkZGVuLWdyaWRcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGFwb2ludC5jOHlfS3BpPy51bml0XCI+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWxhYmVsLXNtYWxsIG0tci00XCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFVuaXRcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiZGF0YXBvaW50LmM4eV9LcGk/LnVuaXRcIj5cbiAgICAgICAgICAgICAge3sgZGF0YXBvaW50LmM4eV9LcGk/LnVuaXQgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTIgdGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YXBvaW50LmM4eV9LcGk/LnRhcmdldFwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbCBtLXItNFwiXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBUYXJnZXRcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiZGF0YXBvaW50LmM4eV9LcGk/LnRhcmdldFwiPlxuICAgICAgICAgICAgICB7eyBkYXRhcG9pbnQuYzh5X0twaT8udGFyZ2V0IH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00IGNhcmQtaGlkZGVuLWdyaWRcIj5cbiAgICAgICAgICA8Yzh5LXJhbmdlLWRpc3BsYXlcbiAgICAgICAgICAgIFtjb25maWddPVwiZGF0YXBvaW50LmM4eV9LcGlcIlxuICAgICAgICAgICAgW2Rpc3BsYXldPVwiJ2lubGluZSdcIlxuICAgICAgICAgID48L2M4eS1yYW5nZS1kaXNwbGF5PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -153,7 +153,7 @@ export class DatapointSelectorListItemComponent {
|
|
|
153
153
|
useExisting: forwardRef(() => DatapointSelectorListItemComponent),
|
|
154
154
|
multi: true
|
|
155
155
|
}
|
|
156
|
-
], queries: [{ propertyName: "dragHandle", first: true, predicate: ListItemDragHandleComponent, descendants: true }], ngImport: i0, template: "<c8y-li class=\"c8y-list__item__collapse--container-small\" [formGroup]=\"formGroup\" #li>\n <c8y-li-drag-handle><ng-content select=\"c8y-li-drag-handle\"></ng-content></c8y-li-drag-handle>\n <c8y-li-checkbox\n class=\"a-s-center p-r-0\"\n *ngIf=\"showActiveToggle\"\n [displayAsSwitch]=\"true\"\n formControlName=\"__active\"\n (click)=\"$event.stopPropagation()\"\n ></c8y-li-checkbox>\n\n <div class=\"d-flex a-i-center p-l-16\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\" [title]=\"'Change color' | translate\">\n <div class=\"c8y-colorpicker\">\n <input\n type=\"color\"\n [attr.aria-label]=\"'Color' | translate\"\n formControlName=\"color\"\n (click)=\"$event.stopPropagation()\"\n />\n <span [style.background-color]=\"formGroup.value.color\"></span>\n </div>\n </div>\n <button\n class=\"btn-clean data-point-label text-truncate\"\n type=\"button\"\n [attr.aria-expanded]=\"!li.collapsed\"\n (click)=\"li.collapsed = !li.collapsed\"\n >\n <span class=\"text-truncate\" [title]=\"formGroup.value.details?.label\">\n <c8y-highlight\n [text]=\"formGroup.value.details?.label\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n <small class=\"text-truncate text-muted icon-flex\" *ngIf=\"formGroup.value.__target\">\n <i c8yIcon=\"exchange\"></i>\n <span class=\"text-truncate\">{{ formGroup.value.__target.name }}</span>\n </small>\n </button>\n\n <button\n class=\"btn btn-dot btn-dot--danger m-l-auto\"\n type=\"button\"\n [attr.aria-label]=\"'Invalid' | translate\"\n [popover]=\"'Some entries are invalid. Check the input fields with red borders.' | translate\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n *ngIf=\"!(isValid$ | async)\"\n >\n <i c8yIcon=\"warning\"></i>\n </button>\n <div class=\"m-l-auto a-s-center p-r-4\" *ngIf=\"showAddRemoveButton\">\n <button\n class=\"btn btn-dot btn-dot--danger\"\n type=\"button\"\n [attr.aria-label]=\"'Remove' | translate\"\n [tooltip]=\"'Remove from selected data points' | translate\"\n [delay]=\"500\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--remove-datapoint-button'\"\n >\n <i class=\"icon-20\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n class=\"btn btn-dot text-primary\"\n type=\"button\"\n [attr.aria-label]=\"'Add to selected data points' | translate\"\n [tooltip]=\"'Add to selected data points' | translate\"\n [delay]=\"500\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"!isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--add-datapoint-button'\"\n >\n <i class=\"text-primary icon-20\" c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li-action\n *ngIf=\"optionToRemove\"\n [icon]=\"'minus-circle'\"\n [label]=\"'Remove from list' | translate\"\n (click)=\"remove()\"\n ></c8y-li-action>\n <c8y-li-action\n *ngFor=\"let action of actions\"\n [icon]=\"action.icon\"\n [label]=\"action.label\"\n (click)=\"action.callback(formGroup.value)\"\n ></c8y-li-action>\n <c8y-li-collapse>\n <div class=\"data-point-details\">\n <ul class=\"list-unstyled small m-b-16\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Fragment</label>\n <span class=\"m-l-auto\">\n <c8y-highlight\n [text]=\"formGroup.value.fragment\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Series</label>\n <span class=\"m-l-auto\">\n <c8y-highlight\n [text]=\"formGroup.value.series\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n </ul>\n <div\n class=\"form-group\"\n *ngIf=\"datapointLibraryEntries && datapointLibraryEntries | async as libraryEntries\"\n >\n <label class=\"d-inline-block\" translate>Data point template</label>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"datapointHintPopoverTemplate\"\n (click)=\"$event.stopPropagation()\"\n triggers=\"focus\"\n placement=\"top\"\n container=\"body\"\n ></button>\n\n <ng-template #datapointHintPopoverTemplate>\n {{\n 'Using a data point template sets color, label, unit and ranges. Removing the template allows you to set the values manually.'\n | translate\n }}\n </ng-template>\n <div class=\"d-flex\">\n <c8y-typeahead\n class=\"flex-grow\"\n [placeholder]=\"'No template' | translate\"\n [ngModel]=\"formGroup.value.__template ? formGroup.value.details : undefined\"\n [ngModelOptions]=\"{ standalone: true }\"\n (onSearch)=\"setPipe($event)\"\n [displayProperty]=\"'label'\"\n [hideNew]=\"true\"\n *ngIf=\"datapointLibraryEntries\"\n [disabled]=\"isSelected && disableTypeaheadIfSelected\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link interact\"\n *c8yFor=\"\n let item of datapointLibraryEntries;\n loadMore: 'auto';\n pipe: filterPipe;\n notFound: notFoundTemplate\n \"\n (click)=\"dataPointTemplateSelected(item)\"\n [active]=\"formGroup.value.__template === item.id\"\n [attr.role]=\"'menuitem'\"\n >\n <c8y-highlight [text]=\"item.c8y_Kpi?.label\" [pattern]=\"pattern\"></c8y-highlight>\n <c8y-li-icon icon=\"circle\" [style.color]=\"item.c8y_Kpi?.color\"></c8y-li-icon>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-level-2 p-8\" *ngIf=\"pattern.length > 0\">\n <span>No match found.</span>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n <button\n class=\"btn btn-info btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n [attr.aria-label]=\"'Info' | translate\"\n [popover]=\"datapointOverviewPopoverTemplate\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n *ngIf=\"formGroup.value.__template\"\n >\n <i class=\"text-info\" c8yIcon=\"info\"></i>\n </button>\n <button\n class=\"btn btn-danger btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n tooltip=\"{{ 'Unlink data point template' | translate }}\"\n [attr.aria-label]=\"'Unlink data point template' | translate\"\n triggers=\"mouseenter\"\n [delay]=\"500\"\n *ngIf=\"formGroup.value.__template && hasUnlinkTemplateOption\"\n (click)=\"unlinkDatapointTemplate()\"\n >\n <i c8yIcon=\"unlink\"></i>\n </button>\n </div>\n </div>\n <ng-template #datapointOverviewPopoverTemplate>\n <c8y-datapoint-template-popover\n [datapoint]=\"formGroup.value.details\"\n ></c8y-datapoint-template-popover>\n </ng-template>\n <c8y-datapoint-attributes-form\n *ngIf=\"defaultFormOptions\"\n [showTarget]=\"defaultFormOptions.showTarget\"\n [showRange]=\"defaultFormOptions.showRange\"\n [showYellowRange]=\"defaultFormOptions.showYellowRange\"\n [showRedRange]=\"defaultFormOptions.showRedRange\"\n [showChart]=\"defaultFormOptions.showChart\"\n [showFormIfTemplateWasSelected]=\"defaultFormOptions.showFormIfTemplateWasSelected\"\n formControlName=\"details\"\n ></c8y-datapoint-attributes-form>\n </div>\n </c8y-li-collapse>\n</c8y-li>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount"] }, { kind: "component", type: i2.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i2.TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected"], outputs: ["onSearch", "onIconClick"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "component", type: i2.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: i2.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "component", type: i2.ListItemDragHandleComponent, selector: "c8y-list-item-drag-handle, c8y-li-drag-handle" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.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: "directive", type: i5.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i6.DatapointTemplatePopoverComponent, selector: "c8y-datapoint-template-popover", inputs: ["datapoint", "attributes"] }, { kind: "component", type: i7.DatapointAttributesFormComponent, selector: "c8y-datapoint-attributes-form", inputs: ["showTarget", "showRange", "showYellowRange", "showRedRange", "showChart", "showFormIfTemplateWasSelected"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
|
|
156
|
+
], queries: [{ propertyName: "dragHandle", first: true, predicate: ListItemDragHandleComponent, descendants: true }], ngImport: i0, template: "<c8y-li class=\"c8y-list__item__collapse--container-small\" [formGroup]=\"formGroup\" #li>\n <c8y-li-drag-handle><ng-content select=\"c8y-li-drag-handle\"></ng-content></c8y-li-drag-handle>\n <c8y-li-checkbox\n class=\"a-s-center p-r-0\"\n *ngIf=\"showActiveToggle\"\n [displayAsSwitch]=\"true\"\n formControlName=\"__active\"\n (click)=\"$event.stopPropagation()\"\n ></c8y-li-checkbox>\n\n <div class=\"d-flex a-i-center p-l-16\">\n <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-0\" [title]=\"'Change color' | translate\">\n <div class=\"c8y-colorpicker\">\n <input\n type=\"color\"\n [attr.aria-label]=\"'Color' | translate\"\n formControlName=\"color\"\n (click)=\"$event.stopPropagation()\"\n />\n <span [style.background-color]=\"formGroup.value.color\"></span>\n </div>\n </div>\n <button\n class=\"btn-clean data-point-label text-truncate\"\n type=\"button\"\n [attr.aria-expanded]=\"!li.collapsed\"\n (click)=\"li.collapsed = !li.collapsed\"\n >\n <span class=\"text-truncate\" [title]=\"formGroup.value.details?.label\">\n <c8y-highlight\n [text]=\"formGroup.value.details?.label\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n <small class=\"text-truncate text-muted icon-flex\" *ngIf=\"formGroup.value.__target\">\n <i c8yIcon=\"exchange\"></i>\n <span class=\"text-truncate\">{{ formGroup.value.__target.name }}</span>\n </small>\n </button>\n\n <button\n class=\"btn btn-dot btn-dot--danger m-l-auto\"\n type=\"button\"\n [attr.aria-label]=\"'Invalid' | translate\"\n [popover]=\"'Some entries are invalid. Check the input fields with red borders.' | translate\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n *ngIf=\"!(isValid$ | async)\"\n >\n <i c8yIcon=\"warning\"></i>\n </button>\n <div class=\"m-l-auto a-s-center p-r-4\" *ngIf=\"showAddRemoveButton\">\n <button\n class=\"btn btn-dot btn-dot--danger\"\n type=\"button\"\n [attr.aria-label]=\"'Remove' | translate\"\n [tooltip]=\"'Remove from selected data points' | translate\"\n [delay]=\"500\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--remove-datapoint-button'\"\n >\n <i class=\"icon-20\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n class=\"btn btn-dot text-primary\"\n type=\"button\"\n [attr.aria-label]=\"'Add to selected data points' | translate\"\n [tooltip]=\"'Add to selected data points' | translate\"\n [delay]=\"500\"\n (click)=\"addOrRemoveItem()\"\n *ngIf=\"!isSelected\"\n [attr.data-cy]=\"'datapoint-selector-list-item--add-datapoint-button'\"\n >\n <i class=\"text-primary icon-20\" c8yIcon=\"plus-circle\"></i>\n </button>\n </div>\n </div>\n\n <c8y-li-action\n *ngIf=\"optionToRemove\"\n [icon]=\"'minus-circle'\"\n [label]=\"'Remove from list' | translate\"\n (click)=\"remove()\"\n ></c8y-li-action>\n <c8y-li-action\n *ngFor=\"let action of actions\"\n [icon]=\"action.icon\"\n [label]=\"action.label\"\n (click)=\"action.callback(formGroup.value)\"\n ></c8y-li-action>\n <c8y-li-collapse>\n <div class=\"data-point-details\">\n <ul class=\"list-unstyled small m-b-16\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Fragment</label>\n <span class=\"m-l-auto\">\n <c8y-highlight\n [text]=\"formGroup.value.fragment\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom\">\n <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Series</label>\n <span class=\"m-l-auto\">\n <c8y-highlight\n [text]=\"formGroup.value.series\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n </ul>\n <div\n class=\"form-group\"\n *ngIf=\"datapointLibraryEntries && datapointLibraryEntries | async as libraryEntries\"\n >\n <label class=\"d-inline-block\" translate>Data point template</label>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"datapointHintPopoverTemplate\"\n (click)=\"$event.stopPropagation()\"\n triggers=\"focus\"\n placement=\"top\"\n container=\"body\"\n ></button>\n\n <ng-template #datapointHintPopoverTemplate>\n {{\n 'Using a data point template sets color, label, unit and ranges. Removing the template allows you to set the values manually.'\n | translate\n }}\n </ng-template>\n <div class=\"d-flex\">\n <c8y-typeahead\n class=\"flex-grow\"\n [placeholder]=\"'No template' | translate\"\n [ngModel]=\"formGroup.value.__template ? formGroup.value.details : undefined\"\n [ngModelOptions]=\"{ standalone: true }\"\n (onSearch)=\"setPipe($event)\"\n [displayProperty]=\"'label'\"\n [hideNew]=\"true\"\n *ngIf=\"datapointLibraryEntries\"\n [disabled]=\"isSelected && disableTypeaheadIfSelected\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link interact\"\n *c8yFor=\"\n let item of datapointLibraryEntries;\n loadMore: 'auto';\n pipe: filterPipe;\n notFound: notFoundTemplate\n \"\n (click)=\"dataPointTemplateSelected(item)\"\n [active]=\"formGroup.value.__template === item.id\"\n [attr.role]=\"'menuitem'\"\n >\n <c8y-highlight [text]=\"item.c8y_Kpi?.label\" [pattern]=\"pattern\"></c8y-highlight>\n <c8y-li-icon icon=\"circle\" [style.color]=\"item.c8y_Kpi?.color\"></c8y-li-icon>\n </c8y-li>\n <ng-template #notFoundTemplate>\n <c8y-li class=\"bg-level-2 p-8\" *ngIf=\"pattern.length > 0\">\n <span>No match found.</span>\n </c8y-li>\n </ng-template>\n </c8y-typeahead>\n <button\n class=\"btn btn-info btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n [attr.aria-label]=\"'Info' | translate\"\n [popover]=\"datapointOverviewPopoverTemplate\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n *ngIf=\"formGroup.value.__template\"\n >\n <i class=\"text-info\" c8yIcon=\"info\"></i>\n </button>\n <button\n class=\"btn btn-danger btn-xs btn-icon a-s-center m-l-8\"\n type=\"button\"\n tooltip=\"{{ 'Unlink data point template' | translate }}\"\n [attr.aria-label]=\"'Unlink data point template' | translate\"\n triggers=\"mouseenter\"\n [delay]=\"500\"\n *ngIf=\"formGroup.value.__template && hasUnlinkTemplateOption\"\n (click)=\"unlinkDatapointTemplate()\"\n >\n <i c8yIcon=\"unlink\"></i>\n </button>\n </div>\n </div>\n <ng-template #datapointOverviewPopoverTemplate>\n <c8y-datapoint-template-popover\n [datapoint]=\"formGroup.value.details\"\n ></c8y-datapoint-template-popover>\n </ng-template>\n <c8y-datapoint-attributes-form\n *ngIf=\"defaultFormOptions\"\n [showTarget]=\"defaultFormOptions.showTarget\"\n [showRange]=\"defaultFormOptions.showRange\"\n [showYellowRange]=\"defaultFormOptions.showYellowRange\"\n [showRedRange]=\"defaultFormOptions.showRedRange\"\n [showChart]=\"defaultFormOptions.showChart\"\n [showFormIfTemplateWasSelected]=\"defaultFormOptions.showFormIfTemplateWasSelected\"\n formControlName=\"details\"\n ></c8y-datapoint-attributes-form>\n </div>\n </c8y-li-collapse>\n</c8y-li>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForLoadMoreComponent"] }, { kind: "component", type: i2.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i2.TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected"], outputs: ["onSearch", "onIconClick"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i2.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i2.ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "component", type: i2.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: i2.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "component", type: i2.ListItemDragHandleComponent, selector: "c8y-list-item-drag-handle, c8y-li-drag-handle" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.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: "directive", type: i5.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i6.DatapointTemplatePopoverComponent, selector: "c8y-datapoint-template-popover", inputs: ["datapoint", "attributes"] }, { kind: "component", type: i7.DatapointAttributesFormComponent, selector: "c8y-datapoint-attributes-form", inputs: ["showTarget", "showRange", "showYellowRange", "showRedRange", "showChart", "showFormIfTemplateWasSelected"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
|
|
157
157
|
}
|
|
158
158
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DatapointSelectorListItemComponent, decorators: [{
|
|
159
159
|
type: Component,
|
|
@@ -107,7 +107,7 @@ export class DeviceProfileListComponent {
|
|
|
107
107
|
provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,
|
|
108
108
|
useExisting: forwardRef(() => DeviceProfileListComponent)
|
|
109
109
|
}
|
|
110
|
-
], ngImport: i0, template: "<c8y-title>{{ 'Device profiles' | translate }}</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=\"c8y-device-profile\"\n label=\"{{ 'Device profiles' | 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 device profile' | translate }}\"\n (click)=\"createDeviceProfile()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add device profile' | translate }}\n </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"loadDeviceProfiles()\"\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-device-profiles\"\n></c8y-help>\n\n<c8y-ui-empty-state\n [icon]=\"'c8y-device-profile'\"\n [title]=\"'No device profiles available.' | translate\"\n [subtitle]=\"'Add a new device profile by clicking below.' | translate\"\n *ngIf=\"(deviceProfiles$ | async)?.data.length === 0\"\n>\n <p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add device profile' | translate }}\"\n (click)=\"createDeviceProfile()\"\n >\n {{ 'Add device profile' | translate }}\n </button>\n </p>\n</c8y-ui-empty-state>\n\n<!-- DEVICE PROFILES LIST -->\n<c8y-list-group class=\"m-b-24\">\n <c8y-li\n class=\"page-sticky-header hidden-xs\"\n [emptyActions]=\"true\"\n *ngIf=\"(deviceProfiles$ | async)?.data.length > 0\"\n >\n <c8y-li-icon>\n <i class=\"p-l-24\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-50\">\n <div class=\"col-6\">\n {{ 'Device profile' | translate }}\n </div>\n <div class=\"col-6\">\n {{ 'Device type' | translate }}\n </div>\n </c8y-li-body>\n </c8y-li>\n <c8y-li *c8yFor=\"let deviceProfile of deviceProfiles$\">\n <c8y-li-icon>\n <i c8yIcon=\"c8y-device-profile\"></i>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-50\">\n <div\n class=\"col-6\"\n title=\"{{ deviceProfile.name }}\"\n >\n <button\n class=\"btn-clean max-width-inherit\"\n routerLink=\"/device-profiles/{{ deviceProfile.id }}\"\n >\n <span class=\"text-truncate\">\n {{ deviceProfile.name }}\n </span>\n </button>\n </div>\n <div\n class=\"col-6\"\n title=\"{{ deviceProfile.c8y_Filter?.type || '-' }}\"\n >\n <span\n class=\"text-label-small m-r-4 visible-xs\"\n translate\n >\n Device type\n </span>\n <span\n class=\"text-truncate\"\n *ngIf=\"deviceProfile.c8y_Filter?.type; else emptyText\"\n >\n {{ deviceProfile.c8y_Filter?.type }}\n </span>\n </div>\n <ng-template #emptyText>\n <small class=\"text-muted\">\n <em>\n {{ 'Undefined' | translate }}\n </em>\n </small>\n </ng-template>\n </c8y-li-body>\n\n <c8y-li-action\n icon=\"pencil\"\n routerLink=\"/device-profiles/{{ deviceProfile.id }}\"\n label=\"{{ 'Edit' | translate }}\"\n data-cy=\"device-profile-list--edit\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n <c8y-li-action\n icon=\"copy\"\n (click)=\"duplicateDeviceProfile(deviceProfile)\"\n data-cy=\"device-profile-list--duplicate\"\n label=\"{{ 'Duplicate' | translate }}\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n <c8y-li-action\n icon=\"delete\"\n (click)=\"deleteDeviceProfile(deviceProfile)\"\n data-cy=\"device-profile-list--delete\"\n label=\"{{ 'Delete' | translate }}\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n </c8y-li>\n</c8y-list-group>\n", dependencies: [{ kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i3.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i3.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i3.ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "directive", type: i3.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: i3.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }] }); }
|
|
110
|
+
], ngImport: i0, template: "<c8y-title>{{ 'Device profiles' | translate }}</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=\"c8y-device-profile\"\n label=\"{{ 'Device profiles' | 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 device profile' | translate }}\"\n (click)=\"createDeviceProfile()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add device profile' | translate }}\n </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n (click)=\"loadDeviceProfiles()\"\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-device-profiles\"\n></c8y-help>\n\n<c8y-ui-empty-state\n [icon]=\"'c8y-device-profile'\"\n [title]=\"'No device profiles available.' | translate\"\n [subtitle]=\"'Add a new device profile by clicking below.' | translate\"\n *ngIf=\"(deviceProfiles$ | async)?.data.length === 0\"\n>\n <p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add device profile' | translate }}\"\n (click)=\"createDeviceProfile()\"\n >\n {{ 'Add device profile' | translate }}\n </button>\n </p>\n</c8y-ui-empty-state>\n\n<!-- DEVICE PROFILES LIST -->\n<c8y-list-group class=\"m-b-24\">\n <c8y-li\n class=\"page-sticky-header hidden-xs\"\n [emptyActions]=\"true\"\n *ngIf=\"(deviceProfiles$ | async)?.data.length > 0\"\n >\n <c8y-li-icon>\n <i class=\"p-l-24\"></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-50\">\n <div class=\"col-6\">\n {{ 'Device profile' | translate }}\n </div>\n <div class=\"col-6\">\n {{ 'Device type' | translate }}\n </div>\n </c8y-li-body>\n </c8y-li>\n <c8y-li *c8yFor=\"let deviceProfile of deviceProfiles$\">\n <c8y-li-icon>\n <i c8yIcon=\"c8y-device-profile\"></i>\n </c8y-li-icon>\n\n <c8y-li-body class=\"content-flex-50\">\n <div\n class=\"col-6\"\n title=\"{{ deviceProfile.name }}\"\n >\n <button\n class=\"btn-clean max-width-inherit\"\n routerLink=\"/device-profiles/{{ deviceProfile.id }}\"\n >\n <span class=\"text-truncate\">\n {{ deviceProfile.name }}\n </span>\n </button>\n </div>\n <div\n class=\"col-6\"\n title=\"{{ deviceProfile.c8y_Filter?.type || '-' }}\"\n >\n <span\n class=\"text-label-small m-r-4 visible-xs\"\n translate\n >\n Device type\n </span>\n <span\n class=\"text-truncate\"\n *ngIf=\"deviceProfile.c8y_Filter?.type; else emptyText\"\n >\n {{ deviceProfile.c8y_Filter?.type }}\n </span>\n </div>\n <ng-template #emptyText>\n <small class=\"text-muted\">\n <em>\n {{ 'Undefined' | translate }}\n </em>\n </small>\n </ng-template>\n </c8y-li-body>\n\n <c8y-li-action\n icon=\"pencil\"\n routerLink=\"/device-profiles/{{ deviceProfile.id }}\"\n label=\"{{ 'Edit' | translate }}\"\n data-cy=\"device-profile-list--edit\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n <c8y-li-action\n icon=\"copy\"\n (click)=\"duplicateDeviceProfile(deviceProfile)\"\n data-cy=\"device-profile-list--duplicate\"\n label=\"{{ 'Duplicate' | translate }}\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n <c8y-li-action\n icon=\"delete\"\n (click)=\"deleteDeviceProfile(deviceProfile)\"\n data-cy=\"device-profile-list--delete\"\n label=\"{{ 'Delete' | translate }}\"\n c8yProductExperience\n inherit\n ></c8y-li-action>\n </c8y-li>\n</c8y-list-group>\n", dependencies: [{ kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i3.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForLoadMoreComponent"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i3.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i3.ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "directive", type: i3.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: i3.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }] }); }
|
|
111
111
|
}
|
|
112
112
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DeviceProfileListComponent, decorators: [{
|
|
113
113
|
type: Component,
|
|
@@ -99,7 +99,7 @@ export class DeviceTabProfileComponent {
|
|
|
99
99
|
provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,
|
|
100
100
|
useExisting: forwardRef(() => DeviceTabProfileComponent)
|
|
101
101
|
}
|
|
102
|
-
], ngImport: i0, template: "<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"getDeviceProfilesAndUpdateProfileItems()\"\n >\n <i c8yIcon=\"refresh\" [ngClass]=\"{ 'icon-spin': reloading }\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item [placement]=\"'right'\">\n <c8y-realtime-btn [service]=\"deviceRealtime\"></c8y-realtime-btn>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid--fullpage card--grid--fullpage card--grid grid__row--2-10--md\">\n <div class=\"card--grid grid__col--6-6--md\">\n <!-- AVAILABLE PROFILES -->\n <div class=\"bg-level-0\">\n <div class=\"card-header separator\">\n <div class=\"card-title\" translate>Device profile</div>\n </div>\n <div class=\"p-16\">\n <form #deviceProfileForm=\"ngForm\">\n <div class=\"input-group\">\n <c8y-typeahead\n class=\"flex-grow\"\n name=\"selectProfile\"\n data-cy=\"device-tab-profile--select-device-profile\"\n [(ngModel)]=\"selectedProfile\"\n placeholder=\"{{ 'Select device profile' | translate }}\"\n (onSearch)=\"setPipe($event)\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n *c8yFor=\"let profile of deviceProfiles; pipe: filterPipe\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"selectProfile(profile); setPipe('')\"\n >\n <c8y-highlight\n [text]=\"profile.name || '--'\"\n [pattern]=\"pattern\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n (click)=\"createOperation()\"\n title=\"{{ 'Assign device profile' | translate }}\"\n type=\"button\"\n [disabled]=\"!selectedProfile?.id\"\n c8yProductExperience\n inherit\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.ASSIGN_DEVICE_PROFILE }\"\n >\n <span>{{ 'Assign device profile' | translate }}</span>\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- INSTALL PROFILE OPERATION -->\n <div class=\"bg-level-1\">\n <div class=\"card-header separator\">\n <div class=\"card-title\" translate>Currently installed</div>\n </div>\n <div class=\"card-block\">\n <c8y-operation-details\n [operation]=\"operation\"\n c8yProductExperience\n inherit\n suppressDataOverriding\n ></c8y-operation-details>\n </div>\n </div>\n </div>\n <div class=\"card--grid__inner-scroll d-col no-align-items\">\n <div class=\"d-contents\">\n <!-- FIRMWARE -->\n <c8y-device-tab-profile-detail\n [sectionTitle]=\"'Firmware' | translate\"\n [sectionIcon]=\"'c8y-firmware'\"\n [emptyStateText]=\"'No firmware to display.' | translate\"\n [emptyStateDetails]=\"'No firmware assigned.' | translate\"\n [isProfileSelected]=\"!!selectedProfile\"\n [items]=\"firmwareItems\"\n [isEmpty]=\"!selectedProfile?.c8y_DeviceProfile?.firmware?.name\"\n class=\"d-contents\"\n ></c8y-device-tab-profile-detail>\n </div>\n <div class=\"d-contents\">\n <!-- SOFTWARE -->\n <c8y-device-tab-profile-detail\n [sectionTitle]=\"'Software' | translate\"\n [sectionIcon]=\"'c8y-tools'\"\n [emptyStateText]=\"'No software to display.' | translate\"\n [emptyStateDetails]=\"'No software assigned.' | translate\"\n [isProfileSelected]=\"!!selectedProfile\"\n [items]=\"softwareItems\"\n [isEmpty]=\"\n !selectedProfile?.c8y_DeviceProfile?.software ||\n selectedProfile?.c8y_DeviceProfile?.software?.length === 0\n \"\n class=\"d-contents\"\n ></c8y-device-tab-profile-detail>\n </div>\n <div class=\"d-contents\">\n <!-- CONFIGURATION -->\n <c8y-device-tab-profile-detail\n [sectionTitle]=\"'Configuration' | translate\"\n [sectionIcon]=\"'gears'\"\n [emptyStateText]=\"'No configuration to display' | translate\"\n [emptyStateDetails]=\"'No configuration assigned' | translate\"\n [isProfileSelected]=\"!!selectedProfile\"\n [items]=\"configurationItems\"\n [isEmpty]=\"\n !selectedProfile?.c8y_DeviceProfile?.configuration ||\n selectedProfile?.c8y_DeviceProfile?.configuration?.length === 0\n \"\n [showTextLabel]=\"false\"\n class=\"d-contents\"\n ></c8y-device-tab-profile-detail>\n </div>\n <!-- fill in the remanining vertical space when empty -->\n <div class=\"card--grid grid__col--6-6--md flex-grow\">\n <div class=\"bg-level-0\"></div>\n <div class=\"bg-level-1\"></div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i1.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount"] }, { kind: "component", type: i1.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i1.TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected"], outputs: ["onSearch", "onIconClick"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i1.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "directive", type: i1.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: i1.RealtimeButtonComponent, selector: "c8y-realtime-btn", inputs: ["service", "label", "title"] }, { kind: "component", type: i6.OperationDetailsComponent, selector: "c8y-operation-details", inputs: ["operation"] }, { kind: "component", type: i7.DeviceTabProfileDetailComponent, selector: "c8y-device-tab-profile-detail", inputs: ["sectionTitle", "sectionIcon", "emptyStateText", "emptyStateDetails", "isProfileSelected", "isEmpty", "items", "showTextLabel"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] }); }
|
|
102
|
+
], ngImport: i0, template: "<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reload' | translate }}\"\n type=\"button\"\n (click)=\"getDeviceProfilesAndUpdateProfileItems()\"\n >\n <i c8yIcon=\"refresh\" [ngClass]=\"{ 'icon-spin': reloading }\"></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n<c8y-action-bar-item [placement]=\"'right'\">\n <c8y-realtime-btn [service]=\"deviceRealtime\"></c8y-realtime-btn>\n</c8y-action-bar-item>\n\n<div class=\"card card--grid--fullpage card--grid--fullpage card--grid grid__row--2-10--md\">\n <div class=\"card--grid grid__col--6-6--md\">\n <!-- AVAILABLE PROFILES -->\n <div class=\"bg-level-0\">\n <div class=\"card-header separator\">\n <div class=\"card-title\" translate>Device profile</div>\n </div>\n <div class=\"p-16\">\n <form #deviceProfileForm=\"ngForm\">\n <div class=\"input-group\">\n <c8y-typeahead\n class=\"flex-grow\"\n name=\"selectProfile\"\n data-cy=\"device-tab-profile--select-device-profile\"\n [(ngModel)]=\"selectedProfile\"\n placeholder=\"{{ 'Select device profile' | translate }}\"\n (onSearch)=\"setPipe($event)\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n *c8yFor=\"let profile of deviceProfiles; pipe: filterPipe\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"selectProfile(profile); setPipe('')\"\n >\n <c8y-highlight\n [text]=\"profile.name || '--'\"\n [pattern]=\"pattern\"\n ></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n (click)=\"createOperation()\"\n title=\"{{ 'Assign device profile' | translate }}\"\n type=\"button\"\n [disabled]=\"!selectedProfile?.id\"\n c8yProductExperience\n inherit\n [actionData]=\"{ action: PRODUCT_EXPERIENCE.ACTIONS.ASSIGN_DEVICE_PROFILE }\"\n >\n <span>{{ 'Assign device profile' | translate }}</span>\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n\n <!-- INSTALL PROFILE OPERATION -->\n <div class=\"bg-level-1\">\n <div class=\"card-header separator\">\n <div class=\"card-title\" translate>Currently installed</div>\n </div>\n <div class=\"card-block\">\n <c8y-operation-details\n [operation]=\"operation\"\n c8yProductExperience\n inherit\n suppressDataOverriding\n ></c8y-operation-details>\n </div>\n </div>\n </div>\n <div class=\"card--grid__inner-scroll d-col no-align-items\">\n <div class=\"d-contents\">\n <!-- FIRMWARE -->\n <c8y-device-tab-profile-detail\n [sectionTitle]=\"'Firmware' | translate\"\n [sectionIcon]=\"'c8y-firmware'\"\n [emptyStateText]=\"'No firmware to display.' | translate\"\n [emptyStateDetails]=\"'No firmware assigned.' | translate\"\n [isProfileSelected]=\"!!selectedProfile\"\n [items]=\"firmwareItems\"\n [isEmpty]=\"!selectedProfile?.c8y_DeviceProfile?.firmware?.name\"\n class=\"d-contents\"\n ></c8y-device-tab-profile-detail>\n </div>\n <div class=\"d-contents\">\n <!-- SOFTWARE -->\n <c8y-device-tab-profile-detail\n [sectionTitle]=\"'Software' | translate\"\n [sectionIcon]=\"'c8y-tools'\"\n [emptyStateText]=\"'No software to display.' | translate\"\n [emptyStateDetails]=\"'No software assigned.' | translate\"\n [isProfileSelected]=\"!!selectedProfile\"\n [items]=\"softwareItems\"\n [isEmpty]=\"\n !selectedProfile?.c8y_DeviceProfile?.software ||\n selectedProfile?.c8y_DeviceProfile?.software?.length === 0\n \"\n class=\"d-contents\"\n ></c8y-device-tab-profile-detail>\n </div>\n <div class=\"d-contents\">\n <!-- CONFIGURATION -->\n <c8y-device-tab-profile-detail\n [sectionTitle]=\"'Configuration' | translate\"\n [sectionIcon]=\"'gears'\"\n [emptyStateText]=\"'No configuration to display' | translate\"\n [emptyStateDetails]=\"'No configuration assigned' | translate\"\n [isProfileSelected]=\"!!selectedProfile\"\n [items]=\"configurationItems\"\n [isEmpty]=\"\n !selectedProfile?.c8y_DeviceProfile?.configuration ||\n selectedProfile?.c8y_DeviceProfile?.configuration?.length === 0\n \"\n [showTextLabel]=\"false\"\n class=\"d-contents\"\n ></c8y-device-tab-profile-detail>\n </div>\n <!-- fill in the remanining vertical space when empty -->\n <div class=\"card--grid grid__col--6-6--md flex-grow\">\n <div class=\"bg-level-0\"></div>\n <div class=\"bg-level-1\"></div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i1.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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", "c8yForLoadMoreComponent"] }, { kind: "component", type: i1.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i1.TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected"], outputs: ["onSearch", "onIconClick"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i1.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "directive", type: i1.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: i1.RealtimeButtonComponent, selector: "c8y-realtime-btn", inputs: ["service", "label", "title", "disabled"], outputs: ["onToggle"] }, { kind: "component", type: i6.OperationDetailsComponent, selector: "c8y-operation-details", inputs: ["operation"] }, { kind: "component", type: i7.DeviceTabProfileDetailComponent, selector: "c8y-device-tab-profile-detail", inputs: ["sectionTitle", "sectionIcon", "emptyStateText", "emptyStateDetails", "isProfileSelected", "isEmpty", "items", "showTextLabel"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] }); }
|
|
103
103
|
}
|
|
104
104
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DeviceTabProfileComponent, decorators: [{
|
|
105
105
|
type: Component,
|
|
@@ -96,7 +96,7 @@ export class DeviceShellComponent {
|
|
|
96
96
|
this.destroyed$.complete();
|
|
97
97
|
}
|
|
98
98
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DeviceShellComponent, deps: [{ token: i1.DeviceShellService }, { token: i2.OperationRealtimeService }, { token: i2.ManagedObjectRealtimeService }, { token: i3.OperationService }, { token: i4.ActivatedRoute }, { token: i5.BsModalService }, { token: i2.AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
99
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DeviceShellComponent, selector: "c8y-device-shell", providers: [OperationRealtimeService, ManagedObjectRealtimeService], ngImport: i0, template: "<c8y-action-bar-item [placement]=\"'right'\">\n <c8y-realtime-btn [service]=\"operationRealtime\"></c8y-realtime-btn>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage d-grid grid__col--6-6--md\">\n <div class=\"inner-scroll d-flex d-col bg-level-0\">\n <div class=\"card-header large-padding separator sticky-top\">\n <div class=\"card-title\">\n {{ 'Command' | translate }}\n </div>\n </div>\n\n <div class=\"card-block d-flex d-col flex-grow large-padding\">\n <div class=\"d-flex p-b-16\">\n <button\n class=\"btn btn-default btn-sm\"\n type=\"button\"\n (click)=\"getPredefinedCommand()\"\n [title]=\"'Display a list of predefined commands' | translate\"\n data-cy=\"shell--predefined-commands\"\n >\n {{ 'Predefined commands' | translate }}\n </button>\n\n <div class=\"m-l-auto\">\n <device-status [mo]=\"device$ | async\"></device-status>\n </div>\n </div>\n <textarea\n [attr.aria-label]=\"'Commands' | translate\"\n class=\"form-control inner-scroll flex-grow bg-level-2 text-monospace\"\n [(ngModel)]=\"command.text\"\n data-cy=\"shell-component--commands\"\n (ngModelChange)=\"$event || resetSupportedDeliveryTypes()\"\n placeholder=\"{{ 'Add commands or use predefined commands above.' | translate }}\"\n ></textarea>\n </div>\n\n <div class=\"card-footer large-padding separator\">\n <ng-container *ngFor=\"let deliveryType of deliveryTypes\">\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n *ngIf=\"deliveryType.isSupportedByCommand\"\n [disabled]=\"!command?.text || (sendingCommand$ | async)\"\n (click)=\"execute(deliveryType.name)\"\n >\n <span\n [title]=\"\n deliveryType.default\n ? ('Execute' | translate)\n : (executeViaLabel | translate: { deliveryType: deliveryType.name })\n \"\n >\n {{\n deliveryType.default\n ? ('Execute' | translate)\n : (executeViaLabel | translate: { deliveryType: deliveryType.name })\n }}\n </span>\n </button>\n </ng-container>\n </div>\n </div>\n <div class=\"inner-scroll bg-level-1\">\n <div class=\"card-header large-padding separator sticky-top\">\n <div class=\"card-title\">\n {{ 'Operations' | translate }}\n </div>\n </div>\n <div class=\"card-block large-padding\">\n <c8y-operations-timeline\n [operations]=\"operations\"\n [sourceId]=\"device.id\"\n [filterPipe]=\"filterPipe\"\n [bodyTemplate]=\"timelineItemBody\"\n [footerTemplates]=\"[timelineItemFooter]\"\n [propertiesToHide]=\"['c8y_Command']\"\n ></c8y-operations-timeline>\n <ng-template #timelineItemBody let-operation>\n <small>{{ operation.c8y_Command?.text || operation.description }}</small>\n </ng-template>\n <ng-template #timelineItemFooter let-operation>\n <div *ngIf=\"operation.c8y_Command?.text\">\n <div class=\"legend form-block\" translate>Command</div>\n <pre class=\"p-8 text-pre-normal\">\n <code>{{operation.c8y_Command.text}}</code>\n </pre>\n </div>\n <div *ngIf=\"operation.c8y_Command?.result\">\n <div class=\"legend form-block\" translate>Response</div>\n <pre class=\"p-8 text-pre-normal\">\n <code>{{operation.c8y_Command.result}}</code>\n </pre>\n </div>\n </ng-template>\n </div>\n </div>\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: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.DeviceStatusComponent, selector: "device-status", inputs: ["mo"] }, { kind: "component", type: i2.RealtimeButtonComponent, selector: "c8y-realtime-btn", inputs: ["service", "label", "title"] }, { kind: "component", type: i8.OperationsTimelineComponent, selector: "c8y-operations-timeline", inputs: ["operations", "sourceId", "filterPipe", "bodyTemplate", "footerTemplates", "propertiesToHide"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
|
|
99
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DeviceShellComponent, selector: "c8y-device-shell", providers: [OperationRealtimeService, ManagedObjectRealtimeService], ngImport: i0, template: "<c8y-action-bar-item [placement]=\"'right'\">\n <c8y-realtime-btn [service]=\"operationRealtime\"></c8y-realtime-btn>\n</c8y-action-bar-item>\n\n<div class=\"card content-fullpage d-grid grid__col--6-6--md\">\n <div class=\"inner-scroll d-flex d-col bg-level-0\">\n <div class=\"card-header large-padding separator sticky-top\">\n <div class=\"card-title\">\n {{ 'Command' | translate }}\n </div>\n </div>\n\n <div class=\"card-block d-flex d-col flex-grow large-padding\">\n <div class=\"d-flex p-b-16\">\n <button\n class=\"btn btn-default btn-sm\"\n type=\"button\"\n (click)=\"getPredefinedCommand()\"\n [title]=\"'Display a list of predefined commands' | translate\"\n data-cy=\"shell--predefined-commands\"\n >\n {{ 'Predefined commands' | translate }}\n </button>\n\n <div class=\"m-l-auto\">\n <device-status [mo]=\"device$ | async\"></device-status>\n </div>\n </div>\n <textarea\n [attr.aria-label]=\"'Commands' | translate\"\n class=\"form-control inner-scroll flex-grow bg-level-2 text-monospace\"\n [(ngModel)]=\"command.text\"\n data-cy=\"shell-component--commands\"\n (ngModelChange)=\"$event || resetSupportedDeliveryTypes()\"\n placeholder=\"{{ 'Add commands or use predefined commands above.' | translate }}\"\n ></textarea>\n </div>\n\n <div class=\"card-footer large-padding separator\">\n <ng-container *ngFor=\"let deliveryType of deliveryTypes\">\n <button\n class=\"btn btn-primary\"\n type=\"button\"\n *ngIf=\"deliveryType.isSupportedByCommand\"\n [disabled]=\"!command?.text || (sendingCommand$ | async)\"\n (click)=\"execute(deliveryType.name)\"\n >\n <span\n [title]=\"\n deliveryType.default\n ? ('Execute' | translate)\n : (executeViaLabel | translate: { deliveryType: deliveryType.name })\n \"\n >\n {{\n deliveryType.default\n ? ('Execute' | translate)\n : (executeViaLabel | translate: { deliveryType: deliveryType.name })\n }}\n </span>\n </button>\n </ng-container>\n </div>\n </div>\n <div class=\"inner-scroll bg-level-1\">\n <div class=\"card-header large-padding separator sticky-top\">\n <div class=\"card-title\">\n {{ 'Operations' | translate }}\n </div>\n </div>\n <div class=\"card-block large-padding\">\n <c8y-operations-timeline\n [operations]=\"operations\"\n [sourceId]=\"device.id\"\n [filterPipe]=\"filterPipe\"\n [bodyTemplate]=\"timelineItemBody\"\n [footerTemplates]=\"[timelineItemFooter]\"\n [propertiesToHide]=\"['c8y_Command']\"\n ></c8y-operations-timeline>\n <ng-template #timelineItemBody let-operation>\n <small>{{ operation.c8y_Command?.text || operation.description }}</small>\n </ng-template>\n <ng-template #timelineItemFooter let-operation>\n <div *ngIf=\"operation.c8y_Command?.text\">\n <div class=\"legend form-block\" translate>Command</div>\n <pre class=\"p-8 text-pre-normal\">\n <code>{{operation.c8y_Command.text}}</code>\n </pre>\n </div>\n <div *ngIf=\"operation.c8y_Command?.result\">\n <div class=\"legend form-block\" translate>Response</div>\n <pre class=\"p-8 text-pre-normal\">\n <code>{{operation.c8y_Command.result}}</code>\n </pre>\n </div>\n </ng-template>\n </div>\n </div>\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: i2.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.DeviceStatusComponent, selector: "device-status", inputs: ["mo"] }, { kind: "component", type: i2.RealtimeButtonComponent, selector: "c8y-realtime-btn", inputs: ["service", "label", "title", "disabled"], outputs: ["onToggle"] }, { kind: "component", type: i8.OperationsTimelineComponent, selector: "c8y-operations-timeline", inputs: ["operations", "sourceId", "filterPipe", "bodyTemplate", "footerTemplates", "propertiesToHide"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
|
|
100
100
|
}
|
|
101
101
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DeviceShellComponent, decorators: [{
|
|
102
102
|
type: Component,
|
|
@@ -38,7 +38,7 @@ export class DiagnosticsComponent {
|
|
|
38
38
|
this.diagnosticService.cancelOperation(operation);
|
|
39
39
|
}
|
|
40
40
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DiagnosticsComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.DiagnosticsService }, { token: i3.OperationRealtimeService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
41
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DiagnosticsComponent, selector: "c8y-diagnostics", ngImport: i0, template: "<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n type=\"button\"\n title=\"{{ 'Request diagnostic file' | translate }}\"\n (click)=\"onDiagnosticRequest()\"\n >\n <i c8yIcon=\"stethoscope\"></i>\n <span translate>Request diagnostic file</span>\n </button>\n</c8y-action-bar-item>\n\n<div\n class=\"page-sticky-header hidden-xs c8y-list__item c8y-list--timeline\"\n *ngIf=\"operationCount > 0\"\n>\n <div class=\"d-flex\">\n <div class=\"c8y-list--timeline__item__date a-s-center\">\n <label>{{ 'Date' | translate }}</label>\n </div>\n <div class=\"c8y-list__item__block flex-grow\">\n <div class=\"c8y-list__item__icon\">\n <i class=\"p-l-24\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"content-flex-40\">\n <div class=\"col-4\">{{ 'Event' | translate }}</div>\n <div class=\"col-5 m-l-8\">{{ 'File' | translate }}</div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<c8y-list-group>\n <ng-template\n c8yFor\n let-operation\n [c8yForOf]=\"operations$\"\n [c8yForPipe]=\"operationsPipe\"\n [c8yForRealtime]=\"operationRealtime\"\n [c8yForRealtimeOptions]=\"realtimeOptions\"\n (c8yForCount)=\"operationCount = $event\"\n >\n <c8y-li-timeline>\n {{ operation.creationTime | c8yDate }}\n <c8y-li>\n <c8y-li-icon>\n <i\n [c8yIcon]=\"statusIcons[operation.status]\"\n [ngClass]=\"statusClasses[operation.status]\"\n [tooltip]=\"operation.status?.toString() | translate\"\n ></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-40\">\n <div class=\"col-4\">\n <p class=\"text-truncate-wrap\" title=\"{{ operation.description | translate }}\">\n {{ operation.description | translate }}\n </p>\n </div>\n <div class=\"col-5\" *ngIf=\"operation.c8y_DiagnosticReport?.file\">\n <div class=\"text-truncate-wrap m-t-xs-8\">\n <span class=\"text-label-small visible-xs\" translate>File</span>\n <span title=\"{{ operation.c8y_DiagnosticReport.file }}\">\n <c8y-file-download\n url=\"{{ operation.c8y_DiagnosticReport.file }}\"\n ></c8y-file-download>\n </span>\n </div>\n </div>\n </c8y-li-body>\n <c8y-li-action\n (click)=\"onCancel(operation)\"\n *ngIf=\"operation.status === 'PENDING'\"\n icon=\"times\"\n label=\"{{ 'Cancel' | translate }}\"\n ></c8y-li-action>\n <c8y-li-action\n (click)=\"onDelete(operation)\"\n *ngIf=\"operation.status === 'SUCCESSFUL'\"\n icon=\"delete\"\n label=\"{{ 'Delete' | translate }}\"\n ></c8y-li-action>\n </c8y-li>\n </c8y-li-timeline>\n </ng-template>\n</c8y-list-group>\n\n<!-- EMPTY STATE -->\n\n<c8y-ui-empty-state\n *ngIf=\"operationCount === 0\"\n [icon]=\"'stethoscope'\"\n [title]=\"'No diagnostic files available.' | translate\"\n></c8y-ui-empty-state>\n", dependencies: [{ kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i3.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i3.ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "component", type: i3.ListItemTimelineComponent, selector: "c8y-list-item-timeline, c8y-li-timeline" }, { kind: "component", type: i5.FileDownloadComponent, selector: "c8y-file-download", inputs: ["url"] }, { kind: "directive", type: i6.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: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.DatePipe, name: "c8yDate" }] }); }
|
|
41
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DiagnosticsComponent, selector: "c8y-diagnostics", ngImport: i0, template: "<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n type=\"button\"\n title=\"{{ 'Request diagnostic file' | translate }}\"\n (click)=\"onDiagnosticRequest()\"\n >\n <i c8yIcon=\"stethoscope\"></i>\n <span translate>Request diagnostic file</span>\n </button>\n</c8y-action-bar-item>\n\n<div\n class=\"page-sticky-header hidden-xs c8y-list__item c8y-list--timeline\"\n *ngIf=\"operationCount > 0\"\n>\n <div class=\"d-flex\">\n <div class=\"c8y-list--timeline__item__date a-s-center\">\n <label>{{ 'Date' | translate }}</label>\n </div>\n <div class=\"c8y-list__item__block flex-grow\">\n <div class=\"c8y-list__item__icon\">\n <i class=\"p-l-24\"></i>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"content-flex-40\">\n <div class=\"col-4\">{{ 'Event' | translate }}</div>\n <div class=\"col-5 m-l-8\">{{ 'File' | translate }}</div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<c8y-list-group>\n <ng-template\n c8yFor\n let-operation\n [c8yForOf]=\"operations$\"\n [c8yForPipe]=\"operationsPipe\"\n [c8yForRealtime]=\"operationRealtime\"\n [c8yForRealtimeOptions]=\"realtimeOptions\"\n (c8yForCount)=\"operationCount = $event\"\n >\n <c8y-li-timeline>\n {{ operation.creationTime | c8yDate }}\n <c8y-li>\n <c8y-li-icon>\n <i\n [c8yIcon]=\"statusIcons[operation.status]\"\n [ngClass]=\"statusClasses[operation.status]\"\n [tooltip]=\"operation.status?.toString() | translate\"\n ></i>\n </c8y-li-icon>\n <c8y-li-body class=\"content-flex-40\">\n <div class=\"col-4\">\n <p class=\"text-truncate-wrap\" title=\"{{ operation.description | translate }}\">\n {{ operation.description | translate }}\n </p>\n </div>\n <div class=\"col-5\" *ngIf=\"operation.c8y_DiagnosticReport?.file\">\n <div class=\"text-truncate-wrap m-t-xs-8\">\n <span class=\"text-label-small visible-xs\" translate>File</span>\n <span title=\"{{ operation.c8y_DiagnosticReport.file }}\">\n <c8y-file-download\n url=\"{{ operation.c8y_DiagnosticReport.file }}\"\n ></c8y-file-download>\n </span>\n </div>\n </div>\n </c8y-li-body>\n <c8y-li-action\n (click)=\"onCancel(operation)\"\n *ngIf=\"operation.status === 'PENDING'\"\n icon=\"times\"\n label=\"{{ 'Cancel' | translate }}\"\n ></c8y-li-action>\n <c8y-li-action\n (click)=\"onDelete(operation)\"\n *ngIf=\"operation.status === 'SUCCESSFUL'\"\n icon=\"delete\"\n label=\"{{ 'Delete' | translate }}\"\n ></c8y-li-action>\n </c8y-li>\n </c8y-li-timeline>\n </ng-template>\n</c8y-list-group>\n\n<!-- EMPTY STATE -->\n\n<c8y-ui-empty-state\n *ngIf=\"operationCount === 0\"\n [icon]=\"'stethoscope'\"\n [title]=\"'No diagnostic files available.' | translate\"\n></c8y-ui-empty-state>\n", dependencies: [{ kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForLoadMoreComponent"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "emptyActions", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i3.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i3.ListItemBodyComponent, selector: "c8y-list-item-body, c8y-li-body", inputs: ["body"] }, { kind: "component", type: i3.ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "component", type: i3.ListItemTimelineComponent, selector: "c8y-list-item-timeline, c8y-li-timeline" }, { kind: "component", type: i5.FileDownloadComponent, selector: "c8y-file-download", inputs: ["url"] }, { kind: "directive", type: i6.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: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.DatePipe, name: "c8yDate" }] }); }
|
|
42
42
|
}
|
|
43
43
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DiagnosticsComponent, decorators: [{
|
|
44
44
|
type: Component,
|