@c8y/ngx-components 1023.4.6 → 1023.6.3
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/fesm2022/c8y-ngx-components-actility-device-registration.mjs +16 -16
- package/fesm2022/c8y-ngx-components-actility-device-registration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-advanced-software-management.mjs +7 -7
- package/fesm2022/c8y-ngx-components-advanced-software-management.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs +9 -9
- package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs +12 -12
- package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ai.mjs +3 -3
- package/fesm2022/c8y-ngx-components-ai.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +34 -34
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +4 -4
- package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +76 -76
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-api.mjs +7 -7
- package/fesm2022/c8y-ngx-components-api.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-app-logs.mjs +10 -10
- package/fesm2022/c8y-ngx-components-app-logs.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-asset-properties.mjs +39 -39
- package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
- package/fesm2022/{c8y-ngx-components-asset-property-grid.component-B0Yspstg.mjs → c8y-ngx-components-asset-property-grid.component-B1q7kXRu.mjs} +13 -13
- package/fesm2022/{c8y-ngx-components-asset-property-grid.component-B0Yspstg.mjs.map → c8y-ngx-components-asset-property-grid.component-B1q7kXRu.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs +32 -32
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +114 -114
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-binary-file-download.mjs +7 -7
- package/fesm2022/c8y-ngx-components-binary-file-download.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-bookmarks.mjs +13 -13
- package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-base-branding.mjs +4 -4
- package/fesm2022/c8y-ngx-components-branding-base-branding.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs +7 -7
- package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs +7 -7
- package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor-lazy.mjs +3 -3
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs +7 -7
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +15 -15
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs +6 -6
- package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +36 -36
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared.mjs +13 -13
- package/fesm2022/c8y-ngx-components-branding-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-child-devices.mjs +13 -13
- package/fesm2022/c8y-ngx-components-child-devices.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-cockpit-config.mjs +40 -40
- package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-computed-asset-properties-alarm-count-config.component-Bl18pHcM.mjs +68 -0
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-BeFT75x1.mjs.map → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-Bl18pHcM.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-B8_RmTvv.mjs → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C5QMFdX1.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-B8_RmTvv.mjs.map → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C5QMFdX1.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-C-Lc5Ble.mjs +44 -0
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-event-count-config.component-BUxC3Tmh.mjs.map → c8y-ngx-components-computed-asset-properties-event-count-config.component-C-Lc5Ble.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-Dcmrw2Wg.mjs → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-BXfM7hTQ.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-Dcmrw2Wg.mjs.map → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-BXfM7hTQ.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs +6 -6
- package/fesm2022/c8y-ngx-components-connectivity.mjs +53 -53
- package/fesm2022/c8y-ngx-components-connectivity.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-asset-add.mjs +10 -10
- package/fesm2022/c8y-ngx-components-context-dashboard-asset-add.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-asset-view.mjs +7 -7
- package/fesm2022/c8y-ngx-components-context-dashboard-asset-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs +11 -11
- package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs.map +1 -1
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-C30if8-Q.mjs → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BuGMpNrA.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-C30if8-Q.mjs.map → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BuGMpNrA.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-FBfdlVT1.mjs → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DN-f35bA.mjs} +10 -10
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-FBfdlVT1.mjs.map → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DN-f35bA.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-DrVQS63v.mjs → c8y-ngx-components-context-dashboard-dashboard-version-history.component-BlIVEV__.mjs} +4 -4
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-DrVQS63v.mjs.map → c8y-ngx-components-context-dashboard-dashboard-version-history.component-BlIVEV__.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-device-add.mjs +10 -10
- package/fesm2022/c8y-ngx-components-context-dashboard-device-add.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-device-view.mjs +7 -7
- package/fesm2022/c8y-ngx-components-context-dashboard-device-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-devicemanagement.mjs +3 -3
- package/fesm2022/c8y-ngx-components-context-dashboard-devicemanagement.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-state.mjs +3 -3
- package/fesm2022/c8y-ngx-components-context-dashboard-state.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +102 -102
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-BHmaZVgy.mjs → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-m7YeEj9R.mjs} +16 -16
- package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-BHmaZVgy.mjs.map → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-m7YeEj9R.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +12 -12
- package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-dashboard-manager-devicemanagement.mjs +6 -6
- package/fesm2022/c8y-ngx-components-dashboard-manager-devicemanagement.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +22 -22
- package/fesm2022/c8y-ngx-components-dashboard-manager.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-broker.mjs +7 -7
- package/fesm2022/c8y-ngx-components-data-broker.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs +3 -3
- package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns.mjs +3 -3
- package/fesm2022/c8y-ngx-components-data-grid-columns.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +24 -24
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +7 -7
- package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs +3 -3
- package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +3 -3
- package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-services.mjs +3 -3
- package/fesm2022/c8y-ngx-components-datapoint-library-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library.mjs +4 -4
- package/fesm2022/c8y-ngx-components-datapoint-library.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +40 -40
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +33 -33
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-default-subscriptions.mjs +16 -16
- package/fesm2022/c8y-ngx-components-default-subscriptions.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs +43 -43
- package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-list.mjs +22 -22
- package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-map.mjs +12 -12
- package/fesm2022/c8y-ngx-components-device-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs +34 -34
- package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs +3 -3
- package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-protocols.mjs +16 -16
- package/fesm2022/c8y-ngx-components-device-protocols.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +13 -13
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-shell.mjs +31 -31
- package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-diagnostics.mjs +13 -13
- package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart.mjs +30 -30
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +43 -43
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs +7 -7
- package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs +10 -10
- package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs +7 -7
- package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +46 -46
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +82 -82
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-editor.mjs +6 -6
- package/fesm2022/c8y-ngx-components-editor.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +3 -3
- package/fesm2022/c8y-ngx-components-events-events-timeline.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-events.mjs +3 -3
- package/fesm2022/c8y-ngx-components-events.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-exports-list.mjs +6 -6
- package/fesm2022/c8y-ngx-components-exports-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-file-preview.mjs +7 -7
- package/fesm2022/c8y-ngx-components-file-preview.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-files-repository.mjs +19 -19
- package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-global-context.mjs +118 -118
- package/fesm2022/c8y-ngx-components-global-context.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector.mjs +19 -19
- package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-interval-picker.mjs +3 -3
- package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-location.mjs +28 -28
- package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs +16 -16
- package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-map.mjs +19 -19
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-messaging-management.mjs +55 -55
- package/fesm2022/c8y-ngx-components-messaging-management.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +19 -19
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-service.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-service.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +3 -3
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-device-selector.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-device-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs +12 -12
- package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operation-details.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-operation-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs +10 -10
- package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +12 -12
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-shared.mjs +10 -10
- package/fesm2022/c8y-ngx-components-operations-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-status-filter.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations-status-filter.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +7 -7
- 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 +13 -13
- 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 +13 -13
- 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 +13 -13
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs +13 -13
- package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations.mjs +7 -7
- package/fesm2022/c8y-ngx-components-operations.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-pending-mo-request.mjs +7 -7
- package/fesm2022/c8y-ngx-components-pending-mo-request.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-platform-configuration.mjs +10 -10
- package/fesm2022/c8y-ngx-components-platform-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +38 -38
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +58 -58
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-register-device.mjs +58 -58
- package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +9 -9
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +6 -6
- package/fesm2022/c8y-ngx-components-remote-access-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +6 -6
- package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs +6 -6
- package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-replace-device.mjs +10 -10
- package/fesm2022/c8y-ngx-components-replace-device.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs +16 -16
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-reports.mjs +19 -19
- package/fesm2022/c8y-ngx-components-reports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +48 -48
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +33 -33
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +34 -34
- package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs +42 -42
- package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository.mjs +4 -4
- package/fesm2022/c8y-ngx-components-repository.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-search.mjs +19 -19
- package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +6 -6
- package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sensor-phone.mjs +7 -7
- package/fesm2022/c8y-ngx-components-sensor-phone.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs +3 -3
- package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services-shared.mjs +3 -3
- package/fesm2022/c8y-ngx-components-services-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services.mjs +29 -29
- package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs +16 -16
- package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sms-gateway.mjs +7 -7
- package/fesm2022/c8y-ngx-components-sms-gateway.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-static-assets-data.mjs +3 -3
- package/fesm2022/c8y-ngx-components-static-assets-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-static-assets-modal.mjs +9 -9
- package/fesm2022/c8y-ngx-components-static-assets-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-static-assets.mjs +6 -6
- package/fesm2022/c8y-ngx-components-static-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs +60 -60
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tenants.mjs +41 -41
- package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-time-context.mjs +6 -6
- package/fesm2022/c8y-ngx-components-time-context.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tracking.mjs +12 -12
- package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +3 -3
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +12 -12
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor.mjs +6 -6
- package/fesm2022/c8y-ngx-components-translation-editor.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +33 -33
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs +4 -4
- package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs +62 -43
- package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-user-roles.mjs +10 -10
- package/fesm2022/c8y-ngx-components-user-roles.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-exports.mjs +8 -1
- package/fesm2022/c8y-ngx-components-widgets-exports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +19 -19
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-legacy-welcome.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-legacy-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +27 -27
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs +7 -7
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +24 -24
- package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +18 -18
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +6 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +18 -18
- package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs +9 -9
- package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-widget-providers.mjs +5 -2
- package/fesm2022/c8y-ngx-components-widgets-widget-providers.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +1329 -1325
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/index.d.ts +7 -0
- package/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/upgrade/index.d.ts +1 -0
- package/upgrade/index.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/device-management-exports/index.d.ts +6 -0
- package/widgets/device-management-exports/index.d.ts.map +1 -1
- package/widgets/exports/index.d.ts +8 -1
- package/widgets/exports/index.d.ts.map +1 -1
- package/widgets/widget-providers/index.d.ts.map +1 -1
- package/fesm2022/c8y-ngx-components-computed-asset-properties-alarm-count-config.component-BeFT75x1.mjs +0 -68
- package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-BUxC3Tmh.mjs +0 -44
|
@@ -50,10 +50,10 @@ class VncCredentialsPromptComponent {
|
|
|
50
50
|
this.modalRef.hide();
|
|
51
51
|
this.save();
|
|
52
52
|
}
|
|
53
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
54
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
53
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: VncCredentialsPromptComponent, deps: [{ token: i1.FormBuilder }, { token: i2.BsModalRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
54
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: VncCredentialsPromptComponent, isStandalone: true, selector: "c8y-vnc-credentials-prompt", inputs: { types: "types" }, ngImport: i0, template: "<c8y-modal\n [title]=\"title\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'key'\"></span>\n </ng-container>\n <form\n class=\"p-24\"\n [formGroup]=\"form\"\n (submit)=\"submit()\"\n >\n <c8y-form-group *ngIf=\"showUsername\">\n <label\n for=\"username\"\n translate\n >\n Username\n </label>\n <input\n class=\"form-control\"\n id=\"username\"\n name=\"username\"\n type=\"text\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'admin' }\"\n formControlName=\"username\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label\n for=\"password\"\n translate\n >\n Password\n </label>\n <input\n class=\"form-control\"\n id=\"password\"\n name=\"password\"\n type=\"password\"\n formControlName=\"password\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n\n <button type=\"submit\" class=\"hidden\">hidden submit</button>\n </form>\n</c8y-modal>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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: "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: "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: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
|
|
55
55
|
}
|
|
56
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
56
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: VncCredentialsPromptComponent, decorators: [{
|
|
57
57
|
type: Component,
|
|
58
58
|
args: [{ selector: 'c8y-vnc-credentials-prompt', standalone: true, imports: [CoreModule, NgIf], template: "<c8y-modal\n [title]=\"title\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'key'\"></span>\n </ng-container>\n <form\n class=\"p-24\"\n [formGroup]=\"form\"\n (submit)=\"submit()\"\n >\n <c8y-form-group *ngIf=\"showUsername\">\n <label\n for=\"username\"\n translate\n >\n Username\n </label>\n <input\n class=\"form-control\"\n id=\"username\"\n name=\"username\"\n type=\"text\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'admin' }\"\n formControlName=\"username\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label\n for=\"password\"\n translate\n >\n Password\n </label>\n <input\n class=\"form-control\"\n id=\"password\"\n name=\"password\"\n type=\"password\"\n formControlName=\"password\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n\n <button type=\"submit\" class=\"hidden\">hidden submit</button>\n </form>\n</c8y-modal>\n" }]
|
|
59
59
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.BsModalRef }], propDecorators: { types: [{
|
|
@@ -186,10 +186,10 @@ class VncViewerComponent {
|
|
|
186
186
|
this.noVNCClient.disconnect();
|
|
187
187
|
}
|
|
188
188
|
}
|
|
189
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
190
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
189
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: VncViewerComponent, deps: [{ token: i1$1.RemoteAccessService }, { token: i2$1.ActivatedRoute }, { token: i2.BsModalService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
190
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: VncViewerComponent, isStandalone: true, selector: "c8y-vnc-viewer", ngImport: i0, template: "<c8y-title>{{ titlePrefix | translate }}: {{ title | translate }}</c8y-title>\n\n<ng-container *ngIf=\"status === 'connected'\">\n <c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n (click)=\"toggleFullscreen()\"\n >\n <i [c8yIcon]=\"'expand'\"></i>\n <span translate>Fullscreen</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n (click)=\"downloadScreenshot()\"\n >\n <i [c8yIcon]=\"'download'\"></i>\n <span translate>Screenshot</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'more'\">\n <button\n class=\"btn btn-link\"\n (click)=\"sendCtrlAltDel()\"\n >\n <i [c8yIcon]=\"'keyboard'\"></i>\n <span translate>Send Ctrl+Alt+Del</span>\n </button>\n </c8y-action-bar-item>\n</ng-container>\n\n<ng-container *ngIf=\"powerCapability && status === 'connected'\">\n <c8y-action-bar-item [placement]=\"'more'\">\n <button\n class=\"btn btn-link\"\n (click)=\"sendShutDown()\"\n >\n <i [c8yIcon]=\"'shutdown'\"></i>\n <span translate>Shutdown</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'more'\">\n <button\n class=\"btn btn-link\"\n (click)=\"sendReboot()\"\n >\n <i [c8yIcon]=\"'reset'\"></i>\n <span translate>Reboot</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'more'\">\n <button\n class=\"btn btn-link\"\n (click)=\"sendReset()\"\n >\n <i [c8yIcon]=\"'reset'\"></i>\n <span translate>Reset</span>\n </button>\n </c8y-action-bar-item>\n</ng-container>\n\n<c8y-loading *ngIf=\"status === 'connecting'\"></c8y-loading>\n\n<div\n class=\"content-fullpage\"\n [ngClass]=\"{ hidden: status !== 'connected' }\"\n>\n <div\n class=\"inner-scroll\"\n id=\"vnc-screen\"\n ></div>\n</div>\n", dependencies: [{ kind: "component", type: TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
|
|
191
191
|
}
|
|
192
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
192
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: VncViewerComponent, decorators: [{
|
|
193
193
|
type: Component,
|
|
194
194
|
args: [{ selector: 'c8y-vnc-viewer', standalone: true, imports: [
|
|
195
195
|
C8yTranslatePipe,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs","sources":["../../remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.ts","../../remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.html","../../remote-access/vnc/vnc-viewer/vnc-viewer.component.ts","../../remote-access/vnc/vnc-viewer/vnc-viewer.component.html","../../remote-access/vnc/vnc-viewer/c8y-ngx-components-remote-access-vnc-vnc-viewer.ts"],"sourcesContent":["import { NgIf } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { CoreModule } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport type { NoVncCredentials } from '@novnc/novnc/lib/rfb';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n\n@Component({\n selector: 'c8y-vnc-credentials-prompt',\n templateUrl: './vnc-credentials-prompt.component.html',\n standalone: true,\n imports: [CoreModule, NgIf]\n})\nexport class VncCredentialsPromptComponent implements OnInit {\n title = gettext('VNC credentials');\n @Input() types: Array<keyof NoVncCredentials> = [];\n result = new Promise<ReturnType<typeof this.initForm>['value']>((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n selectedType: string;\n showUsername = false;\n\n form: ReturnType<typeof this.initForm>;\n\n private _resolve: (value: ReturnType<typeof this.initForm>['value']) => void;\n private _reject: (reason?: any) => void;\n\n constructor(\n private formBuilder: FormBuilder,\n private modalRef: BsModalRef\n ) {\n this.form = this.initForm();\n }\n\n ngOnInit() {\n this.showUsername = this.types.includes('username');\n this.form = this.initForm();\n }\n\n initForm() {\n return this.formBuilder.group({\n username: [undefined as string, this.showUsername ? [Validators.required] : []],\n password: [undefined as string, [Validators.required]]\n });\n }\n\n cancel() {\n this._reject();\n }\n\n save() {\n this._resolve(this.form.value);\n }\n\n submit() {\n if (!this.form.valid) {\n return;\n }\n this.modalRef.hide();\n this.save();\n }\n}\n","<c8y-modal\n [title]=\"title\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'key'\"></span>\n </ng-container>\n <form\n class=\"p-24\"\n [formGroup]=\"form\"\n (submit)=\"submit()\"\n >\n <c8y-form-group *ngIf=\"showUsername\">\n <label\n for=\"username\"\n translate\n >\n Username\n </label>\n <input\n class=\"form-control\"\n id=\"username\"\n name=\"username\"\n type=\"text\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'admin' }\"\n formControlName=\"username\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label\n for=\"password\"\n translate\n >\n Password\n </label>\n <input\n class=\"form-control\"\n id=\"password\"\n name=\"password\"\n type=\"password\"\n formControlName=\"password\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n\n <button type=\"submit\" class=\"hidden\">hidden submit</button>\n </form>\n</c8y-modal>\n","import { AfterViewInit, Component, OnDestroy } from '@angular/core';\nimport {\n ActionBarItemComponent,\n C8yTranslateDirective,\n C8yTranslatePipe,\n IconDirective,\n LoadingComponent,\n TitleComponent\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport type { NoVncCredentials, NoVncOptions, default as NoVncClient } from '@novnc/novnc/lib/rfb';\nimport { RemoteAccessService } from '@c8y/ngx-components/remote-access/data';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgClass, NgIf } from '@angular/common';\nimport { saveAs } from 'file-saver';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { VncCredentialsPromptComponent } from './vnc-credentials-prompt/vnc-credentials-prompt.component';\nimport { BehaviorSubject, combineLatest, defer, Subscription } from 'rxjs';\nimport { distinctUntilChanged, filter, map } from 'rxjs/operators';\n\n@Component({\n selector: 'c8y-vnc-viewer',\n templateUrl: './vnc-viewer.component.html',\n standalone: true,\n imports: [\n C8yTranslatePipe,\n TitleComponent,\n ActionBarItemComponent,\n C8yTranslateDirective,\n IconDirective,\n NgIf,\n NgClass,\n LoadingComponent\n ]\n})\nexport class VncViewerComponent implements AfterViewInit, OnDestroy {\n titlePrefix = gettext('VNC viewer');\n title = '';\n container: HTMLElement | null = null;\n noVNCClient: NoVncClient;\n powerCapability = false;\n\n status: 'connecting' | 'connected' | 'disconnected' = 'connecting';\n container$ = new BehaviorSubject<HTMLElement | null>(null);\n\n connectionSubscription: Subscription;\n\n constructor(\n private remoteAccess: RemoteAccessService,\n private activatedRoute: ActivatedRoute,\n private modalService: BsModalService\n ) {\n const container$ = this.container$.pipe(filter(Boolean));\n const configurationId$ = this.activatedRoute.params.pipe(\n map(params => params.configurationId),\n filter(Boolean),\n distinctUntilChanged()\n );\n const deviceId$ = this.activatedRoute.parent.params.pipe(\n map(params => params.id),\n filter(Boolean),\n distinctUntilChanged()\n );\n\n this.connectionSubscription = combineLatest([\n container$,\n deviceId$,\n configurationId$,\n defer(() => this.getNoVNCClient())\n ]).subscribe(([container, deviceId, configurationId, noVNC]) => {\n this.disconnectFromOldSession();\n this.connect(container, deviceId, configurationId, noVNC);\n });\n }\n\n ngOnDestroy(): void {\n this.connectionSubscription?.unsubscribe();\n this.disconnectFromOldSession();\n }\n\n ngAfterViewInit(): void {\n this.container$.next(document.getElementById('vnc-screen'));\n }\n\n disconnectFromOldSession() {\n this.powerCapability = false;\n this.title = '';\n if (!this.noVNCClient) {\n return;\n }\n\n this.noVNCClient.disconnect();\n delete this.noVNCClient;\n }\n\n connect(container: HTMLElement, deviceId: string, configId: string, noVNC: typeof NoVncClient) {\n this.container = container;\n this.changeStatus('connecting');\n const options: NoVncOptions = {\n wsProtocols: ['binary']\n };\n const uri = this.remoteAccess.getWebSocketUri(deviceId, configId);\n this.noVNCClient = new noVNC(container, uri, options);\n this.noVNCClient.resizeSession = true;\n this.noVNCClient.scaleViewport = true;\n this.noVNCClient.showDotCursor = true;\n this.noVNCClient.viewOnly = false;\n this.noVNCClient.qualityLevel = 6;\n // need to set compressionLevel to something different than the default 2 as 2 seems to be causing issues..\n this.noVNCClient.compressionLevel = 9;\n this.noVNCClient.addEventListener('connect', _e => {\n this.changeStatus('connected');\n this.noVNCClient.focus();\n });\n this.noVNCClient.addEventListener('credentialsrequired', e => {\n this.requestCredentials(e.detail.types);\n });\n this.noVNCClient.addEventListener('desktopname', e => {\n this.title = e.detail.name;\n });\n this.noVNCClient.addEventListener('disconnect', () => {\n this.changeStatus('disconnected');\n });\n this.noVNCClient.addEventListener('capabilities', e => {\n this.powerCapability = e.detail.capabilities.power;\n });\n }\n\n downloadScreenshot() {\n this.noVNCClient.toBlob(\n blob => {\n const date = new Date().toISOString();\n saveAs(blob, `screenshot-${this.title}-${date}.png`);\n },\n 'image/png',\n 1\n );\n }\n\n changeStatus(status: 'connecting' | 'connected' | 'disconnected') {\n this.status = status;\n }\n\n toggleFullscreen() {\n if (document.fullscreenElement) {\n document.exitFullscreen();\n } else {\n this.container.requestFullscreen();\n }\n }\n\n sendCtrlAltDel() {\n this.noVNCClient.sendCtrlAltDel();\n }\n\n sendShutDown() {\n this.noVNCClient.machineShutdown();\n }\n\n sendReset() {\n this.noVNCClient.machineReset();\n }\n\n sendReboot() {\n this.noVNCClient.machineReboot();\n }\n\n async getNoVNCClient(): Promise<typeof NoVncClient> {\n const lib = await import('@novnc/novnc/lib/rfb');\n if (typeof lib.default === 'function') {\n return lib.default;\n }\n const libDefault = lib.default as unknown as { default: typeof NoVncClient };\n if (typeof libDefault.default === 'function') {\n return libDefault.default;\n }\n\n throw new Error('NoVNC library not found');\n }\n\n protected async requestCredentials(types: Array<keyof NoVncCredentials>) {\n const modalRef = this.modalService.show(VncCredentialsPromptComponent, {\n ignoreBackdropClick: true,\n keyboard: false,\n initialState: { types: types }\n });\n\n try {\n const { username, password } = await modalRef.content.result;\n this.noVNCClient.sendCredentials({ username, password, target: undefined });\n } catch (e) {\n this.noVNCClient.disconnect();\n }\n }\n}\n","<c8y-title>{{ titlePrefix | translate }}: {{ title | translate }}</c8y-title>\n\n<ng-container *ngIf=\"status === 'connected'\">\n <c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n (click)=\"toggleFullscreen()\"\n >\n <i [c8yIcon]=\"'expand'\"></i>\n <span translate>Fullscreen</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n (click)=\"downloadScreenshot()\"\n >\n <i [c8yIcon]=\"'download'\"></i>\n <span translate>Screenshot</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'more'\">\n <button\n class=\"btn btn-link\"\n (click)=\"sendCtrlAltDel()\"\n >\n <i [c8yIcon]=\"'keyboard'\"></i>\n <span translate>Send Ctrl+Alt+Del</span>\n </button>\n </c8y-action-bar-item>\n</ng-container>\n\n<ng-container *ngIf=\"powerCapability && status === 'connected'\">\n <c8y-action-bar-item [placement]=\"'more'\">\n <button\n class=\"btn btn-link\"\n (click)=\"sendShutDown()\"\n >\n <i [c8yIcon]=\"'shutdown'\"></i>\n <span translate>Shutdown</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'more'\">\n <button\n class=\"btn btn-link\"\n (click)=\"sendReboot()\"\n >\n <i [c8yIcon]=\"'reset'\"></i>\n <span translate>Reboot</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'more'\">\n <button\n class=\"btn btn-link\"\n (click)=\"sendReset()\"\n >\n <i [c8yIcon]=\"'reset'\"></i>\n <span translate>Reset</span>\n </button>\n </c8y-action-bar-item>\n</ng-container>\n\n<c8y-loading *ngIf=\"status === 'connecting'\"></c8y-loading>\n\n<div\n class=\"content-fullpage\"\n [ngClass]=\"{ hidden: status !== 'connected' }\"\n>\n <div\n class=\"inner-scroll\"\n id=\"vnc-screen\"\n ></div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3"],"mappings":";;;;;;;;;;;;;;;;MAca,6BAA6B,CAAA;IAexC,WAAA,CACU,WAAwB,EACxB,QAAoB,EAAA;QADpB,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,QAAQ,GAAR,QAAQ;AAhBlB,QAAA,IAAA,CAAA,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACzB,IAAA,CAAA,KAAK,GAAkC,EAAE;QAClD,IAAA,CAAA,MAAM,GAAG,IAAI,OAAO,CAA4C,CAAC,OAAO,EAAE,MAAM,KAAI;AAClF,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;AACvB,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM;AACvB,QAAA,CAAC,CAAC;QAEF,IAAA,CAAA,YAAY,GAAG,KAAK;AAWlB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;IAC7B;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;AACnD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;IAC7B;IAEA,QAAQ,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC5B,YAAA,QAAQ,EAAE,CAAC,SAAmB,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC/E,QAAQ,EAAE,CAAC,SAAmB,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;AACtD,SAAA,CAAC;IACJ;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,OAAO,EAAE;IAChB;IAEA,IAAI,GAAA;QACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACpB;QACF;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QACpB,IAAI,CAAC,IAAI,EAAE;IACb;8GAhDW,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECd1C,qxCAsDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1CY,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,cAAA,EAAA,eAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iCAAA,EAAA,QAAA,EAAA,yCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAET,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBANzC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,cAE1B,IAAI,EAAA,OAAA,EACP,CAAC,UAAU,EAAE,IAAI,CAAC,EAAA,QAAA,EAAA,qxCAAA,EAAA;yGAIlB,KAAK,EAAA,CAAA;sBAAb;;;MEmBU,kBAAkB,CAAA;AAY7B,IAAA,WAAA,CACU,YAAiC,EACjC,cAA8B,EAC9B,YAA4B,EAAA;QAF5B,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,YAAY,GAAZ,YAAY;AAdtB,QAAA,IAAA,CAAA,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;QACnC,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,SAAS,GAAuB,IAAI;QAEpC,IAAA,CAAA,eAAe,GAAG,KAAK;QAEvB,IAAA,CAAA,MAAM,GAAgD,YAAY;AAClE,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAqB,IAAI,CAAC;AASxD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACxD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CACtD,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,eAAe,CAAC,EACrC,MAAM,CAAC,OAAO,CAAC,EACf,oBAAoB,EAAE,CACvB;AACD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CACtD,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,EACxB,MAAM,CAAC,OAAO,CAAC,EACf,oBAAoB,EAAE,CACvB;AAED,QAAA,IAAI,CAAC,sBAAsB,GAAG,aAAa,CAAC;YAC1C,UAAU;YACV,SAAS;YACT,gBAAgB;YAChB,KAAK,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE;AAClC,SAAA,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,CAAC,KAAI;YAC7D,IAAI,CAAC,wBAAwB,EAAE;YAC/B,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,CAAC;AAC3D,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,sBAAsB,EAAE,WAAW,EAAE;QAC1C,IAAI,CAAC,wBAAwB,EAAE;IACjC;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;IAC7D;IAEA,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC5B,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB;QACF;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;QAC7B,OAAO,IAAI,CAAC,WAAW;IACzB;AAEA,IAAA,OAAO,CAAC,SAAsB,EAAE,QAAgB,EAAE,QAAgB,EAAE,KAAyB,EAAA;AAC3F,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;AAC/B,QAAA,MAAM,OAAO,GAAiB;YAC5B,WAAW,EAAE,CAAC,QAAQ;SACvB;AACD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACjE,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC;AACrD,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI;AACrC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI;AACrC,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI;AACrC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAG,KAAK;AACjC,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,CAAC;;AAEjC,QAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,CAAC;QACrC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,IAAG;AAChD,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AAC1B,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,IAAG;YAC3D,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;AACzC,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,IAAG;YACnD,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI;AAC5B,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAK;AACnD,YAAA,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;AACnC,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,IAAG;YACpD,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK;AACpD,QAAA,CAAC,CAAC;IACJ;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CACrB,IAAI,IAAG;YACL,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,MAAM,CAAC,IAAI,EAAE,CAAA,WAAA,EAAc,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,IAAA,CAAM,CAAC;AACtD,QAAA,CAAC,EACD,WAAW,EACX,CAAC,CACF;IACH;AAEA,IAAA,YAAY,CAAC,MAAmD,EAAA;AAC9D,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,QAAQ,CAAC,iBAAiB,EAAE;YAC9B,QAAQ,CAAC,cAAc,EAAE;QAC3B;aAAO;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE;QACpC;IACF;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;IACnC;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;IACpC;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;IACjC;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;IAClC;AAEA,IAAA,MAAM,cAAc,GAAA;AAClB,QAAA,MAAM,GAAG,GAAG,MAAM,OAAO,sBAAsB,CAAC;AAChD,QAAA,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,UAAU,EAAE;YACrC,OAAO,GAAG,CAAC,OAAO;QACpB;AACA,QAAA,MAAM,UAAU,GAAG,GAAG,CAAC,OAAqD;AAC5E,QAAA,IAAI,OAAO,UAAU,CAAC,OAAO,KAAK,UAAU,EAAE;YAC5C,OAAO,UAAU,CAAC,OAAO;QAC3B;AAEA,QAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;IAC5C;IAEU,MAAM,kBAAkB,CAAC,KAAoC,EAAA;QACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,6BAA6B,EAAE;AACrE,YAAA,mBAAmB,EAAE,IAAI;AACzB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK;AAC7B,SAAA,CAAC;AAEF,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM;AAC5D,YAAA,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAC7E;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;QAC/B;IACF;8GA9JW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,0ECnC/B,i9DA6EA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnDI,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,sBAAsB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,qBAAqB,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,aAAa,2EACb,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,gBAAgB,8FAPhB,gBAAgB,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAUP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAf9B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EAEd,IAAI,EAAA,OAAA,EACP;wBACP,gBAAgB;wBAChB,cAAc;wBACd,sBAAsB;wBACtB,qBAAqB;wBACrB,aAAa;wBACb,IAAI;wBACJ,OAAO;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,i9DAAA,EAAA;;;AEjCH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs","sources":["../../remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.ts","../../remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.html","../../remote-access/vnc/vnc-viewer/vnc-viewer.component.ts","../../remote-access/vnc/vnc-viewer/vnc-viewer.component.html","../../remote-access/vnc/vnc-viewer/c8y-ngx-components-remote-access-vnc-vnc-viewer.ts"],"sourcesContent":["import { NgIf } from '@angular/common';\nimport { Component, Input, OnInit } from '@angular/core';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { CoreModule } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport type { NoVncCredentials } from '@novnc/novnc/lib/rfb';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n\n@Component({\n selector: 'c8y-vnc-credentials-prompt',\n templateUrl: './vnc-credentials-prompt.component.html',\n standalone: true,\n imports: [CoreModule, NgIf]\n})\nexport class VncCredentialsPromptComponent implements OnInit {\n title = gettext('VNC credentials');\n @Input() types: Array<keyof NoVncCredentials> = [];\n result = new Promise<ReturnType<typeof this.initForm>['value']>((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n selectedType: string;\n showUsername = false;\n\n form: ReturnType<typeof this.initForm>;\n\n private _resolve: (value: ReturnType<typeof this.initForm>['value']) => void;\n private _reject: (reason?: any) => void;\n\n constructor(\n private formBuilder: FormBuilder,\n private modalRef: BsModalRef\n ) {\n this.form = this.initForm();\n }\n\n ngOnInit() {\n this.showUsername = this.types.includes('username');\n this.form = this.initForm();\n }\n\n initForm() {\n return this.formBuilder.group({\n username: [undefined as string, this.showUsername ? [Validators.required] : []],\n password: [undefined as string, [Validators.required]]\n });\n }\n\n cancel() {\n this._reject();\n }\n\n save() {\n this._resolve(this.form.value);\n }\n\n submit() {\n if (!this.form.valid) {\n return;\n }\n this.modalRef.hide();\n this.save();\n }\n}\n","<c8y-modal\n [title]=\"title\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Save' }\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'key'\"></span>\n </ng-container>\n <form\n class=\"p-24\"\n [formGroup]=\"form\"\n (submit)=\"submit()\"\n >\n <c8y-form-group *ngIf=\"showUsername\">\n <label\n for=\"username\"\n translate\n >\n Username\n </label>\n <input\n class=\"form-control\"\n id=\"username\"\n name=\"username\"\n type=\"text\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'admin' }\"\n formControlName=\"username\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group>\n <label\n for=\"password\"\n translate\n >\n Password\n </label>\n <input\n class=\"form-control\"\n id=\"password\"\n name=\"password\"\n type=\"password\"\n formControlName=\"password\"\n />\n <c8y-messages></c8y-messages>\n </c8y-form-group>\n\n <button type=\"submit\" class=\"hidden\">hidden submit</button>\n </form>\n</c8y-modal>\n","import { AfterViewInit, Component, OnDestroy } from '@angular/core';\nimport {\n ActionBarItemComponent,\n C8yTranslateDirective,\n C8yTranslatePipe,\n IconDirective,\n LoadingComponent,\n TitleComponent\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport type { NoVncCredentials, NoVncOptions, default as NoVncClient } from '@novnc/novnc/lib/rfb';\nimport { RemoteAccessService } from '@c8y/ngx-components/remote-access/data';\nimport { ActivatedRoute } from '@angular/router';\nimport { NgClass, NgIf } from '@angular/common';\nimport { saveAs } from 'file-saver';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { VncCredentialsPromptComponent } from './vnc-credentials-prompt/vnc-credentials-prompt.component';\nimport { BehaviorSubject, combineLatest, defer, Subscription } from 'rxjs';\nimport { distinctUntilChanged, filter, map } from 'rxjs/operators';\n\n@Component({\n selector: 'c8y-vnc-viewer',\n templateUrl: './vnc-viewer.component.html',\n standalone: true,\n imports: [\n C8yTranslatePipe,\n TitleComponent,\n ActionBarItemComponent,\n C8yTranslateDirective,\n IconDirective,\n NgIf,\n NgClass,\n LoadingComponent\n ]\n})\nexport class VncViewerComponent implements AfterViewInit, OnDestroy {\n titlePrefix = gettext('VNC viewer');\n title = '';\n container: HTMLElement | null = null;\n noVNCClient: NoVncClient;\n powerCapability = false;\n\n status: 'connecting' | 'connected' | 'disconnected' = 'connecting';\n container$ = new BehaviorSubject<HTMLElement | null>(null);\n\n connectionSubscription: Subscription;\n\n constructor(\n private remoteAccess: RemoteAccessService,\n private activatedRoute: ActivatedRoute,\n private modalService: BsModalService\n ) {\n const container$ = this.container$.pipe(filter(Boolean));\n const configurationId$ = this.activatedRoute.params.pipe(\n map(params => params.configurationId),\n filter(Boolean),\n distinctUntilChanged()\n );\n const deviceId$ = this.activatedRoute.parent.params.pipe(\n map(params => params.id),\n filter(Boolean),\n distinctUntilChanged()\n );\n\n this.connectionSubscription = combineLatest([\n container$,\n deviceId$,\n configurationId$,\n defer(() => this.getNoVNCClient())\n ]).subscribe(([container, deviceId, configurationId, noVNC]) => {\n this.disconnectFromOldSession();\n this.connect(container, deviceId, configurationId, noVNC);\n });\n }\n\n ngOnDestroy(): void {\n this.connectionSubscription?.unsubscribe();\n this.disconnectFromOldSession();\n }\n\n ngAfterViewInit(): void {\n this.container$.next(document.getElementById('vnc-screen'));\n }\n\n disconnectFromOldSession() {\n this.powerCapability = false;\n this.title = '';\n if (!this.noVNCClient) {\n return;\n }\n\n this.noVNCClient.disconnect();\n delete this.noVNCClient;\n }\n\n connect(container: HTMLElement, deviceId: string, configId: string, noVNC: typeof NoVncClient) {\n this.container = container;\n this.changeStatus('connecting');\n const options: NoVncOptions = {\n wsProtocols: ['binary']\n };\n const uri = this.remoteAccess.getWebSocketUri(deviceId, configId);\n this.noVNCClient = new noVNC(container, uri, options);\n this.noVNCClient.resizeSession = true;\n this.noVNCClient.scaleViewport = true;\n this.noVNCClient.showDotCursor = true;\n this.noVNCClient.viewOnly = false;\n this.noVNCClient.qualityLevel = 6;\n // need to set compressionLevel to something different than the default 2 as 2 seems to be causing issues..\n this.noVNCClient.compressionLevel = 9;\n this.noVNCClient.addEventListener('connect', _e => {\n this.changeStatus('connected');\n this.noVNCClient.focus();\n });\n this.noVNCClient.addEventListener('credentialsrequired', e => {\n this.requestCredentials(e.detail.types);\n });\n this.noVNCClient.addEventListener('desktopname', e => {\n this.title = e.detail.name;\n });\n this.noVNCClient.addEventListener('disconnect', () => {\n this.changeStatus('disconnected');\n });\n this.noVNCClient.addEventListener('capabilities', e => {\n this.powerCapability = e.detail.capabilities.power;\n });\n }\n\n downloadScreenshot() {\n this.noVNCClient.toBlob(\n blob => {\n const date = new Date().toISOString();\n saveAs(blob, `screenshot-${this.title}-${date}.png`);\n },\n 'image/png',\n 1\n );\n }\n\n changeStatus(status: 'connecting' | 'connected' | 'disconnected') {\n this.status = status;\n }\n\n toggleFullscreen() {\n if (document.fullscreenElement) {\n document.exitFullscreen();\n } else {\n this.container.requestFullscreen();\n }\n }\n\n sendCtrlAltDel() {\n this.noVNCClient.sendCtrlAltDel();\n }\n\n sendShutDown() {\n this.noVNCClient.machineShutdown();\n }\n\n sendReset() {\n this.noVNCClient.machineReset();\n }\n\n sendReboot() {\n this.noVNCClient.machineReboot();\n }\n\n async getNoVNCClient(): Promise<typeof NoVncClient> {\n const lib = await import('@novnc/novnc/lib/rfb');\n if (typeof lib.default === 'function') {\n return lib.default;\n }\n const libDefault = lib.default as unknown as { default: typeof NoVncClient };\n if (typeof libDefault.default === 'function') {\n return libDefault.default;\n }\n\n throw new Error('NoVNC library not found');\n }\n\n protected async requestCredentials(types: Array<keyof NoVncCredentials>) {\n const modalRef = this.modalService.show(VncCredentialsPromptComponent, {\n ignoreBackdropClick: true,\n keyboard: false,\n initialState: { types: types }\n });\n\n try {\n const { username, password } = await modalRef.content.result;\n this.noVNCClient.sendCredentials({ username, password, target: undefined });\n } catch (e) {\n this.noVNCClient.disconnect();\n }\n }\n}\n","<c8y-title>{{ titlePrefix | translate }}: {{ title | translate }}</c8y-title>\n\n<ng-container *ngIf=\"status === 'connected'\">\n <c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n (click)=\"toggleFullscreen()\"\n >\n <i [c8yIcon]=\"'expand'\"></i>\n <span translate>Fullscreen</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n (click)=\"downloadScreenshot()\"\n >\n <i [c8yIcon]=\"'download'\"></i>\n <span translate>Screenshot</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'more'\">\n <button\n class=\"btn btn-link\"\n (click)=\"sendCtrlAltDel()\"\n >\n <i [c8yIcon]=\"'keyboard'\"></i>\n <span translate>Send Ctrl+Alt+Del</span>\n </button>\n </c8y-action-bar-item>\n</ng-container>\n\n<ng-container *ngIf=\"powerCapability && status === 'connected'\">\n <c8y-action-bar-item [placement]=\"'more'\">\n <button\n class=\"btn btn-link\"\n (click)=\"sendShutDown()\"\n >\n <i [c8yIcon]=\"'shutdown'\"></i>\n <span translate>Shutdown</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'more'\">\n <button\n class=\"btn btn-link\"\n (click)=\"sendReboot()\"\n >\n <i [c8yIcon]=\"'reset'\"></i>\n <span translate>Reboot</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item [placement]=\"'more'\">\n <button\n class=\"btn btn-link\"\n (click)=\"sendReset()\"\n >\n <i [c8yIcon]=\"'reset'\"></i>\n <span translate>Reset</span>\n </button>\n </c8y-action-bar-item>\n</ng-container>\n\n<c8y-loading *ngIf=\"status === 'connecting'\"></c8y-loading>\n\n<div\n class=\"content-fullpage\"\n [ngClass]=\"{ hidden: status !== 'connected' }\"\n>\n <div\n class=\"inner-scroll\"\n id=\"vnc-screen\"\n ></div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3"],"mappings":"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"}
|
|
@@ -54,10 +54,10 @@ class VNCRemoteAccessProtocolProviderService {
|
|
|
54
54
|
return null;
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
58
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
57
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: VNCRemoteAccessProtocolProviderService, deps: [{ token: i1.RemoteAccessService }, { token: i2.BsModalService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
58
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: VNCRemoteAccessProtocolProviderService, providedIn: 'root' }); }
|
|
59
59
|
}
|
|
60
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: VNCRemoteAccessProtocolProviderService, decorators: [{
|
|
61
61
|
type: Injectable,
|
|
62
62
|
args: [{ providedIn: 'root' }]
|
|
63
63
|
}], ctorParameters: () => [{ type: i1.RemoteAccessService }, { type: i2.BsModalService }] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-remote-access-vnc.mjs","sources":["../../remote-access/vnc/index.ts","../../remote-access/vnc/c8y-ngx-components-remote-access-vnc.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { hookRoute, hookService, ViewContext } from '@c8y/ngx-components';\nimport {\n canActivateRemoteAccess,\n RemoteAccessConfiguration,\n RemoteAccessProtocolProvider,\n RemoteAccessService\n} from '@c8y/ngx-components/remote-access/data';\nimport { BsModalService } from 'ngx-bootstrap/modal';\n\n@Injectable({ providedIn: 'root' })\nexport class VNCRemoteAccessProtocolProviderService implements RemoteAccessProtocolProvider {\n protocolName = 'VNC';\n protocolLabel = gettext('VNC');\n protocolDescription = gettext('Allows to connect to a VNC service.');\n protocolIcon = 'laptop' as const;\n\n constructor(\n protected remoteAccess: RemoteAccessService,\n protected bsModalService: BsModalService\n ) {}\n\n async addEndpoint(deviceId: string): Promise<RemoteAccessConfiguration> {\n const modalResult = await this.openVNCEndpointModal({});\n if (!modalResult) {\n return modalResult;\n }\n\n return this.remoteAccess.addConfiguration(deviceId, modalResult);\n }\n\n removeEndpoint(\n deviceId: string,\n currentEndpointConfig: RemoteAccessConfiguration\n ): Promise<void> {\n return this.remoteAccess.deleteConfiguration(deviceId, currentEndpointConfig.id);\n }\n\n async editEndpoint(\n deviceId: string,\n currentEndpointConfig: RemoteAccessConfiguration\n ): Promise<RemoteAccessConfiguration> {\n const modalResult = await this.openVNCEndpointModal(currentEndpointConfig);\n if (!modalResult) {\n return modalResult;\n }\n\n return this.remoteAccess.updateConfiguration(deviceId, modalResult);\n }\n\n async connectEndpointHref(\n deviceId: string,\n configuration: RemoteAccessConfiguration\n ): Promise<string> {\n return `/device/${deviceId}/vnc/${configuration.id}`;\n }\n\n async getDefaultEndpointConfiguration(): Promise<Partial<RemoteAccessConfiguration>> {\n return {\n hostname: '127.0.0.1',\n port: 5900\n };\n }\n\n protected async openVNCEndpointModal(\n currentConfiguration: Partial<RemoteAccessConfiguration>\n ): Promise<RemoteAccessConfiguration | null> {\n const { RemoteAccessVncEndpointModalComponent } = await import(\n '@c8y/ngx-components/remote-access/vnc/remote-access-vnc-endpoint-modal'\n );\n try {\n const modalRef = this.bsModalService.show(RemoteAccessVncEndpointModalComponent, {\n initialState: { currentValue: currentConfiguration }\n });\n return (await modalRef.content.result) as RemoteAccessConfiguration;\n } catch (e) {\n // modal closed\n return null;\n }\n }\n}\n\nexport const remoteAccessVNCProviders = [\n hookRoute({\n loadComponent: () =>\n import('@c8y/ngx-components/remote-access/vnc/vnc-viewer').then(m => m.VncViewerComponent),\n path: 'vnc/:configurationId',\n context: ViewContext.Device,\n tabs: [],\n canActivate: [canActivateRemoteAccess]\n }),\n hookService('remoteAccessProtocolHook', VNCRemoteAccessProtocolProviderService)\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;MAYa,sCAAsC,CAAA;IAMjD,WAAA,CACY,YAAiC,EACjC,cAA8B,EAAA;QAD9B,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,cAAc,GAAd,cAAc;QAP1B,IAAA,CAAA,YAAY,GAAG,KAAK;AACpB,QAAA,IAAA,CAAA,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;AAC9B,QAAA,IAAA,CAAA,mBAAmB,GAAG,OAAO,CAAC,qCAAqC,CAAC;QACpE,IAAA,CAAA,YAAY,GAAG,QAAiB;IAK7B;IAEH,MAAM,WAAW,CAAC,QAAgB,EAAA;QAChC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,WAAW;QACpB;QAEA,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC;IAClE;IAEA,cAAc,CACZ,QAAgB,EAChB,qBAAgD,EAAA;AAEhD,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,EAAE,CAAC;IAClF;AAEA,IAAA,MAAM,YAAY,CAChB,QAAgB,EAChB,qBAAgD,EAAA;QAEhD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC;QAC1E,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,WAAW;QACpB;QAEA,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC;IACrE;AAEA,IAAA,MAAM,mBAAmB,CACvB,QAAgB,EAChB,aAAwC,EAAA;AAExC,QAAA,OAAO,WAAW,QAAQ,CAAA,KAAA,EAAQ,aAAa,CAAC,EAAE,EAAE;IACtD;AAEA,IAAA,MAAM,+BAA+B,GAAA;QACnC,OAAO;AACL,YAAA,QAAQ,EAAE,WAAW;AACrB,YAAA,IAAI,EAAE;SACP;IACH;IAEU,MAAM,oBAAoB,CAClC,oBAAwD,EAAA;QAExD,MAAM,EAAE,qCAAqC,EAAE,GAAG,MAAM,OACtD,wEAAwE,CACzE;AACD,QAAA,IAAI;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,qCAAqC,EAAE;AAC/E,gBAAA,YAAY,EAAE,EAAE,YAAY,EAAE,oBAAoB;AACnD,aAAA,CAAC;YACF,QAAQ,MAAM,QAAQ,CAAC,OAAO,CAAC,MAAM;QACvC;QAAE,OAAO,CAAC,EAAE;;AAEV,YAAA,OAAO,IAAI;QACb;IACF
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-remote-access-vnc.mjs","sources":["../../remote-access/vnc/index.ts","../../remote-access/vnc/c8y-ngx-components-remote-access-vnc.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { hookRoute, hookService, ViewContext } from '@c8y/ngx-components';\nimport {\n canActivateRemoteAccess,\n RemoteAccessConfiguration,\n RemoteAccessProtocolProvider,\n RemoteAccessService\n} from '@c8y/ngx-components/remote-access/data';\nimport { BsModalService } from 'ngx-bootstrap/modal';\n\n@Injectable({ providedIn: 'root' })\nexport class VNCRemoteAccessProtocolProviderService implements RemoteAccessProtocolProvider {\n protocolName = 'VNC';\n protocolLabel = gettext('VNC');\n protocolDescription = gettext('Allows to connect to a VNC service.');\n protocolIcon = 'laptop' as const;\n\n constructor(\n protected remoteAccess: RemoteAccessService,\n protected bsModalService: BsModalService\n ) {}\n\n async addEndpoint(deviceId: string): Promise<RemoteAccessConfiguration> {\n const modalResult = await this.openVNCEndpointModal({});\n if (!modalResult) {\n return modalResult;\n }\n\n return this.remoteAccess.addConfiguration(deviceId, modalResult);\n }\n\n removeEndpoint(\n deviceId: string,\n currentEndpointConfig: RemoteAccessConfiguration\n ): Promise<void> {\n return this.remoteAccess.deleteConfiguration(deviceId, currentEndpointConfig.id);\n }\n\n async editEndpoint(\n deviceId: string,\n currentEndpointConfig: RemoteAccessConfiguration\n ): Promise<RemoteAccessConfiguration> {\n const modalResult = await this.openVNCEndpointModal(currentEndpointConfig);\n if (!modalResult) {\n return modalResult;\n }\n\n return this.remoteAccess.updateConfiguration(deviceId, modalResult);\n }\n\n async connectEndpointHref(\n deviceId: string,\n configuration: RemoteAccessConfiguration\n ): Promise<string> {\n return `/device/${deviceId}/vnc/${configuration.id}`;\n }\n\n async getDefaultEndpointConfiguration(): Promise<Partial<RemoteAccessConfiguration>> {\n return {\n hostname: '127.0.0.1',\n port: 5900\n };\n }\n\n protected async openVNCEndpointModal(\n currentConfiguration: Partial<RemoteAccessConfiguration>\n ): Promise<RemoteAccessConfiguration | null> {\n const { RemoteAccessVncEndpointModalComponent } = await import(\n '@c8y/ngx-components/remote-access/vnc/remote-access-vnc-endpoint-modal'\n );\n try {\n const modalRef = this.bsModalService.show(RemoteAccessVncEndpointModalComponent, {\n initialState: { currentValue: currentConfiguration }\n });\n return (await modalRef.content.result) as RemoteAccessConfiguration;\n } catch (e) {\n // modal closed\n return null;\n }\n }\n}\n\nexport const remoteAccessVNCProviders = [\n hookRoute({\n loadComponent: () =>\n import('@c8y/ngx-components/remote-access/vnc/vnc-viewer').then(m => m.VncViewerComponent),\n path: 'vnc/:configurationId',\n context: ViewContext.Device,\n tabs: [],\n canActivate: [canActivateRemoteAccess]\n }),\n hookService('remoteAccessProtocolHook', VNCRemoteAccessProtocolProviderService)\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -336,10 +336,10 @@ class ReplaceDeviceWizardService {
|
|
|
336
336
|
}
|
|
337
337
|
return { text, detailedData };
|
|
338
338
|
}
|
|
339
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
340
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
339
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ReplaceDeviceWizardService, deps: [{ token: i1.InventoryService }, { token: i1.IdentityService }, { token: i1.AuditService }, { token: i1.EventService }, { token: i1.UserService }, { token: i3.AppStateService }, { token: i3.AlertService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
340
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ReplaceDeviceWizardService }); }
|
|
341
341
|
}
|
|
342
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
342
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ReplaceDeviceWizardService, decorators: [{
|
|
343
343
|
type: Injectable
|
|
344
344
|
}], ctorParameters: () => [{ type: i1.InventoryService }, { type: i1.IdentityService }, { type: i1.AuditService }, { type: i1.EventService }, { type: i1.UserService }, { type: i3.AppStateService }, { type: i3.AlertService }] });
|
|
345
345
|
|
|
@@ -404,8 +404,8 @@ class ReplaceDeviceWizardComponent {
|
|
|
404
404
|
this.drawerRef.close();
|
|
405
405
|
}
|
|
406
406
|
}
|
|
407
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
408
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
407
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ReplaceDeviceWizardComponent, deps: [{ token: ReplaceDeviceWizardService }, { token: i2.DeviceGridService }, { token: i3.ModalService }, { token: i3.BottomDrawerRef, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
408
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: ReplaceDeviceWizardComponent, isStandalone: true, selector: "c8y-replace-device-wizard", inputs: { deviceToReplace: "deviceToReplace" }, host: { properties: { "class": "this.classes" } }, providers: [
|
|
409
409
|
DeviceGridService,
|
|
410
410
|
ReplaceDeviceWizardService,
|
|
411
411
|
{
|
|
@@ -418,7 +418,7 @@ class ReplaceDeviceWizardComponent {
|
|
|
418
418
|
}
|
|
419
419
|
], viewQueries: [{ propertyName: "stepper", first: true, predicate: C8yStepper, descendants: true, static: true }], ngImport: i0, template: "<c8y-stepper\n class=\"d-contents c8y-stepper--no-btns\"\n [disableDefaultIcons]=\"{ edit: true, done: false }\"\n id=\"modal-body\"\n [customClasses]=\"[\n 'col-xs-10',\n 'col-xs-offset-1',\n 'col-sm-8',\n 'col-sm-offset-2',\n 'm-t-24',\n 'm-b-40',\n 'p-0',\n 'flex-no-shrink'\n ]\"\n linear\n>\n <cdk-step [label]=\"'Replacement device' | translate\">\n <div class=\"p-16 p-t-0 flex-no-shrink separator-bottom col-xs-12\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'Replacement device' | translate }}\n </div>\n </div>\n </div>\n </div>\n <c8y-device-grid\n class=\"flex-grow col-xs-12 no-gutter\"\n [title]=\"'Select replacement device' | translate\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"[]\"\n [columns]=\"columns\"\n [selectable]=\"true\"\n [singleSelection]=\"true\"\n [baseQuery]=\"baseQuery$ | async\"\n (itemsSelect)=\"replacementDeviceId = $event[0]\"\n ></c8y-device-grid>\n <c8y-stepper-buttons\n class=\"d-block card-footer p-24 separator\"\n [disabled]=\"!replacementDeviceId\"\n (onCancel)=\"cancel()\"\n (onNext)=\"service.changeReplacementDeviceId(replacementDeviceId); continue()\"\n ></c8y-stepper-buttons>\n </cdk-step>\n\n <cdk-step [label]=\"'Select external IDs' | translate\">\n <div class=\"p-16 p-t-0 flex-no-shrink col-xs-12\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'Select external IDs' | translate }}\n </div>\n </div>\n </div>\n </div>\n <c8y-li class=\"page-sticky-header hidden-sm hidden-xs\">\n <c8y-li-icon><i class=\"p-l-24\"></i></c8y-li-icon>\n <c8y-li-body class=\"content-flex-40\">\n <div class=\"col-4\">\n <span\n class=\"text-medium text-truncate\"\n title=\" {{ 'Type' | translate }} \"\n >\n {{ 'Type' | translate }}\n </span>\n </div>\n <div class=\"col-6\">\n <span\n class=\"text-medium text-truncate\"\n title=\"{{ 'External ID' | translate }}\"\n >\n {{ 'External ID' | translate }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n <div\n class=\"col-xs-12 flex-grow no-gutter\"\n *ngIf=\"!(service.externalIdsLoading$ | async); else loading\"\n >\n <div\n class=\"card-inner-scroll fit-h\"\n *ngIf=\"(service.externalIdsWithSelection$ | async)?.length > 0; else noIds\"\n >\n <div class=\"card-block p-t-0 p-b-0\">\n <c8y-list-group>\n <c8y-li *ngFor=\"let extId of service.externalIdsWithSelection$ | async\">\n <c8y-li-checkbox\n [selected]=\"extId.selected\"\n (onSelect)=\"service.checkExternalId(extId.id, $event)\"\n ></c8y-li-checkbox>\n <c8y-li-body class=\"content-flex-40\">\n <div class=\"col-4 m-b-xs-8\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Type' | translate }}\"\n >\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n Type\n </span>\n {{ extId.id.type }}\n </div>\n </div>\n <div class=\"col-6 m-b-xs-8\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'External ID' | translate }}\"\n >\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n External ID\n </span>\n {{ extId.id.externalId }}\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </div>\n </div>\n <ng-template #noIds>\n <c8y-ui-empty-state\n [icon]=\"'barcode'\"\n [title]=\"'No external IDs assigned.'\"\n [subtitle]=\"\n 'The selected replacement device does not have external IDs assigned. Go back to "Replacement device" and select a different device.'\n | translate\n \"\n *ngIf=\"true\"\n ></c8y-ui-empty-state>\n </ng-template>\n </div>\n <ng-template #loading>\n <div class=\"d-flex d-col a-i-center j-c-center fit-h\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-template>\n <c8y-stepper-buttons\n class=\"d-block card-footer p-24 separator\"\n [disabled]=\"\n (service.externalIdsLoading$ | async) || !(service.selectedExternalIds$ | async)?.length\n \"\n (onCancel)=\"cancel()\"\n (onNext)=\"replace()\"\n [labels]=\"{ next: ('Replace' | translate) }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n\n <cdk-step [label]=\"'Replace' | translate\">\n <div class=\"p-16 p-t-0 flex-no-shrink col-xs-12 separator-bottom\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'Replace' | translate }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"d-flex d-col a-i-center j-c-center inner-scroll\">\n <c8y-list-group class=\"col-sm-8 col-md-6\">\n <c8y-li\n *ngFor=\"let step of service.steps\"\n [attr.data-cy]=\"'c8y-replace-device-wizard--step-' + step.label\"\n >\n <c8y-li-icon>\n <i\n [c8yIcon]=\"REPLACE_DEVICE_STEP_STATES_MAP[step.state || 'Pending']?.icon\"\n [tooltip]=\"(step.state || 'Pending').toString() | translate\"\n [ngClass]=\"REPLACE_DEVICE_STEP_STATES_MAP[step.state || 'Pending']?.styleClass\"\n ></i>\n </c8y-li-icon>\n <c8y-li-body>\n <span [ngClass]=\"{ 'text-bold': !!step.error }\">{{ step.label | translate }}</span>\n <button\n class=\"btn-help btn-help--sm pull-right\"\n [attr.aria-label]=\"'Help' | translate\"\n [attr.aria-label]=\"step.info.msg | translate\"\n [popover]=\"step.info.msg | translate\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n *ngIf=\"!!step.info?.msg\"\n >\n <i c8yIcon=\"question-circle-o\"></i>\n </button>\n </c8y-li-body>\n <c8y-li-collapse\n #alert\n *ngIf=\"step.error\"\n >\n <span class=\"message\">{{ step.error?.text | translate }}</span>\n <p\n class=\"text-muted m-t-8\"\n *ngIf=\"step?.error?.detailedData\"\n >\n <button\n class=\"btn btn-clean\"\n (click)=\"alert.expanded = !alert.expanded\"\n >\n <i c8yIcon=\"chevron-down\"></i>\n <span *ngIf=\"!alert.expanded\">Show details</span>\n <span *ngIf=\"alert.expanded\">Hide details</span>\n </button>\n </p>\n <div\n [collapse]=\"!alert.expanded\"\n [isAnimated]=\"true\"\n >\n {{ step.error.detailedData | json }}\n </div>\n </c8y-li-collapse>\n <c8y-li-action\n icon=\"play\"\n label=\"{{ 'Retry this step`button`' | translate }}\"\n *ngIf=\"step.state === 'Failed' && !step.overrideContext\"\n (click)=\"service.retryStep(step)\"\n data-cy=\"c8y-replace-device-wizard--retry-step\"\n ></c8y-li-action>\n </c8y-li>\n </c8y-list-group>\n </div>\n\n <c8y-stepper-buttons\n class=\"d-block card-footer p-24 separator\"\n [pending]=\"service.deviceReplacementInProgress$ | async\"\n (onBack)=\"close()\"\n [labels]=\"{ back: 'Close' | translate }\"\n >\n <button\n class=\"btn btn-primary\"\n [title]=\"'Retry' | translate\"\n type=\"button\"\n *ngIf=\"(service.deviceReplaced$ | async) === false\"\n (click)=\"service.retryStep()\"\n [ngClass]=\"{ 'btn-pending': service.deviceReplacementInProgress$ | async }\"\n [disabled]=\"service.deviceReplacementInProgress$ | async\"\n data-cy=\"c8y-replace-device-wizard--btn-retry\"\n >\n {{ 'Retry' | translate }}\n </button>\n </c8y-stepper-buttons>\n </cdk-step>\n</c8y-stepper>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { 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.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i3.C8yStepper, selector: "c8y-stepper", inputs: ["disableDefaultIcons", "disableProgressButtons", "customClasses", "hideStepProgress", "useStepLabelsAsTitlesOnly"], outputs: ["onStepChange"] }, { kind: "component", type: i5.CdkStep, selector: "cdk-step", inputs: ["stepControl", "label", "errorMessage", "aria-label", "aria-labelledby", "state", "editable", "optional", "completed", "hasError"], outputs: ["interacted"], exportAs: ["cdkStep"] }, { kind: "component", type: i3.C8yStepperButtons, selector: "c8y-stepper-buttons", inputs: ["labels", "pending", "disabled", "showButtons"], outputs: ["onCancel", "onNext", "onBack", "onCustom"] }, { kind: "component", type: i3.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i3.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "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.ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "component", type: i3.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "ngmodule", type: DeviceGridModule }, { kind: "component", type: i2.DeviceGridComponent, selector: "c8y-device-grid", inputs: ["dataCallback", "refresh", "title", "loadMoreItemsLabel", "loadingItemsLabel", "legacyConfigKey", "legacyFilterKey", "columns", "pagination", "infiniteScroll", "actionControls", "selectable", "singleSelection", "baseQuery", "bulkActionControls", "headerActionControls", "childDeviceGrid", "parentDeviceId", "withChildren", "showSearch", "activeClassName"], outputs: ["onColumnsChange", "onFilterChange", "onDeviceQueryStringChange", "itemsSelect"] }, { kind: "ngmodule", type: DeviceSelectorModule }, { 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"] }, { kind: "ngmodule", type: CollapseModule }, { kind: "directive", type: i7.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "directive", type: i8.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.JsonPipe, name: "json" }] }); }
|
|
420
420
|
}
|
|
421
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
421
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ReplaceDeviceWizardComponent, decorators: [{
|
|
422
422
|
type: Component,
|
|
423
423
|
args: [{ standalone: true, selector: 'c8y-replace-device-wizard', imports: [
|
|
424
424
|
CoreModule,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-replace-device-replace-device-wizard.mjs","sources":["../../replace-device/replace-device-wizard/replace-device-wizard.model.ts","../../replace-device/replace-device-wizard/replace-device-wizard.service.ts","../../replace-device/replace-device-wizard/replace-device-wizard.component.ts","../../replace-device/replace-device-wizard/replace-device-wizard.component.html","../../replace-device/replace-device-wizard/c8y-ngx-components-replace-device-replace-device-wizard.ts"],"sourcesContent":["import { IExternalIdentity, IManagedObject } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\nimport { Observable } from 'rxjs';\n\nexport interface ReplaceDeviceContext {\n deviceToReplace: IManagedObject;\n replacementDevice: IManagedObject;\n replacementDeviceId: string;\n newExternalIds: IExternalIdentity[];\n oldExternalIds: IExternalIdentity[];\n deleteReplacedDeviceOwner: boolean;\n time: string;\n skip?: boolean;\n}\n\nexport interface Error {\n text: string;\n detailedData?:\n | string\n | {\n status: string;\n statusText: string;\n };\n}\n\n/**\n * Declares an execution step in the device replacement flow.\n */\nexport interface ReplaceDeviceStep {\n /**\n * Label to be used in the replace device wizard UI.\n */\n label: string;\n /**\n * Step implementation.\n */\n action: (context: ReplaceDeviceContext) => Observable<unknown> | Promise<unknown>;\n /**\n * Defines if the result from step execution should be passed to the next step in the flow.\n */\n overrideContext?: boolean;\n info?: StepInfo;\n /**\n * Current execution state of the step.\n */\n state?: ReplaceDeviceStepState;\n /**\n * Error occured during step execution.\n */\n error?: Error;\n /**\n * !Internal use only! Flag to skip step execution, used to control retrial.\n */\n skip?: boolean;\n /**\n * !Internal use only! Stores the context the step was initially executed with.\n */\n context?: ReplaceDeviceContext;\n /**\n * !Internal use only! Context to be used for step re-trial.\n */\n seed?: ReplaceDeviceContext;\n}\n\n/**\n * Allows to display an info popover for a particular step.\n */\nexport interface StepInfo {\n /**\n * Message that will be displayed as a popover for the given step.\n */\n msg?: string | undefined;\n /**\n * A function that will be executed\n */\n getMessage?: (context: ReplaceDeviceContext, step: ReplaceDeviceStep) => string | undefined;\n}\n\nconst REPLACE_DEVICE_STEP_STATES = <const>[\n 'Pending',\n 'Executing',\n 'Skipped',\n 'Failed',\n 'Successful'\n];\nexport type ReplaceDeviceStepState = (typeof REPLACE_DEVICE_STEP_STATES)[number];\n\nexport function isValidReplaceDeviceStepState(state: unknown): state is ReplaceDeviceStepState {\n return REPLACE_DEVICE_STEP_STATES.includes(state as ReplaceDeviceStepState);\n}\n\nexport const REPLACE_DEVICE_STEP_STATE: { [key: string]: ReplaceDeviceStepState } = {\n PENDING: gettext('Pending'),\n EXECUTING: gettext('Executing'),\n SKIPPED: gettext('Skipped'),\n FAILED: gettext('Failed'),\n SUCCESSFUL: gettext('Successful')\n};\n\nexport interface State {\n icon?: SupportedIconsSuggestions;\n styleClass?: string;\n}\n\nexport type ReplaceDeviceStepStatesMap = {\n [key in ReplaceDeviceStepState]?: State;\n};\n\nexport const REPLACE_DEVICE_STEP_STATES_MAP: ReplaceDeviceStepStatesMap = {\n Pending: {\n icon: 'clock-o',\n styleClass: 'text-info'\n },\n Executing: {\n icon: 'refresh',\n styleClass: 'text-info'\n },\n Skipped: {\n icon: 'skip',\n styleClass: 'text-info'\n },\n Failed: {\n icon: 'exclamation-circle',\n styleClass: 'text-danger'\n },\n Successful: {\n icon: 'check-circle',\n styleClass: 'text-success'\n }\n};\n","import { Injectable } from '@angular/core';\nimport {\n AuditRecordType,\n AuditService,\n EventService,\n IdentityService,\n IExternalIdentity,\n IManagedObject,\n InventoryService,\n IResultList,\n QueriesUtil,\n UserService\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService, AppStateService, toObservable } from '@c8y/ngx-components';\nimport { cloneDeep, pick } from 'lodash-es';\nimport {\n BehaviorSubject,\n combineLatest,\n forkJoin,\n from,\n Observable,\n of,\n pipe,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n concatMap,\n distinctUntilChanged,\n map,\n scan,\n share,\n shareReplay,\n switchMap,\n tap,\n withLatestFrom\n} from 'rxjs/operators';\nimport {\n Error,\n isValidReplaceDeviceStepState,\n ReplaceDeviceContext,\n ReplaceDeviceStep,\n ReplaceDeviceStepState,\n REPLACE_DEVICE_STEP_STATE\n} from './replace-device-wizard.model';\n\n@Injectable()\nexport class ReplaceDeviceWizardService {\n private static readonly NON_REENTRANT_STATES: ReplaceDeviceStepState[] = [\n 'Executing',\n 'Successful'\n ];\n\n get deviceToReplace$(): Observable<IManagedObject> {\n return this.deviceToReplaceObs$;\n }\n get replacementDeviceId$(): Observable<string> {\n return this.replacementDeviceIdObs$;\n }\n\n externalIds$: Observable<IResultList<IExternalIdentity>>;\n externalIdsLoading$: Observable<boolean>;\n externalIdsWithSelection$: Observable<Array<{ id: IExternalIdentity; selected: boolean }>>;\n selectedExternalIds$: Observable<IExternalIdentity[]>;\n deviceReplaced$: Observable<boolean>;\n deviceReplacementInProgress$: Observable<boolean>;\n\n steps: ReplaceDeviceStep[] = [];\n\n private deviceToReplaceSubject$: BehaviorSubject<IManagedObject> = new BehaviorSubject(null);\n private deviceToReplaceObs$: Observable<IManagedObject> = this.deviceToReplaceSubject$\n .asObservable()\n .pipe(shareReplay());\n private replacementDeviceIdSubject$: Subject<string> = new Subject();\n private replacementDeviceIdObs$: Observable<string> = this.replacementDeviceIdSubject$\n .asObservable()\n .pipe(shareReplay());\n private checkExternalId$: Subject<{ id: IExternalIdentity; checked: boolean }> = new Subject();\n private externalIdsLoadingSubject$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n private triggerDeviceReplacementSubject$: Subject<void> = new Subject();\n private deviceReplacementInProgressSubject$: Subject<boolean> = new Subject();\n\n private queriesUtil: QueriesUtil = new QueriesUtil();\n\n constructor(\n private inventory: InventoryService,\n private identity: IdentityService,\n private audit: AuditService,\n private event: EventService,\n private user: UserService,\n private appState: AppStateService,\n private alert: AlertService\n ) {\n this.externalIdsLoading$ = this.externalIdsLoadingSubject$.asObservable().pipe(shareReplay());\n this.externalIds$ = this.replacementDeviceIdSubject$.pipe(\n distinctUntilChanged(),\n tap(() => this.externalIdsLoadingSubject$.next(true)),\n switchMap(deviceId => this.identity.list(deviceId)),\n tap(() => this.externalIdsLoadingSubject$.next(false)),\n tap(() => this.checkExternalId(null, false)),\n catchError(err => {\n this.alert.addServerFailure(err);\n return of(null);\n }),\n shareReplay()\n );\n\n this.externalIdsWithSelection$ = combineLatest([\n this.externalIds$.pipe(\n map(result => result?.data),\n map(externalIds => externalIds?.map(id => ({ id, selected: true })))\n ),\n this.checkExternalId$\n ]).pipe(\n scan((acc, val) => {\n const [selectedIds, lastAction] = acc;\n const [_, checkAction] = val;\n if (\n !(\n lastAction?.checked === checkAction?.checked &&\n this.areExtIdsEqual(lastAction?.id, checkAction?.id)\n )\n ) {\n selectedIds.forEach(\n id =>\n (id.selected = this.areExtIdsEqual(id.id, checkAction.id)\n ? checkAction.checked\n : id.selected)\n );\n }\n return val;\n }),\n map(([externalIds]) => externalIds),\n shareReplay()\n );\n\n this.selectedExternalIds$ = this.externalIdsWithSelection$.pipe(\n map(ids => ids.filter(id => id.selected).map(id => id.id)),\n shareReplay()\n );\n\n this.defineSteps();\n\n const toContext = ([_, deviceToReplace, replacementDeviceId, newExternalIds]) => ({\n deviceToReplace,\n replacementDeviceId,\n newExternalIds\n });\n\n this.deviceReplaced$ = this.triggerDeviceReplacementSubject$.pipe(\n tap(() => this.deviceReplacementInProgressSubject$.next(true)),\n withLatestFrom(this.deviceToReplace$, this.replacementDeviceId$, this.selectedExternalIds$),\n map(toContext),\n concatMap(context =>\n this.steps\n .map(step => this.executeStep(step))\n .reduce((ctx, step) => ctx.pipe(step), of(context))\n ),\n tap(() => this.deviceReplacementInProgressSubject$.next(false)),\n map(() => !this.steps.some(step => step.state === 'Failed')),\n share()\n );\n\n this.deviceReplacementInProgress$ = this.deviceReplacementInProgressSubject$\n .asObservable()\n .pipe(shareReplay());\n }\n\n forDevice(deviceToReplace: IManagedObject) {\n this.deviceToReplaceSubject$.next(deviceToReplace);\n }\n\n changeReplacementDeviceId(replacementDeviceId: string) {\n this.replacementDeviceIdSubject$.next(replacementDeviceId);\n }\n\n checkExternalId(id: IExternalIdentity, checked: boolean) {\n this.checkExternalId$.next({ id, checked });\n }\n\n replaceDevice() {\n this.triggerDeviceReplacementSubject$.next();\n }\n\n retryStep(step?: ReplaceDeviceStep) {\n this.steps.forEach(s => {\n if (\n (s.label === step?.label || !step) &&\n !ReplaceDeviceWizardService.NON_REENTRANT_STATES.includes(s.state)\n ) {\n s.skip = false;\n s.seed = s.context;\n s.state = 'Pending';\n delete s.error;\n } else {\n s.skip = true;\n }\n });\n this.replaceDevice();\n }\n\n private defineSteps() {\n this.steps = [\n {\n label: gettext('Gather required data'),\n overrideContext: true,\n action: (context: ReplaceDeviceContext) => {\n const { deviceToReplace, replacementDeviceId, newExternalIds } = context;\n if (deviceToReplace.id === replacementDeviceId) {\n throw new Error(\n gettext(\n 'The device to replace and the replacement device cannot be one and the same device.'\n )\n );\n }\n return forkJoin([\n from(\n this.inventory.list({\n query: this.queriesUtil.buildQuery({ owner: deviceToReplace.owner })\n })\n ).pipe(map(result => result?.data?.length === 1)),\n from(this.inventory.detail(replacementDeviceId)).pipe(map(result => result?.data)),\n from(this.identity.list(deviceToReplace.id)).pipe(map(result => result?.data))\n ]).pipe(\n map(([deleteReplacedDeviceOwner, replacementDevice, oldExternalIds]) => ({\n deviceToReplace,\n replacementDevice,\n newExternalIds,\n oldExternalIds,\n deleteReplacedDeviceOwner,\n time: new Date().toISOString()\n }))\n );\n }\n },\n {\n label: gettext('Delete external IDs of replacement device'),\n action: (context: ReplaceDeviceContext) => {\n const { newExternalIds } = context;\n return forkJoin(newExternalIds.map(id => this.identity.delete(id)));\n }\n },\n {\n label: gettext('Create new external IDs for the original device'),\n action: (context: ReplaceDeviceContext) => {\n const { newExternalIds, deviceToReplace } = context;\n return forkJoin(\n newExternalIds\n .map(extId => ({\n ...pick(extId, ['type', 'externalId']),\n managedObject: { ...pick(deviceToReplace, ['id']) }\n }))\n .map(id => this.identity.create(id))\n );\n }\n },\n {\n label: gettext('Delete old external IDs of original device'),\n action: (context: ReplaceDeviceContext) => {\n const { oldExternalIds } = context;\n return oldExternalIds?.length\n ? forkJoin(oldExternalIds.map(id => this.identity.delete(id)))\n : of(REPLACE_DEVICE_STEP_STATE.SKIPPED);\n },\n info: {\n getMessage: (_, step) =>\n step.state === 'Skipped'\n ? gettext('No existing external IDs were determined.')\n : undefined\n }\n },\n {\n label: gettext('Change owner of original device`owner may be a human or system user`'),\n action: (context: ReplaceDeviceContext) => {\n const { deviceToReplace, replacementDevice, oldExternalIds, time } = context;\n return this.inventory.update({\n id: deviceToReplace.id,\n owner: replacementDevice.owner,\n c8y_LastReplacement: {\n time,\n user: this.appState.currentUser.value.id,\n previousExternalIds: oldExternalIds.map(id => pick(id, ['externalId', 'type']))\n }\n });\n }\n },\n {\n label: gettext('Delete old owner of original device'),\n action: (context: ReplaceDeviceContext) => {\n const { deleteReplacedDeviceOwner, deviceToReplace } = context;\n return deleteReplacedDeviceOwner\n ? this.user.delete(deviceToReplace.owner)\n : of(REPLACE_DEVICE_STEP_STATE.SKIPPED);\n },\n info: {\n getMessage: (_, step) =>\n step.state === 'Skipped'\n ? gettext('User was not deleted because it is assigned as an owner of other devices.')\n : undefined\n }\n },\n {\n label: gettext('Delete replacement device'),\n action: (context: ReplaceDeviceContext) => {\n const { replacementDevice } = context;\n return this.inventory.delete(replacementDevice.id);\n }\n },\n {\n label: gettext('Create event'),\n action: (context: ReplaceDeviceContext) => {\n const { deviceToReplace, oldExternalIds, newExternalIds, time } = context;\n return this.event.create({\n source: { id: deviceToReplace.id },\n text: `Device with external ID(s) ${this.extIdsToString(\n oldExternalIds\n )} was replaced by device with external ID(s) ${this.extIdsToString(newExternalIds)}`,\n time,\n type: 'c8y_DeviceReplaced'\n });\n }\n },\n {\n label: gettext('Create audit log'),\n action: (context: ReplaceDeviceContext) => {\n const { deviceToReplace, oldExternalIds, newExternalIds, time } = context;\n return this.audit.create({\n activity: gettext('Device replaced'),\n source: { id: deviceToReplace.id },\n text: `Device with external ID(s) ${this.extIdsToString(\n oldExternalIds\n )} was replaced by device with external ID(s) ${this.extIdsToString(newExternalIds)}`,\n time,\n type: AuditRecordType.INVENTORY,\n user: this.appState.currentUser.value.id\n });\n }\n }\n ];\n }\n\n private executeStep(step: ReplaceDeviceStep) {\n return pipe(\n tap(\n (ctx: ReplaceDeviceContext) =>\n (step.state = step?.skip || ctx.skip ? step.state : REPLACE_DEVICE_STEP_STATE.EXECUTING)\n ),\n concatMap((ctx: ReplaceDeviceContext) => {\n if (!step.context && !ctx.skip) {\n step.context = cloneDeep(ctx);\n }\n const context = cloneDeep(step.seed ?? ctx);\n return step?.skip || ctx.skip\n ? of(context)\n : toObservable(this.unwrapStepAction(context, step.action)).pipe(\n tap(\n result =>\n (step.state = isValidReplaceDeviceStepState(result)\n ? result\n : REPLACE_DEVICE_STEP_STATE.SUCCESSFUL)\n ),\n catchError(err => {\n step.state = REPLACE_DEVICE_STEP_STATE.FAILED;\n step.error = this.toError(err);\n context.skip = step.overrideContext;\n return of(context);\n }),\n tap(() => {\n if (typeof step.info?.getMessage === 'function') {\n step.info.msg = step.info.getMessage(context, step);\n }\n }),\n map(result => (step.overrideContext ? result : context))\n );\n })\n );\n }\n\n private unwrapStepAction(\n context: ReplaceDeviceContext,\n action: (context: ReplaceDeviceContext) => Observable<unknown> | Promise<unknown>\n ) {\n try {\n return action(context);\n } catch (err) {\n // bubble up any runtime errors\n return of({}).pipe(\n tap(() => {\n throw err;\n })\n );\n }\n }\n\n private areExtIdsEqual(idA: IExternalIdentity, idB: IExternalIdentity): boolean {\n return idA?.type === idB?.type && idA?.externalId === idB?.externalId;\n }\n\n private extIdsToString(extnernalIds: IExternalIdentity[]) {\n return extnernalIds?.map(id => `${id.externalId} [${id.type}]`).join(', ');\n }\n\n private toError(err): Error {\n const { data, res, message } = err;\n let text = data?.message || message;\n let detailedData;\n if (data) {\n if (typeof data === 'object') {\n detailedData = data.exceptionMessage;\n } else if (typeof data === 'string') {\n detailedData = data;\n }\n }\n const hasRelevantMessage = !!(text || detailedData);\n if (!text) {\n text = gettext('A server error occurred.');\n }\n if (res && !hasRelevantMessage) {\n detailedData = pick(res, ['status', 'statusText']);\n }\n\n return { text, detailedData };\n }\n}\n","import { Component, HostBinding, Input, Optional, ViewChild } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n BottomDrawerRef,\n C8yStepper,\n Column,\n CoreModule,\n DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER,\n DATA_GRID_CONFIGURATION_STRATEGY,\n GridConfigContextProvider,\n ModalService,\n Status,\n UserPreferencesConfigurationStrategy,\n UserPreferencesGridConfigContext\n} from '@c8y/ngx-components';\nimport { DeviceGridModule, DeviceGridService } from '@c8y/ngx-components/device-grid';\nimport { DeviceSelectorModule } from '@c8y/ngx-components/operations/device-selector';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { REPLACE_DEVICE_STEP_STATES_MAP } from './replace-device-wizard.model';\nimport { ReplaceDeviceWizardService } from './replace-device-wizard.service';\n\n@Component({\n standalone: true,\n selector: 'c8y-replace-device-wizard',\n imports: [\n CoreModule,\n DeviceGridModule,\n DeviceSelectorModule,\n TooltipModule,\n CollapseModule,\n PopoverModule\n ],\n providers: [\n DeviceGridService,\n ReplaceDeviceWizardService,\n {\n provide: DATA_GRID_CONFIGURATION_STRATEGY,\n useClass: UserPreferencesConfigurationStrategy\n },\n {\n provide: DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER,\n useExisting: ReplaceDeviceWizardComponent\n }\n ],\n templateUrl: './replace-device-wizard.component.html'\n})\nexport class ReplaceDeviceWizardComponent implements GridConfigContextProvider {\n private static readonly DEFAULT_VISIBLE_COLUMNS = [\n 'status',\n 'name',\n 'serialNumber',\n 'registrationDate',\n 'systemId',\n 'imei'\n ];\n\n REPLACE_DEVICE_STEP_STATES_MAP = REPLACE_DEVICE_STEP_STATES_MAP;\n\n @HostBinding('class')\n classes = 'd-contents';\n\n @ViewChild(C8yStepper, { static: true })\n stepper: C8yStepper;\n\n @Input()\n set deviceToReplace(deviceToReplace: IManagedObject) {\n this.service.forDevice(deviceToReplace);\n }\n\n replacementDeviceId: string;\n\n baseQuery$: Observable<object> = this.service.deviceToReplace$.pipe(\n map(device => ({\n __not: {\n id: {\n __eq: device?.id\n }\n }\n }))\n );\n columns: Column[];\n\n constructor(\n public service: ReplaceDeviceWizardService,\n private deviceGridService: DeviceGridService,\n private modal: ModalService,\n @Optional() private drawerRef: BottomDrawerRef<ReplaceDeviceWizardComponent>\n ) {\n this.columns = this.deviceGridService.getDefaultColumns().map(column => {\n column.visible = ReplaceDeviceWizardComponent.DEFAULT_VISIBLE_COLUMNS.includes(column.name);\n return column;\n });\n }\n\n getGridConfigContext(): UserPreferencesGridConfigContext {\n return {\n key: 'replace-device-wizard-grid',\n configFilter: {\n filter: false\n }\n };\n }\n\n async replace() {\n try {\n await this.modal.confirm(\n gettext('Replace device'),\n gettext(\n 'You are about to replace a device. When the process is finished, the replacement device and its data will be deleted. Do you want to proceed?'\n ),\n Status.DANGER,\n { ok: gettext('Replace'), cancel: gettext('Cancel') }\n );\n this.service.replaceDevice();\n this.continue();\n } catch (ex) {\n // Intentionally empty\n }\n }\n\n continue() {\n this.stepper.selected.completed = true;\n this.stepper.next();\n }\n\n cancel() {\n this.close();\n }\n\n close() {\n if (this.drawerRef) {\n this.drawerRef.close();\n }\n }\n}\n","<c8y-stepper\n class=\"d-contents c8y-stepper--no-btns\"\n [disableDefaultIcons]=\"{ edit: true, done: false }\"\n id=\"modal-body\"\n [customClasses]=\"[\n 'col-xs-10',\n 'col-xs-offset-1',\n 'col-sm-8',\n 'col-sm-offset-2',\n 'm-t-24',\n 'm-b-40',\n 'p-0',\n 'flex-no-shrink'\n ]\"\n linear\n>\n <cdk-step [label]=\"'Replacement device' | translate\">\n <div class=\"p-16 p-t-0 flex-no-shrink separator-bottom col-xs-12\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'Replacement device' | translate }}\n </div>\n </div>\n </div>\n </div>\n <c8y-device-grid\n class=\"flex-grow col-xs-12 no-gutter\"\n [title]=\"'Select replacement device' | translate\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"[]\"\n [columns]=\"columns\"\n [selectable]=\"true\"\n [singleSelection]=\"true\"\n [baseQuery]=\"baseQuery$ | async\"\n (itemsSelect)=\"replacementDeviceId = $event[0]\"\n ></c8y-device-grid>\n <c8y-stepper-buttons\n class=\"d-block card-footer p-24 separator\"\n [disabled]=\"!replacementDeviceId\"\n (onCancel)=\"cancel()\"\n (onNext)=\"service.changeReplacementDeviceId(replacementDeviceId); continue()\"\n ></c8y-stepper-buttons>\n </cdk-step>\n\n <cdk-step [label]=\"'Select external IDs' | translate\">\n <div class=\"p-16 p-t-0 flex-no-shrink col-xs-12\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'Select external IDs' | translate }}\n </div>\n </div>\n </div>\n </div>\n <c8y-li class=\"page-sticky-header hidden-sm hidden-xs\">\n <c8y-li-icon><i class=\"p-l-24\"></i></c8y-li-icon>\n <c8y-li-body class=\"content-flex-40\">\n <div class=\"col-4\">\n <span\n class=\"text-medium text-truncate\"\n title=\" {{ 'Type' | translate }} \"\n >\n {{ 'Type' | translate }}\n </span>\n </div>\n <div class=\"col-6\">\n <span\n class=\"text-medium text-truncate\"\n title=\"{{ 'External ID' | translate }}\"\n >\n {{ 'External ID' | translate }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n <div\n class=\"col-xs-12 flex-grow no-gutter\"\n *ngIf=\"!(service.externalIdsLoading$ | async); else loading\"\n >\n <div\n class=\"card-inner-scroll fit-h\"\n *ngIf=\"(service.externalIdsWithSelection$ | async)?.length > 0; else noIds\"\n >\n <div class=\"card-block p-t-0 p-b-0\">\n <c8y-list-group>\n <c8y-li *ngFor=\"let extId of service.externalIdsWithSelection$ | async\">\n <c8y-li-checkbox\n [selected]=\"extId.selected\"\n (onSelect)=\"service.checkExternalId(extId.id, $event)\"\n ></c8y-li-checkbox>\n <c8y-li-body class=\"content-flex-40\">\n <div class=\"col-4 m-b-xs-8\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Type' | translate }}\"\n >\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n Type\n </span>\n {{ extId.id.type }}\n </div>\n </div>\n <div class=\"col-6 m-b-xs-8\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'External ID' | translate }}\"\n >\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n External ID\n </span>\n {{ extId.id.externalId }}\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </div>\n </div>\n <ng-template #noIds>\n <c8y-ui-empty-state\n [icon]=\"'barcode'\"\n [title]=\"'No external IDs assigned.'\"\n [subtitle]=\"\n 'The selected replacement device does not have external IDs assigned. Go back to "Replacement device" and select a different device.'\n | translate\n \"\n *ngIf=\"true\"\n ></c8y-ui-empty-state>\n </ng-template>\n </div>\n <ng-template #loading>\n <div class=\"d-flex d-col a-i-center j-c-center fit-h\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-template>\n <c8y-stepper-buttons\n class=\"d-block card-footer p-24 separator\"\n [disabled]=\"\n (service.externalIdsLoading$ | async) || !(service.selectedExternalIds$ | async)?.length\n \"\n (onCancel)=\"cancel()\"\n (onNext)=\"replace()\"\n [labels]=\"{ next: ('Replace' | translate) }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n\n <cdk-step [label]=\"'Replace' | translate\">\n <div class=\"p-16 p-t-0 flex-no-shrink col-xs-12 separator-bottom\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'Replace' | translate }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"d-flex d-col a-i-center j-c-center inner-scroll\">\n <c8y-list-group class=\"col-sm-8 col-md-6\">\n <c8y-li\n *ngFor=\"let step of service.steps\"\n [attr.data-cy]=\"'c8y-replace-device-wizard--step-' + step.label\"\n >\n <c8y-li-icon>\n <i\n [c8yIcon]=\"REPLACE_DEVICE_STEP_STATES_MAP[step.state || 'Pending']?.icon\"\n [tooltip]=\"(step.state || 'Pending').toString() | translate\"\n [ngClass]=\"REPLACE_DEVICE_STEP_STATES_MAP[step.state || 'Pending']?.styleClass\"\n ></i>\n </c8y-li-icon>\n <c8y-li-body>\n <span [ngClass]=\"{ 'text-bold': !!step.error }\">{{ step.label | translate }}</span>\n <button\n class=\"btn-help btn-help--sm pull-right\"\n [attr.aria-label]=\"'Help' | translate\"\n [attr.aria-label]=\"step.info.msg | translate\"\n [popover]=\"step.info.msg | translate\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n *ngIf=\"!!step.info?.msg\"\n >\n <i c8yIcon=\"question-circle-o\"></i>\n </button>\n </c8y-li-body>\n <c8y-li-collapse\n #alert\n *ngIf=\"step.error\"\n >\n <span class=\"message\">{{ step.error?.text | translate }}</span>\n <p\n class=\"text-muted m-t-8\"\n *ngIf=\"step?.error?.detailedData\"\n >\n <button\n class=\"btn btn-clean\"\n (click)=\"alert.expanded = !alert.expanded\"\n >\n <i c8yIcon=\"chevron-down\"></i>\n <span *ngIf=\"!alert.expanded\">Show details</span>\n <span *ngIf=\"alert.expanded\">Hide details</span>\n </button>\n </p>\n <div\n [collapse]=\"!alert.expanded\"\n [isAnimated]=\"true\"\n >\n {{ step.error.detailedData | json }}\n </div>\n </c8y-li-collapse>\n <c8y-li-action\n icon=\"play\"\n label=\"{{ 'Retry this step`button`' | translate }}\"\n *ngIf=\"step.state === 'Failed' && !step.overrideContext\"\n (click)=\"service.retryStep(step)\"\n data-cy=\"c8y-replace-device-wizard--retry-step\"\n ></c8y-li-action>\n </c8y-li>\n </c8y-list-group>\n </div>\n\n <c8y-stepper-buttons\n class=\"d-block card-footer p-24 separator\"\n [pending]=\"service.deviceReplacementInProgress$ | async\"\n (onBack)=\"close()\"\n [labels]=\"{ back: 'Close' | translate }\"\n >\n <button\n class=\"btn btn-primary\"\n [title]=\"'Retry' | translate\"\n type=\"button\"\n *ngIf=\"(service.deviceReplaced$ | async) === false\"\n (click)=\"service.retryStep()\"\n [ngClass]=\"{ 'btn-pending': service.deviceReplacementInProgress$ | async }\"\n [disabled]=\"service.deviceReplacementInProgress$ | async\"\n data-cy=\"c8y-replace-device-wizard--btn-retry\"\n >\n {{ 'Retry' | translate }}\n </button>\n </c8y-stepper-buttons>\n </cdk-step>\n</c8y-stepper>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1.ReplaceDeviceWizardService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-replace-device-replace-device-wizard.mjs","sources":["../../replace-device/replace-device-wizard/replace-device-wizard.model.ts","../../replace-device/replace-device-wizard/replace-device-wizard.service.ts","../../replace-device/replace-device-wizard/replace-device-wizard.component.ts","../../replace-device/replace-device-wizard/replace-device-wizard.component.html","../../replace-device/replace-device-wizard/c8y-ngx-components-replace-device-replace-device-wizard.ts"],"sourcesContent":["import { IExternalIdentity, IManagedObject } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\nimport { Observable } from 'rxjs';\n\nexport interface ReplaceDeviceContext {\n deviceToReplace: IManagedObject;\n replacementDevice: IManagedObject;\n replacementDeviceId: string;\n newExternalIds: IExternalIdentity[];\n oldExternalIds: IExternalIdentity[];\n deleteReplacedDeviceOwner: boolean;\n time: string;\n skip?: boolean;\n}\n\nexport interface Error {\n text: string;\n detailedData?:\n | string\n | {\n status: string;\n statusText: string;\n };\n}\n\n/**\n * Declares an execution step in the device replacement flow.\n */\nexport interface ReplaceDeviceStep {\n /**\n * Label to be used in the replace device wizard UI.\n */\n label: string;\n /**\n * Step implementation.\n */\n action: (context: ReplaceDeviceContext) => Observable<unknown> | Promise<unknown>;\n /**\n * Defines if the result from step execution should be passed to the next step in the flow.\n */\n overrideContext?: boolean;\n info?: StepInfo;\n /**\n * Current execution state of the step.\n */\n state?: ReplaceDeviceStepState;\n /**\n * Error occured during step execution.\n */\n error?: Error;\n /**\n * !Internal use only! Flag to skip step execution, used to control retrial.\n */\n skip?: boolean;\n /**\n * !Internal use only! Stores the context the step was initially executed with.\n */\n context?: ReplaceDeviceContext;\n /**\n * !Internal use only! Context to be used for step re-trial.\n */\n seed?: ReplaceDeviceContext;\n}\n\n/**\n * Allows to display an info popover for a particular step.\n */\nexport interface StepInfo {\n /**\n * Message that will be displayed as a popover for the given step.\n */\n msg?: string | undefined;\n /**\n * A function that will be executed\n */\n getMessage?: (context: ReplaceDeviceContext, step: ReplaceDeviceStep) => string | undefined;\n}\n\nconst REPLACE_DEVICE_STEP_STATES = <const>[\n 'Pending',\n 'Executing',\n 'Skipped',\n 'Failed',\n 'Successful'\n];\nexport type ReplaceDeviceStepState = (typeof REPLACE_DEVICE_STEP_STATES)[number];\n\nexport function isValidReplaceDeviceStepState(state: unknown): state is ReplaceDeviceStepState {\n return REPLACE_DEVICE_STEP_STATES.includes(state as ReplaceDeviceStepState);\n}\n\nexport const REPLACE_DEVICE_STEP_STATE: { [key: string]: ReplaceDeviceStepState } = {\n PENDING: gettext('Pending'),\n EXECUTING: gettext('Executing'),\n SKIPPED: gettext('Skipped'),\n FAILED: gettext('Failed'),\n SUCCESSFUL: gettext('Successful')\n};\n\nexport interface State {\n icon?: SupportedIconsSuggestions;\n styleClass?: string;\n}\n\nexport type ReplaceDeviceStepStatesMap = {\n [key in ReplaceDeviceStepState]?: State;\n};\n\nexport const REPLACE_DEVICE_STEP_STATES_MAP: ReplaceDeviceStepStatesMap = {\n Pending: {\n icon: 'clock-o',\n styleClass: 'text-info'\n },\n Executing: {\n icon: 'refresh',\n styleClass: 'text-info'\n },\n Skipped: {\n icon: 'skip',\n styleClass: 'text-info'\n },\n Failed: {\n icon: 'exclamation-circle',\n styleClass: 'text-danger'\n },\n Successful: {\n icon: 'check-circle',\n styleClass: 'text-success'\n }\n};\n","import { Injectable } from '@angular/core';\nimport {\n AuditRecordType,\n AuditService,\n EventService,\n IdentityService,\n IExternalIdentity,\n IManagedObject,\n InventoryService,\n IResultList,\n QueriesUtil,\n UserService\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService, AppStateService, toObservable } from '@c8y/ngx-components';\nimport { cloneDeep, pick } from 'lodash-es';\nimport {\n BehaviorSubject,\n combineLatest,\n forkJoin,\n from,\n Observable,\n of,\n pipe,\n Subject\n} from 'rxjs';\nimport {\n catchError,\n concatMap,\n distinctUntilChanged,\n map,\n scan,\n share,\n shareReplay,\n switchMap,\n tap,\n withLatestFrom\n} from 'rxjs/operators';\nimport {\n Error,\n isValidReplaceDeviceStepState,\n ReplaceDeviceContext,\n ReplaceDeviceStep,\n ReplaceDeviceStepState,\n REPLACE_DEVICE_STEP_STATE\n} from './replace-device-wizard.model';\n\n@Injectable()\nexport class ReplaceDeviceWizardService {\n private static readonly NON_REENTRANT_STATES: ReplaceDeviceStepState[] = [\n 'Executing',\n 'Successful'\n ];\n\n get deviceToReplace$(): Observable<IManagedObject> {\n return this.deviceToReplaceObs$;\n }\n get replacementDeviceId$(): Observable<string> {\n return this.replacementDeviceIdObs$;\n }\n\n externalIds$: Observable<IResultList<IExternalIdentity>>;\n externalIdsLoading$: Observable<boolean>;\n externalIdsWithSelection$: Observable<Array<{ id: IExternalIdentity; selected: boolean }>>;\n selectedExternalIds$: Observable<IExternalIdentity[]>;\n deviceReplaced$: Observable<boolean>;\n deviceReplacementInProgress$: Observable<boolean>;\n\n steps: ReplaceDeviceStep[] = [];\n\n private deviceToReplaceSubject$: BehaviorSubject<IManagedObject> = new BehaviorSubject(null);\n private deviceToReplaceObs$: Observable<IManagedObject> = this.deviceToReplaceSubject$\n .asObservable()\n .pipe(shareReplay());\n private replacementDeviceIdSubject$: Subject<string> = new Subject();\n private replacementDeviceIdObs$: Observable<string> = this.replacementDeviceIdSubject$\n .asObservable()\n .pipe(shareReplay());\n private checkExternalId$: Subject<{ id: IExternalIdentity; checked: boolean }> = new Subject();\n private externalIdsLoadingSubject$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n private triggerDeviceReplacementSubject$: Subject<void> = new Subject();\n private deviceReplacementInProgressSubject$: Subject<boolean> = new Subject();\n\n private queriesUtil: QueriesUtil = new QueriesUtil();\n\n constructor(\n private inventory: InventoryService,\n private identity: IdentityService,\n private audit: AuditService,\n private event: EventService,\n private user: UserService,\n private appState: AppStateService,\n private alert: AlertService\n ) {\n this.externalIdsLoading$ = this.externalIdsLoadingSubject$.asObservable().pipe(shareReplay());\n this.externalIds$ = this.replacementDeviceIdSubject$.pipe(\n distinctUntilChanged(),\n tap(() => this.externalIdsLoadingSubject$.next(true)),\n switchMap(deviceId => this.identity.list(deviceId)),\n tap(() => this.externalIdsLoadingSubject$.next(false)),\n tap(() => this.checkExternalId(null, false)),\n catchError(err => {\n this.alert.addServerFailure(err);\n return of(null);\n }),\n shareReplay()\n );\n\n this.externalIdsWithSelection$ = combineLatest([\n this.externalIds$.pipe(\n map(result => result?.data),\n map(externalIds => externalIds?.map(id => ({ id, selected: true })))\n ),\n this.checkExternalId$\n ]).pipe(\n scan((acc, val) => {\n const [selectedIds, lastAction] = acc;\n const [_, checkAction] = val;\n if (\n !(\n lastAction?.checked === checkAction?.checked &&\n this.areExtIdsEqual(lastAction?.id, checkAction?.id)\n )\n ) {\n selectedIds.forEach(\n id =>\n (id.selected = this.areExtIdsEqual(id.id, checkAction.id)\n ? checkAction.checked\n : id.selected)\n );\n }\n return val;\n }),\n map(([externalIds]) => externalIds),\n shareReplay()\n );\n\n this.selectedExternalIds$ = this.externalIdsWithSelection$.pipe(\n map(ids => ids.filter(id => id.selected).map(id => id.id)),\n shareReplay()\n );\n\n this.defineSteps();\n\n const toContext = ([_, deviceToReplace, replacementDeviceId, newExternalIds]) => ({\n deviceToReplace,\n replacementDeviceId,\n newExternalIds\n });\n\n this.deviceReplaced$ = this.triggerDeviceReplacementSubject$.pipe(\n tap(() => this.deviceReplacementInProgressSubject$.next(true)),\n withLatestFrom(this.deviceToReplace$, this.replacementDeviceId$, this.selectedExternalIds$),\n map(toContext),\n concatMap(context =>\n this.steps\n .map(step => this.executeStep(step))\n .reduce((ctx, step) => ctx.pipe(step), of(context))\n ),\n tap(() => this.deviceReplacementInProgressSubject$.next(false)),\n map(() => !this.steps.some(step => step.state === 'Failed')),\n share()\n );\n\n this.deviceReplacementInProgress$ = this.deviceReplacementInProgressSubject$\n .asObservable()\n .pipe(shareReplay());\n }\n\n forDevice(deviceToReplace: IManagedObject) {\n this.deviceToReplaceSubject$.next(deviceToReplace);\n }\n\n changeReplacementDeviceId(replacementDeviceId: string) {\n this.replacementDeviceIdSubject$.next(replacementDeviceId);\n }\n\n checkExternalId(id: IExternalIdentity, checked: boolean) {\n this.checkExternalId$.next({ id, checked });\n }\n\n replaceDevice() {\n this.triggerDeviceReplacementSubject$.next();\n }\n\n retryStep(step?: ReplaceDeviceStep) {\n this.steps.forEach(s => {\n if (\n (s.label === step?.label || !step) &&\n !ReplaceDeviceWizardService.NON_REENTRANT_STATES.includes(s.state)\n ) {\n s.skip = false;\n s.seed = s.context;\n s.state = 'Pending';\n delete s.error;\n } else {\n s.skip = true;\n }\n });\n this.replaceDevice();\n }\n\n private defineSteps() {\n this.steps = [\n {\n label: gettext('Gather required data'),\n overrideContext: true,\n action: (context: ReplaceDeviceContext) => {\n const { deviceToReplace, replacementDeviceId, newExternalIds } = context;\n if (deviceToReplace.id === replacementDeviceId) {\n throw new Error(\n gettext(\n 'The device to replace and the replacement device cannot be one and the same device.'\n )\n );\n }\n return forkJoin([\n from(\n this.inventory.list({\n query: this.queriesUtil.buildQuery({ owner: deviceToReplace.owner })\n })\n ).pipe(map(result => result?.data?.length === 1)),\n from(this.inventory.detail(replacementDeviceId)).pipe(map(result => result?.data)),\n from(this.identity.list(deviceToReplace.id)).pipe(map(result => result?.data))\n ]).pipe(\n map(([deleteReplacedDeviceOwner, replacementDevice, oldExternalIds]) => ({\n deviceToReplace,\n replacementDevice,\n newExternalIds,\n oldExternalIds,\n deleteReplacedDeviceOwner,\n time: new Date().toISOString()\n }))\n );\n }\n },\n {\n label: gettext('Delete external IDs of replacement device'),\n action: (context: ReplaceDeviceContext) => {\n const { newExternalIds } = context;\n return forkJoin(newExternalIds.map(id => this.identity.delete(id)));\n }\n },\n {\n label: gettext('Create new external IDs for the original device'),\n action: (context: ReplaceDeviceContext) => {\n const { newExternalIds, deviceToReplace } = context;\n return forkJoin(\n newExternalIds\n .map(extId => ({\n ...pick(extId, ['type', 'externalId']),\n managedObject: { ...pick(deviceToReplace, ['id']) }\n }))\n .map(id => this.identity.create(id))\n );\n }\n },\n {\n label: gettext('Delete old external IDs of original device'),\n action: (context: ReplaceDeviceContext) => {\n const { oldExternalIds } = context;\n return oldExternalIds?.length\n ? forkJoin(oldExternalIds.map(id => this.identity.delete(id)))\n : of(REPLACE_DEVICE_STEP_STATE.SKIPPED);\n },\n info: {\n getMessage: (_, step) =>\n step.state === 'Skipped'\n ? gettext('No existing external IDs were determined.')\n : undefined\n }\n },\n {\n label: gettext('Change owner of original device`owner may be a human or system user`'),\n action: (context: ReplaceDeviceContext) => {\n const { deviceToReplace, replacementDevice, oldExternalIds, time } = context;\n return this.inventory.update({\n id: deviceToReplace.id,\n owner: replacementDevice.owner,\n c8y_LastReplacement: {\n time,\n user: this.appState.currentUser.value.id,\n previousExternalIds: oldExternalIds.map(id => pick(id, ['externalId', 'type']))\n }\n });\n }\n },\n {\n label: gettext('Delete old owner of original device'),\n action: (context: ReplaceDeviceContext) => {\n const { deleteReplacedDeviceOwner, deviceToReplace } = context;\n return deleteReplacedDeviceOwner\n ? this.user.delete(deviceToReplace.owner)\n : of(REPLACE_DEVICE_STEP_STATE.SKIPPED);\n },\n info: {\n getMessage: (_, step) =>\n step.state === 'Skipped'\n ? gettext('User was not deleted because it is assigned as an owner of other devices.')\n : undefined\n }\n },\n {\n label: gettext('Delete replacement device'),\n action: (context: ReplaceDeviceContext) => {\n const { replacementDevice } = context;\n return this.inventory.delete(replacementDevice.id);\n }\n },\n {\n label: gettext('Create event'),\n action: (context: ReplaceDeviceContext) => {\n const { deviceToReplace, oldExternalIds, newExternalIds, time } = context;\n return this.event.create({\n source: { id: deviceToReplace.id },\n text: `Device with external ID(s) ${this.extIdsToString(\n oldExternalIds\n )} was replaced by device with external ID(s) ${this.extIdsToString(newExternalIds)}`,\n time,\n type: 'c8y_DeviceReplaced'\n });\n }\n },\n {\n label: gettext('Create audit log'),\n action: (context: ReplaceDeviceContext) => {\n const { deviceToReplace, oldExternalIds, newExternalIds, time } = context;\n return this.audit.create({\n activity: gettext('Device replaced'),\n source: { id: deviceToReplace.id },\n text: `Device with external ID(s) ${this.extIdsToString(\n oldExternalIds\n )} was replaced by device with external ID(s) ${this.extIdsToString(newExternalIds)}`,\n time,\n type: AuditRecordType.INVENTORY,\n user: this.appState.currentUser.value.id\n });\n }\n }\n ];\n }\n\n private executeStep(step: ReplaceDeviceStep) {\n return pipe(\n tap(\n (ctx: ReplaceDeviceContext) =>\n (step.state = step?.skip || ctx.skip ? step.state : REPLACE_DEVICE_STEP_STATE.EXECUTING)\n ),\n concatMap((ctx: ReplaceDeviceContext) => {\n if (!step.context && !ctx.skip) {\n step.context = cloneDeep(ctx);\n }\n const context = cloneDeep(step.seed ?? ctx);\n return step?.skip || ctx.skip\n ? of(context)\n : toObservable(this.unwrapStepAction(context, step.action)).pipe(\n tap(\n result =>\n (step.state = isValidReplaceDeviceStepState(result)\n ? result\n : REPLACE_DEVICE_STEP_STATE.SUCCESSFUL)\n ),\n catchError(err => {\n step.state = REPLACE_DEVICE_STEP_STATE.FAILED;\n step.error = this.toError(err);\n context.skip = step.overrideContext;\n return of(context);\n }),\n tap(() => {\n if (typeof step.info?.getMessage === 'function') {\n step.info.msg = step.info.getMessage(context, step);\n }\n }),\n map(result => (step.overrideContext ? result : context))\n );\n })\n );\n }\n\n private unwrapStepAction(\n context: ReplaceDeviceContext,\n action: (context: ReplaceDeviceContext) => Observable<unknown> | Promise<unknown>\n ) {\n try {\n return action(context);\n } catch (err) {\n // bubble up any runtime errors\n return of({}).pipe(\n tap(() => {\n throw err;\n })\n );\n }\n }\n\n private areExtIdsEqual(idA: IExternalIdentity, idB: IExternalIdentity): boolean {\n return idA?.type === idB?.type && idA?.externalId === idB?.externalId;\n }\n\n private extIdsToString(extnernalIds: IExternalIdentity[]) {\n return extnernalIds?.map(id => `${id.externalId} [${id.type}]`).join(', ');\n }\n\n private toError(err): Error {\n const { data, res, message } = err;\n let text = data?.message || message;\n let detailedData;\n if (data) {\n if (typeof data === 'object') {\n detailedData = data.exceptionMessage;\n } else if (typeof data === 'string') {\n detailedData = data;\n }\n }\n const hasRelevantMessage = !!(text || detailedData);\n if (!text) {\n text = gettext('A server error occurred.');\n }\n if (res && !hasRelevantMessage) {\n detailedData = pick(res, ['status', 'statusText']);\n }\n\n return { text, detailedData };\n }\n}\n","import { Component, HostBinding, Input, Optional, ViewChild } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n BottomDrawerRef,\n C8yStepper,\n Column,\n CoreModule,\n DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER,\n DATA_GRID_CONFIGURATION_STRATEGY,\n GridConfigContextProvider,\n ModalService,\n Status,\n UserPreferencesConfigurationStrategy,\n UserPreferencesGridConfigContext\n} from '@c8y/ngx-components';\nimport { DeviceGridModule, DeviceGridService } from '@c8y/ngx-components/device-grid';\nimport { DeviceSelectorModule } from '@c8y/ngx-components/operations/device-selector';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { REPLACE_DEVICE_STEP_STATES_MAP } from './replace-device-wizard.model';\nimport { ReplaceDeviceWizardService } from './replace-device-wizard.service';\n\n@Component({\n standalone: true,\n selector: 'c8y-replace-device-wizard',\n imports: [\n CoreModule,\n DeviceGridModule,\n DeviceSelectorModule,\n TooltipModule,\n CollapseModule,\n PopoverModule\n ],\n providers: [\n DeviceGridService,\n ReplaceDeviceWizardService,\n {\n provide: DATA_GRID_CONFIGURATION_STRATEGY,\n useClass: UserPreferencesConfigurationStrategy\n },\n {\n provide: DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER,\n useExisting: ReplaceDeviceWizardComponent\n }\n ],\n templateUrl: './replace-device-wizard.component.html'\n})\nexport class ReplaceDeviceWizardComponent implements GridConfigContextProvider {\n private static readonly DEFAULT_VISIBLE_COLUMNS = [\n 'status',\n 'name',\n 'serialNumber',\n 'registrationDate',\n 'systemId',\n 'imei'\n ];\n\n REPLACE_DEVICE_STEP_STATES_MAP = REPLACE_DEVICE_STEP_STATES_MAP;\n\n @HostBinding('class')\n classes = 'd-contents';\n\n @ViewChild(C8yStepper, { static: true })\n stepper: C8yStepper;\n\n @Input()\n set deviceToReplace(deviceToReplace: IManagedObject) {\n this.service.forDevice(deviceToReplace);\n }\n\n replacementDeviceId: string;\n\n baseQuery$: Observable<object> = this.service.deviceToReplace$.pipe(\n map(device => ({\n __not: {\n id: {\n __eq: device?.id\n }\n }\n }))\n );\n columns: Column[];\n\n constructor(\n public service: ReplaceDeviceWizardService,\n private deviceGridService: DeviceGridService,\n private modal: ModalService,\n @Optional() private drawerRef: BottomDrawerRef<ReplaceDeviceWizardComponent>\n ) {\n this.columns = this.deviceGridService.getDefaultColumns().map(column => {\n column.visible = ReplaceDeviceWizardComponent.DEFAULT_VISIBLE_COLUMNS.includes(column.name);\n return column;\n });\n }\n\n getGridConfigContext(): UserPreferencesGridConfigContext {\n return {\n key: 'replace-device-wizard-grid',\n configFilter: {\n filter: false\n }\n };\n }\n\n async replace() {\n try {\n await this.modal.confirm(\n gettext('Replace device'),\n gettext(\n 'You are about to replace a device. When the process is finished, the replacement device and its data will be deleted. Do you want to proceed?'\n ),\n Status.DANGER,\n { ok: gettext('Replace'), cancel: gettext('Cancel') }\n );\n this.service.replaceDevice();\n this.continue();\n } catch (ex) {\n // Intentionally empty\n }\n }\n\n continue() {\n this.stepper.selected.completed = true;\n this.stepper.next();\n }\n\n cancel() {\n this.close();\n }\n\n close() {\n if (this.drawerRef) {\n this.drawerRef.close();\n }\n }\n}\n","<c8y-stepper\n class=\"d-contents c8y-stepper--no-btns\"\n [disableDefaultIcons]=\"{ edit: true, done: false }\"\n id=\"modal-body\"\n [customClasses]=\"[\n 'col-xs-10',\n 'col-xs-offset-1',\n 'col-sm-8',\n 'col-sm-offset-2',\n 'm-t-24',\n 'm-b-40',\n 'p-0',\n 'flex-no-shrink'\n ]\"\n linear\n>\n <cdk-step [label]=\"'Replacement device' | translate\">\n <div class=\"p-16 p-t-0 flex-no-shrink separator-bottom col-xs-12\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'Replacement device' | translate }}\n </div>\n </div>\n </div>\n </div>\n <c8y-device-grid\n class=\"flex-grow col-xs-12 no-gutter\"\n [title]=\"'Select replacement device' | translate\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"[]\"\n [columns]=\"columns\"\n [selectable]=\"true\"\n [singleSelection]=\"true\"\n [baseQuery]=\"baseQuery$ | async\"\n (itemsSelect)=\"replacementDeviceId = $event[0]\"\n ></c8y-device-grid>\n <c8y-stepper-buttons\n class=\"d-block card-footer p-24 separator\"\n [disabled]=\"!replacementDeviceId\"\n (onCancel)=\"cancel()\"\n (onNext)=\"service.changeReplacementDeviceId(replacementDeviceId); continue()\"\n ></c8y-stepper-buttons>\n </cdk-step>\n\n <cdk-step [label]=\"'Select external IDs' | translate\">\n <div class=\"p-16 p-t-0 flex-no-shrink col-xs-12\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'Select external IDs' | translate }}\n </div>\n </div>\n </div>\n </div>\n <c8y-li class=\"page-sticky-header hidden-sm hidden-xs\">\n <c8y-li-icon><i class=\"p-l-24\"></i></c8y-li-icon>\n <c8y-li-body class=\"content-flex-40\">\n <div class=\"col-4\">\n <span\n class=\"text-medium text-truncate\"\n title=\" {{ 'Type' | translate }} \"\n >\n {{ 'Type' | translate }}\n </span>\n </div>\n <div class=\"col-6\">\n <span\n class=\"text-medium text-truncate\"\n title=\"{{ 'External ID' | translate }}\"\n >\n {{ 'External ID' | translate }}\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n <div\n class=\"col-xs-12 flex-grow no-gutter\"\n *ngIf=\"!(service.externalIdsLoading$ | async); else loading\"\n >\n <div\n class=\"card-inner-scroll fit-h\"\n *ngIf=\"(service.externalIdsWithSelection$ | async)?.length > 0; else noIds\"\n >\n <div class=\"card-block p-t-0 p-b-0\">\n <c8y-list-group>\n <c8y-li *ngFor=\"let extId of service.externalIdsWithSelection$ | async\">\n <c8y-li-checkbox\n [selected]=\"extId.selected\"\n (onSelect)=\"service.checkExternalId(extId.id, $event)\"\n ></c8y-li-checkbox>\n <c8y-li-body class=\"content-flex-40\">\n <div class=\"col-4 m-b-xs-8\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'Type' | translate }}\"\n >\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n Type\n </span>\n {{ extId.id.type }}\n </div>\n </div>\n <div class=\"col-6 m-b-xs-8\">\n <div\n class=\"text-truncate\"\n title=\"{{ 'External ID' | translate }}\"\n >\n <span\n class=\"text-label-small m-r-8 visible-xs visible-sm\"\n translate\n >\n External ID\n </span>\n {{ extId.id.externalId }}\n </div>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-list-group>\n </div>\n </div>\n <ng-template #noIds>\n <c8y-ui-empty-state\n [icon]=\"'barcode'\"\n [title]=\"'No external IDs assigned.'\"\n [subtitle]=\"\n 'The selected replacement device does not have external IDs assigned. Go back to "Replacement device" and select a different device.'\n | translate\n \"\n *ngIf=\"true\"\n ></c8y-ui-empty-state>\n </ng-template>\n </div>\n <ng-template #loading>\n <div class=\"d-flex d-col a-i-center j-c-center fit-h\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-template>\n <c8y-stepper-buttons\n class=\"d-block card-footer p-24 separator\"\n [disabled]=\"\n (service.externalIdsLoading$ | async) || !(service.selectedExternalIds$ | async)?.length\n \"\n (onCancel)=\"cancel()\"\n (onNext)=\"replace()\"\n [labels]=\"{ next: ('Replace' | translate) }\"\n ></c8y-stepper-buttons>\n </cdk-step>\n\n <cdk-step [label]=\"'Replace' | translate\">\n <div class=\"p-16 p-t-0 flex-no-shrink col-xs-12 separator-bottom\">\n <div class=\"row\">\n <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n <div class=\"h4 text-center text-medium\">\n {{ 'Replace' | translate }}\n </div>\n </div>\n </div>\n </div>\n <div class=\"d-flex d-col a-i-center j-c-center inner-scroll\">\n <c8y-list-group class=\"col-sm-8 col-md-6\">\n <c8y-li\n *ngFor=\"let step of service.steps\"\n [attr.data-cy]=\"'c8y-replace-device-wizard--step-' + step.label\"\n >\n <c8y-li-icon>\n <i\n [c8yIcon]=\"REPLACE_DEVICE_STEP_STATES_MAP[step.state || 'Pending']?.icon\"\n [tooltip]=\"(step.state || 'Pending').toString() | translate\"\n [ngClass]=\"REPLACE_DEVICE_STEP_STATES_MAP[step.state || 'Pending']?.styleClass\"\n ></i>\n </c8y-li-icon>\n <c8y-li-body>\n <span [ngClass]=\"{ 'text-bold': !!step.error }\">{{ step.label | translate }}</span>\n <button\n class=\"btn-help btn-help--sm pull-right\"\n [attr.aria-label]=\"'Help' | translate\"\n [attr.aria-label]=\"step.info.msg | translate\"\n [popover]=\"step.info.msg | translate\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n *ngIf=\"!!step.info?.msg\"\n >\n <i c8yIcon=\"question-circle-o\"></i>\n </button>\n </c8y-li-body>\n <c8y-li-collapse\n #alert\n *ngIf=\"step.error\"\n >\n <span class=\"message\">{{ step.error?.text | translate }}</span>\n <p\n class=\"text-muted m-t-8\"\n *ngIf=\"step?.error?.detailedData\"\n >\n <button\n class=\"btn btn-clean\"\n (click)=\"alert.expanded = !alert.expanded\"\n >\n <i c8yIcon=\"chevron-down\"></i>\n <span *ngIf=\"!alert.expanded\">Show details</span>\n <span *ngIf=\"alert.expanded\">Hide details</span>\n </button>\n </p>\n <div\n [collapse]=\"!alert.expanded\"\n [isAnimated]=\"true\"\n >\n {{ step.error.detailedData | json }}\n </div>\n </c8y-li-collapse>\n <c8y-li-action\n icon=\"play\"\n label=\"{{ 'Retry this step`button`' | translate }}\"\n *ngIf=\"step.state === 'Failed' && !step.overrideContext\"\n (click)=\"service.retryStep(step)\"\n data-cy=\"c8y-replace-device-wizard--retry-step\"\n ></c8y-li-action>\n </c8y-li>\n </c8y-list-group>\n </div>\n\n <c8y-stepper-buttons\n class=\"d-block card-footer p-24 separator\"\n [pending]=\"service.deviceReplacementInProgress$ | async\"\n (onBack)=\"close()\"\n [labels]=\"{ back: 'Close' | translate }\"\n >\n <button\n class=\"btn btn-primary\"\n [title]=\"'Retry' | translate\"\n type=\"button\"\n *ngIf=\"(service.deviceReplaced$ | async) === false\"\n (click)=\"service.retryStep()\"\n [ngClass]=\"{ 'btn-pending': service.deviceReplacementInProgress$ | async }\"\n [disabled]=\"service.deviceReplacementInProgress$ | async\"\n data-cy=\"c8y-replace-device-wizard--btn-retry\"\n >\n {{ 'Retry' | translate }}\n </button>\n </c8y-stepper-buttons>\n </cdk-step>\n</c8y-stepper>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1.ReplaceDeviceWizardService"],"mappings":"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"}
|