@c8y/ngx-components 1021.52.0 → 1021.54.4
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/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.d.ts +10 -2
- package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.d.ts.map +1 -1
- package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.model.d.ts +11 -0
- package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.model.d.ts.map +1 -0
- package/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.d.ts +10 -4
- package/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.d.ts.map +1 -1
- package/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.d.ts +3 -1
- package/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.d.ts.map +1 -1
- package/alarm-event-selector/alarm-event-selector.model.d.ts +7 -0
- package/alarm-event-selector/alarm-event-selector.model.d.ts.map +1 -1
- package/core/application/app-icon.component.d.ts.map +1 -1
- package/core/dashboard/dashboard-child-action.component.d.ts +1 -1
- package/core/dashboard/dashboard-child-action.component.d.ts.map +1 -1
- package/core/dashboard/dashboard.module.d.ts +29 -29
- package/core/dashboard/index.d.ts +3 -0
- package/core/dashboard/index.d.ts.map +1 -1
- package/core/dashboard/widgets-dashboard.component.d.ts +1 -1
- package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts +1 -1
- package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.d.ts +1 -1
- package/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context-date-range.service.d.ts +10 -0
- package/core/dashboard/wiget-time-context/widget-time-context-date-range.service.d.ts.map +1 -0
- package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +7 -4
- package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts +0 -1
- package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts.map +1 -1
- package/core/date-picker/date-picker.component.d.ts +1 -1
- package/core/date-picker/date-picker.component.d.ts.map +1 -1
- package/core/date-picker/date-picker.module.d.ts +9 -9
- package/core/date-time-picker/close-date-picker.directive.d.ts +1 -1
- package/core/date-time-picker/close-date-picker.directive.d.ts.map +1 -1
- package/core/date-time-picker/date-time-picker.component.d.ts +6 -3
- package/core/date-time-picker/date-time-picker.component.d.ts.map +1 -1
- package/core/date-time-picker/date-time-picker.module.d.ts +11 -11
- package/core/date-time-picker/date-time-picker.module.d.ts.map +1 -1
- package/core/forms/forms.module.d.ts +18 -18
- package/core/forms/required-input-placeholder.directive.d.ts +1 -1
- package/core/forms/required-input-placeholder.directive.d.ts.map +1 -1
- package/core/router/router.service.d.ts.map +1 -1
- package/core/user/user-menu.service.d.ts +36 -11
- package/core/user/user-menu.service.d.ts.map +1 -1
- package/datapoint-explorer/c8y-ngx-components-datapoint-explorer.d.ts.map +1 -0
- package/datapoint-explorer/datapoint-explorer.module.d.ts +7 -0
- package/datapoint-explorer/datapoint-explorer.module.d.ts.map +1 -0
- package/datapoint-explorer/index.d.ts +2 -0
- package/datapoint-explorer/index.d.ts.map +1 -0
- package/datapoint-explorer/view/c8y-ngx-components-datapoint-explorer-view.d.ts.map +1 -0
- package/datapoint-explorer/view/configuration/naming-dictionary.d.ts +3 -0
- package/datapoint-explorer/view/configuration/naming-dictionary.d.ts.map +1 -0
- package/datapoint-explorer/view/configuration/workspace-configuration.component.d.ts +38 -0
- package/datapoint-explorer/view/configuration/workspace-configuration.component.d.ts.map +1 -0
- package/datapoint-explorer/view/configuration/workspace-configuration.model.d.ts +7 -0
- package/datapoint-explorer/view/configuration/workspace-configuration.model.d.ts.map +1 -0
- package/datapoint-explorer/view/configuration/workspace-configuration.service.d.ts +15 -0
- package/datapoint-explorer/view/configuration/workspace-configuration.service.d.ts.map +1 -0
- package/datapoint-explorer/view/create-new-report-modal/create-new-report-modal.component.d.ts +25 -0
- package/datapoint-explorer/view/create-new-report-modal/create-new-report-modal.component.d.ts.map +1 -0
- package/datapoint-explorer/view/datapoint-explorer.component.d.ts +67 -0
- package/datapoint-explorer/view/datapoint-explorer.component.d.ts.map +1 -0
- package/datapoint-explorer/view/datapoint-explorer.service.d.ts +9 -0
- package/datapoint-explorer/view/datapoint-explorer.service.d.ts.map +1 -0
- package/datapoint-explorer/view/index.d.ts +2 -0
- package/datapoint-explorer/view/index.d.ts.map +1 -0
- package/datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.d.ts +23 -0
- package/datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.d.ts.map +1 -0
- package/echart/c8y-ngx-components-echart.d.ts.map +1 -0
- package/echart/chart-alerts/chart-alerts.component.d.ts +8 -0
- package/echart/chart-alerts/chart-alerts.component.d.ts.map +1 -0
- package/echart/charts.component.d.ts +63 -0
- package/echart/charts.component.d.ts.map +1 -0
- package/echart/index.d.ts +5 -0
- package/echart/index.d.ts.map +1 -0
- package/echart/models/c8y-ngx-components-echart-models.d.ts.map +1 -0
- package/echart/models/chart.model.d.ts +37 -0
- package/echart/models/chart.model.d.ts.map +1 -0
- package/echart/models/datapoints-graph-widget.model.d.ts +126 -0
- package/echart/models/datapoints-graph-widget.model.d.ts.map +1 -0
- package/echart/models/index.d.ts +4 -0
- package/echart/models/index.d.ts.map +1 -0
- package/echart/models/svg-icons.model.d.ts +22 -0
- package/echart/models/svg-icons.model.d.ts.map +1 -0
- package/echart/services/chart-alarms.service.d.ts +17 -0
- package/echart/services/chart-alarms.service.d.ts.map +1 -0
- package/echart/services/chart-events.service.d.ts +17 -0
- package/echart/services/chart-events.service.d.ts.map +1 -0
- package/echart/services/chart-realtime.service.d.ts +35 -0
- package/echart/services/chart-realtime.service.d.ts.map +1 -0
- package/echart/services/chart-types.service.d.ts +15 -0
- package/echart/services/chart-types.service.d.ts.map +1 -0
- package/echart/services/custom-measurements.service.d.ts +12 -0
- package/echart/services/custom-measurements.service.d.ts.map +1 -0
- package/echart/services/echarts-options.service.d.ts +143 -0
- package/echart/services/echarts-options.service.d.ts.map +1 -0
- package/echart/services/y-axis.service.d.ts +17 -0
- package/echart/services/y-axis.service.d.ts.map +1 -0
- package/esm2022/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.mjs +37 -12
- package/esm2022/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.model.mjs +2 -0
- package/esm2022/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.mjs +39 -12
- package/esm2022/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.mjs +6 -4
- package/esm2022/alarm-event-selector/alarm-event-selector.component.mjs +1 -1
- package/esm2022/alarm-event-selector/alarm-event-selector.model.mjs +1 -1
- package/esm2022/alarm-event-selector/custom-alarm-event-form/custom-alarm-event-form.component.mjs +1 -1
- package/esm2022/alarms/alarms-filter.component.mjs +3 -3
- package/esm2022/core/application/app-icon.component.mjs +4 -4
- package/esm2022/core/dashboard/dashboard-child-action.component.mjs +3 -3
- package/esm2022/core/dashboard/dashboard.module.mjs +17 -14
- package/esm2022/core/dashboard/index.mjs +4 -1
- package/esm2022/core/dashboard/widgets-dashboard.component.mjs +9 -9
- package/esm2022/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.mjs +11 -9
- package/esm2022/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.mjs +8 -7
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context-date-range.service.mjs +23 -0
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +70 -26
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context.model.mjs +1 -1
- package/esm2022/core/date-picker/date-picker.component.mjs +29 -14
- package/esm2022/core/date-picker/date-picker.module.mjs +9 -7
- package/esm2022/core/date-time-picker/close-date-picker.directive.mjs +4 -3
- package/esm2022/core/date-time-picker/date-time-picker.component.mjs +57 -29
- package/esm2022/core/date-time-picker/date-time-picker.module.mjs +11 -7
- package/esm2022/core/forms/forms.module.mjs +3 -3
- package/esm2022/core/forms/ip-range-input-list.component.mjs +5 -5
- package/esm2022/core/forms/required-input-placeholder.directive.mjs +4 -3
- package/esm2022/core/router/router.service.mjs +1 -1
- package/esm2022/core/time-interval/time-interval.component.mjs +3 -3
- package/esm2022/core/user/user-menu.service.mjs +57 -17
- package/esm2022/datapoint-explorer/c8y-ngx-components-datapoint-explorer.mjs +5 -0
- package/esm2022/datapoint-explorer/datapoint-explorer.module.mjs +65 -0
- package/esm2022/datapoint-explorer/index.mjs +2 -0
- package/esm2022/datapoint-explorer/view/c8y-ngx-components-datapoint-explorer-view.mjs +5 -0
- package/esm2022/datapoint-explorer/view/configuration/naming-dictionary.mjs +65 -0
- package/esm2022/datapoint-explorer/view/configuration/workspace-configuration.component.mjs +169 -0
- package/esm2022/datapoint-explorer/view/configuration/workspace-configuration.model.mjs +2 -0
- package/esm2022/datapoint-explorer/view/configuration/workspace-configuration.service.mjs +40 -0
- package/esm2022/datapoint-explorer/view/create-new-report-modal/create-new-report-modal.component.mjs +64 -0
- package/esm2022/datapoint-explorer/view/datapoint-explorer.component.mjs +279 -0
- package/esm2022/datapoint-explorer/view/datapoint-explorer.service.mjs +23 -0
- package/esm2022/datapoint-explorer/view/index.mjs +2 -0
- package/esm2022/datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.mjs +48 -0
- package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +3 -3
- package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +3 -3
- package/esm2022/device-list/add-smart-group.component.mjs +3 -3
- package/esm2022/echart/c8y-ngx-components-echart.mjs +5 -0
- package/esm2022/echart/chart-alerts/chart-alerts.component.mjs +16 -0
- package/esm2022/echart/charts.component.mjs +560 -0
- package/esm2022/echart/index.mjs +5 -0
- package/esm2022/echart/models/c8y-ngx-components-echart-models.mjs +5 -0
- package/esm2022/echart/models/chart.model.mjs +2 -0
- package/esm2022/echart/models/datapoints-graph-widget.model.mjs +17 -0
- package/esm2022/echart/models/index.mjs +4 -0
- package/esm2022/echart/models/svg-icons.model.mjs +22 -0
- package/esm2022/echart/services/chart-alarms.service.mjs +58 -0
- package/esm2022/echart/services/chart-events.service.mjs +44 -0
- package/esm2022/echart/services/chart-realtime.service.mjs +193 -0
- package/esm2022/echart/services/chart-types.service.mjs +102 -0
- package/esm2022/echart/services/custom-measurements.service.mjs +52 -0
- package/esm2022/echart/services/echarts-options.service.mjs +857 -0
- package/esm2022/echart/services/y-axis.service.mjs +150 -0
- package/esm2022/interval-picker/interval-picker.component.mjs +3 -3
- package/esm2022/interval-picker/interval-picker.model.mjs +1 -1
- package/esm2022/map/map.component.mjs +4 -1
- package/esm2022/report-dashboard/index.mjs +2 -1
- package/esm2022/time-context/c8y-ngx-components-time-context.mjs +5 -0
- package/esm2022/time-context/index.mjs +2 -0
- package/esm2022/time-context/time-context.component.mjs +217 -0
- package/esm2022/time-context/time-context.service.mjs +83 -0
- package/esm2022/tracking/tracking.component.mjs +5 -6
- package/esm2022/tracking/tracking.service.mjs +7 -3
- package/esm2022/translation-editor/lazy/translation-editor/translation-editor.component.mjs +6 -5
- package/esm2022/widgets/cockpit-exports/index.mjs +8 -1
- package/esm2022/widgets/definitions/datapoints-graph/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +5 -0
- package/esm2022/widgets/definitions/datapoints-graph/index.mjs +31 -0
- package/esm2022/widgets/definitions/index.mjs +3 -2
- package/esm2022/widgets/implementations/datapoints-graph/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +5 -0
- package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.mjs +239 -0
- package/esm2022/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.mjs +241 -0
- package/esm2022/widgets/implementations/datapoints-graph/index.mjs +3 -0
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +80 -28
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +2 -2
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +658 -0
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +72 -0
- package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +4 -4
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +4 -4
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-list.mjs +2 -2
- package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart-models.mjs +46 -0
- package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-echart.mjs +2023 -0
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-interval-picker.mjs +2 -2
- package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-map.mjs +3 -0
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs +1 -1
- package/fesm2022/c8y-ngx-components-time-context.mjs +300 -0
- package/fesm2022/c8y-ngx-components-time-context.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-tracking.mjs +10 -7
- package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +5 -4
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs +7 -0
- package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +38 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +467 -0
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components.mjs +433 -281
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/interval-picker/interval-picker.component.d.ts.map +1 -1
- package/interval-picker/interval-picker.model.d.ts.map +1 -1
- package/locales/de.po +206 -279
- package/locales/es.po +206 -279
- package/locales/fr.po +206 -279
- package/locales/ja_JP.po +196 -279
- package/locales/ko.po +455 -444
- package/locales/locales.pot +200 -0
- package/locales/nl.po +206 -279
- package/locales/pl.po +206 -279
- package/locales/pt_BR.po +206 -279
- package/locales/zh_CN.po +450 -443
- package/locales/zh_TW.po +452 -445
- package/map/map.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/report-dashboard/index.d.ts +1 -0
- package/report-dashboard/index.d.ts.map +1 -1
- package/time-context/c8y-ngx-components-time-context.d.ts.map +1 -0
- package/time-context/index.d.ts +2 -0
- package/time-context/index.d.ts.map +1 -0
- package/time-context/time-context.component.d.ts +61 -0
- package/time-context/time-context.component.d.ts.map +1 -0
- package/time-context/time-context.service.d.ts +25 -0
- package/time-context/time-context.service.d.ts.map +1 -0
- package/tracking/tracking.component.d.ts.map +1 -1
- package/tracking/tracking.service.d.ts.map +1 -1
- package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts.map +1 -1
- package/widgets/cockpit-exports/index.d.ts +6 -0
- package/widgets/cockpit-exports/index.d.ts.map +1 -1
- package/widgets/definitions/datapoints-graph/c8y-ngx-components-widgets-definitions-datapoints-graph.d.ts.map +1 -0
- package/widgets/definitions/datapoints-graph/index.d.ts +16 -0
- package/widgets/definitions/datapoints-graph/index.d.ts.map +1 -0
- package/widgets/definitions/index.d.ts +1 -0
- package/widgets/definitions/index.d.ts.map +1 -1
- package/widgets/implementations/datapoints-graph/c8y-ngx-components-widgets-implementations-datapoints-graph.d.ts.map +1 -0
- package/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.d.ts +43 -0
- package/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.d.ts +54 -0
- package/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-graph/index.d.ts +3 -0
- package/widgets/implementations/datapoints-graph/index.d.ts.map +1 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export const adjectives = [
|
|
2
|
+
'caffeinated',
|
|
3
|
+
'sleepy',
|
|
4
|
+
'hungry',
|
|
5
|
+
'puzzled',
|
|
6
|
+
'overexcited',
|
|
7
|
+
'daydreaming',
|
|
8
|
+
'chocolate-loving',
|
|
9
|
+
'coffee-powered',
|
|
10
|
+
'cookie-craving',
|
|
11
|
+
'disco-ready',
|
|
12
|
+
'weekend-mode',
|
|
13
|
+
'pizza-powered',
|
|
14
|
+
'nap-seeking',
|
|
15
|
+
'wifi-hunting',
|
|
16
|
+
'battery-hungry',
|
|
17
|
+
'donut-powered',
|
|
18
|
+
'tea-sipping',
|
|
19
|
+
'keyboard-loving',
|
|
20
|
+
'screen-staring',
|
|
21
|
+
'mouse-chasing',
|
|
22
|
+
'code-dreaming',
|
|
23
|
+
'pixel-perfect',
|
|
24
|
+
'bug-finding',
|
|
25
|
+
'zoom-tired',
|
|
26
|
+
'meeting-dodging',
|
|
27
|
+
'deadline-racing',
|
|
28
|
+
'coffee-seeking',
|
|
29
|
+
'sandwich-craving',
|
|
30
|
+
'debug-ready',
|
|
31
|
+
'rest-needing'
|
|
32
|
+
];
|
|
33
|
+
export const nouns = [
|
|
34
|
+
'sensor',
|
|
35
|
+
'robot',
|
|
36
|
+
'thermostat',
|
|
37
|
+
'gateway',
|
|
38
|
+
'dashboard',
|
|
39
|
+
'widget',
|
|
40
|
+
'gadget',
|
|
41
|
+
'button',
|
|
42
|
+
'antenna',
|
|
43
|
+
'beacon',
|
|
44
|
+
'adapter',
|
|
45
|
+
'gizmo',
|
|
46
|
+
'hub',
|
|
47
|
+
'switch',
|
|
48
|
+
'chip',
|
|
49
|
+
'controller',
|
|
50
|
+
'display',
|
|
51
|
+
'terminal',
|
|
52
|
+
'processor',
|
|
53
|
+
'transmitter',
|
|
54
|
+
'receiver',
|
|
55
|
+
'pod',
|
|
56
|
+
'device',
|
|
57
|
+
'module',
|
|
58
|
+
'relay',
|
|
59
|
+
'node',
|
|
60
|
+
'bridge',
|
|
61
|
+
'screen',
|
|
62
|
+
'router',
|
|
63
|
+
'box'
|
|
64
|
+
];
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtaW5nLWRpY3Rpb25hcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9kYXRhcG9pbnQtZXhwbG9yZXIvdmlldy9jb25maWd1cmF0aW9uL25hbWluZy1kaWN0aW9uYXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixhQUFhO0lBQ2IsUUFBUTtJQUNSLFFBQVE7SUFDUixTQUFTO0lBQ1QsYUFBYTtJQUNiLGFBQWE7SUFDYixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixhQUFhO0lBQ2IsY0FBYztJQUNkLGVBQWU7SUFDZixhQUFhO0lBQ2IsY0FBYztJQUNkLGdCQUFnQjtJQUNoQixlQUFlO0lBQ2YsYUFBYTtJQUNiLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsZUFBZTtJQUNmLGVBQWU7SUFDZixlQUFlO0lBQ2YsYUFBYTtJQUNiLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixrQkFBa0I7SUFDbEIsYUFBYTtJQUNiLGNBQWM7Q0FDZixDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHO0lBQ25CLFFBQVE7SUFDUixPQUFPO0lBQ1AsWUFBWTtJQUNaLFNBQVM7SUFDVCxXQUFXO0lBQ1gsUUFBUTtJQUNSLFFBQVE7SUFDUixRQUFRO0lBQ1IsU0FBUztJQUNULFFBQVE7SUFDUixTQUFTO0lBQ1QsT0FBTztJQUNQLEtBQUs7SUFDTCxRQUFRO0lBQ1IsTUFBTTtJQUNOLFlBQVk7SUFDWixTQUFTO0lBQ1QsVUFBVTtJQUNWLFdBQVc7SUFDWCxhQUFhO0lBQ2IsVUFBVTtJQUNWLEtBQUs7SUFDTCxRQUFRO0lBQ1IsUUFBUTtJQUNSLE9BQU87SUFDUCxNQUFNO0lBQ04sUUFBUTtJQUNSLFFBQVE7SUFDUixRQUFRO0lBQ1IsS0FBSztDQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgYWRqZWN0aXZlcyA9IFtcbiAgJ2NhZmZlaW5hdGVkJyxcbiAgJ3NsZWVweScsXG4gICdodW5ncnknLFxuICAncHV6emxlZCcsXG4gICdvdmVyZXhjaXRlZCcsXG4gICdkYXlkcmVhbWluZycsXG4gICdjaG9jb2xhdGUtbG92aW5nJyxcbiAgJ2NvZmZlZS1wb3dlcmVkJyxcbiAgJ2Nvb2tpZS1jcmF2aW5nJyxcbiAgJ2Rpc2NvLXJlYWR5JyxcbiAgJ3dlZWtlbmQtbW9kZScsXG4gICdwaXp6YS1wb3dlcmVkJyxcbiAgJ25hcC1zZWVraW5nJyxcbiAgJ3dpZmktaHVudGluZycsXG4gICdiYXR0ZXJ5LWh1bmdyeScsXG4gICdkb251dC1wb3dlcmVkJyxcbiAgJ3RlYS1zaXBwaW5nJyxcbiAgJ2tleWJvYXJkLWxvdmluZycsXG4gICdzY3JlZW4tc3RhcmluZycsXG4gICdtb3VzZS1jaGFzaW5nJyxcbiAgJ2NvZGUtZHJlYW1pbmcnLFxuICAncGl4ZWwtcGVyZmVjdCcsXG4gICdidWctZmluZGluZycsXG4gICd6b29tLXRpcmVkJyxcbiAgJ21lZXRpbmctZG9kZ2luZycsXG4gICdkZWFkbGluZS1yYWNpbmcnLFxuICAnY29mZmVlLXNlZWtpbmcnLFxuICAnc2FuZHdpY2gtY3JhdmluZycsXG4gICdkZWJ1Zy1yZWFkeScsXG4gICdyZXN0LW5lZWRpbmcnXG5dO1xuZXhwb3J0IGNvbnN0IG5vdW5zID0gW1xuICAnc2Vuc29yJyxcbiAgJ3JvYm90JyxcbiAgJ3RoZXJtb3N0YXQnLFxuICAnZ2F0ZXdheScsXG4gICdkYXNoYm9hcmQnLFxuICAnd2lkZ2V0JyxcbiAgJ2dhZGdldCcsXG4gICdidXR0b24nLFxuICAnYW50ZW5uYScsXG4gICdiZWFjb24nLFxuICAnYWRhcHRlcicsXG4gICdnaXptbycsXG4gICdodWInLFxuICAnc3dpdGNoJyxcbiAgJ2NoaXAnLFxuICAnY29udHJvbGxlcicsXG4gICdkaXNwbGF5JyxcbiAgJ3Rlcm1pbmFsJyxcbiAgJ3Byb2Nlc3NvcicsXG4gICd0cmFuc21pdHRlcicsXG4gICdyZWNlaXZlcicsXG4gICdwb2QnLFxuICAnZGV2aWNlJyxcbiAgJ21vZHVsZScsXG4gICdyZWxheScsXG4gICdub2RlJyxcbiAgJ2JyaWRnZScsXG4gICdzY3JlZW4nLFxuICAncm91dGVyJyxcbiAgJ2JveCdcbl07XG4iXX0=
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { A11yModule } from '@angular/cdk/a11y';
|
|
2
|
+
import { Component, EventEmitter, inject, Input, Output } from '@angular/core';
|
|
3
|
+
import { FormBuilder, FormsModule } from '@angular/forms';
|
|
4
|
+
import { ClipboardService, ContextRouteService, CoreModule, gettext, ViewContext } from '@c8y/ngx-components';
|
|
5
|
+
import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
|
|
6
|
+
import { TooltipModule } from 'ngx-bootstrap/tooltip';
|
|
7
|
+
import { WorkspaceConfigurationService } from './workspace-configuration.service';
|
|
8
|
+
import { ActivatedRoute, Router } from '@angular/router';
|
|
9
|
+
import { uniqueNamesGenerator } from 'unique-names-generator';
|
|
10
|
+
import { adjectives, nouns } from './naming-dictionary';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@c8y/ngx-components";
|
|
13
|
+
import * as i2 from "@angular/common";
|
|
14
|
+
import * as i3 from "@angular/forms";
|
|
15
|
+
import * as i4 from "ngx-bootstrap/dropdown";
|
|
16
|
+
import * as i5 from "@angular/cdk/a11y";
|
|
17
|
+
import * as i6 from "ngx-bootstrap/tooltip";
|
|
18
|
+
export class WorkspaceConfigComponent {
|
|
19
|
+
constructor() {
|
|
20
|
+
this.onConfigurationChange = new EventEmitter();
|
|
21
|
+
this.configurations = [];
|
|
22
|
+
this.activeConfigTooltip = gettext('Active configuration cannot be removed');
|
|
23
|
+
this.removeConfigTooltip = gettext('Remove configuration');
|
|
24
|
+
this.formBuilder = inject(FormBuilder);
|
|
25
|
+
this.workspaceConfigurationService = inject(WorkspaceConfigurationService);
|
|
26
|
+
this.contextRouteService = inject(ContextRouteService);
|
|
27
|
+
this.clipboardService = inject(ClipboardService);
|
|
28
|
+
this.activatedRoute = inject(ActivatedRoute);
|
|
29
|
+
this.router = inject(Router);
|
|
30
|
+
}
|
|
31
|
+
ngOnInit() {
|
|
32
|
+
this.initializeContextSourceId();
|
|
33
|
+
this.initializeConfigurations();
|
|
34
|
+
this.initWorkspaceForm();
|
|
35
|
+
}
|
|
36
|
+
ngOnChanges(changes) {
|
|
37
|
+
if (changes.updatedConfig && !changes.updatedConfig.firstChange) {
|
|
38
|
+
this.updateConfigurations();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
addConfig(duplicatedConfig) {
|
|
42
|
+
const name = uniqueNamesGenerator({
|
|
43
|
+
dictionaries: [adjectives, nouns]
|
|
44
|
+
});
|
|
45
|
+
const workspace = {
|
|
46
|
+
id: new Date().toISOString(),
|
|
47
|
+
label: name,
|
|
48
|
+
config: { datapoints: [], alarmsEventsConfigs: [] }
|
|
49
|
+
};
|
|
50
|
+
if (duplicatedConfig) {
|
|
51
|
+
workspace.config = duplicatedConfig;
|
|
52
|
+
}
|
|
53
|
+
this.currentConfiguration = { ...workspace };
|
|
54
|
+
this.configurations.unshift(workspace);
|
|
55
|
+
this.initWorkspaceForm();
|
|
56
|
+
this.workspaceConfigurationService.saveConfigurations(this.configurations, this.currentConfiguration.id);
|
|
57
|
+
this.onConfigurationChange.emit(this.currentConfiguration.config);
|
|
58
|
+
}
|
|
59
|
+
changeConfiguration(selected, configuration) {
|
|
60
|
+
if (!selected) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
this.currentConfiguration = configuration;
|
|
64
|
+
localStorage.setItem(this.workspaceConfigurationService.LOCAL_STORAGE_DEFAULT_ID_KEY, this.currentConfiguration.id);
|
|
65
|
+
this.onConfigurationChange.emit(configuration.config);
|
|
66
|
+
}
|
|
67
|
+
updateConfigurationLabel(configuration) {
|
|
68
|
+
this.configurations = this.configurations.map(c => c.id === configuration.id ? configuration : c);
|
|
69
|
+
this.workspaceConfigurationService.saveConfigurations(this.configurations, this.currentConfiguration?.id || '');
|
|
70
|
+
this.currentConfiguration = configuration;
|
|
71
|
+
this.onConfigurationChange.emit(configuration.config);
|
|
72
|
+
}
|
|
73
|
+
deleteConfiguration(configuration) {
|
|
74
|
+
this.configurations = this.configurations.filter(c => c.id !== configuration.id);
|
|
75
|
+
this.initWorkspaceForm();
|
|
76
|
+
this.workspaceConfigurationService.saveConfigurations(this.configurations, this.currentConfiguration?.id || '');
|
|
77
|
+
}
|
|
78
|
+
clearAll() {
|
|
79
|
+
this.configurations = [this.currentConfiguration];
|
|
80
|
+
this.initWorkspaceForm();
|
|
81
|
+
this.workspaceConfigurationService.saveConfigurations(this.configurations, this.currentConfiguration?.id || '');
|
|
82
|
+
}
|
|
83
|
+
async shareConfig(configuration) {
|
|
84
|
+
await this.clipboardService.writeText(JSON.stringify(configuration.config));
|
|
85
|
+
}
|
|
86
|
+
addConfigFromUrl(queryParams) {
|
|
87
|
+
this.addConfig();
|
|
88
|
+
const config = JSON.parse(queryParams.config);
|
|
89
|
+
this.onConfigurationChange.emit(config);
|
|
90
|
+
}
|
|
91
|
+
updateConfigurations() {
|
|
92
|
+
this.currentConfiguration.config = this.updatedConfig;
|
|
93
|
+
this.configurations = this.configurations.map(currentConfig => currentConfig.id === this.currentConfiguration.id ? this.currentConfiguration : currentConfig);
|
|
94
|
+
const queryParams = {
|
|
95
|
+
configId: this.currentConfiguration.id,
|
|
96
|
+
label: this.currentConfiguration.label,
|
|
97
|
+
config: JSON.stringify(this.updatedConfig)
|
|
98
|
+
};
|
|
99
|
+
this.workspaceConfigurationService.saveConfigurations(this.configurations, this.currentConfiguration.id);
|
|
100
|
+
this.router.navigate([], { queryParams });
|
|
101
|
+
}
|
|
102
|
+
initializeConfigurations() {
|
|
103
|
+
const configurations = this.workspaceConfigurationService.getConfigurations();
|
|
104
|
+
const defaultId = this.workspaceConfigurationService.getDefaultConfigurationId();
|
|
105
|
+
const queryParams = this.router.parseUrl(this.router.url).queryParams;
|
|
106
|
+
if (configurations.length) {
|
|
107
|
+
this.configurations = configurations;
|
|
108
|
+
this.currentConfiguration =
|
|
109
|
+
this.configurations.find(c => c.id === defaultId) || this.configurations[0];
|
|
110
|
+
this.onConfigurationChange.emit(this.currentConfiguration.config);
|
|
111
|
+
if (queryParams?.configId && !this.configurations.find(c => c.id === queryParams.configId)) {
|
|
112
|
+
this.addConfigFromUrl(queryParams);
|
|
113
|
+
}
|
|
114
|
+
else if (queryParams?.configId &&
|
|
115
|
+
this.configurations.find(c => c.id === queryParams.configId) &&
|
|
116
|
+
this.currentConfiguration.id !== queryParams.configId) {
|
|
117
|
+
this.currentConfiguration = this.configurations.find(c => c.id === queryParams.configId);
|
|
118
|
+
this.changeConfiguration(true, this.currentConfiguration);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (!this.currentConfiguration) {
|
|
122
|
+
if (Object.keys(queryParams).length === 0) {
|
|
123
|
+
this.addConfig();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
this.addConfigFromUrl(queryParams);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
initWorkspaceForm() {
|
|
130
|
+
this.configurationsFormGroup = this.formBuilder.group({
|
|
131
|
+
configurations: this.formBuilder.array([])
|
|
132
|
+
});
|
|
133
|
+
this.patchForm();
|
|
134
|
+
}
|
|
135
|
+
patchForm() {
|
|
136
|
+
const control = this.configurationsFormGroup.controls['configurations'];
|
|
137
|
+
this.configurations.forEach(workspace => {
|
|
138
|
+
control.push(this.patchValues(workspace));
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
patchValues(workspace) {
|
|
142
|
+
return this.formBuilder.group({
|
|
143
|
+
label: [workspace.label],
|
|
144
|
+
config: [workspace.config],
|
|
145
|
+
id: [workspace.id]
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
initializeContextSourceId() {
|
|
149
|
+
const routeContext = this.contextRouteService.getContextData(this.activatedRoute);
|
|
150
|
+
if (!routeContext) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const { context, contextData } = routeContext;
|
|
154
|
+
if ([ViewContext.Device, ViewContext.Group].includes(context)) {
|
|
155
|
+
this.workspaceConfigurationService.contextIdSignal.set(contextData?.id);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WorkspaceConfigComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
159
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: WorkspaceConfigComponent, isStandalone: true, selector: "c8y-workspace-config", inputs: { updatedConfig: "updatedConfig" }, outputs: { onConfigurationChange: "onConfigurationChange" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"dropdown\"\n #actionbar_dropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"actionbar_dropdown.isOpen\"\n dropdown\n [insideClick]=\"true\"\n>\n\n <button\n class=\"dropdown-toggle form-control l-h-tight d-flex a-i-center\"\n attr.aria-label=\"{{ currentConfiguration.label }}\"\n tooltip=\"{{ 'Selected configuration' | translate }}\"\n placement=\"top\"\n container=\"body\"\n data-cy=\"current-configuration-dropdown-button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n dropdownToggle\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"list\"\n ></i>\n <div class=\"d-col text-left fit-w\">\n <span class=\"text-12\">\n {{ 'Configuration' | translate }}\n </span>\n <span class=\"text-10 text-muted text-truncate\">\n {{ currentConfiguration.label }}\n </span>\n </div>\n <span class=\"caret m-r-16 m-l-4\"></span>\n </button>\n <div\n class=\"dropdown-menu dropdown-menu-wide dropdown-menu-action-bar\"\n *dropdownMenu\n >\n <div class=\"sticky-top separator-bottom p-t-8 p-b-8 p-l-16 p-r-16\">\n <p>\n <strong>{{ 'Data explorer configurations' | translate }}</strong>\n </p>\n <p>\n <small>{{ 'Easily switch and manage configurations.' | translate }}</small>\n </p>\n </div>\n <c8y-list-group class=\"no-border-last\">\n <form [formGroup]=\"configurationsFormGroup\">\n <div formArrayName=\"configurations\">\n <c8y-li\n class=\"p-0\"\n *ngFor=\"\n let configuration of configurationsFormGroup.controls.configurations['controls'];\n let i = index\n \"\n [dense]=\"true\"\n >\n <c8y-li-radio\n [selected]=\"configuration.value.id === currentConfiguration.id\"\n (onSelect)=\"changeConfiguration($event, configuration.value)\"\n ></c8y-li-radio>\n <div class=\"d-flex a-i-center gap-8\">\n <div\n class=\"flex-grow min-width-0\"\n [formGroupName]=\"i\"\n >\n <label\n class=\"editable\"\n [ngClass]=\"{\n updated:\n configuration.controls.label.touched && configuration.controls.label.dirty\n }\"\n >\n <input\n class=\"form-control\"\n [style.width.ch]=\"configuration.value.label || 25\"\n [attr.aria-label]=\"'Configuration label' | translate\"\n placeholder=\"{{ 'Configuration 1' | translate }}\"\n type=\"text\"\n autocomplete=\"off\"\n required\n formControlName=\"label\"\n (blur)=\"updateConfigurationLabel(configuration.value)\"\n />\n </label>\n </div>\n <div class=\"flex-nogrow d-flex gap-8\">\n <button\n class=\"btn-dot btn\"\n [attr.aria-label]=\"'Duplicate configuration' | translate\"\n tooltip=\"{{ 'Duplicate configuration' | translate }}\"\n placement=\"left\"\n (click)=\"addConfig(configuration.value.config)\"\n [delay]=\"500\"\n >\n <i c8yIcon=\"copy\"></i>\n </button>\n\n <button\n class=\"btn-dot btn btn-dot--danger\"\n [attr.aria-label]=\"'Remove configurations' | translate\"\n tooltip=\"{{\n (configuration.value.id === currentConfiguration.id\n ? activeConfigTooltip\n : removeConfigTooltip\n ) | translate\n }}\"\n placement=\"left\"\n [delay]=\"500\"\n (click)=\"$event.stopPropagation(); deleteConfiguration(configuration.value)\"\n [disabled]=\"configuration.value.id === currentConfiguration.id\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </div>\n </c8y-li>\n </div>\n </form>\n </c8y-list-group>\n <div class=\"sticky-bottom separator-top\">\n <div class=\"d-flex p-l-16 p-r-16 p-t-8 p-b-8\">\n <button\n class=\"btn btn-danger btn-sm flex-grow\"\n (click)=\"clearAll()\"\n [disabled]=\"configurations.length < 2\"\n >\n <i [c8yIcon]=\"'delete'\"></i>\n {{ 'Delete all configurations' | translate }}\n </button>\n <button\n class=\"btn btn-default btn-sm flex-grow\"\n type=\"button\"\n (click)=\"addConfig()\"\n >\n <i [c8yIcon]=\"'add-circle-outline'\"></i>\n {{ 'Add configuration' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i1.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i1.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i1.ListItemRadioComponent, selector: "c8y-list-item-radio, c8y-li-radio", inputs: ["selected", "name", "disabled", "value"], outputs: ["onSelect"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i3.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "directive", type: i4.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i4.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i4.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i5.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "ngmodule", type: TooltipModule }, { 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"] }] }); }
|
|
160
|
+
}
|
|
161
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WorkspaceConfigComponent, decorators: [{
|
|
162
|
+
type: Component,
|
|
163
|
+
args: [{ selector: 'c8y-workspace-config', standalone: true, imports: [CoreModule, BsDropdownModule, FormsModule, A11yModule, TooltipModule], template: "<div\n class=\"dropdown\"\n #actionbar_dropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"actionbar_dropdown.isOpen\"\n dropdown\n [insideClick]=\"true\"\n>\n\n <button\n class=\"dropdown-toggle form-control l-h-tight d-flex a-i-center\"\n attr.aria-label=\"{{ currentConfiguration.label }}\"\n tooltip=\"{{ 'Selected configuration' | translate }}\"\n placement=\"top\"\n container=\"body\"\n data-cy=\"current-configuration-dropdown-button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n dropdownToggle\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"list\"\n ></i>\n <div class=\"d-col text-left fit-w\">\n <span class=\"text-12\">\n {{ 'Configuration' | translate }}\n </span>\n <span class=\"text-10 text-muted text-truncate\">\n {{ currentConfiguration.label }}\n </span>\n </div>\n <span class=\"caret m-r-16 m-l-4\"></span>\n </button>\n <div\n class=\"dropdown-menu dropdown-menu-wide dropdown-menu-action-bar\"\n *dropdownMenu\n >\n <div class=\"sticky-top separator-bottom p-t-8 p-b-8 p-l-16 p-r-16\">\n <p>\n <strong>{{ 'Data explorer configurations' | translate }}</strong>\n </p>\n <p>\n <small>{{ 'Easily switch and manage configurations.' | translate }}</small>\n </p>\n </div>\n <c8y-list-group class=\"no-border-last\">\n <form [formGroup]=\"configurationsFormGroup\">\n <div formArrayName=\"configurations\">\n <c8y-li\n class=\"p-0\"\n *ngFor=\"\n let configuration of configurationsFormGroup.controls.configurations['controls'];\n let i = index\n \"\n [dense]=\"true\"\n >\n <c8y-li-radio\n [selected]=\"configuration.value.id === currentConfiguration.id\"\n (onSelect)=\"changeConfiguration($event, configuration.value)\"\n ></c8y-li-radio>\n <div class=\"d-flex a-i-center gap-8\">\n <div\n class=\"flex-grow min-width-0\"\n [formGroupName]=\"i\"\n >\n <label\n class=\"editable\"\n [ngClass]=\"{\n updated:\n configuration.controls.label.touched && configuration.controls.label.dirty\n }\"\n >\n <input\n class=\"form-control\"\n [style.width.ch]=\"configuration.value.label || 25\"\n [attr.aria-label]=\"'Configuration label' | translate\"\n placeholder=\"{{ 'Configuration 1' | translate }}\"\n type=\"text\"\n autocomplete=\"off\"\n required\n formControlName=\"label\"\n (blur)=\"updateConfigurationLabel(configuration.value)\"\n />\n </label>\n </div>\n <div class=\"flex-nogrow d-flex gap-8\">\n <button\n class=\"btn-dot btn\"\n [attr.aria-label]=\"'Duplicate configuration' | translate\"\n tooltip=\"{{ 'Duplicate configuration' | translate }}\"\n placement=\"left\"\n (click)=\"addConfig(configuration.value.config)\"\n [delay]=\"500\"\n >\n <i c8yIcon=\"copy\"></i>\n </button>\n\n <button\n class=\"btn-dot btn btn-dot--danger\"\n [attr.aria-label]=\"'Remove configurations' | translate\"\n tooltip=\"{{\n (configuration.value.id === currentConfiguration.id\n ? activeConfigTooltip\n : removeConfigTooltip\n ) | translate\n }}\"\n placement=\"left\"\n [delay]=\"500\"\n (click)=\"$event.stopPropagation(); deleteConfiguration(configuration.value)\"\n [disabled]=\"configuration.value.id === currentConfiguration.id\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n </div>\n </c8y-li>\n </div>\n </form>\n </c8y-list-group>\n <div class=\"sticky-bottom separator-top\">\n <div class=\"d-flex p-l-16 p-r-16 p-t-8 p-b-8\">\n <button\n class=\"btn btn-danger btn-sm flex-grow\"\n (click)=\"clearAll()\"\n [disabled]=\"configurations.length < 2\"\n >\n <i [c8yIcon]=\"'delete'\"></i>\n {{ 'Delete all configurations' | translate }}\n </button>\n <button\n class=\"btn btn-default btn-sm flex-grow\"\n type=\"button\"\n (click)=\"addConfig()\"\n >\n <i [c8yIcon]=\"'add-circle-outline'\"></i>\n {{ 'Add configuration' | translate }}\n </button>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
164
|
+
}], propDecorators: { updatedConfig: [{
|
|
165
|
+
type: Input
|
|
166
|
+
}], onConfigurationChange: [{
|
|
167
|
+
type: Output
|
|
168
|
+
}] } });
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vZGF0YXBvaW50LWV4cGxvcmVyL3ZpZXcvY29uZmlndXJhdGlvbi93b3Jrc3BhY2UtY29uZmlndXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9kYXRhcG9pbnQtZXhwbG9yZXIvdmlldy9jb25maWd1cmF0aW9uL3dvcmtzcGFjZS1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWEsV0FBVyxFQUFhLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixPQUFPLEVBQ1AsV0FBVyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR3RELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7QUFReEQsTUFBTSxPQUFPLHdCQUF3QjtJQU5yQztRQVFZLDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUErQixDQUFDO1FBR2xGLG1CQUFjLEdBQTZCLEVBQUUsQ0FBQztRQUU5Qyx3QkFBbUIsR0FBRyxPQUFPLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN4RSx3QkFBbUIsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUVyQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsQyxrQ0FBNkIsR0FBRyxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUN0RSx3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNsRCxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4QyxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBeUsxQztJQXZLQyxRQUFRO1FBQ04sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxhQUFhLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLGdCQUE4QztRQUN0RCxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQztZQUNoQyxZQUFZLEVBQUUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO1NBQ2xDLENBQUMsQ0FBQztRQUNILE1BQU0sU0FBUyxHQUEyQjtZQUN4QyxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDNUIsS0FBSyxFQUFFLElBQUk7WUFDWCxNQUFNLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsRUFBRTtTQUNwRCxDQUFDO1FBQ0YsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLFNBQVMsQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUM7UUFDdEMsQ0FBQztRQUNELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLDZCQUE2QixDQUFDLGtCQUFrQixDQUNuRCxJQUFJLENBQUMsY0FBYyxFQUNuQixJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUM3QixDQUFDO1FBQ0YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELG1CQUFtQixDQUFDLFFBQWlCLEVBQUUsYUFBcUM7UUFDMUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsYUFBYSxDQUFDO1FBQzFDLFlBQVksQ0FBQyxPQUFPLENBQ2xCLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyw0QkFBNEIsRUFDL0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FDN0IsQ0FBQztRQUNGLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxhQUFxQztRQUM1RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ2hELENBQUMsQ0FBQyxFQUFFLEtBQUssYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzlDLENBQUM7UUFDRixJQUFJLENBQUMsNkJBQTZCLENBQUMsa0JBQWtCLENBQ25ELElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxDQUNwQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGFBQWEsQ0FBQztRQUMxQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsYUFBcUM7UUFDdkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxrQkFBa0IsQ0FDbkQsSUFBSSxDQUFDLGNBQWMsRUFDbkIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLENBQ3BDLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsNkJBQTZCLENBQUMsa0JBQWtCLENBQ25ELElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxDQUNwQyxDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBcUM7UUFDckQsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFdBQWdCO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3RELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FDNUQsYUFBYSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FDOUYsQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLFFBQVEsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRTtZQUN0QyxLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUs7WUFDdEMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUMzQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLDZCQUE2QixDQUFDLGtCQUFrQixDQUNuRCxJQUFJLENBQUMsY0FBYyxFQUNuQixJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUM3QixDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzlFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ2pGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQ3RFLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxvQkFBb0I7Z0JBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTlFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLElBQUksV0FBVyxFQUFFLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDM0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7aUJBQU0sSUFDTCxXQUFXLEVBQUUsUUFBUTtnQkFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FBQyxRQUFRLENBQUM7Z0JBQzVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEtBQUssV0FBVyxDQUFDLFFBQVEsRUFDckQsQ0FBQztnQkFDRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDekYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUM1RCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUMvQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ2pCLE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNwRCxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQzNDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU8sU0FBUztRQUNmLE1BQU0sT0FBTyxHQUFjLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxXQUFXLENBQUMsU0FBaUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUM1QixLQUFLLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQ3hCLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDMUIsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8seUJBQXlCO1FBQy9CLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEdBQUcsWUFBWSxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsNkJBQTZCLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUUsQ0FBQztJQUNILENBQUM7OEdBdkxVLHdCQUF3QjtrR0FBeEIsd0JBQXdCLDhNQ2xDckMsdzlKQTZJQSwyQ0Q3R1ksVUFBVSxpekVBQUUsZ0JBQWdCLHNsQkFBRSxXQUFXLDhCQUFFLFVBQVUseUxBQUUsYUFBYTs7MkZBRW5FLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FFcEIsSUFBSSxXQUNQLENBQUMsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDOzhCQUd0RSxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLHFCQUFxQjtzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEExMXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBDbGlwYm9hcmRTZXJ2aWNlLFxuICBDb250ZXh0Um91dGVTZXJ2aWNlLFxuICBDb3JlTW9kdWxlLFxuICBnZXR0ZXh0LFxuICBWaWV3Q29udGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEJzRHJvcGRvd25Nb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2Ryb3Bkb3duJztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3Rvb2x0aXAnO1xuaW1wb3J0IHsgV29ya3NwYWNlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vd29ya3NwYWNlLWNvbmZpZ3VyYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9lY2hhcnQnO1xuaW1wb3J0IHsgV29ya3NwYWNlQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL3dvcmtzcGFjZS1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyB1bmlxdWVOYW1lc0dlbmVyYXRvciB9IGZyb20gJ3VuaXF1ZS1uYW1lcy1nZW5lcmF0b3InO1xuaW1wb3J0IHsgYWRqZWN0aXZlcywgbm91bnMgfSBmcm9tICcuL25hbWluZy1kaWN0aW9uYXJ5JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXdvcmtzcGFjZS1jb25maWcnLFxuICB0ZW1wbGF0ZVVybDogJy4vd29ya3NwYWNlLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29yZU1vZHVsZSwgQnNEcm9wZG93bk1vZHVsZSwgRm9ybXNNb2R1bGUsIEExMXlNb2R1bGUsIFRvb2x0aXBNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIFdvcmtzcGFjZUNvbmZpZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgdXBkYXRlZENvbmZpZzogRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnO1xuICBAT3V0cHV0KCkgb25Db25maWd1cmF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhcG9pbnRzR3JhcGhXaWRnZXRDb25maWc+KCk7XG5cbiAgY3VycmVudENvbmZpZ3VyYXRpb246IFdvcmtzcGFjZUNvbmZpZ3VyYXRpb247XG4gIGNvbmZpZ3VyYXRpb25zOiBXb3Jrc3BhY2VDb25maWd1cmF0aW9uW10gPSBbXTtcbiAgY29uZmlndXJhdGlvbnNGb3JtR3JvdXA6IEZvcm1Hcm91cDtcbiAgYWN0aXZlQ29uZmlnVG9vbHRpcCA9IGdldHRleHQoJ0FjdGl2ZSBjb25maWd1cmF0aW9uIGNhbm5vdCBiZSByZW1vdmVkJyk7XG4gIHJlbW92ZUNvbmZpZ1Rvb2x0aXAgPSBnZXR0ZXh0KCdSZW1vdmUgY29uZmlndXJhdGlvbicpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZm9ybUJ1aWxkZXIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtzcGFjZUNvbmZpZ3VyYXRpb25TZXJ2aWNlID0gaW5qZWN0KFdvcmtzcGFjZUNvbmZpZ3VyYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb250ZXh0Um91dGVTZXJ2aWNlID0gaW5qZWN0KENvbnRleHRSb3V0ZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNsaXBib2FyZFNlcnZpY2UgPSBpbmplY3QoQ2xpcGJvYXJkU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWN0aXZhdGVkUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbnRleHRTb3VyY2VJZCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbmZpZ3VyYXRpb25zKCk7XG4gICAgdGhpcy5pbml0V29ya3NwYWNlRm9ybSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLnVwZGF0ZWRDb25maWcgJiYgIWNoYW5nZXMudXBkYXRlZENvbmZpZy5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy51cGRhdGVDb25maWd1cmF0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIGFkZENvbmZpZyhkdXBsaWNhdGVkQ29uZmlnPzogRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IHVuaXF1ZU5hbWVzR2VuZXJhdG9yKHtcbiAgICAgIGRpY3Rpb25hcmllczogW2FkamVjdGl2ZXMsIG5vdW5zXVxuICAgIH0pO1xuICAgIGNvbnN0IHdvcmtzcGFjZTogV29ya3NwYWNlQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIGlkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBsYWJlbDogbmFtZSxcbiAgICAgIGNvbmZpZzogeyBkYXRhcG9pbnRzOiBbXSwgYWxhcm1zRXZlbnRzQ29uZmlnczogW10gfVxuICAgIH07XG4gICAgaWYgKGR1cGxpY2F0ZWRDb25maWcpIHtcbiAgICAgIHdvcmtzcGFjZS5jb25maWcgPSBkdXBsaWNhdGVkQ29uZmlnO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uID0geyAuLi53b3Jrc3BhY2UgfTtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLnVuc2hpZnQod29ya3NwYWNlKTtcbiAgICB0aGlzLmluaXRXb3Jrc3BhY2VGb3JtKCk7XG4gICAgdGhpcy53b3Jrc3BhY2VDb25maWd1cmF0aW9uU2VydmljZS5zYXZlQ29uZmlndXJhdGlvbnMoXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLFxuICAgICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbi5pZFxuICAgICk7XG4gICAgdGhpcy5vbkNvbmZpZ3VyYXRpb25DaGFuZ2UuZW1pdCh0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uLmNvbmZpZyk7XG4gIH1cblxuICBjaGFuZ2VDb25maWd1cmF0aW9uKHNlbGVjdGVkOiBib29sZWFuLCBjb25maWd1cmF0aW9uOiBXb3Jrc3BhY2VDb25maWd1cmF0aW9uKTogdm9pZCB7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIHRoaXMud29ya3NwYWNlQ29uZmlndXJhdGlvblNlcnZpY2UuTE9DQUxfU1RPUkFHRV9ERUZBVUxUX0lEX0tFWSxcbiAgICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24uaWRcbiAgICApO1xuICAgIHRoaXMub25Db25maWd1cmF0aW9uQ2hhbmdlLmVtaXQoY29uZmlndXJhdGlvbi5jb25maWcpO1xuICB9XG5cbiAgdXBkYXRlQ29uZmlndXJhdGlvbkxhYmVsKGNvbmZpZ3VyYXRpb246IFdvcmtzcGFjZUNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zID0gdGhpcy5jb25maWd1cmF0aW9ucy5tYXAoYyA9PlxuICAgICAgYy5pZCA9PT0gY29uZmlndXJhdGlvbi5pZCA/IGNvbmZpZ3VyYXRpb24gOiBjXG4gICAgKTtcbiAgICB0aGlzLndvcmtzcGFjZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLnNhdmVDb25maWd1cmF0aW9ucyhcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMsXG4gICAgICB0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uPy5pZCB8fCAnJ1xuICAgICk7XG4gICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgdGhpcy5vbkNvbmZpZ3VyYXRpb25DaGFuZ2UuZW1pdChjb25maWd1cmF0aW9uLmNvbmZpZyk7XG4gIH1cblxuICBkZWxldGVDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFdvcmtzcGFjZUNvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zID0gdGhpcy5jb25maWd1cmF0aW9ucy5maWx0ZXIoYyA9PiBjLmlkICE9PSBjb25maWd1cmF0aW9uLmlkKTtcbiAgICB0aGlzLmluaXRXb3Jrc3BhY2VGb3JtKCk7XG4gICAgdGhpcy53b3Jrc3BhY2VDb25maWd1cmF0aW9uU2VydmljZS5zYXZlQ29uZmlndXJhdGlvbnMoXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLFxuICAgICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbj8uaWQgfHwgJydcbiAgICApO1xuICB9XG5cbiAgY2xlYXJBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWd1cmF0aW9ucyA9IFt0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uXTtcbiAgICB0aGlzLmluaXRXb3Jrc3BhY2VGb3JtKCk7XG4gICAgdGhpcy53b3Jrc3BhY2VDb25maWd1cmF0aW9uU2VydmljZS5zYXZlQ29uZmlndXJhdGlvbnMoXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLFxuICAgICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbj8uaWQgfHwgJydcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgc2hhcmVDb25maWcoY29uZmlndXJhdGlvbjogV29ya3NwYWNlQ29uZmlndXJhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY2xpcGJvYXJkU2VydmljZS53cml0ZVRleHQoSlNPTi5zdHJpbmdpZnkoY29uZmlndXJhdGlvbi5jb25maWcpKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ29uZmlnRnJvbVVybChxdWVyeVBhcmFtczogYW55KTogdm9pZCB7XG4gICAgdGhpcy5hZGRDb25maWcoKTtcbiAgICBjb25zdCBjb25maWcgPSBKU09OLnBhcnNlKHF1ZXJ5UGFyYW1zLmNvbmZpZyk7XG4gICAgdGhpcy5vbkNvbmZpZ3VyYXRpb25DaGFuZ2UuZW1pdChjb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDb25maWd1cmF0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uLmNvbmZpZyA9IHRoaXMudXBkYXRlZENvbmZpZztcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zID0gdGhpcy5jb25maWd1cmF0aW9ucy5tYXAoY3VycmVudENvbmZpZyA9PlxuICAgICAgY3VycmVudENvbmZpZy5pZCA9PT0gdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbi5pZCA/IHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24gOiBjdXJyZW50Q29uZmlnXG4gICAgKTtcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHtcbiAgICAgIGNvbmZpZ0lkOiB0aGlzLmN1cnJlbnRDb25maWd1cmF0aW9uLmlkLFxuICAgICAgbGFiZWw6IHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24ubGFiZWwsXG4gICAgICBjb25maWc6IEpTT04uc3RyaW5naWZ5KHRoaXMudXBkYXRlZENvbmZpZylcbiAgICB9O1xuICAgIHRoaXMud29ya3NwYWNlQ29uZmlndXJhdGlvblNlcnZpY2Uuc2F2ZUNvbmZpZ3VyYXRpb25zKFxuICAgICAgdGhpcy5jb25maWd1cmF0aW9ucyxcbiAgICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24uaWRcbiAgICApO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IHF1ZXJ5UGFyYW1zIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29uZmlndXJhdGlvbnMoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbnMgPSB0aGlzLndvcmtzcGFjZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldENvbmZpZ3VyYXRpb25zKCk7XG4gICAgY29uc3QgZGVmYXVsdElkID0gdGhpcy53b3Jrc3BhY2VDb25maWd1cmF0aW9uU2VydmljZS5nZXREZWZhdWx0Q29uZmlndXJhdGlvbklkKCk7XG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpLnF1ZXJ5UGFyYW1zO1xuICAgIGlmIChjb25maWd1cmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbnMgPSBjb25maWd1cmF0aW9ucztcbiAgICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24gPVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25zLmZpbmQoYyA9PiBjLmlkID09PSBkZWZhdWx0SWQpIHx8IHRoaXMuY29uZmlndXJhdGlvbnNbMF07XG5cbiAgICAgIHRoaXMub25Db25maWd1cmF0aW9uQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbi5jb25maWcpO1xuICAgICAgaWYgKHF1ZXJ5UGFyYW1zPy5jb25maWdJZCAmJiAhdGhpcy5jb25maWd1cmF0aW9ucy5maW5kKGMgPT4gYy5pZCA9PT0gcXVlcnlQYXJhbXMuY29uZmlnSWQpKSB7XG4gICAgICAgIHRoaXMuYWRkQ29uZmlnRnJvbVVybChxdWVyeVBhcmFtcyk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBxdWVyeVBhcmFtcz8uY29uZmlnSWQgJiZcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9ucy5maW5kKGMgPT4gYy5pZCA9PT0gcXVlcnlQYXJhbXMuY29uZmlnSWQpICYmXG4gICAgICAgIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24uaWQgIT09IHF1ZXJ5UGFyYW1zLmNvbmZpZ0lkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbiA9IHRoaXMuY29uZmlndXJhdGlvbnMuZmluZChjID0+IGMuaWQgPT09IHF1ZXJ5UGFyYW1zLmNvbmZpZ0lkKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VDb25maWd1cmF0aW9uKHRydWUsIHRoaXMuY3VycmVudENvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5jdXJyZW50Q29uZmlndXJhdGlvbikge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1zKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5hZGRDb25maWcoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRDb25maWdGcm9tVXJsKHF1ZXJ5UGFyYW1zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRXb3Jrc3BhY2VGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbnNGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGNvbmZpZ3VyYXRpb25zOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKVxuICAgIH0pO1xuXG4gICAgdGhpcy5wYXRjaEZvcm0oKTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hGb3JtKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2wgPSA8Rm9ybUFycmF5PnRoaXMuY29uZmlndXJhdGlvbnNGb3JtR3JvdXAuY29udHJvbHNbJ2NvbmZpZ3VyYXRpb25zJ107XG4gICAgdGhpcy5jb25maWd1cmF0aW9ucy5mb3JFYWNoKHdvcmtzcGFjZSA9PiB7XG4gICAgICBjb250cm9sLnB1c2godGhpcy5wYXRjaFZhbHVlcyh3b3Jrc3BhY2UpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hWYWx1ZXMod29ya3NwYWNlOiBXb3Jrc3BhY2VDb25maWd1cmF0aW9uKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBsYWJlbDogW3dvcmtzcGFjZS5sYWJlbF0sXG4gICAgICBjb25maWc6IFt3b3Jrc3BhY2UuY29uZmlnXSxcbiAgICAgIGlkOiBbd29ya3NwYWNlLmlkXVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29udGV4dFNvdXJjZUlkKCk6IHZvaWQge1xuICAgIGNvbnN0IHJvdXRlQ29udGV4dCA9IHRoaXMuY29udGV4dFJvdXRlU2VydmljZS5nZXRDb250ZXh0RGF0YSh0aGlzLmFjdGl2YXRlZFJvdXRlKTtcbiAgICBpZiAoIXJvdXRlQ29udGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IGNvbnRleHQsIGNvbnRleHREYXRhIH0gPSByb3V0ZUNvbnRleHQ7XG4gICAgaWYgKFtWaWV3Q29udGV4dC5EZXZpY2UsIFZpZXdDb250ZXh0Lkdyb3VwXS5pbmNsdWRlcyhjb250ZXh0KSkge1xuICAgICAgdGhpcy53b3Jrc3BhY2VDb25maWd1cmF0aW9uU2VydmljZS5jb250ZXh0SWRTaWduYWwuc2V0KGNvbnRleHREYXRhPy5pZCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiZHJvcGRvd25cIlxuICAjYWN0aW9uYmFyX2Ryb3Bkb3duPVwiYnMtZHJvcGRvd25cIlxuICBbY2RrVHJhcEZvY3VzXT1cImFjdGlvbmJhcl9kcm9wZG93bi5pc09wZW5cIlxuICBkcm9wZG93blxuICBbaW5zaWRlQ2xpY2tdPVwidHJ1ZVwiXG4+XG5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiZHJvcGRvd24tdG9nZ2xlIGZvcm0tY29udHJvbCBsLWgtdGlnaHQgZC1mbGV4IGEtaS1jZW50ZXJcIlxuICAgIGF0dHIuYXJpYS1sYWJlbD1cInt7IGN1cnJlbnRDb25maWd1cmF0aW9uLmxhYmVsIH19XCJcbiAgICB0b29sdGlwPVwie3sgJ1NlbGVjdGVkIGNvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgIGRhdGEtY3k9XCJjdXJyZW50LWNvbmZpZ3VyYXRpb24tZHJvcGRvd24tYnV0dG9uXCJcbiAgICBbYWRhcHRpdmVQb3NpdGlvbl09XCJmYWxzZVwiXG4gICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgZHJvcGRvd25Ub2dnbGVcbiAgPlxuICAgIDxpXG4gICAgICBjbGFzcz1cIm0tci00XCJcbiAgICAgIGM4eUljb249XCJsaXN0XCJcbiAgICA+PC9pPlxuICAgIDxkaXYgY2xhc3M9XCJkLWNvbCB0ZXh0LWxlZnQgZml0LXdcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC0xMlwiPlxuICAgICAgICB7eyAnQ29uZmlndXJhdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC0xMCB0ZXh0LW11dGVkIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAge3sgY3VycmVudENvbmZpZ3VyYXRpb24ubGFiZWwgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBjbGFzcz1cImNhcmV0IG0tci0xNiBtLWwtNFwiPjwvc3Bhbj5cbiAgPC9idXR0b24+XG4gIDxkaXZcbiAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS13aWRlIGRyb3Bkb3duLW1lbnUtYWN0aW9uLWJhclwiXG4gICAgKmRyb3Bkb3duTWVudVxuICA+XG4gICAgPGRpdiBjbGFzcz1cInN0aWNreS10b3Agc2VwYXJhdG9yLWJvdHRvbSBwLXQtOCBwLWItOCBwLWwtMTYgcC1yLTE2XCI+XG4gICAgICA8cD5cbiAgICAgICAgPHN0cm9uZz57eyAnRGF0YSBleHBsb3JlciBjb25maWd1cmF0aW9ucycgfCB0cmFuc2xhdGUgfX08L3N0cm9uZz5cbiAgICAgIDwvcD5cbiAgICAgIDxwPlxuICAgICAgICA8c21hbGw+e3sgJ0Vhc2lseSBzd2l0Y2ggYW5kIG1hbmFnZSBjb25maWd1cmF0aW9ucy4nIHwgdHJhbnNsYXRlIH19PC9zbWFsbD5cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8Yzh5LWxpc3QtZ3JvdXAgY2xhc3M9XCJuby1ib3JkZXItbGFzdFwiPlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJjb25maWd1cmF0aW9uc0Zvcm1Hcm91cFwiPlxuICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJjb25maWd1cmF0aW9uc1wiPlxuICAgICAgICAgIDxjOHktbGlcbiAgICAgICAgICAgIGNsYXNzPVwicC0wXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICBsZXQgY29uZmlndXJhdGlvbiBvZiBjb25maWd1cmF0aW9uc0Zvcm1Hcm91cC5jb250cm9scy5jb25maWd1cmF0aW9uc1snY29udHJvbHMnXTtcbiAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtkZW5zZV09XCJ0cnVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Yzh5LWxpLXJhZGlvXG4gICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJjb25maWd1cmF0aW9uLnZhbHVlLmlkID09PSBjdXJyZW50Q29uZmlndXJhdGlvbi5pZFwiXG4gICAgICAgICAgICAgIChvblNlbGVjdCk9XCJjaGFuZ2VDb25maWd1cmF0aW9uKCRldmVudCwgY29uZmlndXJhdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgPjwvYzh5LWxpLXJhZGlvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhLWktY2VudGVyIGdhcC04XCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtZ3JvdyBtaW4td2lkdGgtMFwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkOlxuICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uY29udHJvbHMubGFiZWwudG91Y2hlZCAmJiBjb25maWd1cmF0aW9uLmNvbnRyb2xzLmxhYmVsLmRpcnR5XG4gICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGguY2hdPVwiY29uZmlndXJhdGlvbi52YWx1ZS5sYWJlbCB8fCAyNVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0NvbmZpZ3VyYXRpb24gbGFiZWwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnQ29uZmlndXJhdGlvbiAxJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJ1cGRhdGVDb25maWd1cmF0aW9uTGFiZWwoY29uZmlndXJhdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtbm9ncm93IGQtZmxleCBnYXAtOFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWRvdCBidG5cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInRHVwbGljYXRlIGNvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7eyAnRHVwbGljYXRlIGNvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZENvbmZpZyhjb25maWd1cmF0aW9uLnZhbHVlLmNvbmZpZylcIlxuICAgICAgICAgICAgICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cImNvcHlcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1kb3QgYnRuIGJ0bi1kb3QtLWRhbmdlclwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZW1vdmUgY29uZmlndXJhdGlvbnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXA9XCJ7e1xuICAgICAgICAgICAgICAgICAgICAoY29uZmlndXJhdGlvbi52YWx1ZS5pZCA9PT0gY3VycmVudENvbmZpZ3VyYXRpb24uaWRcbiAgICAgICAgICAgICAgICAgICAgICA/IGFjdGl2ZUNvbmZpZ1Rvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZUNvbmZpZ1Rvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgKSB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGRlbGV0ZUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbi52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbmZpZ3VyYXRpb24udmFsdWUuaWQgPT09IGN1cnJlbnRDb25maWd1cmF0aW9uLmlkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjOHlJY29uPVwibWludXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYzh5LWxpPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2M4eS1saXN0LWdyb3VwPlxuICAgIDxkaXYgY2xhc3M9XCJzdGlja3ktYm90dG9tIHNlcGFyYXRvci10b3BcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggcC1sLTE2IHAtci0xNiBwLXQtOCBwLWItOFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4tc20gZmxleC1ncm93XCJcbiAgICAgICAgICAoY2xpY2spPVwiY2xlYXJBbGwoKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImNvbmZpZ3VyYXRpb25zLmxlbmd0aCA8IDJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2RlbGV0ZSdcIj48L2k+XG4gICAgICAgICAge3sgJ0RlbGV0ZSBhbGwgY29uZmlndXJhdGlvbnMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIGZsZXgtZ3Jvd1wiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImFkZENvbmZpZygpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIFtjOHlJY29uXT1cIidhZGQtY2lyY2xlLW91dGxpbmUnXCI+PC9pPlxuICAgICAgICAgIHt7ICdBZGQgY29uZmlndXJhdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLWNvbmZpZ3VyYXRpb24ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9kYXRhcG9pbnQtZXhwbG9yZXIvdmlldy9jb25maWd1cmF0aW9uL3dvcmtzcGFjZS1jb25maWd1cmF0aW9uLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhcG9pbnRzR3JhcGhXaWRnZXRDb25maWcgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2VjaGFydCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlQ29uZmlndXJhdGlvbiB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGNvbmZpZzogRGF0YXBvaW50c0dyYXBoV2lkZ2V0Q29uZmlnO1xufVxuIl19
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { effect, Injectable, signal } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class WorkspaceConfigurationService {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.LOCAL_STORAGE_KEY = 'c8y-configs';
|
|
6
|
+
this.LOCAL_STORAGE_DEFAULT_ID_KEY = 'c8y-default-config-id';
|
|
7
|
+
this.contextIdSignal = signal(null);
|
|
8
|
+
effect(() => {
|
|
9
|
+
const signalValue = this.contextIdSignal();
|
|
10
|
+
if (signalValue !== null) {
|
|
11
|
+
this.LOCAL_STORAGE_KEY = `c8y-configs-${signalValue}`;
|
|
12
|
+
this.LOCAL_STORAGE_DEFAULT_ID_KEY = `c8y-default-config-id-${signalValue}`;
|
|
13
|
+
}
|
|
14
|
+
if (signalValue == null) {
|
|
15
|
+
this.LOCAL_STORAGE_KEY = 'c8y-configs';
|
|
16
|
+
this.LOCAL_STORAGE_DEFAULT_ID_KEY = 'c8y-default-config-id';
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
getConfigurations() {
|
|
21
|
+
const configurations = localStorage.getItem(this.LOCAL_STORAGE_KEY);
|
|
22
|
+
return configurations ? JSON.parse(configurations) : [];
|
|
23
|
+
}
|
|
24
|
+
getDefaultConfigurationId() {
|
|
25
|
+
return localStorage.getItem(this.LOCAL_STORAGE_DEFAULT_ID_KEY);
|
|
26
|
+
}
|
|
27
|
+
saveConfigurations(configurations, id) {
|
|
28
|
+
localStorage.setItem(this.LOCAL_STORAGE_KEY, JSON.stringify(configurations));
|
|
29
|
+
localStorage.setItem(this.LOCAL_STORAGE_DEFAULT_ID_KEY, id);
|
|
30
|
+
}
|
|
31
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WorkspaceConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
32
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WorkspaceConfigurationService, providedIn: 'root' }); }
|
|
33
|
+
}
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: WorkspaceConfigurationService, decorators: [{
|
|
35
|
+
type: Injectable,
|
|
36
|
+
args: [{
|
|
37
|
+
providedIn: 'root'
|
|
38
|
+
}]
|
|
39
|
+
}], ctorParameters: () => [] });
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLWNvbmZpZ3VyYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2RhdGFwb2ludC1leHBsb3Jlci92aWV3L2NvbmZpZ3VyYXRpb24vd29ya3NwYWNlLWNvbmZpZ3VyYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWtCLE1BQU0sZUFBZSxDQUFDOztBQU0zRSxNQUFNLE9BQU8sNkJBQTZCO0lBS3hDO1FBSkEsc0JBQWlCLEdBQUcsYUFBYSxDQUFDO1FBQ2xDLGlDQUE0QixHQUFHLHVCQUF1QixDQUFDO1FBQ3ZELG9CQUFlLEdBQTJDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUdyRSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzNDLElBQUksV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsZUFBZSxXQUFXLEVBQUUsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLDRCQUE0QixHQUFHLHlCQUF5QixXQUFXLEVBQUUsQ0FBQztZQUM3RSxDQUFDO1lBQ0QsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxhQUFhLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyx1QkFBdUIsQ0FBQztZQUM5RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNwRSxPQUFPLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzFELENBQUM7SUFFRCx5QkFBeUI7UUFDdkIsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxjQUF3QyxFQUFFLEVBQVU7UUFDckUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzdFLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7OEdBL0JVLDZCQUE2QjtrSEFBN0IsNkJBQTZCLGNBRjVCLE1BQU07OzJGQUVQLDZCQUE2QjtrQkFIekMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlZmZlY3QsIEluamVjdGFibGUsIHNpZ25hbCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFdvcmtzcGFjZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3dvcmtzcGFjZS1jb25maWd1cmF0aW9uLm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgV29ya3NwYWNlQ29uZmlndXJhdGlvblNlcnZpY2Uge1xuICBMT0NBTF9TVE9SQUdFX0tFWSA9ICdjOHktY29uZmlncyc7XG4gIExPQ0FMX1NUT1JBR0VfREVGQVVMVF9JRF9LRVkgPSAnYzh5LWRlZmF1bHQtY29uZmlnLWlkJztcbiAgY29udGV4dElkU2lnbmFsOiBXcml0YWJsZVNpZ25hbDxudW1iZXIgfCBzdHJpbmcgfCBudWxsPiA9IHNpZ25hbChudWxsKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgc2lnbmFsVmFsdWUgPSB0aGlzLmNvbnRleHRJZFNpZ25hbCgpO1xuICAgICAgaWYgKHNpZ25hbFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuTE9DQUxfU1RPUkFHRV9LRVkgPSBgYzh5LWNvbmZpZ3MtJHtzaWduYWxWYWx1ZX1gO1xuICAgICAgICB0aGlzLkxPQ0FMX1NUT1JBR0VfREVGQVVMVF9JRF9LRVkgPSBgYzh5LWRlZmF1bHQtY29uZmlnLWlkLSR7c2lnbmFsVmFsdWV9YDtcbiAgICAgIH1cbiAgICAgIGlmIChzaWduYWxWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuTE9DQUxfU1RPUkFHRV9LRVkgPSAnYzh5LWNvbmZpZ3MnO1xuICAgICAgICB0aGlzLkxPQ0FMX1NUT1JBR0VfREVGQVVMVF9JRF9LRVkgPSAnYzh5LWRlZmF1bHQtY29uZmlnLWlkJztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldENvbmZpZ3VyYXRpb25zKCk6IFdvcmtzcGFjZUNvbmZpZ3VyYXRpb25bXSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbnMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLkxPQ0FMX1NUT1JBR0VfS0VZKTtcbiAgICByZXR1cm4gY29uZmlndXJhdGlvbnMgPyBKU09OLnBhcnNlKGNvbmZpZ3VyYXRpb25zKSA6IFtdO1xuICB9XG5cbiAgZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb25JZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MT0NBTF9TVE9SQUdFX0RFRkFVTFRfSURfS0VZKTtcbiAgfVxuXG4gIHNhdmVDb25maWd1cmF0aW9ucyhjb25maWd1cmF0aW9uczogV29ya3NwYWNlQ29uZmlndXJhdGlvbltdLCBpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5MT0NBTF9TVE9SQUdFX0tFWSwgSlNPTi5zdHJpbmdpZnkoY29uZmlndXJhdGlvbnMpKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkxPQ0FMX1NUT1JBR0VfREVGQVVMVF9JRF9LRVksIGlkKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
3
|
+
import { CoreModule, gettext } from '@c8y/ngx-components';
|
|
4
|
+
import { ReportDashboardModule } from '@c8y/ngx-components/report-dashboard';
|
|
5
|
+
import { ContextDashboardService } from '@c8y/ngx-components/context-dashboard';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@c8y/ngx-components/context-dashboard";
|
|
8
|
+
import * as i2 from "@angular/forms";
|
|
9
|
+
import * as i3 from "@c8y/ngx-components";
|
|
10
|
+
export class CreateNewReportModalComponent {
|
|
11
|
+
constructor(contextDashboardService) {
|
|
12
|
+
this.contextDashboardService = contextDashboardService;
|
|
13
|
+
this.reportName = '';
|
|
14
|
+
this.labels = { cancel: gettext('Cancel'), ok: gettext('Send') };
|
|
15
|
+
this.result = new Promise((resolve, reject) => {
|
|
16
|
+
this._resolve = resolve;
|
|
17
|
+
this._reject = reject;
|
|
18
|
+
});
|
|
19
|
+
this.styling = {
|
|
20
|
+
themeClass: 'dashboard-theme-light',
|
|
21
|
+
headerClass: 'panel-title-regular'
|
|
22
|
+
};
|
|
23
|
+
this.DEFAULT_DASHBOARD_ICON = 'th';
|
|
24
|
+
this.DEFAULT_DASHBOARD_PRIORITY = 5000;
|
|
25
|
+
this.DEFAULT_DASHBOARD_MARGIN = 12;
|
|
26
|
+
}
|
|
27
|
+
async save() {
|
|
28
|
+
const dashboard = {
|
|
29
|
+
name: this.reportName,
|
|
30
|
+
icon: this.DEFAULT_DASHBOARD_ICON,
|
|
31
|
+
c8y_IsNavigatorNode: null,
|
|
32
|
+
priority: this.DEFAULT_DASHBOARD_PRIORITY,
|
|
33
|
+
description: '',
|
|
34
|
+
widgetMargin: this.DEFAULT_DASHBOARD_MARGIN,
|
|
35
|
+
classes: { [this.styling.headerClass]: true },
|
|
36
|
+
widgetClasses: { [this.styling.headerClass]: true }
|
|
37
|
+
};
|
|
38
|
+
try {
|
|
39
|
+
const { name, icon, c8y_IsNavigatorNode, priority, description } = dashboard;
|
|
40
|
+
const report = (await this.contextDashboardService.createReport({
|
|
41
|
+
name,
|
|
42
|
+
icon,
|
|
43
|
+
c8y_IsNavigatorNode,
|
|
44
|
+
priority,
|
|
45
|
+
description
|
|
46
|
+
})).data;
|
|
47
|
+
await this.contextDashboardService.create(dashboard, undefined, `${this.contextDashboardService.REPORT_PARTIAL_NAME}${report.id}`);
|
|
48
|
+
this._resolve(report);
|
|
49
|
+
}
|
|
50
|
+
catch (ex) {
|
|
51
|
+
this._reject(ex);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
cancel() {
|
|
55
|
+
this._reject();
|
|
56
|
+
}
|
|
57
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CreateNewReportModalComponent, deps: [{ token: i1.ContextDashboardService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
58
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: CreateNewReportModalComponent, isStandalone: true, selector: "c8y-create-new-report-modal", ngImport: i0, template: "<c8y-modal\n [title]=\"'Create new report with widget' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [disabled]=\"reportName === ''\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [labels]=\"labels\"\n>\n <ng-container c8y-modal-title>\n <span c8yIcon=\"c8y-reports\"></span>\n </ng-container>\n\n <p class=\"text-center bg-component text-balance sticky-top p-l-24 p-r-24 p-t-8 p-b-8 separator-bottom\">\n {{' Create a new report with the Data points graph widget using the current configuration.' | translate}}\n </p>\n <div class=\"p-24 p-t-8\">\n <c8y-form-group>\n <label\n for=\"reportName\"\n translate\n >\n Report name\n </label>\n <input\n class=\"form-control\"\n id=\"reportName\"\n placeholder=\"{{ 'e.g. My data point Report' }}\"\n name=\"name\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"reportName\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </div>\n</c8y-modal>\n", dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: CoreModule }, { 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: "component", type: i3.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "component", type: i3.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "ngmodule", type: ReportDashboardModule }] }); }
|
|
59
|
+
}
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CreateNewReportModalComponent, decorators: [{
|
|
61
|
+
type: Component,
|
|
62
|
+
args: [{ selector: 'c8y-create-new-report-modal', standalone: true, imports: [ReactiveFormsModule, CoreModule, ReportDashboardModule], template: "<c8y-modal\n [title]=\"'Create new report with widget' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [disabled]=\"reportName === ''\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [labels]=\"labels\"\n>\n <ng-container c8y-modal-title>\n <span c8yIcon=\"c8y-reports\"></span>\n </ng-container>\n\n <p class=\"text-center bg-component text-balance sticky-top p-l-24 p-r-24 p-t-8 p-b-8 separator-bottom\">\n {{' Create a new report with the Data points graph widget using the current configuration.' | translate}}\n </p>\n <div class=\"p-24 p-t-8\">\n <c8y-form-group>\n <label\n for=\"reportName\"\n translate\n >\n Report name\n </label>\n <input\n class=\"form-control\"\n id=\"reportName\"\n placeholder=\"{{ 'e.g. My data point Report' }}\"\n name=\"name\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"reportName\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n </div>\n</c8y-modal>\n" }]
|
|
63
|
+
}], ctorParameters: () => [{ type: i1.ContextDashboardService }] });
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW5ldy1yZXBvcnQtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vZGF0YXBvaW50LWV4cGxvcmVyL3ZpZXcvY3JlYXRlLW5ldy1yZXBvcnQtbW9kYWwvY3JlYXRlLW5ldy1yZXBvcnQtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vZGF0YXBvaW50LWV4cGxvcmVyL3ZpZXcvY3JlYXRlLW5ldy1yZXBvcnQtbW9kYWwvY3JlYXRlLW5ldy1yZXBvcnQtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBZSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7OztBQVNoRixNQUFNLE9BQU8sNkJBQTZCO0lBbUJ4QyxZQUFvQix1QkFBZ0Q7UUFBaEQsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQWxCcEUsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixXQUFNLEdBQWdCLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFFekUsV0FBTSxHQUFHLElBQUksT0FBTyxDQUFpQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN2RCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUVILFlBQU8sR0FBRztZQUNSLFVBQVUsRUFBRSx1QkFBdUI7WUFDbkMsV0FBVyxFQUFFLHFCQUFxQjtTQUNuQyxDQUFDO1FBRU8sMkJBQXNCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLCtCQUEwQixHQUFHLElBQUksQ0FBQztRQUNsQyw2QkFBd0IsR0FBRyxFQUFFLENBQUM7SUFHZ0MsQ0FBQztJQUV4RSxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVTtZQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLHNCQUFzQjtZQUNqQyxtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLFFBQVEsRUFBRSxJQUFJLENBQUMsMEJBQTBCO1lBQ3pDLFdBQVcsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLElBQUksQ0FBQyx3QkFBd0I7WUFDM0MsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRTtZQUM3QyxhQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFO1NBQ3BELENBQUM7UUFDRixJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEdBQUcsU0FBUyxDQUFDO1lBQzdFLE1BQU0sTUFBTSxHQUFHLENBQ2IsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDO2dCQUM5QyxJQUFJO2dCQUNKLElBQUk7Z0JBQ0osbUJBQW1CO2dCQUNuQixRQUFRO2dCQUNSLFdBQVc7YUFDZSxDQUFDLENBQzlCLENBQUMsSUFBSSxDQUFDO1lBRVAsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUN2QyxTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FDbEUsQ0FBQztZQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDOzhHQTFEVSw2QkFBNkI7a0dBQTdCLDZCQUE2Qix1RkNiMUMsNGlDQXFDQSwyQ0QxQlksbUJBQW1CLG1uQkFBRSxVQUFVLCtrQ0FBRSxxQkFBcUI7OzJGQUVyRCw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0UsNkJBQTZCLGNBRTNCLElBQUksV0FDUCxDQUFDLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvcmVNb2R1bGUsIGdldHRleHQsIE1vZGFsTGFiZWxzIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBSZXBvcnREYXNoYm9hcmRNb2R1bGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3JlcG9ydC1kYXNoYm9hcmQnO1xuaW1wb3J0IHsgQ29udGV4dERhc2hib2FyZFNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2NvbnRleHQtZGFzaGJvYXJkJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktY3JlYXRlLW5ldy1yZXBvcnQtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLW5ldy1yZXBvcnQtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZSwgQ29yZU1vZHVsZSwgUmVwb3J0RGFzaGJvYXJkTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBDcmVhdGVOZXdSZXBvcnRNb2RhbENvbXBvbmVudCB7XG4gIHJlcG9ydE5hbWUgPSAnJztcbiAgbGFiZWxzOiBNb2RhbExhYmVscyA9IHsgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSwgb2s6IGdldHRleHQoJ1NlbmQnKSB9O1xuXG4gIHJlc3VsdCA9IG5ldyBQcm9taXNlPElNYW5hZ2VkT2JqZWN0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xuICB9KTtcblxuICBzdHlsaW5nID0ge1xuICAgIHRoZW1lQ2xhc3M6ICdkYXNoYm9hcmQtdGhlbWUtbGlnaHQnLFxuICAgIGhlYWRlckNsYXNzOiAncGFuZWwtdGl0bGUtcmVndWxhcidcbiAgfTtcblxuICByZWFkb25seSBERUZBVUxUX0RBU0hCT0FSRF9JQ09OID0gJ3RoJztcbiAgcmVhZG9ubHkgREVGQVVMVF9EQVNIQk9BUkRfUFJJT1JJVFkgPSA1MDAwO1xuICByZWFkb25seSBERUZBVUxUX0RBU0hCT0FSRF9NQVJHSU4gPSAxMjtcbiAgcHJpdmF0ZSBfcmVzb2x2ZTogKHZhbHVlOiBJTWFuYWdlZE9iamVjdCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbnRleHREYXNoYm9hcmRTZXJ2aWNlOiBDb250ZXh0RGFzaGJvYXJkU2VydmljZSkge31cblxuICBhc3luYyBzYXZlKCkge1xuICAgIGNvbnN0IGRhc2hib2FyZCA9IHtcbiAgICAgIG5hbWU6IHRoaXMucmVwb3J0TmFtZSxcbiAgICAgIGljb246IHRoaXMuREVGQVVMVF9EQVNIQk9BUkRfSUNPTixcbiAgICAgIGM4eV9Jc05hdmlnYXRvck5vZGU6IG51bGwsXG4gICAgICBwcmlvcml0eTogdGhpcy5ERUZBVUxUX0RBU0hCT0FSRF9QUklPUklUWSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIHdpZGdldE1hcmdpbjogdGhpcy5ERUZBVUxUX0RBU0hCT0FSRF9NQVJHSU4sXG4gICAgICBjbGFzc2VzOiB7IFt0aGlzLnN0eWxpbmcuaGVhZGVyQ2xhc3NdOiB0cnVlIH0sXG4gICAgICB3aWRnZXRDbGFzc2VzOiB7IFt0aGlzLnN0eWxpbmcuaGVhZGVyQ2xhc3NdOiB0cnVlIH1cbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG5hbWUsIGljb24sIGM4eV9Jc05hdmlnYXRvck5vZGUsIHByaW9yaXR5LCBkZXNjcmlwdGlvbiB9ID0gZGFzaGJvYXJkO1xuICAgICAgY29uc3QgcmVwb3J0ID0gKFxuICAgICAgICBhd2FpdCB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmNyZWF0ZVJlcG9ydCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGM4eV9Jc05hdmlnYXRvck5vZGUsXG4gICAgICAgICAgcHJpb3JpdHksXG4gICAgICAgICAgZGVzY3JpcHRpb25cbiAgICAgICAgfSBhcyBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PilcbiAgICAgICkuZGF0YTtcblxuICAgICAgYXdhaXQgdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5jcmVhdGUoXG4gICAgICAgIGRhc2hib2FyZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBgJHt0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLlJFUE9SVF9QQVJUSUFMX05BTUV9JHtyZXBvcnQuaWR9YFxuICAgICAgKTtcblxuICAgICAgdGhpcy5fcmVzb2x2ZShyZXBvcnQpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLl9yZWplY3QoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9yZWplY3QoKTtcbiAgfVxufVxuIiwiPGM4eS1tb2RhbFxuICBbdGl0bGVdPVwiJ0NyZWF0ZSBuZXcgcmVwb3J0IHdpdGggd2lkZ2V0JyB8IHRyYW5zbGF0ZVwiXG4gIFtoZWFkZXJDbGFzc2VzXT1cIidkaWFsb2ctaGVhZGVyJ1wiXG4gIFtkaXNhYmxlZF09XCJyZXBvcnROYW1lID09PSAnJ1wiXG4gIChvbkRpc21pc3MpPVwiY2FuY2VsKClcIlxuICAob25DbG9zZSk9XCJzYXZlKClcIlxuICBbbGFiZWxzXT1cImxhYmVsc1wiXG4+XG4gIDxuZy1jb250YWluZXIgYzh5LW1vZGFsLXRpdGxlPlxuICAgIDxzcGFuIGM4eUljb249XCJjOHktcmVwb3J0c1wiPjwvc3Bhbj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPHAgY2xhc3M9XCJ0ZXh0LWNlbnRlciBiZy1jb21wb25lbnQgdGV4dC1iYWxhbmNlIHN0aWNreS10b3AgcC1sLTI0IHAtci0yNCBwLXQtOCBwLWItOCBzZXBhcmF0b3ItYm90dG9tXCI+XG4gICB7eycgQ3JlYXRlIGEgbmV3IHJlcG9ydCB3aXRoIHRoZSBEYXRhIHBvaW50cyBncmFwaCB3aWRnZXQgdXNpbmcgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4nIHwgdHJhbnNsYXRlfX1cbiAgPC9wPlxuICA8ZGl2IGNsYXNzPVwicC0yNCBwLXQtOFwiPlxuICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgIDxsYWJlbFxuICAgICAgICBmb3I9XCJyZXBvcnROYW1lXCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgID5cbiAgICAgICAgUmVwb3J0IG5hbWVcbiAgICAgIDwvbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBpZD1cInJlcG9ydE5hbWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuIE15IGRhdGEgcG9pbnQgUmVwb3J0JyB9fVwiXG4gICAgICAgIG5hbWU9XCJuYW1lXCJcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICByZXF1aXJlZFxuICAgICAgICBbKG5nTW9kZWwpXT1cInJlcG9ydE5hbWVcIlxuICAgICAgLz5cbiAgICAgIDxjOHktbWVzc2FnZXM+PC9jOHktbWVzc2FnZXM+XG4gICAgPC9jOHktZm9ybS1ncm91cD5cbiAgPC9kaXY+XG48L2M4eS1tb2RhbD5cbiJdfQ==
|