@c8y/ngx-components 1023.5.3 → 1023.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +13 -13
- 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 +41 -41
- 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 +103 -103
- 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 +4 -4
- 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 +130 -130
- 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 +56 -56
- 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 +13 -13
- 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 +10 -10
- 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 +10 -10
- 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 +40 -40
- package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-time-context.mjs +7 -7
- 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 +4 -4
- 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 +25 -25
- 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 +22 -22
- 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 +1325 -1325
- package/fesm2022/c8y-ngx-components.mjs.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
|
@@ -269,10 +269,10 @@ class DefaultSubscriptionsService {
|
|
|
269
269
|
.map(app => app.name)
|
|
270
270
|
.join(',');
|
|
271
271
|
}
|
|
272
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
273
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
272
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DefaultSubscriptionsService, deps: [{ token: i1.ApplicationService }, { token: i1.TenantService }, { token: i1.TenantOptionsService }, { token: i2.HumanizeAppNamePipe }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
273
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DefaultSubscriptionsService }); }
|
|
274
274
|
}
|
|
275
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
275
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DefaultSubscriptionsService, decorators: [{
|
|
276
276
|
type: Injectable
|
|
277
277
|
}], ctorParameters: () => [{ type: i1.ApplicationService }, { type: i1.TenantService }, { type: i1.TenantOptionsService }, { type: i2.HumanizeAppNamePipe }] });
|
|
278
278
|
|
|
@@ -447,10 +447,10 @@ class DefaultSubscriptionsComponent {
|
|
|
447
447
|
: null
|
|
448
448
|
};
|
|
449
449
|
}
|
|
450
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
451
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.3", type: DefaultSubscriptionsComponent, isStandalone: true, selector: "c8y-default-subscriptions", ngImport: i0, template: "<c8y-title>{{ 'Default subscriptions' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item [label]=\"'Ecosystem' | translate\" [icon]=\"'c8y-atom'\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Default subscriptions' | translate\"\n [icon]=\"'c8y-atom'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form [formGroup]=\"form\" (ngSubmit)=\"save()\">\n <div class=\"card card--fullpage col-lg-max\">\n <div class=\"card-header separator\">\n <div class=\"card-title\" translate>Applications</div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"sticky-top separator-bottom\">\n <div class=\"d-flex\">\n <div class=\"col-sm-6 col-xs-6 p-24 p-t-16 p-l-xs-16\">\n <p translate>\n Configure default subscriptions in the platform, both for tenant creation and for\n platform upgrade. To display a full list of available applications, override inherited\n settings.\n </p>\n </div>\n <div class=\"col-sm-6 col-xs-6 bg-level-1 p-16 text-center separator-bottom\">\n <div class=\"row\">\n <div class=\"col-sm-6 col-xs-6\">\n <p><strong translate>Subscribed on tenant creation</strong></p>\n <div>\n <label class=\"c8y-switch\" title=\"{{ 'Override inherited' | translate }}\">\n <input type=\"checkbox\" formControlName=\"overrideOnCreationSubscriptions\" />\n <span></span>\n <span>\n {{ 'Override inherited' | translate }}\n </span>\n </label>\n </div>\n </div>\n <div class=\"col-sm-6 col-xs-6\">\n <p><strong translate>Subscribed on platform upgrade</strong></p>\n <div>\n <label class=\"c8y-switch\" title=\"{{ 'Override inherited' | translate }}\">\n <input type=\"checkbox\" formControlName=\"overrideOnUpgradeSubscriptions\" />\n <span></span>\n <span>\n {{ 'Override inherited' | translate }}\n </span>\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-block\" *ngIf=\"loading\"></div>\n <div class=\"card-block card-block d-flex a-i-center j-c-center d-col\" *ngIf=\"loading\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"card-block\" *ngIf=\"loading\"></div>\n\n <ng-container formArrayName=\"appRows\">\n <div class=\"bg-level-1\" *ngIf=\"!loading && isEmptyView()\"></div>\n <div class=\"card-block bg-level-0\" *ngIf=\"!loading && isEmptyView()\">\n <c8y-ui-empty-state\n [icon]=\"'c8y-c8y-data'\"\n [title]=\"'No application subscriptions yet.' | translate\"\n [subtitle]=\"\n 'Select "Override inherited" to define the list of subscribed applications.'\n | translate\n \"\n ></c8y-ui-empty-state>\n </div>\n <div class=\"bg-level-1\" *ngIf=\"!loading && isEmptyView()\"></div>\n\n <div *ngFor=\"let appRowControl of form.get('appRows')['controls']; let i = index\">\n <ng-container\n *ngIf=\"shouldShowAppRow(appRowControl.getRawValue())\"\n formArrayName=\"{{ i }}\"\n >\n <div class=\"d-flex a-i-stretch\">\n <div class=\"col-sm-6 col-xs-6 separator-bottom\">\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__appicon\">\n <c8y-app-icon\n [app]=\"appRowControl.value.app\"\n [name]=\"appRowControl.value.app.name\"\n [contextPath]=\"appRowControl.value.app.contextPath\"\n ></c8y-app-icon>\n </div>\n <div class=\"c8y-list__item__body\" data-cy=\"defaultSubscriptionForm--c8y-list_item\">\n <div class=\"content-flex-30\">\n <div class=\"col-6\">\n <p\n class=\"text-truncate\"\n title=\"{{ appRowControl.value.app | humanizeAppName | async }}\"\n >\n {{ appRowControl.value.app | humanizeAppName | async }}\n </p>\n <small class=\"text-muted\">{{ appRowControl.value.app.contextPath }}</small>\n </div>\n <div class=\"col-6 text-right-sm\">\n <p>\n <span class=\"text-label-small m-r-4\" translate>Tenant ID</span>\n {{ appRowControl.value.app.owner.tenant.id }}\n </p>\n <!-- TODO: uncomment when company name is available\n <p>\n <span class=\"text-label-small m-r-4\" translate>Company</span>\n <small class=\"text-muted\">company name</small>\n </p> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"col-sm-3 col-xs-3 bg-level-1 separator-bottom d-flex j-c-center a-i-center\"\n >\n <label\n class=\"c8y-checkbox\"\n [ngClass]=\"{ disabled: appRowControl.controls.subscribedOnCreation.disabled }\"\n >\n <input type=\"checkbox\" formControlName=\"subscribedOnCreation\" />\n <span *ngIf=\"!appRowControl.controls.subscribedOnCreation.disabled\"></span>\n <span\n *ngIf=\"appRowControl.controls.subscribedOnCreation.disabled\"\n title=\"{{ disabledCheckboxHint | translate }}\"\n ></span>\n <span class=\"sr-only\">{{ 'Subscribed on tenant creation' | translate }}</span>\n </label>\n </div>\n\n <div\n class=\"col-sm-3 col-xs-3 bg-level-1 separator-bottom d-flex j-c-center a-i-center\"\n >\n <label\n class=\"c8y-checkbox\"\n [ngClass]=\"{ disabled: appRowControl.controls.subscribedOnUpgrade.disabled }\"\n >\n <input type=\"checkbox\" formControlName=\"subscribedOnUpgrade\" />\n <span *ngIf=\"!appRowControl.controls.subscribedOnUpgrade.disabled\"></span>\n <span\n *ngIf=\"appRowControl.controls.subscribedOnUpgrade.disabled\"\n title=\"{{ disabledCheckboxHint | translate }}\"\n ></span>\n <span class=\"sr-only\">{{ 'Subscribed on platform upgrade' | translate }}</span>\n </label>\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ 'Save default subscriptions' | translate }}\"\n [disabled]=\"form.invalid || form.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "component", type: TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: AppIconComponent, selector: "c8y-app-icon", inputs: ["contextPath", "name", "app"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: HumanizeAppNamePipe, name: "humanizeAppName" }] }); }
|
|
450
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DefaultSubscriptionsComponent, deps: [{ token: i1$1.FormBuilder }, { token: DefaultSubscriptionsService }, { token: i2.AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
451
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: DefaultSubscriptionsComponent, isStandalone: true, selector: "c8y-default-subscriptions", ngImport: i0, template: "<c8y-title>{{ 'Default subscriptions' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item [label]=\"'Ecosystem' | translate\" [icon]=\"'c8y-atom'\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Default subscriptions' | translate\"\n [icon]=\"'c8y-atom'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form [formGroup]=\"form\" (ngSubmit)=\"save()\">\n <div class=\"card card--fullpage col-lg-max\">\n <div class=\"card-header separator\">\n <div class=\"card-title\" translate>Applications</div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"sticky-top separator-bottom\">\n <div class=\"d-flex\">\n <div class=\"col-sm-6 col-xs-6 p-24 p-t-16 p-l-xs-16\">\n <p translate>\n Configure default subscriptions in the platform, both for tenant creation and for\n platform upgrade. To display a full list of available applications, override inherited\n settings.\n </p>\n </div>\n <div class=\"col-sm-6 col-xs-6 bg-level-1 p-16 text-center separator-bottom\">\n <div class=\"row\">\n <div class=\"col-sm-6 col-xs-6\">\n <p><strong translate>Subscribed on tenant creation</strong></p>\n <div>\n <label class=\"c8y-switch\" title=\"{{ 'Override inherited' | translate }}\">\n <input type=\"checkbox\" formControlName=\"overrideOnCreationSubscriptions\" />\n <span></span>\n <span>\n {{ 'Override inherited' | translate }}\n </span>\n </label>\n </div>\n </div>\n <div class=\"col-sm-6 col-xs-6\">\n <p><strong translate>Subscribed on platform upgrade</strong></p>\n <div>\n <label class=\"c8y-switch\" title=\"{{ 'Override inherited' | translate }}\">\n <input type=\"checkbox\" formControlName=\"overrideOnUpgradeSubscriptions\" />\n <span></span>\n <span>\n {{ 'Override inherited' | translate }}\n </span>\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-block\" *ngIf=\"loading\"></div>\n <div class=\"card-block card-block d-flex a-i-center j-c-center d-col\" *ngIf=\"loading\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"card-block\" *ngIf=\"loading\"></div>\n\n <ng-container formArrayName=\"appRows\">\n <div class=\"bg-level-1\" *ngIf=\"!loading && isEmptyView()\"></div>\n <div class=\"card-block bg-level-0\" *ngIf=\"!loading && isEmptyView()\">\n <c8y-ui-empty-state\n [icon]=\"'c8y-c8y-data'\"\n [title]=\"'No application subscriptions yet.' | translate\"\n [subtitle]=\"\n 'Select "Override inherited" to define the list of subscribed applications.'\n | translate\n \"\n ></c8y-ui-empty-state>\n </div>\n <div class=\"bg-level-1\" *ngIf=\"!loading && isEmptyView()\"></div>\n\n <div *ngFor=\"let appRowControl of form.get('appRows')['controls']; let i = index\">\n <ng-container\n *ngIf=\"shouldShowAppRow(appRowControl.getRawValue())\"\n formArrayName=\"{{ i }}\"\n >\n <div class=\"d-flex a-i-stretch\">\n <div class=\"col-sm-6 col-xs-6 separator-bottom\">\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__appicon\">\n <c8y-app-icon\n [app]=\"appRowControl.value.app\"\n [name]=\"appRowControl.value.app.name\"\n [contextPath]=\"appRowControl.value.app.contextPath\"\n ></c8y-app-icon>\n </div>\n <div class=\"c8y-list__item__body\" data-cy=\"defaultSubscriptionForm--c8y-list_item\">\n <div class=\"content-flex-30\">\n <div class=\"col-6\">\n <p\n class=\"text-truncate\"\n title=\"{{ appRowControl.value.app | humanizeAppName | async }}\"\n >\n {{ appRowControl.value.app | humanizeAppName | async }}\n </p>\n <small class=\"text-muted\">{{ appRowControl.value.app.contextPath }}</small>\n </div>\n <div class=\"col-6 text-right-sm\">\n <p>\n <span class=\"text-label-small m-r-4\" translate>Tenant ID</span>\n {{ appRowControl.value.app.owner.tenant.id }}\n </p>\n <!-- TODO: uncomment when company name is available\n <p>\n <span class=\"text-label-small m-r-4\" translate>Company</span>\n <small class=\"text-muted\">company name</small>\n </p> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"col-sm-3 col-xs-3 bg-level-1 separator-bottom d-flex j-c-center a-i-center\"\n >\n <label\n class=\"c8y-checkbox\"\n [ngClass]=\"{ disabled: appRowControl.controls.subscribedOnCreation.disabled }\"\n >\n <input type=\"checkbox\" formControlName=\"subscribedOnCreation\" />\n <span *ngIf=\"!appRowControl.controls.subscribedOnCreation.disabled\"></span>\n <span\n *ngIf=\"appRowControl.controls.subscribedOnCreation.disabled\"\n title=\"{{ disabledCheckboxHint | translate }}\"\n ></span>\n <span class=\"sr-only\">{{ 'Subscribed on tenant creation' | translate }}</span>\n </label>\n </div>\n\n <div\n class=\"col-sm-3 col-xs-3 bg-level-1 separator-bottom d-flex j-c-center a-i-center\"\n >\n <label\n class=\"c8y-checkbox\"\n [ngClass]=\"{ disabled: appRowControl.controls.subscribedOnUpgrade.disabled }\"\n >\n <input type=\"checkbox\" formControlName=\"subscribedOnUpgrade\" />\n <span *ngIf=\"!appRowControl.controls.subscribedOnUpgrade.disabled\"></span>\n <span\n *ngIf=\"appRowControl.controls.subscribedOnUpgrade.disabled\"\n title=\"{{ disabledCheckboxHint | translate }}\"\n ></span>\n <span class=\"sr-only\">{{ 'Subscribed on platform upgrade' | translate }}</span>\n </label>\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ 'Save default subscriptions' | translate }}\"\n [disabled]=\"form.invalid || form.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "component", type: TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: AppIconComponent, selector: "c8y-app-icon", inputs: ["contextPath", "name", "app"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: HumanizeAppNamePipe, name: "humanizeAppName" }] }); }
|
|
452
452
|
}
|
|
453
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
453
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DefaultSubscriptionsComponent, decorators: [{
|
|
454
454
|
type: Component,
|
|
455
455
|
args: [{ selector: 'c8y-default-subscriptions', imports: [
|
|
456
456
|
TitleComponent,
|
|
@@ -491,10 +491,10 @@ class DefaultSubscriptionsGuard {
|
|
|
491
491
|
}
|
|
492
492
|
return this.active;
|
|
493
493
|
}
|
|
494
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
495
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
494
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DefaultSubscriptionsGuard, deps: [{ token: i2.TenantUiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
495
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DefaultSubscriptionsGuard }); }
|
|
496
496
|
}
|
|
497
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
497
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DefaultSubscriptionsGuard, decorators: [{
|
|
498
498
|
type: Injectable
|
|
499
499
|
}], ctorParameters: () => [{ type: i2.TenantUiService }] });
|
|
500
500
|
|
|
@@ -515,17 +515,17 @@ class DefaultSubscriptionsNavigationFactory {
|
|
|
515
515
|
return this.navNode;
|
|
516
516
|
}
|
|
517
517
|
}
|
|
518
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
519
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
518
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DefaultSubscriptionsNavigationFactory, deps: [{ token: DefaultSubscriptionsGuard }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
519
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DefaultSubscriptionsNavigationFactory }); }
|
|
520
520
|
}
|
|
521
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
521
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DefaultSubscriptionsNavigationFactory, decorators: [{
|
|
522
522
|
type: Injectable
|
|
523
523
|
}], ctorParameters: () => [{ type: DefaultSubscriptionsGuard }] });
|
|
524
524
|
|
|
525
525
|
class DefaultSubscriptionsModule {
|
|
526
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
527
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.
|
|
528
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.
|
|
526
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DefaultSubscriptionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
527
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: DefaultSubscriptionsModule, imports: [CoreModule, ReactiveFormsModule, DefaultSubscriptionsComponent], exports: [DefaultSubscriptionsComponent] }); }
|
|
528
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DefaultSubscriptionsModule, providers: [
|
|
529
529
|
DefaultSubscriptionsService,
|
|
530
530
|
DefaultSubscriptionsGuard,
|
|
531
531
|
hookNavigator(DefaultSubscriptionsNavigationFactory),
|
|
@@ -536,7 +536,7 @@ class DefaultSubscriptionsModule {
|
|
|
536
536
|
})
|
|
537
537
|
], imports: [CoreModule, ReactiveFormsModule, DefaultSubscriptionsComponent] }); }
|
|
538
538
|
}
|
|
539
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
539
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DefaultSubscriptionsModule, decorators: [{
|
|
540
540
|
type: NgModule,
|
|
541
541
|
args: [{
|
|
542
542
|
imports: [CoreModule, ReactiveFormsModule, DefaultSubscriptionsComponent],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-default-subscriptions.mjs","sources":["../../default-subscriptions/default-subscriptions.model.ts","../../default-subscriptions/default-subscriptions.service.ts","../../default-subscriptions/default-subscriptions.component.ts","../../default-subscriptions/default-subscriptions.component.html","../../default-subscriptions/default-subscriptions.guard.ts","../../default-subscriptions/default-subscriptions-navigation.factory.ts","../../default-subscriptions/default-subscriptions.module.ts","../../default-subscriptions/c8y-ngx-components-default-subscriptions.ts"],"sourcesContent":["import { IApplication } from '@c8y/client';\n\n/** The list of partial application objects. */\nexport type PartialAppsList = Array<Partial<IApplication>>;\n\n/** The interface for default subscriptions configuration. */\nexport interface DefaultSubscriptions {\n /** Whether the list of on tenant creation subscriptions is overridden in the current tenant. Won't be defined for inherited configuration. */\n overrideOnCreationSubscriptions?: boolean;\n /** The list of applications subscribed to new tenants on creation. */\n onCreationSubscriptions: PartialAppsList;\n /** Whether the list of on platform upgrade subscriptions is overridden in the current tenant. Won't be defined for inherited configuration. */\n overrideOnUpgradeSubscriptions?: boolean;\n /** The list of applications subscribed to existing tenants on platform upgrade. */\n onUpgradeSubscriptions: PartialAppsList;\n}\n\n/** The context for evaluating default subscriptions configuration */\nexport enum DefaultSubscriptionsContext {\n /** Current tenant context (only current tenant options are taken into account). */\n CURRENT_TENANT,\n /** Parent tenant context (only parent tenant options are taken into account). */\n PARENT_TENANT\n}\n","import { Injectable } from '@angular/core';\nimport { isUndefined, sortBy } from 'lodash-es';\nimport { debounceTime, take } from 'rxjs/operators';\n\nimport {\n IApplication,\n ApplicationType,\n ApplicationService,\n ISystemOption,\n TenantService,\n TenantOptionsService\n} from '@c8y/client';\nimport { HumanizeAppNamePipe } from '@c8y/ngx-components';\n\nimport {\n PartialAppsList,\n DefaultSubscriptions,\n DefaultSubscriptionsContext as DefaultSubscriptionsContextTenant\n} from './default-subscriptions.model';\n\n@Injectable()\nexport class DefaultSubscriptionsService {\n constructor(\n private applicationService: ApplicationService,\n private tenantService: TenantService,\n private tenantOptionsService: TenantOptionsService,\n private humanizeAppNamePipe: HumanizeAppNamePipe\n ) {}\n\n /**\n * Gets the list of applications which can be used in default subscriptions, i.e.:\n * - current tenant's all own applications,\n * - inherited applications, which do not have the same names as current tenant's own apps.\n * The list is sorted alphabetically by humanized app name and contains up to 2000 items.\n * @returns The list of applications, which can be used in default subscriptions.\n */\n async getSubscribableTenantApps(): Promise<IApplication[]> {\n const currentTenant = (await this.tenantService.current()).data;\n\n const allApps = (await this.applicationService.listByTenant(null, { pageSize: 2000 })).data;\n const ownApps = allApps.filter(app => app.owner.tenant.id === currentTenant.name);\n const inheritedApps = allApps.filter(app => app.owner.tenant.id !== currentTenant.name);\n\n const filteredApps: IApplication[] = [...ownApps];\n inheritedApps.forEach(inheritedApp => {\n if (!filteredApps.some(filteredApp => filteredApp.name === inheritedApp.name)) {\n filteredApps.push(inheritedApp);\n }\n });\n\n const filteredAppsWithHumanizedNames = await Promise.all(\n filteredApps.map(async app => {\n const humanizedName = await this.humanizeAppNamePipe\n .transform(app.name)\n .pipe(debounceTime(250), take(1))\n .toPromise();\n return { app, humanizedName };\n })\n );\n const sortedAppsWithHumanizedNames = sortBy(filteredAppsWithHumanizedNames, ['humanizedName']);\n const sortedApps = sortedAppsWithHumanizedNames.map(({ app }) => app);\n\n return sortedApps;\n }\n\n /**\n * Gets the default subscriptions configuration inherited from parent tenant.\n * @returns The default subscriptions object with settings from parent tenant.\n */\n async getDefaultSubscriptionsEvaluatedFromParentTenant(): Promise<DefaultSubscriptions> {\n return this.getDefaultSubscriptions(DefaultSubscriptionsContextTenant.PARENT_TENANT);\n }\n\n /**\n * Gets the default subscriptions configuration from the current tenant.\n * @returns The default subscriptions object with settings from the current tenant.\n */\n async getDefaultSubscriptionsFromCurrentTenant(): Promise<DefaultSubscriptions> {\n return this.getDefaultSubscriptions(DefaultSubscriptionsContextTenant.CURRENT_TENANT);\n }\n\n /**\n * Saves given default subscriptions configuration to the current tenant\n * (either sets, updates, or deletes corresponding tenant options).\n * @param defaultSubscriptions The default subscriptions configuration to be saved.\n */\n async saveDefaultSubscriptionsToCurrentTenant(defaultSubscriptions: DefaultSubscriptions) {\n await this.saveOnCreationSubscriptions(defaultSubscriptions);\n await this.saveOnUpgradeSubscriptions(defaultSubscriptions);\n }\n\n /**\n * Gets default subscriptions in the context of current or parent tenant.\n * @param contextTenant Tells whether to use current or parent tenant as context.\n */\n private async getDefaultSubscriptions(\n contextTenant: DefaultSubscriptionsContextTenant\n ): Promise<DefaultSubscriptions> {\n let tenantOptionsParams: object;\n let overridable: boolean;\n\n switch (contextTenant) {\n case DefaultSubscriptionsContextTenant.CURRENT_TENANT:\n tenantOptionsParams = { evaluate: 'current' };\n overridable = true;\n break;\n\n case DefaultSubscriptionsContextTenant.PARENT_TENANT:\n tenantOptionsParams = { evaluate: 'inherited' };\n overridable = false;\n break;\n }\n\n const {\n onCreationApps,\n onCreationMicroservices,\n onUpgradeAppsEnabled,\n onUpgradeApps,\n onUpgradeMicroservicesEnabled,\n onUpgradeMicroservices\n } = await this.getTenantOptions(tenantOptionsParams);\n\n const onCreationSubscriptions = this.namesToPartialApps({\n appsNamesStr: onCreationApps,\n microservicesNamesStr: onCreationMicroservices\n });\n\n const onUpgradeAppsDefault = overridable ? null : onCreationApps;\n const onUpgradeMicroservicesDefault = overridable ? null : onCreationMicroservices;\n const onUpgradeSubscriptions = this.namesToPartialApps({\n appsNamesStr: onUpgradeAppsEnabled ? onUpgradeApps : onUpgradeAppsDefault,\n microservicesNamesStr: onUpgradeMicroservicesEnabled\n ? onUpgradeMicroservices\n : onUpgradeMicroservicesDefault\n });\n\n const defaultSubscriptions: DefaultSubscriptions = {\n onCreationSubscriptions,\n onUpgradeSubscriptions\n };\n\n if (overridable) {\n defaultSubscriptions.overrideOnCreationSubscriptions =\n onCreationApps !== null || onCreationMicroservices !== null;\n defaultSubscriptions.overrideOnUpgradeSubscriptions =\n onUpgradeAppsEnabled || onUpgradeMicroservicesEnabled;\n }\n\n return defaultSubscriptions;\n }\n\n private async getTenantOptions(params = {}) {\n return {\n onCreationApps: await this.getTenantOption(\n {\n category: 'configuration',\n key: 'default.tenant.applications'\n },\n null,\n params\n ),\n onCreationMicroservices: await this.getTenantOption(\n {\n category: 'configuration',\n key: 'default.tenant.microservices'\n },\n null,\n params\n ),\n onUpgradeAppsEnabled: await this.getTenantOption(\n {\n category: 'configuration',\n key: 'on-update.tenant.applications.enabled'\n },\n false,\n params\n ),\n onUpgradeApps: await this.getTenantOption(\n {\n category: 'configuration',\n key: 'on-update.tenant.applications'\n },\n null,\n params\n ),\n onUpgradeMicroservicesEnabled: await this.getTenantOption(\n {\n category: 'configuration',\n key: 'on-update.tenant.microservices.enabled'\n },\n false,\n params\n ),\n onUpgradeMicroservices: await this.getTenantOption(\n {\n category: 'configuration',\n key: 'on-update.tenant.microservices'\n },\n null,\n params\n )\n };\n }\n\n private async saveOnCreationSubscriptions(defaultSubscriptions: DefaultSubscriptions) {\n if (defaultSubscriptions.overrideOnCreationSubscriptions) {\n await this.setTenantOption({\n category: 'configuration',\n key: 'default.tenant.applications',\n value: this.partialAppsListToAppsNames(defaultSubscriptions.onCreationSubscriptions)\n });\n await this.setTenantOption({\n category: 'configuration',\n key: 'default.tenant.microservices',\n value: this.partialAppsToMicroservicesNames(defaultSubscriptions.onCreationSubscriptions)\n });\n } else {\n await this.unsetTenantOption({\n category: 'configuration',\n key: 'default.tenant.applications'\n });\n await this.unsetTenantOption({\n category: 'configuration',\n key: 'default.tenant.microservices'\n });\n }\n }\n\n private async saveOnUpgradeSubscriptions(defaultSubscriptions: DefaultSubscriptions) {\n if (defaultSubscriptions.overrideOnUpgradeSubscriptions) {\n await this.setTenantOption({\n category: 'configuration',\n key: 'on-update.tenant.applications.enabled',\n value: 'true'\n });\n await this.setTenantOption({\n category: 'configuration',\n key: 'on-update.tenant.microservices.enabled',\n value: 'true'\n });\n await this.setTenantOption({\n category: 'configuration',\n key: 'on-update.tenant.applications',\n value: this.partialAppsListToAppsNames(defaultSubscriptions.onUpgradeSubscriptions)\n });\n await this.setTenantOption({\n category: 'configuration',\n key: 'on-update.tenant.microservices',\n value: this.partialAppsToMicroservicesNames(defaultSubscriptions.onUpgradeSubscriptions)\n });\n } else {\n await this.unsetTenantOption({\n category: 'configuration',\n key: 'on-update.tenant.applications.enabled'\n });\n await this.unsetTenantOption({\n category: 'configuration',\n key: 'on-update.tenant.microservices.enabled'\n });\n await this.unsetTenantOption({\n category: 'configuration',\n key: 'on-update.tenant.applications'\n });\n await this.unsetTenantOption({\n category: 'configuration',\n key: 'on-update.tenant.microservices'\n });\n }\n }\n\n private async getTenantOption(option: ISystemOption, defaultValue = null, params = {}) {\n let value;\n try {\n value = (await this.tenantOptionsService.detail(option, params)).data.value;\n value = JSON.parse(value);\n } catch (ex) {\n value = !isUndefined(value) ? value : defaultValue;\n }\n return value;\n }\n\n private async setTenantOption(option: ISystemOption) {\n return this.tenantOptionsService.update(option);\n }\n\n private async unsetTenantOption(option: ISystemOption) {\n try {\n await this.tenantOptionsService.delete(option);\n } catch (ex) {\n if (!ex || !ex.res || ex.res.status !== 404) {\n throw ex;\n }\n }\n }\n\n private namesToPartialApps({\n appsNamesStr,\n microservicesNamesStr\n }: {\n appsNamesStr?: string;\n microservicesNamesStr?: string;\n }): PartialAppsList {\n if (appsNamesStr === null && microservicesNamesStr === null) {\n return null;\n }\n\n return [\n ...(appsNamesStr || '')\n .split(',')\n .filter(name => name.length)\n .map(name => ({ name: name.trim() })),\n ...(microservicesNamesStr || '')\n .split(',')\n .filter(name => name.length)\n .map(name => ({\n name: name.trim(),\n type: ApplicationType.MICROSERVICE\n }))\n ];\n }\n\n private partialAppsListToAppsNames(apps: PartialAppsList): string {\n return apps\n .filter(app => app.type !== ApplicationType.MICROSERVICE)\n .map(app => app.name)\n .join(',');\n }\n\n private partialAppsToMicroservicesNames(apps: PartialAppsList): string {\n return apps\n .filter(app => app.type === ApplicationType.MICROSERVICE)\n .map(app => app.name)\n .join(',');\n }\n}\n","import { Component } from '@angular/core';\nimport {\n FormArray,\n FormBuilder,\n FormGroup,\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { IApplication } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n C8yTranslateDirective,\n RequiredInputPlaceholderDirective,\n LoadingComponent,\n EmptyStateComponent,\n AppIconComponent,\n C8yTranslatePipe,\n HumanizeAppNamePipe\n} from '@c8y/ngx-components';\nimport { DefaultSubscriptions, PartialAppsList } from './default-subscriptions.model';\nimport { DefaultSubscriptionsService } from './default-subscriptions.service';\nimport { NgIf, NgFor, NgClass, AsyncPipe } from '@angular/common';\n\n/**\n * The component shows the main view for managing default subscriptions configuration.\n */\n@Component({\n selector: 'c8y-default-subscriptions',\n templateUrl: './default-subscriptions.component.html',\n imports: [\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n FormsModule,\n ReactiveFormsModule,\n C8yTranslateDirective,\n RequiredInputPlaceholderDirective,\n NgIf,\n LoadingComponent,\n EmptyStateComponent,\n NgFor,\n AppIconComponent,\n NgClass,\n C8yTranslatePipe,\n AsyncPipe,\n HumanizeAppNamePipe\n ]\n})\nexport class DefaultSubscriptionsComponent {\n /** Default subscriptions inherited from parent tenant. */\n parentDefaultSubscriptions: DefaultSubscriptions;\n /** Default subscriptions defined in the current tenant. */\n currentDefaultSubscriptions: DefaultSubscriptions;\n /** Form object. */\n form: FormGroup;\n /** Whether the configuration is being loaded. */\n loading: boolean;\n /** Hint text for disabled checkboxes. */\n disabledCheckboxHint = gettext('Select \"Override inherited\" to enable.');\n\n constructor(\n private fb: FormBuilder,\n private defaultSubscriptionsService: DefaultSubscriptionsService,\n private alertService: AlertService\n ) {}\n\n /** Initializes the loading of the form and the current settings. */\n async ngOnInit() {\n this.loading = true;\n await this.initForm();\n await this.loadDefaultSubscriptions();\n this.loading = false;\n }\n\n /** Loads the list of apps, builds the form and hooks value change events for override switches. */\n async initForm() {\n this.form = this.fb.group({\n overrideOnCreationSubscriptions: [''],\n overrideOnUpgradeSubscriptions: [''],\n appRows: this.fb.array([])\n });\n\n const apps = await this.defaultSubscriptionsService.getSubscribableTenantApps();\n const appRows = this.form.controls.appRows as FormArray;\n apps.forEach(app => {\n appRows.push(\n this.fb.group({\n app: [app],\n subscribedOnCreation: [''],\n subscribedOnUpgrade: ['']\n })\n );\n });\n\n this.form\n .get('overrideOnCreationSubscriptions')\n .valueChanges.subscribe(value => this.onOverrideOnCreationSubscriptionsChange(value));\n\n this.form\n .get('overrideOnUpgradeSubscriptions')\n .valueChanges.subscribe(value => this.onOverrideOnUpgradeSubscriptionsChange(value));\n }\n\n /**\n * Checks if given application row should be displayed.\n * The row is displayed when any of its checkboxes is selected or any of the lists is being overridden.\n */\n shouldShowAppRow(appRowRawValue): boolean {\n const { subscribedOnCreation, subscribedOnUpgrade } = appRowRawValue;\n const { overrideOnCreationSubscriptions, overrideOnUpgradeSubscriptions } = this.form.value;\n\n return (\n subscribedOnCreation ||\n subscribedOnUpgrade ||\n overrideOnCreationSubscriptions ||\n overrideOnUpgradeSubscriptions\n );\n }\n\n /** Checks if there are no application rows to be displayed. */\n isEmptyView(): boolean {\n return !this.form\n .getRawValue()\n .appRows.some(appRowRawValue => this.shouldShowAppRow(appRowRawValue));\n }\n\n /**\n * Checks if given application is subscribed (present in the given list of applications).\n * @param app Application object to check.\n * @param subscribedApps The list of application objects to check against.\n * @returns True, if the application is present in the list.\n */\n isSubscribed(app: IApplication, subscribedApps: PartialAppsList): boolean {\n return subscribedApps && subscribedApps.some(subscribedApp => subscribedApp.name === app.name);\n }\n\n /** Saves the current value of form object to backend. */\n async save() {\n try {\n const defaultSubscriptions = this.getDefaultSubscriptionsForSave();\n await this.defaultSubscriptionsService.saveDefaultSubscriptionsToCurrentTenant(\n defaultSubscriptions\n );\n this.alertService.success(gettext('Saved.'));\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n\n private onOverrideOnCreationSubscriptionsChange(overrideOnCreationSubscriptions: boolean) {\n if (overrideOnCreationSubscriptions) {\n this.enableSubscribeOnCreationCheckboxes();\n return;\n }\n this.disableSubscribeOnCreationCheckboxes();\n this.restoreSubscribeOnCreationFromParent();\n }\n\n private enableSubscribeOnCreationCheckboxes() {\n const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n appRowsControls.forEach(appRowControl => {\n appRowControl.get('subscribedOnCreation').enable({ emitEvent: false });\n });\n }\n\n private disableSubscribeOnCreationCheckboxes() {\n const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n appRowsControls.forEach(appRowControl => {\n appRowControl.get('subscribedOnCreation').disable({ emitEvent: false });\n });\n }\n\n private restoreSubscribeOnCreationFromParent() {\n const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n appRowsControls.forEach(appRowControl => {\n appRowControl.patchValue({\n subscribedOnCreation: this.isSubscribed(\n appRowControl.value.app,\n this.parentDefaultSubscriptions.onCreationSubscriptions\n )\n });\n });\n }\n\n private onOverrideOnUpgradeSubscriptionsChange(overrideOnUpgradeSubscriptions: boolean) {\n if (overrideOnUpgradeSubscriptions) {\n this.enableSubscribeOnUpgradeCheckboxes();\n return;\n }\n this.disableSubscribeOnUpgradeCheckboxes();\n this.restoreSubscribeOnUpgradeFromParent();\n }\n\n private enableSubscribeOnUpgradeCheckboxes() {\n const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n appRowsControls.forEach(appRowControl => {\n appRowControl.get('subscribedOnUpgrade').enable({ emitEvent: false });\n });\n }\n\n private disableSubscribeOnUpgradeCheckboxes() {\n const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n appRowsControls.forEach(appRowControl => {\n appRowControl.get('subscribedOnUpgrade').disable({ emitEvent: false });\n });\n }\n\n private restoreSubscribeOnUpgradeFromParent() {\n const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n appRowsControls.forEach(appRowControl => {\n appRowControl.patchValue({\n subscribedOnUpgrade: this.isSubscribed(\n appRowControl.value.app,\n this.parentDefaultSubscriptions.onUpgradeSubscriptions\n )\n });\n });\n }\n\n private async loadDefaultSubscriptions() {\n this.parentDefaultSubscriptions =\n await this.defaultSubscriptionsService.getDefaultSubscriptionsEvaluatedFromParentTenant();\n this.currentDefaultSubscriptions =\n await this.defaultSubscriptionsService.getDefaultSubscriptionsFromCurrentTenant();\n\n const { overrideOnCreationSubscriptions, overrideOnUpgradeSubscriptions } =\n this.currentDefaultSubscriptions;\n const onCreationSubscriptions = overrideOnCreationSubscriptions\n ? this.currentDefaultSubscriptions.onCreationSubscriptions\n : this.parentDefaultSubscriptions.onCreationSubscriptions;\n const onUpgradeSubscriptions = overrideOnUpgradeSubscriptions\n ? this.currentDefaultSubscriptions.onUpgradeSubscriptions\n : this.parentDefaultSubscriptions.onUpgradeSubscriptions;\n\n this.form.patchValue({\n overrideOnCreationSubscriptions,\n overrideOnUpgradeSubscriptions\n });\n (this.form.controls.appRows as FormArray).controls.forEach(appRowControl => {\n appRowControl.patchValue({\n subscribedOnCreation: this.isSubscribed(appRowControl.value.app, onCreationSubscriptions),\n subscribedOnUpgrade: this.isSubscribed(appRowControl.value.app, onUpgradeSubscriptions)\n });\n });\n }\n\n private getDefaultSubscriptionsForSave(): DefaultSubscriptions {\n const { value } = this.form;\n return {\n overrideOnCreationSubscriptions: value.overrideOnCreationSubscriptions,\n onCreationSubscriptions: value.overrideOnCreationSubscriptions\n ? value.appRows.filter(app => app.subscribedOnCreation).map(app => app.app)\n : null,\n overrideOnUpgradeSubscriptions: value.overrideOnUpgradeSubscriptions,\n onUpgradeSubscriptions: value.overrideOnUpgradeSubscriptions\n ? value.appRows.filter(app => app.subscribedOnUpgrade).map(app => app.app)\n : null\n };\n }\n}\n","<c8y-title>{{ 'Default subscriptions' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item [label]=\"'Ecosystem' | translate\" [icon]=\"'c8y-atom'\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Default subscriptions' | translate\"\n [icon]=\"'c8y-atom'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form [formGroup]=\"form\" (ngSubmit)=\"save()\">\n <div class=\"card card--fullpage col-lg-max\">\n <div class=\"card-header separator\">\n <div class=\"card-title\" translate>Applications</div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"sticky-top separator-bottom\">\n <div class=\"d-flex\">\n <div class=\"col-sm-6 col-xs-6 p-24 p-t-16 p-l-xs-16\">\n <p translate>\n Configure default subscriptions in the platform, both for tenant creation and for\n platform upgrade. To display a full list of available applications, override inherited\n settings.\n </p>\n </div>\n <div class=\"col-sm-6 col-xs-6 bg-level-1 p-16 text-center separator-bottom\">\n <div class=\"row\">\n <div class=\"col-sm-6 col-xs-6\">\n <p><strong translate>Subscribed on tenant creation</strong></p>\n <div>\n <label class=\"c8y-switch\" title=\"{{ 'Override inherited' | translate }}\">\n <input type=\"checkbox\" formControlName=\"overrideOnCreationSubscriptions\" />\n <span></span>\n <span>\n {{ 'Override inherited' | translate }}\n </span>\n </label>\n </div>\n </div>\n <div class=\"col-sm-6 col-xs-6\">\n <p><strong translate>Subscribed on platform upgrade</strong></p>\n <div>\n <label class=\"c8y-switch\" title=\"{{ 'Override inherited' | translate }}\">\n <input type=\"checkbox\" formControlName=\"overrideOnUpgradeSubscriptions\" />\n <span></span>\n <span>\n {{ 'Override inherited' | translate }}\n </span>\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-block\" *ngIf=\"loading\"></div>\n <div class=\"card-block card-block d-flex a-i-center j-c-center d-col\" *ngIf=\"loading\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"card-block\" *ngIf=\"loading\"></div>\n\n <ng-container formArrayName=\"appRows\">\n <div class=\"bg-level-1\" *ngIf=\"!loading && isEmptyView()\"></div>\n <div class=\"card-block bg-level-0\" *ngIf=\"!loading && isEmptyView()\">\n <c8y-ui-empty-state\n [icon]=\"'c8y-c8y-data'\"\n [title]=\"'No application subscriptions yet.' | translate\"\n [subtitle]=\"\n 'Select "Override inherited" to define the list of subscribed applications.'\n | translate\n \"\n ></c8y-ui-empty-state>\n </div>\n <div class=\"bg-level-1\" *ngIf=\"!loading && isEmptyView()\"></div>\n\n <div *ngFor=\"let appRowControl of form.get('appRows')['controls']; let i = index\">\n <ng-container\n *ngIf=\"shouldShowAppRow(appRowControl.getRawValue())\"\n formArrayName=\"{{ i }}\"\n >\n <div class=\"d-flex a-i-stretch\">\n <div class=\"col-sm-6 col-xs-6 separator-bottom\">\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__appicon\">\n <c8y-app-icon\n [app]=\"appRowControl.value.app\"\n [name]=\"appRowControl.value.app.name\"\n [contextPath]=\"appRowControl.value.app.contextPath\"\n ></c8y-app-icon>\n </div>\n <div class=\"c8y-list__item__body\" data-cy=\"defaultSubscriptionForm--c8y-list_item\">\n <div class=\"content-flex-30\">\n <div class=\"col-6\">\n <p\n class=\"text-truncate\"\n title=\"{{ appRowControl.value.app | humanizeAppName | async }}\"\n >\n {{ appRowControl.value.app | humanizeAppName | async }}\n </p>\n <small class=\"text-muted\">{{ appRowControl.value.app.contextPath }}</small>\n </div>\n <div class=\"col-6 text-right-sm\">\n <p>\n <span class=\"text-label-small m-r-4\" translate>Tenant ID</span>\n {{ appRowControl.value.app.owner.tenant.id }}\n </p>\n <!-- TODO: uncomment when company name is available\n <p>\n <span class=\"text-label-small m-r-4\" translate>Company</span>\n <small class=\"text-muted\">company name</small>\n </p> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"col-sm-3 col-xs-3 bg-level-1 separator-bottom d-flex j-c-center a-i-center\"\n >\n <label\n class=\"c8y-checkbox\"\n [ngClass]=\"{ disabled: appRowControl.controls.subscribedOnCreation.disabled }\"\n >\n <input type=\"checkbox\" formControlName=\"subscribedOnCreation\" />\n <span *ngIf=\"!appRowControl.controls.subscribedOnCreation.disabled\"></span>\n <span\n *ngIf=\"appRowControl.controls.subscribedOnCreation.disabled\"\n title=\"{{ disabledCheckboxHint | translate }}\"\n ></span>\n <span class=\"sr-only\">{{ 'Subscribed on tenant creation' | translate }}</span>\n </label>\n </div>\n\n <div\n class=\"col-sm-3 col-xs-3 bg-level-1 separator-bottom d-flex j-c-center a-i-center\"\n >\n <label\n class=\"c8y-checkbox\"\n [ngClass]=\"{ disabled: appRowControl.controls.subscribedOnUpgrade.disabled }\"\n >\n <input type=\"checkbox\" formControlName=\"subscribedOnUpgrade\" />\n <span *ngIf=\"!appRowControl.controls.subscribedOnUpgrade.disabled\"></span>\n <span\n *ngIf=\"appRowControl.controls.subscribedOnUpgrade.disabled\"\n title=\"{{ disabledCheckboxHint | translate }}\"\n ></span>\n <span class=\"sr-only\">{{ 'Subscribed on platform upgrade' | translate }}</span>\n </label>\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ 'Save default subscriptions' | translate }}\"\n [disabled]=\"form.invalid || form.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n</form>\n","import { Injectable } from '@angular/core';\n\nimport { TenantUiService } from '@c8y/ngx-components';\n\n@Injectable()\nexport class DefaultSubscriptionsGuard {\n private active: boolean;\n\n constructor(private tenantUiService: TenantUiService) {}\n\n /**\n * Checks if default subscriptions feature should be active,\n * i.e. whether the current tenant is the management or an enterprise tenant.\n * **Note: the check is executed only once in the runtime.**\n *\n * @returns True, if the feature should be active.\n */\n async canActivate(): Promise<boolean> {\n if (this.active === undefined) {\n this.active =\n (await this.tenantUiService.isManagementTenant()) ||\n (await this.tenantUiService.isEnterpriseTenant());\n }\n return this.active;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { NavigatorNode, NavigatorNodeFactory } from '@c8y/ngx-components';\nimport { DefaultSubscriptionsGuard } from './default-subscriptions.guard';\n\n@Injectable()\nexport class DefaultSubscriptionsNavigationFactory implements NavigatorNodeFactory {\n private navNode = new NavigatorNode({\n label: gettext('Default subscriptions'),\n path: '/default-subscriptions',\n icon: 'c8y-c8y-data',\n parent: gettext('Ecosystem'),\n priority: 100\n });\n\n constructor(private defaultSubscriptionsGuard: DefaultSubscriptionsGuard) {}\n\n /** Returns the navigation node if the feature is active. */\n async get(): Promise<NavigatorNode> {\n if (await this.defaultSubscriptionsGuard.canActivate()) {\n return this.navNode;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CoreModule, hookNavigator, hookRoute } from '@c8y/ngx-components';\n\nimport { DefaultSubscriptionsComponent } from './default-subscriptions.component';\nimport { DefaultSubscriptionsService } from './default-subscriptions.service';\nimport { DefaultSubscriptionsGuard } from './default-subscriptions.guard';\nimport { DefaultSubscriptionsNavigationFactory } from './default-subscriptions-navigation.factory';\n\n@NgModule({\n imports: [CoreModule, ReactiveFormsModule, DefaultSubscriptionsComponent],\n exports: [DefaultSubscriptionsComponent],\n providers: [\n DefaultSubscriptionsService,\n DefaultSubscriptionsGuard,\n hookNavigator(DefaultSubscriptionsNavigationFactory),\n hookRoute({\n path: 'default-subscriptions',\n component: DefaultSubscriptionsComponent,\n canActivate: [DefaultSubscriptionsGuard]\n })\n ]\n})\nexport class DefaultSubscriptionsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DefaultSubscriptionsContextTenant","i1","i2.DefaultSubscriptionsService","i3","i1.DefaultSubscriptionsGuard"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-default-subscriptions.mjs","sources":["../../default-subscriptions/default-subscriptions.model.ts","../../default-subscriptions/default-subscriptions.service.ts","../../default-subscriptions/default-subscriptions.component.ts","../../default-subscriptions/default-subscriptions.component.html","../../default-subscriptions/default-subscriptions.guard.ts","../../default-subscriptions/default-subscriptions-navigation.factory.ts","../../default-subscriptions/default-subscriptions.module.ts","../../default-subscriptions/c8y-ngx-components-default-subscriptions.ts"],"sourcesContent":["import { IApplication } from '@c8y/client';\n\n/** The list of partial application objects. */\nexport type PartialAppsList = Array<Partial<IApplication>>;\n\n/** The interface for default subscriptions configuration. */\nexport interface DefaultSubscriptions {\n /** Whether the list of on tenant creation subscriptions is overridden in the current tenant. Won't be defined for inherited configuration. */\n overrideOnCreationSubscriptions?: boolean;\n /** The list of applications subscribed to new tenants on creation. */\n onCreationSubscriptions: PartialAppsList;\n /** Whether the list of on platform upgrade subscriptions is overridden in the current tenant. Won't be defined for inherited configuration. */\n overrideOnUpgradeSubscriptions?: boolean;\n /** The list of applications subscribed to existing tenants on platform upgrade. */\n onUpgradeSubscriptions: PartialAppsList;\n}\n\n/** The context for evaluating default subscriptions configuration */\nexport enum DefaultSubscriptionsContext {\n /** Current tenant context (only current tenant options are taken into account). */\n CURRENT_TENANT,\n /** Parent tenant context (only parent tenant options are taken into account). */\n PARENT_TENANT\n}\n","import { Injectable } from '@angular/core';\nimport { isUndefined, sortBy } from 'lodash-es';\nimport { debounceTime, take } from 'rxjs/operators';\n\nimport {\n IApplication,\n ApplicationType,\n ApplicationService,\n ISystemOption,\n TenantService,\n TenantOptionsService\n} from '@c8y/client';\nimport { HumanizeAppNamePipe } from '@c8y/ngx-components';\n\nimport {\n PartialAppsList,\n DefaultSubscriptions,\n DefaultSubscriptionsContext as DefaultSubscriptionsContextTenant\n} from './default-subscriptions.model';\n\n@Injectable()\nexport class DefaultSubscriptionsService {\n constructor(\n private applicationService: ApplicationService,\n private tenantService: TenantService,\n private tenantOptionsService: TenantOptionsService,\n private humanizeAppNamePipe: HumanizeAppNamePipe\n ) {}\n\n /**\n * Gets the list of applications which can be used in default subscriptions, i.e.:\n * - current tenant's all own applications,\n * - inherited applications, which do not have the same names as current tenant's own apps.\n * The list is sorted alphabetically by humanized app name and contains up to 2000 items.\n * @returns The list of applications, which can be used in default subscriptions.\n */\n async getSubscribableTenantApps(): Promise<IApplication[]> {\n const currentTenant = (await this.tenantService.current()).data;\n\n const allApps = (await this.applicationService.listByTenant(null, { pageSize: 2000 })).data;\n const ownApps = allApps.filter(app => app.owner.tenant.id === currentTenant.name);\n const inheritedApps = allApps.filter(app => app.owner.tenant.id !== currentTenant.name);\n\n const filteredApps: IApplication[] = [...ownApps];\n inheritedApps.forEach(inheritedApp => {\n if (!filteredApps.some(filteredApp => filteredApp.name === inheritedApp.name)) {\n filteredApps.push(inheritedApp);\n }\n });\n\n const filteredAppsWithHumanizedNames = await Promise.all(\n filteredApps.map(async app => {\n const humanizedName = await this.humanizeAppNamePipe\n .transform(app.name)\n .pipe(debounceTime(250), take(1))\n .toPromise();\n return { app, humanizedName };\n })\n );\n const sortedAppsWithHumanizedNames = sortBy(filteredAppsWithHumanizedNames, ['humanizedName']);\n const sortedApps = sortedAppsWithHumanizedNames.map(({ app }) => app);\n\n return sortedApps;\n }\n\n /**\n * Gets the default subscriptions configuration inherited from parent tenant.\n * @returns The default subscriptions object with settings from parent tenant.\n */\n async getDefaultSubscriptionsEvaluatedFromParentTenant(): Promise<DefaultSubscriptions> {\n return this.getDefaultSubscriptions(DefaultSubscriptionsContextTenant.PARENT_TENANT);\n }\n\n /**\n * Gets the default subscriptions configuration from the current tenant.\n * @returns The default subscriptions object with settings from the current tenant.\n */\n async getDefaultSubscriptionsFromCurrentTenant(): Promise<DefaultSubscriptions> {\n return this.getDefaultSubscriptions(DefaultSubscriptionsContextTenant.CURRENT_TENANT);\n }\n\n /**\n * Saves given default subscriptions configuration to the current tenant\n * (either sets, updates, or deletes corresponding tenant options).\n * @param defaultSubscriptions The default subscriptions configuration to be saved.\n */\n async saveDefaultSubscriptionsToCurrentTenant(defaultSubscriptions: DefaultSubscriptions) {\n await this.saveOnCreationSubscriptions(defaultSubscriptions);\n await this.saveOnUpgradeSubscriptions(defaultSubscriptions);\n }\n\n /**\n * Gets default subscriptions in the context of current or parent tenant.\n * @param contextTenant Tells whether to use current or parent tenant as context.\n */\n private async getDefaultSubscriptions(\n contextTenant: DefaultSubscriptionsContextTenant\n ): Promise<DefaultSubscriptions> {\n let tenantOptionsParams: object;\n let overridable: boolean;\n\n switch (contextTenant) {\n case DefaultSubscriptionsContextTenant.CURRENT_TENANT:\n tenantOptionsParams = { evaluate: 'current' };\n overridable = true;\n break;\n\n case DefaultSubscriptionsContextTenant.PARENT_TENANT:\n tenantOptionsParams = { evaluate: 'inherited' };\n overridable = false;\n break;\n }\n\n const {\n onCreationApps,\n onCreationMicroservices,\n onUpgradeAppsEnabled,\n onUpgradeApps,\n onUpgradeMicroservicesEnabled,\n onUpgradeMicroservices\n } = await this.getTenantOptions(tenantOptionsParams);\n\n const onCreationSubscriptions = this.namesToPartialApps({\n appsNamesStr: onCreationApps,\n microservicesNamesStr: onCreationMicroservices\n });\n\n const onUpgradeAppsDefault = overridable ? null : onCreationApps;\n const onUpgradeMicroservicesDefault = overridable ? null : onCreationMicroservices;\n const onUpgradeSubscriptions = this.namesToPartialApps({\n appsNamesStr: onUpgradeAppsEnabled ? onUpgradeApps : onUpgradeAppsDefault,\n microservicesNamesStr: onUpgradeMicroservicesEnabled\n ? onUpgradeMicroservices\n : onUpgradeMicroservicesDefault\n });\n\n const defaultSubscriptions: DefaultSubscriptions = {\n onCreationSubscriptions,\n onUpgradeSubscriptions\n };\n\n if (overridable) {\n defaultSubscriptions.overrideOnCreationSubscriptions =\n onCreationApps !== null || onCreationMicroservices !== null;\n defaultSubscriptions.overrideOnUpgradeSubscriptions =\n onUpgradeAppsEnabled || onUpgradeMicroservicesEnabled;\n }\n\n return defaultSubscriptions;\n }\n\n private async getTenantOptions(params = {}) {\n return {\n onCreationApps: await this.getTenantOption(\n {\n category: 'configuration',\n key: 'default.tenant.applications'\n },\n null,\n params\n ),\n onCreationMicroservices: await this.getTenantOption(\n {\n category: 'configuration',\n key: 'default.tenant.microservices'\n },\n null,\n params\n ),\n onUpgradeAppsEnabled: await this.getTenantOption(\n {\n category: 'configuration',\n key: 'on-update.tenant.applications.enabled'\n },\n false,\n params\n ),\n onUpgradeApps: await this.getTenantOption(\n {\n category: 'configuration',\n key: 'on-update.tenant.applications'\n },\n null,\n params\n ),\n onUpgradeMicroservicesEnabled: await this.getTenantOption(\n {\n category: 'configuration',\n key: 'on-update.tenant.microservices.enabled'\n },\n false,\n params\n ),\n onUpgradeMicroservices: await this.getTenantOption(\n {\n category: 'configuration',\n key: 'on-update.tenant.microservices'\n },\n null,\n params\n )\n };\n }\n\n private async saveOnCreationSubscriptions(defaultSubscriptions: DefaultSubscriptions) {\n if (defaultSubscriptions.overrideOnCreationSubscriptions) {\n await this.setTenantOption({\n category: 'configuration',\n key: 'default.tenant.applications',\n value: this.partialAppsListToAppsNames(defaultSubscriptions.onCreationSubscriptions)\n });\n await this.setTenantOption({\n category: 'configuration',\n key: 'default.tenant.microservices',\n value: this.partialAppsToMicroservicesNames(defaultSubscriptions.onCreationSubscriptions)\n });\n } else {\n await this.unsetTenantOption({\n category: 'configuration',\n key: 'default.tenant.applications'\n });\n await this.unsetTenantOption({\n category: 'configuration',\n key: 'default.tenant.microservices'\n });\n }\n }\n\n private async saveOnUpgradeSubscriptions(defaultSubscriptions: DefaultSubscriptions) {\n if (defaultSubscriptions.overrideOnUpgradeSubscriptions) {\n await this.setTenantOption({\n category: 'configuration',\n key: 'on-update.tenant.applications.enabled',\n value: 'true'\n });\n await this.setTenantOption({\n category: 'configuration',\n key: 'on-update.tenant.microservices.enabled',\n value: 'true'\n });\n await this.setTenantOption({\n category: 'configuration',\n key: 'on-update.tenant.applications',\n value: this.partialAppsListToAppsNames(defaultSubscriptions.onUpgradeSubscriptions)\n });\n await this.setTenantOption({\n category: 'configuration',\n key: 'on-update.tenant.microservices',\n value: this.partialAppsToMicroservicesNames(defaultSubscriptions.onUpgradeSubscriptions)\n });\n } else {\n await this.unsetTenantOption({\n category: 'configuration',\n key: 'on-update.tenant.applications.enabled'\n });\n await this.unsetTenantOption({\n category: 'configuration',\n key: 'on-update.tenant.microservices.enabled'\n });\n await this.unsetTenantOption({\n category: 'configuration',\n key: 'on-update.tenant.applications'\n });\n await this.unsetTenantOption({\n category: 'configuration',\n key: 'on-update.tenant.microservices'\n });\n }\n }\n\n private async getTenantOption(option: ISystemOption, defaultValue = null, params = {}) {\n let value;\n try {\n value = (await this.tenantOptionsService.detail(option, params)).data.value;\n value = JSON.parse(value);\n } catch (ex) {\n value = !isUndefined(value) ? value : defaultValue;\n }\n return value;\n }\n\n private async setTenantOption(option: ISystemOption) {\n return this.tenantOptionsService.update(option);\n }\n\n private async unsetTenantOption(option: ISystemOption) {\n try {\n await this.tenantOptionsService.delete(option);\n } catch (ex) {\n if (!ex || !ex.res || ex.res.status !== 404) {\n throw ex;\n }\n }\n }\n\n private namesToPartialApps({\n appsNamesStr,\n microservicesNamesStr\n }: {\n appsNamesStr?: string;\n microservicesNamesStr?: string;\n }): PartialAppsList {\n if (appsNamesStr === null && microservicesNamesStr === null) {\n return null;\n }\n\n return [\n ...(appsNamesStr || '')\n .split(',')\n .filter(name => name.length)\n .map(name => ({ name: name.trim() })),\n ...(microservicesNamesStr || '')\n .split(',')\n .filter(name => name.length)\n .map(name => ({\n name: name.trim(),\n type: ApplicationType.MICROSERVICE\n }))\n ];\n }\n\n private partialAppsListToAppsNames(apps: PartialAppsList): string {\n return apps\n .filter(app => app.type !== ApplicationType.MICROSERVICE)\n .map(app => app.name)\n .join(',');\n }\n\n private partialAppsToMicroservicesNames(apps: PartialAppsList): string {\n return apps\n .filter(app => app.type === ApplicationType.MICROSERVICE)\n .map(app => app.name)\n .join(',');\n }\n}\n","import { Component } from '@angular/core';\nimport {\n FormArray,\n FormBuilder,\n FormGroup,\n FormsModule,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { IApplication } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n C8yTranslateDirective,\n RequiredInputPlaceholderDirective,\n LoadingComponent,\n EmptyStateComponent,\n AppIconComponent,\n C8yTranslatePipe,\n HumanizeAppNamePipe\n} from '@c8y/ngx-components';\nimport { DefaultSubscriptions, PartialAppsList } from './default-subscriptions.model';\nimport { DefaultSubscriptionsService } from './default-subscriptions.service';\nimport { NgIf, NgFor, NgClass, AsyncPipe } from '@angular/common';\n\n/**\n * The component shows the main view for managing default subscriptions configuration.\n */\n@Component({\n selector: 'c8y-default-subscriptions',\n templateUrl: './default-subscriptions.component.html',\n imports: [\n TitleComponent,\n BreadcrumbComponent,\n BreadcrumbItemComponent,\n FormsModule,\n ReactiveFormsModule,\n C8yTranslateDirective,\n RequiredInputPlaceholderDirective,\n NgIf,\n LoadingComponent,\n EmptyStateComponent,\n NgFor,\n AppIconComponent,\n NgClass,\n C8yTranslatePipe,\n AsyncPipe,\n HumanizeAppNamePipe\n ]\n})\nexport class DefaultSubscriptionsComponent {\n /** Default subscriptions inherited from parent tenant. */\n parentDefaultSubscriptions: DefaultSubscriptions;\n /** Default subscriptions defined in the current tenant. */\n currentDefaultSubscriptions: DefaultSubscriptions;\n /** Form object. */\n form: FormGroup;\n /** Whether the configuration is being loaded. */\n loading: boolean;\n /** Hint text for disabled checkboxes. */\n disabledCheckboxHint = gettext('Select \"Override inherited\" to enable.');\n\n constructor(\n private fb: FormBuilder,\n private defaultSubscriptionsService: DefaultSubscriptionsService,\n private alertService: AlertService\n ) {}\n\n /** Initializes the loading of the form and the current settings. */\n async ngOnInit() {\n this.loading = true;\n await this.initForm();\n await this.loadDefaultSubscriptions();\n this.loading = false;\n }\n\n /** Loads the list of apps, builds the form and hooks value change events for override switches. */\n async initForm() {\n this.form = this.fb.group({\n overrideOnCreationSubscriptions: [''],\n overrideOnUpgradeSubscriptions: [''],\n appRows: this.fb.array([])\n });\n\n const apps = await this.defaultSubscriptionsService.getSubscribableTenantApps();\n const appRows = this.form.controls.appRows as FormArray;\n apps.forEach(app => {\n appRows.push(\n this.fb.group({\n app: [app],\n subscribedOnCreation: [''],\n subscribedOnUpgrade: ['']\n })\n );\n });\n\n this.form\n .get('overrideOnCreationSubscriptions')\n .valueChanges.subscribe(value => this.onOverrideOnCreationSubscriptionsChange(value));\n\n this.form\n .get('overrideOnUpgradeSubscriptions')\n .valueChanges.subscribe(value => this.onOverrideOnUpgradeSubscriptionsChange(value));\n }\n\n /**\n * Checks if given application row should be displayed.\n * The row is displayed when any of its checkboxes is selected or any of the lists is being overridden.\n */\n shouldShowAppRow(appRowRawValue): boolean {\n const { subscribedOnCreation, subscribedOnUpgrade } = appRowRawValue;\n const { overrideOnCreationSubscriptions, overrideOnUpgradeSubscriptions } = this.form.value;\n\n return (\n subscribedOnCreation ||\n subscribedOnUpgrade ||\n overrideOnCreationSubscriptions ||\n overrideOnUpgradeSubscriptions\n );\n }\n\n /** Checks if there are no application rows to be displayed. */\n isEmptyView(): boolean {\n return !this.form\n .getRawValue()\n .appRows.some(appRowRawValue => this.shouldShowAppRow(appRowRawValue));\n }\n\n /**\n * Checks if given application is subscribed (present in the given list of applications).\n * @param app Application object to check.\n * @param subscribedApps The list of application objects to check against.\n * @returns True, if the application is present in the list.\n */\n isSubscribed(app: IApplication, subscribedApps: PartialAppsList): boolean {\n return subscribedApps && subscribedApps.some(subscribedApp => subscribedApp.name === app.name);\n }\n\n /** Saves the current value of form object to backend. */\n async save() {\n try {\n const defaultSubscriptions = this.getDefaultSubscriptionsForSave();\n await this.defaultSubscriptionsService.saveDefaultSubscriptionsToCurrentTenant(\n defaultSubscriptions\n );\n this.alertService.success(gettext('Saved.'));\n } catch (ex) {\n this.alertService.addServerFailure(ex);\n }\n }\n\n private onOverrideOnCreationSubscriptionsChange(overrideOnCreationSubscriptions: boolean) {\n if (overrideOnCreationSubscriptions) {\n this.enableSubscribeOnCreationCheckboxes();\n return;\n }\n this.disableSubscribeOnCreationCheckboxes();\n this.restoreSubscribeOnCreationFromParent();\n }\n\n private enableSubscribeOnCreationCheckboxes() {\n const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n appRowsControls.forEach(appRowControl => {\n appRowControl.get('subscribedOnCreation').enable({ emitEvent: false });\n });\n }\n\n private disableSubscribeOnCreationCheckboxes() {\n const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n appRowsControls.forEach(appRowControl => {\n appRowControl.get('subscribedOnCreation').disable({ emitEvent: false });\n });\n }\n\n private restoreSubscribeOnCreationFromParent() {\n const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n appRowsControls.forEach(appRowControl => {\n appRowControl.patchValue({\n subscribedOnCreation: this.isSubscribed(\n appRowControl.value.app,\n this.parentDefaultSubscriptions.onCreationSubscriptions\n )\n });\n });\n }\n\n private onOverrideOnUpgradeSubscriptionsChange(overrideOnUpgradeSubscriptions: boolean) {\n if (overrideOnUpgradeSubscriptions) {\n this.enableSubscribeOnUpgradeCheckboxes();\n return;\n }\n this.disableSubscribeOnUpgradeCheckboxes();\n this.restoreSubscribeOnUpgradeFromParent();\n }\n\n private enableSubscribeOnUpgradeCheckboxes() {\n const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n appRowsControls.forEach(appRowControl => {\n appRowControl.get('subscribedOnUpgrade').enable({ emitEvent: false });\n });\n }\n\n private disableSubscribeOnUpgradeCheckboxes() {\n const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n appRowsControls.forEach(appRowControl => {\n appRowControl.get('subscribedOnUpgrade').disable({ emitEvent: false });\n });\n }\n\n private restoreSubscribeOnUpgradeFromParent() {\n const appRowsControls = (this.form.controls.appRows as FormArray).controls;\n appRowsControls.forEach(appRowControl => {\n appRowControl.patchValue({\n subscribedOnUpgrade: this.isSubscribed(\n appRowControl.value.app,\n this.parentDefaultSubscriptions.onUpgradeSubscriptions\n )\n });\n });\n }\n\n private async loadDefaultSubscriptions() {\n this.parentDefaultSubscriptions =\n await this.defaultSubscriptionsService.getDefaultSubscriptionsEvaluatedFromParentTenant();\n this.currentDefaultSubscriptions =\n await this.defaultSubscriptionsService.getDefaultSubscriptionsFromCurrentTenant();\n\n const { overrideOnCreationSubscriptions, overrideOnUpgradeSubscriptions } =\n this.currentDefaultSubscriptions;\n const onCreationSubscriptions = overrideOnCreationSubscriptions\n ? this.currentDefaultSubscriptions.onCreationSubscriptions\n : this.parentDefaultSubscriptions.onCreationSubscriptions;\n const onUpgradeSubscriptions = overrideOnUpgradeSubscriptions\n ? this.currentDefaultSubscriptions.onUpgradeSubscriptions\n : this.parentDefaultSubscriptions.onUpgradeSubscriptions;\n\n this.form.patchValue({\n overrideOnCreationSubscriptions,\n overrideOnUpgradeSubscriptions\n });\n (this.form.controls.appRows as FormArray).controls.forEach(appRowControl => {\n appRowControl.patchValue({\n subscribedOnCreation: this.isSubscribed(appRowControl.value.app, onCreationSubscriptions),\n subscribedOnUpgrade: this.isSubscribed(appRowControl.value.app, onUpgradeSubscriptions)\n });\n });\n }\n\n private getDefaultSubscriptionsForSave(): DefaultSubscriptions {\n const { value } = this.form;\n return {\n overrideOnCreationSubscriptions: value.overrideOnCreationSubscriptions,\n onCreationSubscriptions: value.overrideOnCreationSubscriptions\n ? value.appRows.filter(app => app.subscribedOnCreation).map(app => app.app)\n : null,\n overrideOnUpgradeSubscriptions: value.overrideOnUpgradeSubscriptions,\n onUpgradeSubscriptions: value.overrideOnUpgradeSubscriptions\n ? value.appRows.filter(app => app.subscribedOnUpgrade).map(app => app.app)\n : null\n };\n }\n}\n","<c8y-title>{{ 'Default subscriptions' | translate }}</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item [label]=\"'Ecosystem' | translate\" [icon]=\"'c8y-atom'\"></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [label]=\"'Default subscriptions' | translate\"\n [icon]=\"'c8y-atom'\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form [formGroup]=\"form\" (ngSubmit)=\"save()\">\n <div class=\"card card--fullpage col-lg-max\">\n <div class=\"card-header separator\">\n <div class=\"card-title\" translate>Applications</div>\n </div>\n <div class=\"inner-scroll\">\n <div class=\"sticky-top separator-bottom\">\n <div class=\"d-flex\">\n <div class=\"col-sm-6 col-xs-6 p-24 p-t-16 p-l-xs-16\">\n <p translate>\n Configure default subscriptions in the platform, both for tenant creation and for\n platform upgrade. To display a full list of available applications, override inherited\n settings.\n </p>\n </div>\n <div class=\"col-sm-6 col-xs-6 bg-level-1 p-16 text-center separator-bottom\">\n <div class=\"row\">\n <div class=\"col-sm-6 col-xs-6\">\n <p><strong translate>Subscribed on tenant creation</strong></p>\n <div>\n <label class=\"c8y-switch\" title=\"{{ 'Override inherited' | translate }}\">\n <input type=\"checkbox\" formControlName=\"overrideOnCreationSubscriptions\" />\n <span></span>\n <span>\n {{ 'Override inherited' | translate }}\n </span>\n </label>\n </div>\n </div>\n <div class=\"col-sm-6 col-xs-6\">\n <p><strong translate>Subscribed on platform upgrade</strong></p>\n <div>\n <label class=\"c8y-switch\" title=\"{{ 'Override inherited' | translate }}\">\n <input type=\"checkbox\" formControlName=\"overrideOnUpgradeSubscriptions\" />\n <span></span>\n <span>\n {{ 'Override inherited' | translate }}\n </span>\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"card-block\" *ngIf=\"loading\"></div>\n <div class=\"card-block card-block d-flex a-i-center j-c-center d-col\" *ngIf=\"loading\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"card-block\" *ngIf=\"loading\"></div>\n\n <ng-container formArrayName=\"appRows\">\n <div class=\"bg-level-1\" *ngIf=\"!loading && isEmptyView()\"></div>\n <div class=\"card-block bg-level-0\" *ngIf=\"!loading && isEmptyView()\">\n <c8y-ui-empty-state\n [icon]=\"'c8y-c8y-data'\"\n [title]=\"'No application subscriptions yet.' | translate\"\n [subtitle]=\"\n 'Select "Override inherited" to define the list of subscribed applications.'\n | translate\n \"\n ></c8y-ui-empty-state>\n </div>\n <div class=\"bg-level-1\" *ngIf=\"!loading && isEmptyView()\"></div>\n\n <div *ngFor=\"let appRowControl of form.get('appRows')['controls']; let i = index\">\n <ng-container\n *ngIf=\"shouldShowAppRow(appRowControl.getRawValue())\"\n formArrayName=\"{{ i }}\"\n >\n <div class=\"d-flex a-i-stretch\">\n <div class=\"col-sm-6 col-xs-6 separator-bottom\">\n <div class=\"c8y-list__item__block\">\n <div class=\"c8y-list__item__appicon\">\n <c8y-app-icon\n [app]=\"appRowControl.value.app\"\n [name]=\"appRowControl.value.app.name\"\n [contextPath]=\"appRowControl.value.app.contextPath\"\n ></c8y-app-icon>\n </div>\n <div class=\"c8y-list__item__body\" data-cy=\"defaultSubscriptionForm--c8y-list_item\">\n <div class=\"content-flex-30\">\n <div class=\"col-6\">\n <p\n class=\"text-truncate\"\n title=\"{{ appRowControl.value.app | humanizeAppName | async }}\"\n >\n {{ appRowControl.value.app | humanizeAppName | async }}\n </p>\n <small class=\"text-muted\">{{ appRowControl.value.app.contextPath }}</small>\n </div>\n <div class=\"col-6 text-right-sm\">\n <p>\n <span class=\"text-label-small m-r-4\" translate>Tenant ID</span>\n {{ appRowControl.value.app.owner.tenant.id }}\n </p>\n <!-- TODO: uncomment when company name is available\n <p>\n <span class=\"text-label-small m-r-4\" translate>Company</span>\n <small class=\"text-muted\">company name</small>\n </p> -->\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"col-sm-3 col-xs-3 bg-level-1 separator-bottom d-flex j-c-center a-i-center\"\n >\n <label\n class=\"c8y-checkbox\"\n [ngClass]=\"{ disabled: appRowControl.controls.subscribedOnCreation.disabled }\"\n >\n <input type=\"checkbox\" formControlName=\"subscribedOnCreation\" />\n <span *ngIf=\"!appRowControl.controls.subscribedOnCreation.disabled\"></span>\n <span\n *ngIf=\"appRowControl.controls.subscribedOnCreation.disabled\"\n title=\"{{ disabledCheckboxHint | translate }}\"\n ></span>\n <span class=\"sr-only\">{{ 'Subscribed on tenant creation' | translate }}</span>\n </label>\n </div>\n\n <div\n class=\"col-sm-3 col-xs-3 bg-level-1 separator-bottom d-flex j-c-center a-i-center\"\n >\n <label\n class=\"c8y-checkbox\"\n [ngClass]=\"{ disabled: appRowControl.controls.subscribedOnUpgrade.disabled }\"\n >\n <input type=\"checkbox\" formControlName=\"subscribedOnUpgrade\" />\n <span *ngIf=\"!appRowControl.controls.subscribedOnUpgrade.disabled\"></span>\n <span\n *ngIf=\"appRowControl.controls.subscribedOnUpgrade.disabled\"\n title=\"{{ disabledCheckboxHint | translate }}\"\n ></span>\n <span class=\"sr-only\">{{ 'Subscribed on platform upgrade' | translate }}</span>\n </label>\n </div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n <div class=\"card-footer separator\">\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ 'Save default subscriptions' | translate }}\"\n [disabled]=\"form.invalid || form.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n</form>\n","import { Injectable } from '@angular/core';\n\nimport { TenantUiService } from '@c8y/ngx-components';\n\n@Injectable()\nexport class DefaultSubscriptionsGuard {\n private active: boolean;\n\n constructor(private tenantUiService: TenantUiService) {}\n\n /**\n * Checks if default subscriptions feature should be active,\n * i.e. whether the current tenant is the management or an enterprise tenant.\n * **Note: the check is executed only once in the runtime.**\n *\n * @returns True, if the feature should be active.\n */\n async canActivate(): Promise<boolean> {\n if (this.active === undefined) {\n this.active =\n (await this.tenantUiService.isManagementTenant()) ||\n (await this.tenantUiService.isEnterpriseTenant());\n }\n return this.active;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { NavigatorNode, NavigatorNodeFactory } from '@c8y/ngx-components';\nimport { DefaultSubscriptionsGuard } from './default-subscriptions.guard';\n\n@Injectable()\nexport class DefaultSubscriptionsNavigationFactory implements NavigatorNodeFactory {\n private navNode = new NavigatorNode({\n label: gettext('Default subscriptions'),\n path: '/default-subscriptions',\n icon: 'c8y-c8y-data',\n parent: gettext('Ecosystem'),\n priority: 100\n });\n\n constructor(private defaultSubscriptionsGuard: DefaultSubscriptionsGuard) {}\n\n /** Returns the navigation node if the feature is active. */\n async get(): Promise<NavigatorNode> {\n if (await this.defaultSubscriptionsGuard.canActivate()) {\n return this.navNode;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CoreModule, hookNavigator, hookRoute } from '@c8y/ngx-components';\n\nimport { DefaultSubscriptionsComponent } from './default-subscriptions.component';\nimport { DefaultSubscriptionsService } from './default-subscriptions.service';\nimport { DefaultSubscriptionsGuard } from './default-subscriptions.guard';\nimport { DefaultSubscriptionsNavigationFactory } from './default-subscriptions-navigation.factory';\n\n@NgModule({\n imports: [CoreModule, ReactiveFormsModule, DefaultSubscriptionsComponent],\n exports: [DefaultSubscriptionsComponent],\n providers: [\n DefaultSubscriptionsService,\n DefaultSubscriptionsGuard,\n hookNavigator(DefaultSubscriptionsNavigationFactory),\n hookRoute({\n path: 'default-subscriptions',\n component: DefaultSubscriptionsComponent,\n canActivate: [DefaultSubscriptionsGuard]\n })\n ]\n})\nexport class DefaultSubscriptionsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["DefaultSubscriptionsContextTenant","i1","i2.DefaultSubscriptionsService","i3","i1.DefaultSubscriptionsGuard"],"mappings":"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"}
|