@c8y/ngx-components 1021.38.1 → 1021.49.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/services.d.ts +1 -1
- package/api/services.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.d.ts.map +1 -1
- package/connectivity/abstract-connectivity-tab.factory.d.ts +1 -1
- package/context-dashboard/add-dashboard.component.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.model.d.ts +4 -2
- package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
- package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
- package/context-dashboard/dashboard-manager/dashboard-manager.model.d.ts +1 -0
- package/context-dashboard/dashboard-manager/dashboard-manager.model.d.ts.map +1 -1
- package/context-dashboard/dashboard-manager/dashboard-manager.service.d.ts +0 -1
- package/context-dashboard/dashboard-manager/dashboard-manager.service.d.ts.map +1 -1
- package/context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.d.ts.map +1 -1
- package/context-dashboard/new-dashboard.guard.d.ts +1 -1
- package/context-dashboard/new-dashboard.guard.d.ts.map +1 -1
- package/core/action/action.component.d.ts +2 -1
- package/core/action/action.component.d.ts.map +1 -1
- package/core/action/action.model.d.ts +3 -2
- package/core/action/action.model.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb-item.component.d.ts +2 -1
- package/core/breadcrumb/breadcrumb-item.component.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb.model.d.ts +2 -1
- package/core/breadcrumb/breadcrumb.model.d.ts.map +1 -1
- package/core/common/ApplicationOptions.d.ts +1 -0
- package/core/common/ApplicationOptions.d.ts.map +1 -1
- package/core/common/empty-state/empty-state.component.d.ts +2 -1
- package/core/common/empty-state/empty-state.component.d.ts.map +1 -1
- package/core/common/get-group-icon.pipe.d.ts +2 -1
- package/core/common/get-group-icon.pipe.d.ts.map +1 -1
- package/core/common/group.service.d.ts +22 -7
- package/core/common/group.service.d.ts.map +1 -1
- package/core/common/icon.directive.d.ts +5 -5
- package/core/common/icon.directive.d.ts.map +1 -1
- package/core/common/service-registry.model.d.ts +2 -1
- package/core/common/service-registry.model.d.ts.map +1 -1
- package/core/data-grid/data-grid.model.d.ts +2 -1
- package/core/data-grid/data-grid.model.d.ts.map +1 -1
- package/core/docs/docs.models.d.ts +2 -1
- package/core/docs/docs.models.d.ts.map +1 -1
- package/core/docs/help-and-support-outlet/help-and-support-outlet.component.d.ts +5 -1
- package/core/docs/help-and-support-outlet/help-and-support-outlet.component.d.ts.map +1 -1
- package/core/docs/legal-notices-outlet/legal-notices-outlet.component.d.ts +5 -1
- package/core/docs/legal-notices-outlet/legal-notices-outlet.component.d.ts.map +1 -1
- package/core/docs/support-outlet/support-outlet.component.d.ts +5 -1
- package/core/docs/support-outlet/support-outlet.component.d.ts.map +1 -1
- package/core/forms/filter-input.component.d.ts +8 -3
- package/core/forms/filter-input.component.d.ts.map +1 -1
- package/core/i18n/translate.service.d.ts.map +1 -1
- package/core/list-group/list-item-action.component.d.ts +2 -1
- package/core/list-group/list-item-action.component.d.ts.map +1 -1
- package/core/list-group/list-item-icon.component.d.ts +2 -1
- package/core/list-group/list-item-icon.component.d.ts.map +1 -1
- package/core/login/login.service.d.ts.map +1 -1
- package/core/navigator/navigator-icon.component.d.ts +1 -1
- package/core/navigator/navigator-icon.component.d.ts.map +1 -1
- package/core/navigator/navigator-node-data.d.ts +2 -1
- package/core/navigator/navigator-node-data.d.ts.map +1 -1
- package/core/navigator/navigator-node.component.d.ts.map +1 -1
- package/core/navigator/navigator-node.d.ts +2 -1
- package/core/navigator/navigator-node.d.ts.map +1 -1
- package/core/plugins/plugins.model.d.ts +7 -2
- package/core/plugins/plugins.model.d.ts.map +1 -1
- package/core/plugins/plugins.service.d.ts.map +1 -1
- package/core/properties-list/properties-list.component.d.ts +2 -1
- package/core/properties-list/properties-list.component.d.ts.map +1 -1
- package/core/provider-configuration/model/dynamic-provider-config.model.d.ts +2 -2
- package/core/provider-configuration/model/dynamic-provider-config.model.d.ts.map +1 -1
- package/core/router/context-route.service.d.ts.map +1 -1
- package/core/router/router.model.d.ts +1 -1
- package/core/router/router.model.d.ts.map +1 -1
- package/core/router/scoped-context-route.service.d.ts.map +1 -1
- package/core/search/search.model.d.ts +2 -1
- package/core/search/search.model.d.ts.map +1 -1
- package/core/select/select-keyboard.service.d.ts +4 -0
- package/core/select/select-keyboard.service.d.ts.map +1 -1
- package/core/select/select.component.d.ts +14 -3
- package/core/select/select.component.d.ts.map +1 -1
- package/core/select-modal/select-modal.component.d.ts +2 -1
- package/core/select-modal/select-modal.component.d.ts.map +1 -1
- package/core/shared/core.model.d.ts +5 -1
- package/core/shared/core.model.d.ts.map +1 -1
- package/core/tabs/conditional-tabs-outlet.component.d.ts.map +1 -1
- package/core/tabs/tab.component.d.ts +3 -2
- package/core/tabs/tab.component.d.ts.map +1 -1
- package/core/tabs/tab.model.d.ts +10 -5
- package/core/tabs/tab.model.d.ts.map +1 -1
- package/core/tabs/tabs-outlet.component.d.ts +7 -4
- package/core/tabs/tabs-outlet.component.d.ts.map +1 -1
- package/core/user/user-menu-item.component.d.ts +2 -1
- package/core/user/user-menu-item.component.d.ts.map +1 -1
- package/core/user/user.model.d.ts +2 -1
- package/core/user/user.model.d.ts.map +1 -1
- package/core/wizard/wizard.model.d.ts +4 -3
- package/core/wizard/wizard.model.d.ts.map +1 -1
- package/data-grid-columns/asset-type/asset-type.cell-renderer.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +15 -46
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.d.ts +3 -0
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.d.ts.map +1 -1
- package/datapoint-selector/datapoint-selection.model.d.ts +6 -7
- package/datapoint-selector/datapoint-selection.model.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts +2 -1
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -1
- package/device-grid/columns/icon.cell-renderer.component.d.ts +14 -0
- package/device-grid/columns/icon.cell-renderer.component.d.ts.map +1 -0
- package/device-grid/columns/index.d.ts +1 -0
- package/device-grid/columns/index.d.ts.map +1 -1
- package/device-grid/device-grid.component.d.ts.map +1 -1
- package/device-grid/device-grid.service.d.ts +0 -2
- package/device-grid/device-grid.service.d.ts.map +1 -1
- package/device-provisioned-certificates/c8y-ngx-components-device-provisioned-certificates.d.ts.map +1 -0
- package/device-provisioned-certificates/device-provisioned-certificates.guard.d.ts +11 -0
- package/device-provisioned-certificates/device-provisioned-certificates.guard.d.ts.map +1 -0
- package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts +13 -0
- package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts.map +1 -0
- package/device-provisioned-certificates/device-provisioned-certificates.service.d.ts +13 -0
- package/device-provisioned-certificates/device-provisioned-certificates.service.d.ts.map +1 -0
- package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts +57 -0
- package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts.map +1 -0
- package/device-provisioned-certificates/index.d.ts +2 -0
- package/device-provisioned-certificates/index.d.ts.map +1 -0
- package/ecosystem/application-plugins/application-plugins.component.d.ts +4 -0
- package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugins.module.d.ts +2 -2
- package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
- package/ecosystem/application-plugins/index.d.ts +1 -0
- package/ecosystem/application-plugins/index.d.ts.map +1 -1
- package/ecosystem/application-plugins/install-plugin.component.d.ts +9 -11
- package/ecosystem/application-plugins/install-plugin.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts +12 -0
- package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts.map +1 -0
- package/ecosystem/application-plugins/plugin-list-item.component.d.ts +8 -3
- package/ecosystem/application-plugins/plugin-list-item.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/plugin-list.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.d.ts.map +1 -1
- package/ecosystem/applications/application-list/application-list.component.d.ts +2 -2
- package/ecosystem/applications/application-list/application-list.component.d.ts.map +1 -1
- package/ecosystem/applications/install-from-package/install-from-package.component.d.ts.map +1 -1
- package/ecosystem/archived-confirm/archived-confirm-modal.component.d.ts +11 -0
- package/ecosystem/archived-confirm/archived-confirm-modal.component.d.ts.map +1 -0
- package/ecosystem/archived-confirm/archived-confirm.module.d.ts +10 -0
- package/ecosystem/archived-confirm/archived-confirm.module.d.ts.map +1 -0
- package/ecosystem/archived-confirm/c8y-ngx-components-ecosystem-archived-confirm.d.ts.map +1 -0
- package/ecosystem/archived-confirm/index.d.ts +3 -0
- package/ecosystem/archived-confirm/index.d.ts.map +1 -0
- package/ecosystem/ecosystem.module.d.ts +2 -1
- package/ecosystem/ecosystem.module.d.ts.map +1 -1
- package/ecosystem/features/feature-list.component.d.ts +2 -2
- package/ecosystem/features/feature-list.component.d.ts.map +1 -1
- package/ecosystem/microservices/microservice-list.component.d.ts +2 -2
- package/ecosystem/microservices/microservice-list.component.d.ts.map +1 -1
- package/ecosystem/packages/deploy-application/deploy-application.component.d.ts.map +1 -1
- package/ecosystem/packages/package-details/package-details.component.d.ts +7 -2
- package/ecosystem/packages/package-details/package-details.component.d.ts.map +1 -1
- package/ecosystem/packages/package-list/packages-list.component.d.ts +2 -2
- package/ecosystem/packages/package-list/packages-list.component.d.ts.map +1 -1
- package/ecosystem/shared/add-application.component.d.ts +2 -1
- package/ecosystem/shared/add-application.component.d.ts.map +1 -1
- package/ecosystem/shared/application-card.component.d.ts +4 -0
- package/ecosystem/shared/application-card.component.d.ts.map +1 -1
- package/ecosystem/shared/archived-filter/archived-filter.component.d.ts +12 -0
- package/ecosystem/shared/archived-filter/archived-filter.component.d.ts.map +1 -0
- package/ecosystem/shared/ecosystem.constants.d.ts +4 -0
- package/ecosystem/shared/ecosystem.constants.d.ts.map +1 -1
- package/ecosystem/shared/ecosystem.model.d.ts +5 -1
- package/ecosystem/shared/ecosystem.model.d.ts.map +1 -1
- package/ecosystem/shared/ecosystem.service.d.ts +7 -0
- package/ecosystem/shared/ecosystem.service.d.ts.map +1 -1
- package/ecosystem/shared/index.d.ts +1 -0
- package/ecosystem/shared/index.d.ts.map +1 -1
- package/ecosystem/shared/list-filters/list-filters.component.d.ts +14 -4
- package/ecosystem/shared/list-filters/list-filters.component.d.ts.map +1 -1
- package/ecosystem/shared/list-filters/list-filters.model.d.ts +8 -2
- package/ecosystem/shared/list-filters/list-filters.model.d.ts.map +1 -1
- package/ecosystem/shared/shared-ecosystem.module.d.ts +9 -8
- package/ecosystem/shared/shared-ecosystem.module.d.ts.map +1 -1
- package/ecosystem/shared/translate-package-label.pipe.d.ts +1 -1
- package/ecosystem/shared/translate-package-label.pipe.d.ts.map +1 -1
- package/esm2022/alarms/alarm-info.component.mjs +1 -1
- package/esm2022/api/services.mjs +2 -2
- package/esm2022/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.mjs +10 -5
- package/esm2022/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.mjs +4 -4
- package/esm2022/branding/shared/lazy/branding-form/branding-form.component.mjs +3 -3
- package/esm2022/context-dashboard/add-dashboard.component.mjs +4 -2
- package/esm2022/context-dashboard/context-dashboard.model.mjs +3 -2
- package/esm2022/context-dashboard/context-dashboard.service.mjs +2 -2
- package/esm2022/context-dashboard/dashboard-detail.component.mjs +5 -3
- package/esm2022/context-dashboard/dashboard-manager/dashboard-manager.model.mjs +1 -1
- package/esm2022/context-dashboard/dashboard-manager/dashboard-manager.service.mjs +5 -15
- package/esm2022/context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.mjs +2 -2
- package/esm2022/context-dashboard/new-dashboard.guard.mjs +1 -1
- package/esm2022/core/action/action.component.mjs +1 -1
- package/esm2022/core/action/action.model.mjs +1 -1
- package/esm2022/core/bootstrap/bootstrap.component.mjs +1 -1
- package/esm2022/core/breadcrumb/breadcrumb-item.component.mjs +1 -1
- package/esm2022/core/breadcrumb/breadcrumb.model.mjs +1 -1
- package/esm2022/core/common/ApplicationOptions.mjs +1 -1
- package/esm2022/core/common/empty-state/empty-state.component.mjs +1 -1
- package/esm2022/core/common/get-group-icon.pipe.mjs +1 -1
- package/esm2022/core/common/group.service.mjs +2 -2
- package/esm2022/core/common/icon.directive.mjs +1 -1
- package/esm2022/core/common/service-registry.model.mjs +1 -1
- package/esm2022/core/data-grid/data-grid.model.mjs +1 -1
- package/esm2022/core/docs/docs.models.mjs +1 -1
- package/esm2022/core/docs/support-outlet/support-outlet.component.mjs +3 -3
- package/esm2022/core/forms/filter-input.component.mjs +22 -7
- package/esm2022/core/i18n/translate.service.mjs +7 -5
- package/esm2022/core/list-group/list-item-action.component.mjs +1 -1
- package/esm2022/core/list-group/list-item-icon.component.mjs +1 -1
- package/esm2022/core/login/credentials.component.mjs +2 -2
- package/esm2022/core/login/login.service.mjs +18 -7
- package/esm2022/core/navigator/navigator-node-data.mjs +1 -1
- package/esm2022/core/navigator/navigator-node.component.mjs +11 -2
- package/esm2022/core/navigator/navigator-node.mjs +1 -1
- package/esm2022/core/plugins/plugins.model.mjs +5 -1
- package/esm2022/core/plugins/plugins.service.mjs +6 -2
- package/esm2022/core/properties-list/properties-list.component.mjs +1 -1
- package/esm2022/core/provider-configuration/model/dynamic-provider-config.model.mjs +1 -1
- package/esm2022/core/router/context-route.service.mjs +4 -2
- package/esm2022/core/router/router.model.mjs +1 -1
- package/esm2022/core/router/scoped-context-route.service.mjs +4 -2
- package/esm2022/core/search/search.model.mjs +1 -1
- package/esm2022/core/select/select-keyboard.service.mjs +7 -3
- package/esm2022/core/select/select.component.mjs +36 -8
- package/esm2022/core/select-modal/select-modal.component.mjs +2 -2
- package/esm2022/core/shared/core.model.mjs +6 -2
- package/esm2022/core/tabs/conditional-tabs-outlet.component.mjs +4 -2
- package/esm2022/core/tabs/tab.component.mjs +1 -1
- package/esm2022/core/tabs/tab.model.mjs +1 -1
- package/esm2022/core/tabs/tabs-outlet.component.mjs +41 -12
- package/esm2022/core/user/user-menu-item.component.mjs +1 -1
- package/esm2022/core/user/user.model.mjs +1 -1
- package/esm2022/core/wizard/wizard.model.mjs +1 -1
- package/esm2022/data-grid-columns/asset-type/asset-type.cell-renderer.component.mjs +1 -1
- package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +47 -22
- package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.mjs +1 -1
- package/esm2022/datapoint-selector/datapoint-selection.model.mjs +1 -1
- package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +1 -1
- package/esm2022/device-grid/columns/icon.cell-renderer.component.mjs +42 -0
- package/esm2022/device-grid/columns/index.mjs +2 -1
- package/esm2022/device-grid/device-grid.component.mjs +3 -3
- package/esm2022/device-grid/device-grid.service.mjs +7 -25
- package/esm2022/device-provisioned-certificates/c8y-ngx-components-device-provisioned-certificates.mjs +5 -0
- package/esm2022/device-provisioned-certificates/device-provisioned-certificates.guard.mjs +28 -0
- package/esm2022/device-provisioned-certificates/device-provisioned-certificates.module.mjs +51 -0
- package/esm2022/device-provisioned-certificates/device-provisioned-certificates.service.mjs +31 -0
- package/esm2022/device-provisioned-certificates/device-tab-provisioned-certificates.component.mjs +76 -0
- package/esm2022/device-provisioned-certificates/index.mjs +2 -0
- package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +41 -39
- package/esm2022/ecosystem/application-plugins/application-plugins.module.mjs +8 -6
- package/esm2022/ecosystem/application-plugins/apps-to-update-remotes-select.component.mjs +1 -1
- package/esm2022/ecosystem/application-plugins/index.mjs +2 -1
- package/esm2022/ecosystem/application-plugins/install-plugin.component.mjs +18 -21
- package/esm2022/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.mjs +26 -0
- package/esm2022/ecosystem/application-plugins/plugin-list-item.component.mjs +14 -6
- package/esm2022/ecosystem/application-plugins/plugin-list.component.mjs +14 -12
- package/esm2022/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.mjs +7 -1
- package/esm2022/ecosystem/applications/application-list/application-list.component.mjs +1 -1
- package/esm2022/ecosystem/applications/install-from-package/install-from-package.component.mjs +6 -1
- package/esm2022/ecosystem/archived-confirm/archived-confirm-modal.component.mjs +22 -0
- package/esm2022/ecosystem/archived-confirm/archived-confirm.module.mjs +32 -0
- package/esm2022/ecosystem/archived-confirm/c8y-ngx-components-ecosystem-archived-confirm.mjs +5 -0
- package/esm2022/ecosystem/archived-confirm/index.mjs +3 -0
- package/esm2022/ecosystem/ecosystem.module.mjs +20 -16
- package/esm2022/ecosystem/features/feature-list.component.mjs +1 -1
- package/esm2022/ecosystem/microservices/microservice-list.component.mjs +1 -1
- package/esm2022/ecosystem/packages/deploy-application/deploy-application.component.mjs +6 -1
- package/esm2022/ecosystem/packages/package-details/package-details.component.mjs +13 -8
- package/esm2022/ecosystem/packages/package-list/packages-list.component.mjs +4 -4
- package/esm2022/ecosystem/shared/add-application.component.mjs +1 -1
- package/esm2022/ecosystem/shared/application-card.component.mjs +3 -3
- package/esm2022/ecosystem/shared/archived-filter/archived-filter.component.mjs +27 -0
- package/esm2022/ecosystem/shared/ecosystem.constants.mjs +5 -1
- package/esm2022/ecosystem/shared/ecosystem.model.mjs +7 -3
- package/esm2022/ecosystem/shared/ecosystem.service.mjs +26 -1
- package/esm2022/ecosystem/shared/index.mjs +2 -1
- package/esm2022/ecosystem/shared/list-filters/list-filters.component.mjs +75 -13
- package/esm2022/ecosystem/shared/list-filters/list-filters.model.mjs +1 -1
- package/esm2022/ecosystem/shared/shared-ecosystem.module.mjs +10 -5
- package/esm2022/ecosystem/shared/translate-package-label.pipe.mjs +3 -3
- package/esm2022/files-repository/files-repository.component.mjs +2 -2
- package/esm2022/files-repository/files-repository.service.mjs +5 -16
- package/esm2022/icon-selector/icon-selector.component.mjs +1 -1
- package/esm2022/icon-selector/icons/index.mjs +1 -1
- package/esm2022/operations/shared/status-option.model.mjs +1 -1
- package/esm2022/protocol-lwm2m/components/configuration/lwm2m-configuration.component.mjs +2 -2
- package/esm2022/protocol-opcua/opcua-auto-apply-settings.component.mjs +1 -1
- package/esm2022/register-device/bulk/bulk-device-registration-modal.component.mjs +17 -9
- package/esm2022/register-device/general/general-device-registration-button.component.mjs +3 -3
- package/esm2022/register-device/general/general-device-registration.component.mjs +109 -33
- package/esm2022/remote-access/configurations/c8y-ngx-components-remote-access-configurations.mjs +5 -0
- package/esm2022/remote-access/configurations/index.mjs +16 -0
- package/esm2022/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.mjs +218 -0
- package/esm2022/remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.mjs +60 -0
- package/esm2022/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.mjs +36 -0
- package/esm2022/remote-access/data/c8y-ngx-components-remote-access-data.mjs +5 -0
- package/esm2022/remote-access/data/index.mjs +3 -0
- package/esm2022/remote-access/data/remote-access-protocol-provider.mjs +2 -0
- package/esm2022/remote-access/data/remote-access.service.mjs +200 -0
- package/esm2022/remote-access/passthrough/c8y-ngx-components-remote-access-passthrough.mjs +5 -0
- package/esm2022/remote-access/passthrough/index.mjs +36 -0
- package/esm2022/remote-access/shared/c8y-ngx-components-remote-access-shared.mjs +5 -0
- package/esm2022/remote-access/shared/index.mjs +3 -0
- package/esm2022/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.mjs +49 -0
- package/esm2022/remote-access/shared/ssh-key-input/ssh-key-input.component.mjs +87 -0
- package/esm2022/remote-access/ssh/c8y-ngx-components-remote-access-ssh.mjs +5 -0
- package/esm2022/remote-access/ssh/index.mjs +73 -0
- package/esm2022/remote-access/ssh/remote-access-ssh-endpoint-modal/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +5 -0
- package/esm2022/remote-access/ssh/remote-access-ssh-endpoint-modal/index.mjs +2 -0
- package/esm2022/remote-access/ssh/remote-access-ssh-endpoint-modal/remote-access-ssh-endpoint-modal.component.mjs +104 -0
- package/esm2022/remote-access/telnet/c8y-ngx-components-remote-access-telnet.mjs +5 -0
- package/esm2022/remote-access/telnet/index.mjs +43 -0
- package/esm2022/remote-access/terminal-viewer/c8y-ngx-components-remote-access-terminal-viewer.mjs +5 -0
- package/esm2022/remote-access/terminal-viewer/index.mjs +2 -0
- package/esm2022/remote-access/terminal-viewer/shell-adapter.mjs +36 -0
- package/esm2022/remote-access/terminal-viewer/telnet-negotiator.mjs +96 -0
- package/esm2022/remote-access/terminal-viewer/terminal-viewer.component.mjs +101 -0
- package/esm2022/remote-access/vnc/c8y-ngx-components-remote-access-vnc.mjs +5 -0
- package/esm2022/remote-access/vnc/index.mjs +73 -0
- package/esm2022/remote-access/vnc/remote-access-vnc-endpoint-modal/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +5 -0
- package/esm2022/remote-access/vnc/remote-access-vnc-endpoint-modal/index.mjs +2 -0
- package/esm2022/remote-access/vnc/remote-access-vnc-endpoint-modal/remote-access-vnc-endpoint-modal.component.mjs +59 -0
- package/esm2022/remote-access/vnc/vnc-viewer/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +5 -0
- package/esm2022/remote-access/vnc/vnc-viewer/index.mjs +2 -0
- package/esm2022/remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.mjs +57 -0
- package/esm2022/remote-access/vnc/vnc-viewer/vnc-viewer.component.mjs +158 -0
- package/esm2022/replace-device/replace-device-wizard/replace-device-wizard.model.mjs +1 -1
- package/esm2022/report-dashboard/report-dashboard-list.component.mjs +4 -3
- package/esm2022/repository/configuration/device-tab/device-configuration-list.component.mjs +1 -1
- package/esm2022/repository/shared/repository.model.mjs +1 -1
- package/esm2022/repository/shared/repository.service.mjs +3 -3
- package/esm2022/services/status-options/status-options.model.mjs +1 -1
- package/esm2022/sub-assets/group-info.component.mjs +1 -1
- package/esm2022/translation-editor/data/translation-store.service.mjs +4 -3
- package/esm2022/trusted-certificates/list/trusted-certificate-list.component.mjs +35 -9
- package/esm2022/upgrade/bridge.service.mjs +16 -2
- package/esm2022/widgets/implementations/alarms/severity-icon.pipe.mjs +1 -1
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +3 -2
- package/esm2022/widgets/implementations/kpi/kpi-widget.model.mjs +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-api.mjs +3 -2
- package/fesm2022/c8y-ngx-components-api.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +12 -7
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +2 -2
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +15 -20
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +48 -23
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs +48 -28
- package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +174 -0
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +125 -105
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs +57 -0
- package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +147 -31
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +1452 -1414
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-files-repository.mjs +5 -16
- package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector-icons.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +1 -1
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-register-device.mjs +269 -188
- package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +314 -0
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs +206 -0
- package/fesm2022/c8y-ngx-components-remote-access-data.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +42 -0
- package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +138 -0
- package/fesm2022/c8y-ngx-components-remote-access-shared.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +111 -0
- package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +79 -0
- package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +50 -0
- package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs +235 -0
- package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +66 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +211 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +79 -0
- package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs +3 -2
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +2 -2
- package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +3 -2
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +43 -17
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs +16 -2
- package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +157 -42
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/files-repository/files-repository.component.d.ts.map +1 -1
- package/files-repository/files-repository.service.d.ts +0 -2
- package/files-repository/files-repository.service.d.ts.map +1 -1
- package/icon-selector/icon-selector.component.d.ts +3 -2
- package/icon-selector/icon-selector.component.d.ts.map +1 -1
- package/icon-selector/icons/index.d.ts +1 -0
- package/icon-selector/icons/index.d.ts.map +1 -1
- package/locales/de.po +157 -5
- package/locales/es.po +157 -5
- package/locales/fr.po +157 -5
- package/locales/ja_JP.po +156 -5
- package/locales/ko.po +156 -5
- package/locales/locales.pot +156 -4
- package/locales/nl.po +157 -5
- package/locales/pl.po +157 -5
- package/locales/pt_BR.po +157 -5
- package/locales/zh_CN.po +156 -5
- package/locales/zh_TW.po +156 -5
- package/operations/shared/status-option.model.d.ts +2 -1
- package/operations/shared/status-option.model.d.ts.map +1 -1
- package/package.json +1 -1
- package/register-device/bulk/bulk-device-registration-modal.component.d.ts +6 -2
- package/register-device/bulk/bulk-device-registration-modal.component.d.ts.map +1 -1
- package/register-device/general/general-device-registration-button.component.d.ts +1 -1
- package/register-device/general/general-device-registration-button.component.d.ts.map +1 -1
- package/register-device/general/general-device-registration.component.d.ts +21 -7
- package/register-device/general/general-device-registration.component.d.ts.map +1 -1
- package/remote-access/configurations/c8y-ngx-components-remote-access-configurations.d.ts.map +1 -0
- package/remote-access/configurations/index.d.ts +3 -0
- package/remote-access/configurations/index.d.ts.map +1 -0
- package/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.d.ts +34 -0
- package/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.d.ts.map +1 -0
- package/remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.d.ts +17 -0
- package/remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.d.ts.map +1 -0
- package/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.d.ts +18 -0
- package/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.d.ts.map +1 -0
- package/remote-access/data/c8y-ngx-components-remote-access-data.d.ts.map +1 -0
- package/remote-access/data/index.d.ts +3 -0
- package/remote-access/data/index.d.ts.map +1 -0
- package/remote-access/data/remote-access-protocol-provider.d.ts +21 -0
- package/remote-access/data/remote-access-protocol-provider.d.ts.map +1 -0
- package/remote-access/data/remote-access.service.d.ts +94 -0
- package/remote-access/data/remote-access.service.d.ts.map +1 -0
- package/remote-access/passthrough/c8y-ngx-components-remote-access-passthrough.d.ts.map +1 -0
- package/remote-access/passthrough/index.d.ts +17 -0
- package/remote-access/passthrough/index.d.ts.map +1 -0
- package/remote-access/shared/c8y-ngx-components-remote-access-shared.d.ts.map +1 -0
- package/remote-access/shared/index.d.ts +3 -0
- package/remote-access/shared/index.d.ts.map +1 -0
- package/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.d.ts +37 -0
- package/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.d.ts.map +1 -0
- package/remote-access/shared/ssh-key-input/ssh-key-input.component.d.ts +38 -0
- package/remote-access/shared/ssh-key-input/ssh-key-input.component.d.ts.map +1 -0
- package/remote-access/ssh/c8y-ngx-components-remote-access-ssh.d.ts.map +1 -0
- package/remote-access/ssh/index.d.ts +22 -0
- package/remote-access/ssh/index.d.ts.map +1 -0
- package/remote-access/ssh/remote-access-ssh-endpoint-modal/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.d.ts.map +1 -0
- package/remote-access/ssh/remote-access-ssh-endpoint-modal/index.d.ts +2 -0
- package/remote-access/ssh/remote-access-ssh-endpoint-modal/index.d.ts.map +1 -0
- package/remote-access/ssh/remote-access-ssh-endpoint-modal/remote-access-ssh-endpoint-modal.component.d.ts +64 -0
- package/remote-access/ssh/remote-access-ssh-endpoint-modal/remote-access-ssh-endpoint-modal.component.d.ts.map +1 -0
- package/remote-access/telnet/c8y-ngx-components-remote-access-telnet.d.ts.map +1 -0
- package/remote-access/telnet/index.d.ts +17 -0
- package/remote-access/telnet/index.d.ts.map +1 -0
- package/remote-access/terminal-viewer/c8y-ngx-components-remote-access-terminal-viewer.d.ts.map +1 -0
- package/remote-access/terminal-viewer/index.d.ts +2 -0
- package/remote-access/terminal-viewer/index.d.ts.map +1 -0
- package/remote-access/terminal-viewer/shell-adapter.d.ts +14 -0
- package/remote-access/terminal-viewer/shell-adapter.d.ts.map +1 -0
- package/remote-access/terminal-viewer/telnet-negotiator.d.ts +13 -0
- package/remote-access/terminal-viewer/telnet-negotiator.d.ts.map +1 -0
- package/remote-access/terminal-viewer/terminal-viewer.component.d.ts +25 -0
- package/remote-access/terminal-viewer/terminal-viewer.component.d.ts.map +1 -0
- package/remote-access/vnc/c8y-ngx-components-remote-access-vnc.d.ts.map +1 -0
- package/remote-access/vnc/index.d.ts +22 -0
- package/remote-access/vnc/index.d.ts.map +1 -0
- package/remote-access/vnc/remote-access-vnc-endpoint-modal/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.d.ts.map +1 -0
- package/remote-access/vnc/remote-access-vnc-endpoint-modal/index.d.ts +2 -0
- package/remote-access/vnc/remote-access-vnc-endpoint-modal/index.d.ts.map +1 -0
- package/remote-access/vnc/remote-access-vnc-endpoint-modal/remote-access-vnc-endpoint-modal.component.d.ts +46 -0
- package/remote-access/vnc/remote-access-vnc-endpoint-modal/remote-access-vnc-endpoint-modal.component.d.ts.map +1 -0
- package/remote-access/vnc/vnc-viewer/c8y-ngx-components-remote-access-vnc-vnc-viewer.d.ts.map +1 -0
- package/remote-access/vnc/vnc-viewer/index.d.ts +2 -0
- package/remote-access/vnc/vnc-viewer/index.d.ts.map +1 -0
- package/remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.d.ts +32 -0
- package/remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.d.ts.map +1 -0
- package/remote-access/vnc/vnc-viewer/vnc-viewer.component.d.ts +37 -0
- package/remote-access/vnc/vnc-viewer/vnc-viewer.component.d.ts.map +1 -0
- package/replace-device/replace-device-wizard/replace-device-wizard.model.d.ts +2 -1
- package/replace-device/replace-device-wizard/replace-device-wizard.model.d.ts.map +1 -1
- package/report-dashboard/report-dashboard-list.component.d.ts +29 -0
- package/report-dashboard/report-dashboard-list.component.d.ts.map +1 -1
- package/repository/shared/repository.model.d.ts +2 -1
- package/repository/shared/repository.model.d.ts.map +1 -1
- package/services/status-options/status-options.model.d.ts +2 -1
- package/services/status-options/status-options.model.d.ts.map +1 -1
- package/sub-assets/group-info.component.d.ts +2 -1
- package/sub-assets/group-info.component.d.ts.map +1 -1
- package/translation-editor/data/translation-store.service.d.ts.map +1 -1
- package/trusted-certificates/list/trusted-certificate-list.component.d.ts +7 -2
- package/trusted-certificates/list/trusted-certificate-list.component.d.ts.map +1 -1
- package/upgrade/bridge.service.d.ts +5 -0
- package/upgrade/bridge.service.d.ts.map +1 -1
- package/widgets/implementations/alarms/severity-icon.pipe.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -1
- package/widgets/implementations/kpi/kpi-widget.model.d.ts +2 -1
- package/widgets/implementations/kpi/kpi-widget.model.d.ts.map +1 -1
- package/ecosystem/application-plugins/only-latest-plugin-version.pipe.d.ts +0 -10
- package/ecosystem/application-plugins/only-latest-plugin-version.pipe.d.ts.map +0 -1
- package/esm2022/ecosystem/application-plugins/only-latest-plugin-version.pipe.mjs +0 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-context-dashboard.mjs","sources":["../../context-dashboard/new-dashboard.guard.ts","../../context-dashboard/add-dashboard.component.ts","../../context-dashboard/add-dashboard.component.html","../../context-dashboard/add-dashboard.factory.ts","../../context-dashboard/context-dashboard.model.ts","../../context-dashboard/appearance-settings.component.ts","../../context-dashboard/appearance-settings.component.html","../../context-dashboard/cockpit-dashboard/cockpit-dashboard.model.ts","../../context-dashboard/context-dashboard.service.ts","../../context-dashboard/dashboard-detail.service.ts","../../context-dashboard/dashboard-availability.component.ts","../../context-dashboard/dashboard-availability.component.html","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.ts","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.html","../../context-dashboard/dashboard-settings/typed-dashboard-settings.component.ts","../../context-dashboard/dashboard-settings/typed-dashboard-settings.component.html","../../context-dashboard/dashboard-settings/dashboard-general-settings.component.ts","../../context-dashboard/dashboard-settings/dashboard-general-settings.component.html","../../context-dashboard/dashboard-settings/dashboard-appearance-settings.component.ts","../../context-dashboard/dashboard-settings/dashboard-appearance-settings.component.html","../../context-dashboard/dashboard-settings/dashboard-version-history.component.ts","../../context-dashboard/dashboard-settings/dashboard-version-history.component.html","../../context-dashboard/dashboard-detail.component.ts","../../context-dashboard/dashboard-detail.component.html","../../context-dashboard/widget.service.ts","../../context-dashboard/widget-preview.component.ts","../../context-dashboard/widget-preview.component.html","../../context-dashboard/widget-config.component.ts","../../context-dashboard/widget-config.component.html","../../context-dashboard/memento/dashboard-originator.service.ts","../../context-dashboard/memento/dashboard-caretaker.service.ts","../../context-dashboard/memento/dashboard-edit-mode.service.ts","../../context-dashboard/context-dashboard.component.ts","../../context-dashboard/context-dashboard.component.html","../../context-dashboard/cockpit-dashboard/cockpit-dashboard.component.ts","../../context-dashboard/cockpit-dashboard/cockpit-dashboard.component.html","../../context-dashboard/paste-dashboard-action.component.ts","../../context-dashboard/dashboard-action-bar.factory.ts","../../context-dashboard/device-dashboard.guard.ts","../../context-dashboard/group-dashboard.guard.ts","../../context-dashboard/context-dashboard.module.ts","../../context-dashboard/cockpit-dashboard/cockpit-dashboard.module.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.html","../../context-dashboard/device-info-dashboard/device-info-dashboard.module.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.html","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.ts","../../context-dashboard/dashboard-manager/dashboard-manager-tabs.factory.ts","../../context-dashboard/dashboard-manager/type-dashboards-list/device-type-value.grid-column.ts","../../context-dashboard/dashboard-manager/dashboard-manager.service.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/basic-name.device-grid-column.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-assets-grid.service.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.html","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.html","../../context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.ts","../../context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.html","../../context-dashboard/dashboard-manager/dashboard-manager.module.ts","../../context-dashboard/c8y-ngx-components-context-dashboard.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { gettext, Tab } from '@c8y/ngx-components';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { ContextDashboardManagedObject } from './context-dashboard.model';\n\nexport const newDashboardTab: Tab = {\n featureId: 'newDashboard',\n icon: 'th',\n label: gettext('New dashboard'),\n path: 'dashboard/new-dashboard',\n // place tab as last one and hide it so it won't be opened until user initiates adding new dashboard\n hide: true,\n priority: -Infinity\n};\n\n@Injectable({ providedIn: 'root' })\nexport class NewDashboardGuard {\n tab: Tab;\n\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean | Tab[]> {\n const tabActive = route.routeConfig.path === newDashboardTab.path;\n if (tabActive) {\n const dashboard: Partial<ContextDashboardManagedObject> = {\n c8y_Dashboard: null\n };\n route.data = { dashboard };\n }\n if (!this.tab) {\n this.tab = {\n ...newDashboardTab,\n hide: !tabActive,\n priority: tabActive ? Infinity : -Infinity\n };\n }\n return of([this.tab]);\n }\n}\n","import { Component } from '@angular/core';\nimport { TabsService } from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\nimport { newDashboardTab } from './new-dashboard.guard';\n\n@Component({\n selector: '[c8y-add-dashboard]',\n templateUrl: './add-dashboard.component.html',\n host: { class: 'd-flex a-i-stretch sticky-right' }\n})\nexport class AddDashboardComponent {\n constructor(\n private tabsService: TabsService,\n private router: Router\n ) {}\n\n addDashboard() {\n const tempNewDashboardTab = [...this.tabsService.state].find(\n t => t.featureId === newDashboardTab.featureId\n );\n // navigate before tab is displayed, because in DashboardDetailComponent tab is hidden on navigation from it.\n this.router.navigateByUrl(tempNewDashboardTab.path, { replaceUrl: true });\n // show tab and make it appear as first one\n tempNewDashboardTab.hide = false;\n tempNewDashboardTab.priority = Infinity;\n this.tabsService.refresh();\n }\n}\n","<div class=\"d-flex a-i-stretch m-b-8 m-t-8 p-l-8 hidden-xs\">\n <button\n class=\"btn btn-default btn-sm p-l-8 p-r-8 fit-h p-b-0 p-t-0 d-flex a-i-center\"\n title=\"{{ 'Add dashboard' | translate }}\"\n type=\"button\"\n (click)=\"addDashboard()\"\n >\n <i\n class=\"icon-20 m-r-4\"\n c8yIcon=\"add-circle-outline\"\n ></i>\n <span>{{ 'Add dashboard' | translate }}</span>\n </button>\n <div class=\"p-r-sm-40\"></div>\n</div>\n","import { Injectable, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IIdentified } from '@c8y/client';\nimport {\n ContextData,\n ContextRouteService,\n ExtensionFactory,\n Permissions,\n Tab,\n ViewContext\n} from '@c8y/ngx-components';\nimport { AddDashboardComponent } from './add-dashboard.component';\n\nexport abstract class AddDashboardFactory implements ExtensionFactory<Tab> {\n protected abstract targetContext: ViewContext.Device | ViewContext.Group;\n currentContext: ContextData;\n\n private permissions = inject(Permissions);\n private contextRoute = inject(ContextRouteService);\n\n async get(activatedRoute?: ActivatedRoute): Promise<Tab | Tab[]> {\n this.currentContext = this.contextRoute.getContextData(activatedRoute);\n if (\n this.currentContext?.context === this.targetContext &&\n (await this.hasPermission(this.currentContext.contextData))\n ) {\n return [\n {\n component: AddDashboardComponent,\n priority: -Infinity,\n showAlways: true\n }\n ];\n }\n return [];\n }\n\n private async hasPermission(context: IIdentified) {\n if (context?.id) {\n return await this.permissions.canEdit(\n [\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_INVENTORY_CREATE,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_CREATE\n ],\n context\n );\n }\n return this.permissions.hasAnyRole([\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_INVENTORY_CREATE,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_CREATE\n ]);\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddDeviceDashboardFactory extends AddDashboardFactory {\n protected targetContext: ViewContext.Device | ViewContext.Group = ViewContext.Device;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddGroupDashboardFactory extends AddDashboardFactory {\n protected targetContext: ViewContext.Device | ViewContext.Group = ViewContext.Group;\n}\n","import { InjectionToken } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport {\n Widget,\n DynamicComponentDefinition,\n Route,\n gettext,\n ViewContext,\n WidgetDisplaySettings,\n TabWithTemplate,\n WidgetSettings\n} from '@c8y/ngx-components';\nimport { Observable } from 'rxjs/internal/Observable';\n\nexport const CONTEXT_DASHBOARD_CONFIG = new InjectionToken<any>('ContextDashboardConfig');\nexport const DASHBOARD_SETTINGS_CHANGES = {\n classes: gettext('theme'),\n globalRolesIds: gettext('global roles'),\n widgetClasses: gettext('widget header style'),\n widgetMargin: gettext('widget margin'),\n icon: gettext('icon'),\n name: gettext('name'),\n priority: gettext('priority'),\n c8y_IsNavigatorNode: gettext('navigator item'),\n translateWidgetTitle: gettext('translate widget title')\n} as const satisfies Partial<Record<keyof ContextDashboard, string>>;\n\nexport interface ContextDashboardConfig {\n widgetFilter?: (component: DynamicComponentDefinition) => boolean;\n allowFullscreen?: boolean;\n /**\n * @deprecated\n */\n routes?: Route[];\n}\n\nexport interface ContextWidgetConfig {\n /**\n * Settings that define how the default config component is\n * displayed. They are static and will not be saved.\n */\n settings?: WidgetSettings;\n\n /**\n * Settings that are injected in any displaying component.\n */\n displaySettings?: WidgetDisplaySettings;\n\n /**\n * Whatever should be added to the configuration when a widget is created.\n */\n config?: {\n /**\n * Any other information that should be stored here.\n */\n [key: string]: any;\n };\n /**\n * The selected device or group (note: naming is inconsistent as group was added later\n * but must stay for already implemented widgets)\n */\n device?: {\n id?: string | number;\n name?: string;\n [key: string]: any;\n };\n /**\n * Any other information that should be stored here.\n */\n [key: string]: any;\n}\n\nexport interface ContextDashboardManagedObject extends IManagedObject {\n c8y_Dashboard?: ContextDashboard;\n name?: string;\n c8y_DashboardHistory?: ContextDashboard[];\n}\n\nexport interface ContextDashboard {\n icon?: string;\n name?: string;\n priority?: number;\n deviceType?: boolean;\n deviceTypeValue?: string;\n isFrozen?: boolean;\n classes?: { [key: string]: boolean };\n widgetClasses?: { [key: string]: boolean };\n widgetMargin?: number;\n translateWidgetTitle?: boolean;\n global?: boolean;\n /**\n * The amount of columns on that dashboard.\n * Can be freely chosen, but product uses either 12 or 24.\n */\n columns?: number;\n children?: {\n [id: string]: Widget;\n };\n globalRolesIds?: DashboardGlobalRoles;\n c8y_IsNavigatorNode?: object;\n description?: string;\n historyDescription?: DashboardHistoryDescription;\n created?: string;\n author?: string;\n}\n/**\n * Object describing changes applied to dashboard settings and its widgets. Used to display user-friendly change log.\n */\nexport interface DashboardHistoryDescription {\n /**\n * Indicates type of dashboard change (or creation).\n */\n changeType?: 'reset' | 'create' | 'update';\n /**\n * List of dashboard settings that has been changed.\n */\n dashboardSettingChanges?: (keyof typeof DASHBOARD_SETTINGS_CHANGES)[];\n /**\n * True if dashboard is typed dashboard, false if it's not.\n */\n deviceType?: boolean;\n /**\n * Object containing lists of widgets (by title) that has been changed, grouped by change type, e.g.:\n * ```ts\n * widgetChanges: {\n * removed: ['Applications'],\n * config?: ['Data points graph', 'Events list'],\n * },\n * ```\n */\n widgetChanges?: {\n removed?: string[];\n added?: string[];\n config?: string[];\n arrangement?: string[];\n };\n /**\n * String used to display the date from which the state was restored.\n */\n restored?: string;\n}\n\nexport const DASHBOARD_CHILDREN_STATE_NAME = {\n initial: gettext('Initial state'),\n config: gettext('Widget configuration changed'),\n removed: gettext('Widget removed'),\n added: gettext('Widget added'),\n arrangement: gettext('Widgets rearranged')\n} as const satisfies Record<keyof DashboardHistoryDescription['widgetChanges'] | 'initial', string>;\n/**\n * Object representing state of dashboard widgets. Its main purpose is to allow to undo and redo changes\n * applied to dashboard children.\n */\nexport type DashboardChildrenState = {\n /**\n * Name of the change applied to dashboard that results in current state, e.g. 'widget removed'\n */\n name: (typeof DASHBOARD_CHILDREN_STATE_NAME)[keyof typeof DASHBOARD_CHILDREN_STATE_NAME];\n /**\n * Dashboard children in particular, immutable state.\n */\n children: ContextDashboard['children'];\n /**\n * Object describing changes applied to dashboard widgets that can be easily mapped to DashboardHistoryDescription widgetChanges.\n * ```ts\n * {\n * removed: {\n * 0969692617637703: { componentId: \"Data points graph\", config: {...}, classes: {...} ...}\n * },\n * config: {\n * 6347567345767653: { componentId: \"Applications\", config: {...}, classes: {...} ...},\n * 6456345634564566: { componentId: \"Events list\", config: {...}, classes: {...} ...},\n * }\n * }\n * ```\n */\n changeHistory: Partial<\n Record<\n keyof DashboardHistoryDescription['widgetChanges'],\n {\n [id: string]: Widget;\n }\n >\n >;\n};\n\nexport enum ContextDashboardType {\n Device = 'device',\n Type = 'type',\n Group = 'group',\n Named = 'name',\n Report = 'report'\n}\n\nexport enum DashboardDetailsTabId {\n GENERAL = 'general',\n APPEARANCE = 'appearance',\n VERSIONHISTORY = 'versionHistory'\n}\n\nexport type DashboardDetailsTabs = Record<\n DashboardDetailsTabId,\n TabWithTemplate & { featureId: DashboardDetailsTabId }\n>;\n\nexport const WIDGET_HEADER_CLASSES = [\n {\n label: gettext('Regular`style`'),\n class: 'panel-title-regular',\n description: gettext('The widget has no border between header and content.')\n },\n {\n label: gettext('Border`style`'),\n class: 'panel-title-border',\n description: gettext('The widget has a small separation border between header and content.')\n },\n {\n label: gettext('Overlay`style`'),\n class: 'panel-title-overlay',\n description: gettext('The widget content overlays the header.')\n },\n {\n label: gettext('Hidden`style`'),\n class: 'panel-title-hidden',\n description: gettext('The widget header is not shown.')\n }\n] as const;\n\nexport const WIDGET_CONTENT_CLASSES = [\n {\n label: gettext('Branded`style`'),\n class: 'panel-content-branded',\n description: gettext('The widget is styled with the main brand color.')\n },\n {\n label: gettext('Match dashboard`style`'),\n class: 'panel-content-light',\n description: gettext('The widget appearance matches the dashboard appearance.')\n },\n {\n label: gettext('Light`style`'),\n class: 'panel-content-white',\n description: gettext('The widget has light appearance, that is, dark text on light background.')\n },\n {\n label: gettext('Dark`style`'),\n class: 'panel-content-dark',\n description: gettext('The widget has dark appearance, that is, light text on dark background.')\n },\n {\n label: gettext('Transparent`style`'),\n class: 'panel-content-transparent',\n description: gettext('The widget has no background.')\n }\n] as const;\n\nexport const DASHBOARD_THEME_CLASSES = [\n {\n label: gettext('Match UI`theme`'),\n class: 'dashboard-theme-light',\n description: gettext('The dashboard appearance matches the UI appearance.')\n },\n {\n label: gettext('Light`theme`'),\n class: 'dashboard-theme-white',\n description: gettext(\n 'The dashboard has light appearance, that is, dark text on light background.'\n )\n },\n {\n label: gettext('Dark`theme`'),\n class: 'dashboard-theme-dark',\n description: gettext(\n 'The dashboard has dark appearance, that is, light text on dark background.'\n )\n },\n // {\n // label: gettext('Transparent`theme`'),\n // class: 'dashboard-theme-transparent',\n // description: gettext(\n // 'The dashboard is styled with a transparent background and therefore is border-less.'\n // )\n // },\n {\n label: gettext('Branded`theme`'),\n class: 'dashboard-theme-branded',\n description: gettext('The dashboard is styled using the brand palette.')\n }\n] as const;\n\nexport const STYLING_CLASS_PREFIXES = [\n 'dashboard-theme-',\n 'panel-title-',\n 'panel-content-'\n] as const;\n\nexport interface DashboardCopyClipboard {\n dashboardId: string;\n dashboard: ContextDashboard;\n context: DashboardContext;\n}\n\nexport interface DashboardContext {\n context: ViewContext;\n contextData: Partial<IManagedObject>;\n}\n\nexport const ALL_GLOBAL_ROLES_SELECTED = 'all' as const;\nexport type DashboardGlobalRoles = number[] | typeof ALL_GLOBAL_ROLES_SELECTED;\n\nexport const PRODUCT_EXPERIENCE = {\n DASHBOARD: {\n EVENTS: {\n DASHBOARDS: 'dashboards',\n REPORTS: 'reports'\n },\n COMPONENTS: {\n DASHBOARD_VIEW: 'context-dashboard',\n DASHBOARD_AVAILABILITY: 'dashboard-availability',\n REPORTS_LIST: 'report-dashboard-list',\n ADD_REPORT: 'report-dashboard-list',\n ADD_DASHBOARD: 'add-dashboard',\n DELETE_DASHBOARD: 'context-dashboard'\n },\n CONTEXT: {\n REPORT: 'report',\n DEVICE: 'device',\n ASSET: 'asset',\n GROUP: 'group'\n },\n ACTIONS: {\n APPLY_GLOBAL_ROLES_CHANGES: 'applyGlobalRolesChanges',\n DELETE: 'delete',\n LOAD: 'load',\n CREATE: 'create'\n }\n }\n} as const;\n\nexport interface CanDeactivateComponent {\n canDeactivate: () => boolean | Observable<boolean> | Promise<boolean>;\n}\n\nexport const REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY = 30;\n\nexport type AllowTypeDashboard = 'allow' | 'disallow' | 'allow_if_type_filled';\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { DASHBOARD_THEME_CLASSES, WIDGET_HEADER_CLASSES } from './context-dashboard.model';\nimport { gettext } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-appearance-settings',\n templateUrl: './appearance-settings.component.html'\n})\nexport class AppearanceSettingsComponent {\n @Input()\n themeClass = 'dashboard-theme-light';\n @Input()\n headerClass = 'panel-title-regular';\n @Input()\n defaultThemeClass: string;\n @Input()\n defaultHeaderClass: string;\n @Input()\n dashboardSettings: boolean;\n @Output()\n themeClassChange = new EventEmitter<string>();\n @Output()\n headerClassChange = new EventEmitter<string>();\n\n @Input()\n possibleStylingTheme = DASHBOARD_THEME_CLASSES;\n\n @Input()\n possibleStylingHeader = WIDGET_HEADER_CLASSES;\n\n @Input()\n columns: 1 | 3 = 1;\n\n dashboardDefaultLabel = gettext('Dashboard default');\n\n themeClassClick(value) {\n value = this.resetToDefault(value, this.themeClass, this.defaultThemeClass);\n this.themeClass = value;\n this.themeClassChange.emit(value);\n }\n\n headerClassClick(value) {\n value = this.resetToDefault(value, this.headerClass, this.defaultHeaderClass);\n this.headerClass = value;\n this.headerClassChange.emit(value);\n }\n\n private resetToDefault(value: string, compareTo: string, defaultValue: string) {\n if (defaultValue && value === compareTo) {\n value = defaultValue;\n }\n return value;\n }\n}\n","<div class=\"row\">\n <div class=\"col-md-{{ 12 / columns }} col-xs-12\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend *ngIf=\"dashboardSettings\">{{ 'Default theme' | translate }}</legend>\n <legend *ngIf=\"!dashboardSettings\">{{ 'Theme' | translate }}</legend>\n <ul class=\"list-group\">\n <li\n class=\"list-group-item d-flex a-i-center p-l-0 p-r-0 fit-w\"\n *ngFor=\"let themeClassItem of possibleStylingTheme; let i = index\"\n >\n <div\n class=\"list-item-checkbox\"\n style=\"max-width: calc(100% - 24px)\"\n >\n <label class=\"c8y-radio\">\n <input\n name=\"content\"\n type=\"radio\"\n [id]=\"'groupradiocontentclass' + i\"\n [value]=\"themeClassItem.class\"\n [ngModel]=\"themeClass\"\n (click)=\"themeClassClick(themeClassItem.class)\"\n />\n <span></span>\n <span\n class=\"text-truncate\"\n title=\"{{ themeClassItem.label | translate }}{{\n themeClassItem.class === defaultThemeClass\n ? ' | ' + (dashboardDefaultLabel | translate)\n : ''\n }}\"\n >\n <span>{{ themeClassItem.label | translate }}</span>\n <br />\n <small\n class=\"text-muted\"\n *ngIf=\"themeClassItem.class === defaultThemeClass\"\n >\n {{ dashboardDefaultLabel | translate }}\n </small>\n </span>\n </label>\n </div>\n\n <button\n class=\"btn-help btn-help--sm m-l-auto\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ themeClassItem.description | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </li>\n </ul>\n </fieldset>\n </div>\n <div class=\"col-md-{{ 12 / columns }} col-xs-12\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend *ngIf=\"dashboardSettings\">\n {{ 'Default widget header style' | translate }}\n </legend>\n <legend *ngIf=\"!dashboardSettings\">\n {{ 'Widget header style' | translate }}\n </legend>\n <ul class=\"list-group\">\n <li\n class=\"list-group-item d-flex a-i-center p-l-0 p-r-0\"\n *ngFor=\"let headerClassItem of possibleStylingHeader; let i = index\"\n >\n <div\n class=\"list-item-checkbox\"\n style=\"max-width: calc(100% - 24px)\"\n >\n <label class=\"c8y-radio\">\n <input\n name=\"header\"\n type=\"radio\"\n [id]=\"'groupradioheaderclass' + i\"\n [value]=\"headerClassItem.class\"\n [ngModel]=\"headerClass\"\n (click)=\"headerClassClick(headerClassItem.class)\"\n />\n <span></span>\n <span\n class=\"text-truncate\"\n title=\"{{ headerClassItem.label | translate }}{{\n headerClassItem.class === defaultHeaderClass\n ? ' | ' + (dashboardDefaultLabel | translate)\n : ''\n }}\"\n >\n <span>{{ headerClassItem.label | translate }}</span>\n <br />\n <small\n class=\"text-muted\"\n *ngIf=\"headerClassItem.class === defaultHeaderClass\"\n >\n {{ dashboardDefaultLabel | translate }}\n </small>\n </span>\n </label>\n </div>\n <button\n class=\"btn-help btn-help--sm m-l-auto\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ headerClassItem.description | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </li>\n </ul>\n </fieldset>\n </div>\n <ng-content></ng-content>\n</div>\n","import { InjectionToken } from '@angular/core';\nimport { gettext, Widget } from '@c8y/ngx-components';\n\n/**\n * A hook to define the default widgets of the home dashboard in the cockpit app.\n */\nexport const COCKPIT_HOME_DASHBOARD_CONFIG = new InjectionToken('CockpitHomeDashboardConfig');\n\nexport interface CockpitDashboardConfig {\n /**\n * Allows to have customized dashboard context name in case the CockpitDashboardModule is used in different apps and should have individual home dashboards per app\n */\n dashboardName?: string;\n /**\n * Allows to define the default widgets shown on the Cockpit Homepage\n */\n defaultWidgets?: Widget[];\n /**\n * Allows to have a different page title than the default 'Home'\n */\n pageTitle?: string;\n /**\n * Allows to have individual home dashboards per user\n */\n userSpecific?: boolean;\n}\n\n/**\n * An array of widgets that is per default placed on the home dashboard of the cockpit app.\n */\nexport const DEFAULT_COCKPIT_HOME_WIDGETS = [\n {\n name: 'cockpit.welcome.widget',\n title: gettext('Welcome to Cockpit'),\n _x: 0,\n _y: 0,\n _height: 5,\n _width: 24,\n classes: { 'panel-title-hidden': true }\n },\n {\n name: 'Asset Alarms',\n title: gettext('Active, critical alarms'),\n _x: 0,\n _y: 5,\n _height: 4,\n _width: 12\n },\n {\n name: 'Recent Alarms',\n title: gettext('Recent alarms'),\n _x: 0,\n _y: 9,\n _height: 4,\n _width: 12\n },\n {\n name: 'Map',\n title: gettext('Map'),\n _x: 12,\n _y: 5,\n _height: 8,\n _width: 12\n }\n] as Partial<Widget>[] as Widget[];\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { IManagedObject, InventoryService, IResultList, QueriesUtil } from '@c8y/client';\nimport {\n AlertService,\n ApplicationOptions,\n ContextData,\n DynamicComponentService,\n getActivatedRoute,\n gettext,\n GroupService,\n ModalService,\n NavigatorNode,\n NavigatorService,\n NEW_DASHBOARD_QUERY_PARAM,\n OptionsService,\n Permissions,\n Status,\n Tab,\n TabsService,\n ViewContext,\n Widget\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n assign,\n cloneDeep,\n forEach,\n get,\n has,\n keyBy,\n keys,\n pick,\n reduce,\n set,\n some\n} from 'lodash-es';\nimport { combineLatest, from, Observable, of, Subject } from 'rxjs';\nimport { catchError, filter, map, mergeMap, tap, throwIfEmpty, toArray } from 'rxjs/operators';\nimport {\n ALL_GLOBAL_ROLES_SELECTED,\n AllowTypeDashboard,\n ContextDashboard,\n ContextDashboardManagedObject,\n ContextDashboardType,\n DashboardContext,\n DashboardCopyClipboard,\n PRODUCT_EXPERIENCE,\n STYLING_CLASS_PREFIXES\n} from './context-dashboard.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ContextDashboardService {\n dashboardTabs$: Observable<Tab[]>;\n formDisabled$: Observable<boolean>;\n readonly REPORT_PARTIAL_NAME = 'report_';\n copyClipboard: DashboardCopyClipboard;\n queriesUtil: QueriesUtil;\n readonly VERSION_HISTORY_SIZE_LIMIT = 10;\n private readonly INVENTORY_ROLES = [\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN\n ];\n private cache = new Map<string, ContextDashboardManagedObject>();\n private readonly DEFAULT_PAGESIZE = 1000;\n private readonly FRAGMENT_NAME = 'c8y_Dashboard';\n private readonly DASHBOARD_ROUTE_PATH = 'dashboard';\n private readonly INDEX_SPLIT = '!';\n private readonly CACHE_TIMEOUT = 500;\n private _formDisabled = true;\n private formDisabledSubject = new Subject<boolean>();\n private contextDashboardsCache: {\n query: string;\n result: Promise<IResultList<IManagedObject>>;\n timestamp: number;\n };\n private readonly HIDE_TYPE_DASHBOARD_FOR_ASSETS: keyof ApplicationOptions =\n 'hideTypeDashboardForAssets';\n\n get formDisabled() {\n return this._formDisabled;\n }\n\n set formDisabled(value) {\n this._formDisabled = value;\n this.formDisabledSubject.next(value);\n }\n\n constructor(\n private inventory: InventoryService,\n private tabs: TabsService,\n private modal: ModalService,\n private translateService: TranslateService,\n private router: Router,\n private navigator: NavigatorService,\n private permissions: Permissions,\n private alert: AlertService,\n private dynamicComponent: DynamicComponentService,\n private groupService: GroupService,\n private optionsService: OptionsService\n ) {\n this.formDisabled$ = this.formDisabledSubject.asObservable();\n this.queriesUtil = new QueriesUtil();\n }\n\n async create(dashboardCfg: ContextDashboard, context?: ContextData, name = '') {\n let dashboard: Partial<ContextDashboardManagedObject> = {};\n assign(\n dashboard,\n this.adjustDashboardFor24Columns({ c8y_Dashboard: dashboardCfg }),\n this.updateDashboardHistory(dashboard, dashboardCfg)\n );\n\n const [dashboardType, dashboardFragments] = this.getDashboardFragments(\n { c8y_Dashboard: dashboardCfg } as ContextDashboardManagedObject,\n context,\n name,\n false\n );\n dashboard = { ...dashboard, ...dashboardFragments };\n\n if (this.shouldSetGlobal(dashboard, context)) {\n assign(dashboard, { c8y_Global: {} });\n }\n dashboard.name = dashboard.c8y_Dashboard.name;\n const { data } =\n dashboardType === ContextDashboardType.Group ||\n dashboardType === ContextDashboardType.Device ||\n (context && dashboardType === ContextDashboardType.Named)\n ? await this.inventory.childAdditionsCreate(\n dashboard,\n (context?.contextData.id as string) || ''\n )\n : await this.inventory.create(dashboard);\n return data as ContextDashboardManagedObject;\n }\n\n async detail(dashboardMO: ContextDashboardManagedObject) {\n let { data } = await this.inventory.detail(dashboardMO);\n data = this.adjustDashboardFor24Columns(data as ContextDashboardManagedObject);\n this.cache.set(dashboardMO.id, data);\n return data;\n }\n\n async update(\n dashboard: ContextDashboardManagedObject,\n context?: ContextData\n ): Promise<ContextDashboardManagedObject> {\n const dashboardCfg = dashboard.c8y_Dashboard;\n dashboard.name = dashboard.c8y_Dashboard.name;\n assign(\n dashboard,\n this.adjustDashboardFor24Columns({ c8y_Dashboard: dashboardCfg }),\n this.updateDashboardHistory(dashboard, dashboardCfg)\n );\n\n const keepFragments = this.clean(pick(dashboard, [this.FRAGMENT_NAME, 'id', 'name']));\n keepFragments.c8y_DashboardHistory = dashboard.c8y_DashboardHistory;\n await this.serializeWidgetConfigs(keepFragments);\n\n const [, dashboardTypeFragments] = this.getDashboardFragments(dashboard, context, '', true);\n keepFragments.c8y_Global = this.shouldSetGlobal({ ...dashboard, ...dashboardTypeFragments });\n const { data } = await this.inventory.update({ ...keepFragments, ...dashboardTypeFragments });\n this.cache.set(dashboard.id, data);\n return data;\n }\n\n async delete(dashboard: ContextDashboardManagedObject, withConfirmation = true) {\n try {\n if (withConfirmation) {\n let msg: string = gettext(\n `You are about to delete the dashboard \"{{ dashboardName }}\". Do you want to proceed?`\n );\n if (this.isDeviceType(dashboard)) {\n msg = gettext(\n `You are about to delete the dashboard \"{{ dashboardName }}\" from all devices of the type \"{{ deviceType }}\".\n Do you want to proceed?`\n );\n }\n await this.modal.confirm(\n gettext('Delete dashboard'),\n this.translateService.instant(msg, {\n dashboardName: dashboard.c8y_Dashboard.name,\n deviceType: dashboard.c8y_Dashboard.deviceTypeValue\n }),\n Status.DANGER,\n {\n ok: gettext('Delete'),\n cancel: gettext('Cancel')\n }\n );\n }\n await this.inventory.delete(dashboard);\n const tabToRemove = Array.from(this.tabs.state).find(tab => {\n if (tab.path) {\n return tab.path.endsWith(`${this.DASHBOARD_ROUTE_PATH}/${dashboard.id}`);\n }\n });\n this.tabs.remove(tabToRemove);\n queueMicrotask(() => {\n this.tabs.refresh();\n });\n } catch (ex) {\n // intended empty\n }\n }\n\n updateDashboardHistory(\n dashboard: Partial<ContextDashboardManagedObject>,\n dashboardCfg: ContextDashboard\n ): Partial<ContextDashboardManagedObject> {\n if (!dashboard.c8y_DashboardHistory) {\n dashboard.c8y_DashboardHistory = [];\n }\n if (!dashboardCfg.historyDescription) {\n dashboardCfg.historyDescription = { changeType: 'create' };\n }\n\n dashboardCfg.created = new Date().toISOString();\n dashboard.c8y_DashboardHistory = cloneDeep([dashboardCfg, ...dashboard.c8y_DashboardHistory]);\n\n if (dashboard.c8y_DashboardHistory.length > this.VERSION_HISTORY_SIZE_LIMIT) {\n dashboard.c8y_DashboardHistory = [\n ...dashboard.c8y_DashboardHistory.slice(0, this.VERSION_HISTORY_SIZE_LIMIT)\n ];\n }\n\n return dashboard;\n }\n\n activateDashboards(\n route: ActivatedRouteSnapshot,\n types: ContextDashboardType[]\n ): Observable<boolean | Tab[]> {\n const { dashboardId } = route.params;\n if (dashboardId) {\n return this.getDashboard$(dashboardId, types, route.parent.data.contextData).pipe(\n tap(dashboard => {\n route.data = { dashboard };\n }),\n map(() => true),\n catchError(() => {\n return of(false);\n })\n );\n }\n\n this.dashboardTabs$ = this.getTabs$(\n route.data.contextData,\n types,\n route?.parent?.data as ContextData\n );\n return this.dashboardTabs$;\n }\n\n getNamedDashboardOrCreate(name: string, defaultWidgets: Widget[], context?: ContextData) {\n const children = this.mapWidgets(defaultWidgets);\n return this.getDashboard$(name, [ContextDashboardType.Named]).pipe(\n throwIfEmpty(),\n catchError(() =>\n from(\n this.create(\n {\n children,\n widgetClasses: { 'dashboard-theme-light': true, 'panel-title-regular': true }\n },\n context,\n name\n )\n )\n )\n );\n }\n\n updateNavigatorItem(mo: IManagedObject) {\n this.navigator.state.forEach(node => {\n if (node.path === `reports/${mo.id}`) {\n this.navigator.remove(node);\n }\n });\n if (mo.c8y_IsNavigatorNode) {\n const nodeToAdd = new NavigatorNode({\n label: mo.name,\n path: `reports/${mo.id}`,\n icon: mo.icon,\n priority: mo.priority\n });\n this.navigator.add(nodeToAdd);\n }\n }\n\n async navigateToDashboard(dashboardMO: ContextDashboardManagedObject) {\n if (/dashboard/.test(this.router.url)) {\n this.router.navigate(['..', dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router),\n queryParams: {\n [NEW_DASHBOARD_QUERY_PARAM]: true\n }\n });\n } else if (/^\\/(device|group)\\/[0-9]+$/.test(this.router.url)) {\n // in case the add dashboard button is the only tab on that route\n this.router.navigate(['.', this.DASHBOARD_ROUTE_PATH, dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router)\n });\n } else {\n this.router.navigate(['..', this.DASHBOARD_ROUTE_PATH, dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router)\n });\n }\n }\n\n /**\n * Checks if user is able to edit dashboard according to his roles and dashboard ownership.\n *\n * @param mo - Dashboard managed object.\n * @returns True if user is able to edit dashboard, false if he cannot.\n */\n async canEditDashboard(mo: ContextDashboardManagedObject): Promise<boolean> {\n return await this.permissions.canEdit(this.INVENTORY_ROLES, mo);\n }\n\n /**\n * Checks if user has permissions to copy dashboard according to his roles.\n *\n * @returns True if user has permissions to copy dashboard, false if he cannot.\n */\n hasPermissionsToCopyDashboard(): boolean {\n return this.permissions.hasAnyRole([\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_INVENTORY_CREATE,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_CREATE\n ]);\n }\n\n isNamed(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}`\n ).test(prop)\n );\n }\n\n isReport(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}${this.REPORT_PARTIAL_NAME}`\n ).test(prop)\n );\n }\n\n isDeviceType(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop => {\n const matchingProp = new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Type}${this.INDEX_SPLIT}`\n ).test(prop);\n if (!matchingProp) {\n return false;\n } else {\n // there might be matching key, but its value can be {} or null\n return !!dashboard[prop];\n }\n });\n }\n\n isDeviceDashboard(dashboard: Partial<ContextDashboardManagedObject>): boolean {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Device}${this.INDEX_SPLIT}`\n ).test(prop)\n );\n }\n\n isGroupDashboard(dashboard: Partial<ContextDashboardManagedObject>): boolean {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Group}${this.INDEX_SPLIT}`\n ).test(prop)\n );\n }\n\n getFilteredDashboardStyles(styleList: string[]) {\n return styleList.filter(c =>\n STYLING_CLASS_PREFIXES.some(classPrefix => c.startsWith(classPrefix))\n );\n }\n\n getStyling(styleList, styleName, defaultValue) {\n const styling = styleList.find(\n style => style && new RegExp(`-${styleName}$`, 'i').test(style.class)\n );\n return styling ? styling.class : defaultValue;\n }\n\n mapWidgets(widgets: Widget[]) {\n return keyBy(\n widgets.map(widget => {\n widget.id = String(Math.random()).substr(2);\n return widget;\n }),\n 'id'\n );\n }\n\n getDashboard$(dashboardIdOrName, dashboardType: ContextDashboardType[], mo?: IManagedObject) {\n const cache = this.cache.get(dashboardIdOrName);\n\n const dashboards = mo\n ? this.getContextDashboards(mo, dashboardType)\n : this.getNamedDashboard(dashboardIdOrName);\n\n const cacheRefresh = this.getContextDashboards$(dashboards).pipe(\n tap(dashboard => this.cacheDashboard(dashboard)),\n filter(\n dashboard =>\n dashboard.id === dashboardIdOrName ||\n has(\n dashboard,\n `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}${dashboardIdOrName}`\n )\n )\n );\n return cache ? of(cache) : cacheRefresh;\n }\n\n async pasteDashboard(newContext: DashboardContext): Promise<void> {\n if (this.copyClipboard) {\n try {\n const dashboardToPaste = this.createContextDashboardCopy(\n this.copyClipboard.dashboard,\n newContext.contextData,\n this.copyClipboard.context.contextData\n );\n const dashboard = await this.create(this.clean(dashboardToPaste), newContext);\n\n // linking childAdditions for e.g. to grant access to the images uploaded by the image widget for users with only inventory roles.\n const { data: childAdditions } = await this.inventory.childAdditionsList(\n this.copyClipboard.dashboardId,\n { pageSize: 2000 }\n );\n if (childAdditions.length) {\n await this.inventory.childAdditionsBulkAdd(childAdditions, dashboard.id);\n }\n\n this.copyClipboard = undefined;\n this.navigateToDashboard(dashboard);\n } catch {\n this.alert.warning(gettext('Insufficient permissions for this action.'));\n }\n }\n }\n\n /**\n * Creates fragment that associates dashboards with device/asset. It consists of three elements:\n * - FRAGMENT_NAME - static string\n * - dashboard type (e.g. 'group', 'device')\n * - fragment value ( id of device/asset if it is not typed dashboard; deviceTypeValue property of dashboard if it is type dashboard)\n * Example fragment for device dashboard: 'c8y_Dashboard!device!773200'\n * Example fragment for group dashboard: 'c8y_Dashboard!group!84129208'\n * Example fragment for typed device dashboard: 'c8y_Dashboard!type!c8y_lwm2m_connector_device'\n *\n * @param contextDashboardType Type of dashboard\n * @param value Fragment value\n * @returns Fragment for dashboard\n */\n createFragmentKey<T extends ContextDashboardType, V extends string>(\n contextDashboardType: T,\n value: V\n ) {\n return `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${contextDashboardType}${this.INDEX_SPLIT}${value}` as const;\n }\n\n /**\n * Indicates if dashboard can be set to type dashboard.\n * First, it checks if deviceTypeValue exists and if user has permission to set dashboard type.\n * Then, case from sensor app is checked- dashboard created with sensor app has deviceType set to true but\n * type fragment is missing- we do not support this combination.\n * @param mo Dashboard managed object\n * @param context {ContextData} Current context\n * @returns True if dashboard can be set to type dashboard, false if it is forbidden.\n */\n shouldAllowToSetDashboardType(\n mo: ContextDashboardManagedObject,\n context: ContextData\n ): AllowTypeDashboard {\n // disallow if dashboard managed object or context is missing or context is not device/asset/group\n if (\n !mo ||\n !context?.contextData ||\n (context.context !== ViewContext.Device && context.context !== ViewContext.Group)\n ) {\n return 'disallow';\n }\n\n // if context is asset/group and type dashboard feature is hidden for assets/groups or asset/group has no typ, return disallow\n const typeDashboardHiddenForAssets = this.optionsService.get(\n this.HIDE_TYPE_DASHBOARD_FOR_ASSETS,\n true\n );\n if (\n context.context === ViewContext.Group &&\n (typeDashboardHiddenForAssets || !context.contextData.type)\n ) {\n return 'disallow';\n }\n\n // if user has no permission to change dashboard, return disallow\n if (!this.permissions.hasAnyRole(this.INVENTORY_ROLES)) {\n return 'disallow';\n }\n\n // case from sensor app is checked- dashboard created with sensor app has deviceType set to true but\n // type fragment is missing- we do not support this combination.\n const typeFragment = this.createFragmentKey(\n ContextDashboardType.Type,\n context?.contextData?.type\n );\n if (\n mo?.c8y_Dashboard &&\n mo?.c8y_Dashboard.deviceType &&\n context?.contextData?.type &&\n !mo[typeFragment]\n ) {\n return 'disallow';\n }\n\n // if view context is Device and contextData of this device has no type yet but type dashboard can be set when type is filled,\n // return allow_if_type_filled\n if (\n !context?.contextData?.type &&\n context.context === ViewContext.Device &&\n this.permissions.hasAnyRole(this.INVENTORY_ROLES)\n ) {\n return 'allow_if_type_filled';\n }\n\n return 'allow';\n }\n\n createReport(reportCfg: Partial<IManagedObject>) {\n const report: Partial<IManagedObject> = {};\n Object.assign(report, reportCfg);\n Object.assign(report, { c8y_Report: {} });\n return this.inventory.create(report);\n }\n\n addReportNavigatorNode(report: IManagedObject): void {\n const node = new NavigatorNode({\n label: report.name,\n path: `reports/${report.id}`,\n icon: report.icon,\n priority: report.priority\n });\n this.navigator.add(node);\n }\n\n getContextForGS(mo: IManagedObject): string | null {\n if (this.groupService.isDevice(mo)) {\n return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.DEVICE;\n } else if (this.groupService.isAsset(mo)) {\n return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.ASSET;\n } else if (this.groupService.isGroup(mo)) {\n return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.GROUP;\n } else {\n return null;\n }\n }\n\n async getContextDashboards(\n mo: IManagedObject,\n dashboardType: ContextDashboardType[]\n ): Promise<IResultList<IManagedObject>> {\n const filterCriteria = dashboardType.map(t => ({\n // it's necessary to wrap fragment in quotes because dashboard type can contain spaces\n __has: `'${this.createDashboardFragment(mo, t)}'`\n }));\n\n // the has query above does not work for device type dashboards where the type contains a dot\n const typeFilterCriteria =\n dashboardType.includes(ContextDashboardType.Type) && mo.type\n ? {\n __and: [\n { 'c8y_Dashboard.deviceType': { __eq: true } },\n { 'c8y_Dashboard.deviceTypeValue': { __eq: mo.type } }\n ]\n }\n : undefined;\n const finalFilterCriteria = typeFilterCriteria\n ? [...filterCriteria, typeFilterCriteria]\n : filterCriteria;\n\n const query = this.queriesUtil.buildQuery({\n __filter: {\n __or: finalFilterCriteria\n }\n });\n const now = Date.now();\n const cacheHasValidResponse =\n this.contextDashboardsCache &&\n this.contextDashboardsCache.query === query &&\n now - this.contextDashboardsCache.timestamp < this.CACHE_TIMEOUT;\n\n if (cacheHasValidResponse) {\n return this.contextDashboardsCache.result;\n } else {\n this.contextDashboardsCache = null;\n }\n\n this.contextDashboardsCache = {\n query,\n result: this.inventory.list({\n query,\n pageSize: this.DEFAULT_PAGESIZE\n }),\n timestamp: now\n };\n return this.contextDashboardsCache.result;\n }\n\n /**\n * Creates a tuple describing the dashboard type and its fragments. For assets like devices and groups, it's possible\n * to have two fragments: one indicating this particular device/asset with its ID, and the second indicating\n * the device/asset type (if the dashboard is meant to be applied to all assets of this type).\n *\n * @param dashboardMO - Dashboard managed object.\n * @param context - Context data of asset.\n * @param name - Name of the dashboard.\n * @param isEdit - True if existing dashboard is updated, false when it's creation of new dashboard.\n * @returns Tuple of dashboard type and object containing dashboard fragments.\n */\n private getDashboardFragments(\n dashboardMO: ContextDashboardManagedObject,\n context: ContextData,\n name: string,\n isEdit: boolean\n ): [ContextDashboardType, Record<string, object>] {\n let dashboardType: ContextDashboardType;\n const id = (context?.contextData?.id as string) || '';\n const fragments: Record<string, object> = {};\n\n if (name) {\n // a named dashboard should not receive any other fragments\n dashboardType = ContextDashboardType.Named;\n const namedFragmentKey = this.createFragmentKey(ContextDashboardType.Named, name);\n fragments[namedFragmentKey] = {};\n } else if (context?.context === ViewContext.Device || context?.context === ViewContext.Group) {\n // get base type for device or group\n const defaultType =\n context.context === ViewContext.Device\n ? ContextDashboardType.Device\n : ContextDashboardType.Group;\n dashboardType = dashboardMO.c8y_Dashboard.deviceType\n ? ContextDashboardType.Type\n : defaultType;\n\n // clear fragments from other asset if current asset is not origin of this dashboard\n this.clearRedundantFragment(dashboardMO, defaultType, fragments);\n\n // add base fragment for particular asset\n const deviceOrGroupFragmentKey = this.createFragmentKey(defaultType, id);\n fragments[deviceOrGroupFragmentKey] = {};\n\n // add or clear type fragment\n if (dashboardMO.c8y_Dashboard.deviceType || isEdit) {\n const typeFragmentKey = this.createFragmentKey(\n ContextDashboardType.Type,\n dashboardMO.c8y_Dashboard.deviceTypeValue\n );\n fragments[typeFragmentKey] = dashboardMO.c8y_Dashboard.deviceType ? {} : null;\n }\n }\n\n return [dashboardType, fragments];\n }\n /**\n * Clears fragments that originates from other managed object.\n * E.g. typed dashboard is created for device A of type c8y_MQTTDevice and id 1, so it gets fragments object\n * ```ts\n * {\n * c8y_Dashboard!device!1: {},\n * c8y_Dashboard!type!c8y_MQTTDevice: {}\n * }\n *```\n * then, on device B of type c8y_MQTTDevice and id 2, which also has access to this dashboard, deviceType is set to\n * false, so dashboard is not typed dashboard anymore and now belongs to device B, therefore fragments should look like\n * ```ts\n * {\n * c8y_Dashboard!device!1: null, // this value is cleared because dashboard is doesn't belong to device A anymore\n * c8y_Dashboard!device!2: {}, // assign dashboard to device B\n * c8y_Dashboard!type!c8y_MQTTDevice: null // this value is cleared in getDashboardFragments method as it's not typed dashboard anymore\n * }\n * ```\n *\n * @param dashboardMO - Dashboard managed object.\n * @param type - Context dashboard type.\n * @param fragments - Fragments object.\n */\n private clearRedundantFragment(\n dashboardMO: ContextDashboardManagedObject,\n type: ContextDashboardType,\n fragments: Record<string, object>\n ): void {\n Object.keys(dashboardMO)\n .filter(key => key.startsWith(this.createFragmentKey(type, '')))\n .forEach(key => (fragments[key] = null));\n }\n\n /**\n * Used to migrate dashboards from previous 12 columns layout to 24 columns.\n */\n private adjustDashboardFor24Columns<T extends { c8y_Dashboard?: ContextDashboard }>(\n dashboards: T[]\n ): T[];\n private adjustDashboardFor24Columns<T extends { c8y_Dashboard?: ContextDashboard }>(\n dashboards: T\n ): T;\n private adjustDashboardFor24Columns<T extends { c8y_Dashboard?: ContextDashboard }>(\n dashboards: T | T[]\n ): T | T[] {\n if (Array.isArray(dashboards)) {\n return dashboards.map(dashboard => this.adjustDashboardFor24Columns(dashboard));\n }\n // if `columns` attribute exists, dashboard was already adjusted.\n if (dashboards.c8y_Dashboard.columns) {\n return dashboards;\n }\n\n dashboards.c8y_Dashboard.columns = 24;\n if (!dashboards.c8y_Dashboard.children) {\n return dashboards;\n }\n\n // Newly created NamedContextDashboards are still created with 12 columns for backwards compatibility.\n // Default widgets might be already configured for 24 columns.\n // If a widget is already configured for more than 12 columns, we should not adjust it.\n const alreadyHasWidgetsConfiguredForMoreThan12Columns = Object.values(\n dashboards.c8y_Dashboard.children\n ).some(widget => widget._x + widget._width > 12);\n if (alreadyHasWidgetsConfiguredForMoreThan12Columns) {\n return dashboards;\n }\n\n // we need to multiply both _width and _x attributes with 2 to migrate from 12 to 24 columns.\n Object.values(dashboards.c8y_Dashboard.children).forEach(widget => {\n if (widget._width) {\n widget._width = widget._width * 2;\n }\n if (widget._x) {\n widget._x = widget._x * 2;\n }\n });\n return dashboards;\n }\n\n private async serializeWidgetConfigs(dashboard: ContextDashboardManagedObject): Promise<void> {\n const children = cloneDeep(dashboard.c8y_Dashboard.children);\n if (!children) {\n return;\n }\n const configs = Object.values(children);\n const details = configs.map(({ componentId, config }) => ({ componentId, config }));\n const results = await this.dynamicComponent.serializeConfigs(details);\n results.forEach((result, index) => {\n Object.entries(result).forEach(([key, value]) => {\n set(details[index].config, key, value);\n });\n });\n dashboard.c8y_Dashboard.children = children;\n }\n\n private createContextDashboardCopy(\n dash: ContextDashboard,\n newContext: Partial<IManagedObject>,\n oldContext: Partial<IManagedObject>\n ): ContextDashboard {\n const children = reduce(\n dash.children,\n (_children, child) => {\n const { id } = child;\n const cfg = child.config;\n const propertiesToCopy = {\n device: device => this.replaceContextInObj(device, newContext, oldContext),\n datapoints: dataPoints =>\n this.replaceContextInDataPoints(dataPoints, newContext, oldContext),\n dataPoints: dataPoints =>\n this.replaceContextInDataPoints(dataPoints, newContext, oldContext),\n datapointsGauge: dataPoints =>\n this.replaceContextInDataPoints(dataPoints, newContext, oldContext),\n datapointsLabels: dataPoints =>\n this.replaceContextInDataPoints(dataPoints, newContext, oldContext)\n };\n\n if (cfg) {\n this.copyProperties(cfg, propertiesToCopy);\n if (cfg.options) {\n this.copyProperties(cfg.options, propertiesToCopy);\n }\n }\n\n _children[id] = cloneDeep(child);\n return _children;\n },\n {}\n );\n\n dash.children = children;\n\n const isTypeDashboard = dash.deviceType && !!dash.deviceTypeValue;\n if (isTypeDashboard) {\n dash.deviceTypeValue = newContext.type;\n }\n return dash;\n }\n\n private copyProperties(obj, propertiesToCopy) {\n forEach(propertiesToCopy, (copyFn, property) => {\n if (obj[property]) {\n obj[property] = copyFn(obj[property]);\n }\n });\n }\n\n private replaceContextInDataPoints(\n dataPoints,\n newContext: Partial<IManagedObject>,\n oldContext: Partial<IManagedObject>\n ) {\n dataPoints.forEach(dp => {\n dp.__target = this.replaceContextInObj(dp.__target, newContext, oldContext);\n });\n return dataPoints;\n }\n\n private replaceContextInObj(\n obj: Partial<IManagedObject>,\n newContext: Partial<IManagedObject>,\n oldContext: Partial<IManagedObject>\n ) {\n if (obj && obj.id === oldContext.id) {\n Object.assign(obj, pick(newContext, ['id', 'name']));\n }\n return obj;\n }\n\n private getTabs$(\n mo: ContextDashboardManagedObject,\n dashboardType: ContextDashboardType[],\n context?: ContextData\n ) {\n const dashboards = this.getContextDashboards(mo, dashboardType);\n\n return this.getContextDashboards$(dashboards).pipe(\n mergeMap(dashboard => this.verifyDashboardAvailability$(dashboard)),\n // Due to MTM-62321 named context dashboards included fragments for device and groups.\n // therefore some device-info dashboards (from DM app) might occur in cockpit on device level.\n // We need to filter those out..\n filter(([dashboard]) => {\n // list all identifiers of the dashboard (name, device, group, type)\n const dashboardIdentifiers = Object.keys(dashboard)\n .filter(key => key.startsWith(`${this.FRAGMENT_NAME}${this.INDEX_SPLIT}`))\n .map(key => key.split(this.INDEX_SPLIT)[1]);\n // if dashboard is not named, it's safe to include it\n if (!dashboardIdentifiers.includes(ContextDashboardType.Named)) {\n return true;\n }\n // if dashboard is named, but also has a context identifier, we skip it\n if (\n dashboardIdentifiers.includes(ContextDashboardType.Device) ||\n dashboardIdentifiers.includes(ContextDashboardType.Group)\n ) {\n return false;\n }\n\n // all others are good..\n return true;\n }),\n mergeMap(([dashboard]) => this.removeDashboardMoProperty(dashboard)),\n tap(dashboard => this.cacheDashboard(dashboard)),\n map(dashboard => this.createDashboardTab(dashboard, context)),\n toArray()\n );\n }\n\n private verifyDashboardAvailability$(dashboard: ContextDashboardManagedObject) {\n const globalRolesIds = dashboard?.c8y_Dashboard?.globalRolesIds;\n const canEdit = from(\n this.permissions.canEdit(this.INVENTORY_ROLES, dashboard, { skipRequestCheck: true })\n );\n const hasAnyGlobalRole =\n !globalRolesIds || globalRolesIds === ALL_GLOBAL_ROLES_SELECTED\n ? of(true)\n : of(this.permissions.hasAnyGlobalRole(globalRolesIds));\n\n return combineLatest([of(dashboard), canEdit, hasAnyGlobalRole]).pipe(\n filter(([, canEdit, hasAnyGlobalRole]) => canEdit || hasAnyGlobalRole)\n );\n }\n\n private getContextDashboards$(request: Promise<IResultList<IManagedObject>>) {\n return from(request).pipe(\n mergeMap(response =>\n this.adjustDashboardFor24Columns(response.data as ContextDashboardManagedObject[])\n )\n );\n }\n\n /**\n * Cleans already corrupted dashboards from dashboardMo property.\n * Added to fix dashboards on the cloud instance (eu-latest).\n * @deprecated This is going to be removed after 1007.7.0.\n */\n private async removeDashboardMoProperty(\n dashboard: ContextDashboardManagedObject\n ): Promise<ContextDashboardManagedObject> {\n const dashboardCopy = cloneDeep(dashboard);\n const children = get(dashboardCopy, 'c8y_Dashboard.children');\n let updateDashboard = false;\n\n forEach(children, child => {\n if (get(child, 'componentTransformConfigWithContext')) {\n delete child.componentTransformConfigWithContext;\n updateDashboard = true;\n }\n if (get(child, 'config.dashboardMo')) {\n delete child.config.dashboardMo;\n updateDashboard = true;\n }\n });\n\n if (updateDashboard) {\n await this.update(dashboardCopy);\n }\n return dashboardCopy;\n }\n\n private cacheDashboard(dashboard: ContextDashboardManagedObject) {\n this.cache.set(dashboard.id, dashboard);\n }\n\n private createDashboardTab(dashboard: ContextDashboardManagedObject, context?: ContextData) {\n const { c8y_Dashboard: _dashboard, id } = dashboard;\n return {\n icon: _dashboard.icon,\n path: `${this.DASHBOARD_ROUTE_PATH}/${id}`,\n label: _dashboard.name,\n priority: _dashboard.priority,\n hide: this.isReport(dashboard),\n badge:\n _dashboard.deviceType && this.shouldAllowToSetDashboardType(dashboard, context)\n ? gettext('Dashboard template')\n : null,\n tooltipText: _dashboard.description || gettext('Dashboard template')\n } as Tab;\n }\n\n private clean(dashboard) {\n const jsonString = JSON.stringify(dashboard, (key, value) => {\n if (key === '$$hashKey' || key === 'klasses') {\n return undefined;\n }\n\n return value;\n });\n return JSON.parse(jsonString);\n }\n\n private getNamedDashboard(name: string) {\n return this.inventory.list({\n fragmentType: `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}${name}`,\n pageSize: 1\n });\n }\n\n private createDashboardFragment(mo: IManagedObject, type: ContextDashboardType) {\n let value;\n if (mo.c8y_Report) {\n value = `${this.REPORT_PARTIAL_NAME}${mo.id}`;\n } else {\n value = type === ContextDashboardType.Type ? mo.type : mo.id;\n }\n return `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${type}${this.INDEX_SPLIT}${value}`;\n }\n\n private shouldSetGlobal(dashboard: Partial<ContextDashboardManagedObject>, context?) {\n if (\n (!context && this.isNamed(dashboard) && !this.isReport(dashboard)) ||\n this.isDeviceType(dashboard)\n ) {\n return {};\n }\n return null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { AllowTypeDashboard, ContextDashboard } from './context-dashboard.model';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '@c8y/ngx-components';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardDetailService {\n styling = {\n themeClass: 'dashboard-theme-light',\n headerClass: 'panel-title-regular'\n };\n\n readonly DEFAULT_DASHBOARD_MARGIN = 12;\n readonly DEFAULT_DASHBOARD_ICON = 'th';\n readonly DEFAULT_DASHBOARD_PRIORITY = 5000;\n\n constructor(\n private fb: FormBuilder,\n private translateService: TranslateService\n ) {}\n /**\n * Creates dashboard details form divided into two groups- general settings and appearance settings.\n * @param dashboard Context dashboard object\n * @param isReport True if its report dashboard\n * @param allowTypeDashboard Allow to make dashboard type dashboard\n * @returns Dashboard details form\n */\n initForm(\n dashboard: ContextDashboard,\n isReport: boolean,\n allowTypeDashboard: AllowTypeDashboard\n ): FormGroup {\n return this.fb.group({\n generalSettingsForm: this.initGeneralSettingsForm(dashboard, isReport, allowTypeDashboard),\n appearanceSettingsForm: this.initAppearanceSettingsForm(dashboard)\n });\n }\n /**\n * Creates form group for general settings of dashboard.\n * @param dashboard Context dashboard object\n * @param isReport True if its report dashboard\n * @param deviceTypeValue Value used for typed dashboard\n * @returns Dashboard general settings form\n */\n initGeneralSettingsForm(\n dashboard: ContextDashboard,\n isReport: boolean,\n allowTypeDashboard: AllowTypeDashboard\n ): FormGroup {\n const globalRolesIdsValue = !dashboard?.globalRolesIds\n ? null\n : Array.isArray(dashboard.globalRolesIds)\n ? [...dashboard.globalRolesIds]\n : dashboard.globalRolesIds;\n return this.fb.group({\n icon: [dashboard?.icon || this.DEFAULT_DASHBOARD_ICON, [Validators.minLength(1)]],\n priority: [\n dashboard?.priority || this.DEFAULT_DASHBOARD_PRIORITY,\n [Validators.min(-10000), Validators.max(10000), Validators.required]\n ],\n name: [\n dashboard?.name ||\n (isReport\n ? this.translateService.instant(gettext('Report'))\n : this.translateService.instant(gettext('Dashboard'))),\n [Validators.required, Validators.maxLength(512)]\n ],\n description: [dashboard?.description || null, [Validators.maxLength(1_000)]],\n globalRolesIds: [globalRolesIdsValue],\n c8y_IsNavigatorNode: [!!dashboard?.c8y_IsNavigatorNode],\n ...(allowTypeDashboard !== 'disallow' && {\n deviceType: [\n {\n value: dashboard?.deviceType ?? false,\n disabled: allowTypeDashboard === 'allow_if_type_filled'\n }\n ]\n })\n });\n }\n /**\n * Creates form group for appearance settings of dashboard.\n * @param dashboard Context dashboard object\n * @returns Dashboard appearance settings form\n */\n initAppearanceSettingsForm(dashboard: ContextDashboard): FormGroup {\n return this.fb.group({\n widgetMargin: [\n dashboard?.widgetMargin || this.DEFAULT_DASHBOARD_MARGIN,\n [Validators.min(0), Validators.max(50)]\n ],\n translateWidgetTitle: [!!dashboard?.translateWidgetTitle],\n classes: [dashboard?.classes || { [this.styling.themeClass]: true }],\n widgetClasses: [dashboard?.widgetClasses || { [this.styling.headerClass]: true }]\n });\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IUserGroup, UserGroupService } from '@c8y/client';\nimport { GainsightService, Item, Permissions } from '@c8y/ngx-components';\nimport {\n DashboardGlobalRoles,\n ALL_GLOBAL_ROLES_SELECTED,\n PRODUCT_EXPERIENCE\n} from './context-dashboard.model';\n\n@Component({\n selector: 'c8y-dashboard-availability',\n templateUrl: './dashboard-availability.component.html'\n})\nexport class DashboardAvailabilityComponent implements OnInit {\n /**\n * Ids of global roles assigned to the dashboard or a string \"all\" indicating the selection of all global roles.\n * The value undefined is treated as equivalent to 'all'.\n */\n @Input()\n get globalRolesIds(): DashboardGlobalRoles {\n return this._globalRolesIds;\n }\n set globalRolesIds(ids: DashboardGlobalRoles) {\n if (!ids || ids === ALL_GLOBAL_ROLES_SELECTED) {\n this._globalRolesIds = ALL_GLOBAL_ROLES_SELECTED;\n return;\n }\n this._globalRolesIds = [...ids];\n }\n @Output() globalRolesIdsChange = new EventEmitter<DashboardGlobalRoles>();\n globalRolesItems: Item[] = [];\n globalRolesItemsSelected: Item[] = [];\n selectHidden = false;\n private globalRoles: IUserGroup[] = [];\n private PAGE_SIZE = 100;\n private _globalRolesIds: DashboardGlobalRoles;\n\n constructor(\n private userGroupService: UserGroupService,\n private gainsightService: GainsightService,\n private permissions: Permissions\n ) {}\n\n async ngOnInit() {\n if (this.permissions.hasRole(Permissions.ROLE_USER_MANAGEMENT_READ)) {\n this.globalRoles = await this.getGlobalRoles();\n this.globalRolesItems = this.mapGlobalRolesToItems();\n this.globalRolesItemsSelected = this.getSelectedGlobalRolesItems();\n } else {\n this.selectHidden = true;\n }\n }\n\n onSelected(items: Item[]) {\n if (!items || !Array.isArray(items)) {\n return;\n }\n\n const allItemsSelected = items.length === this.globalRolesItems.length;\n this.globalRolesItemsSelected = items;\n\n if (allItemsSelected) {\n this.globalRolesIdsChange.emit(ALL_GLOBAL_ROLES_SELECTED);\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_AVAILABILITY,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.APPLY_GLOBAL_ROLES_CHANGES,\n globalRoles: ALL_GLOBAL_ROLES_SELECTED\n });\n } else {\n const selectedGlobalRolesIds = items.map(i => i.id);\n this.globalRolesIdsChange.emit([...selectedGlobalRolesIds]);\n\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_AVAILABILITY,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.APPLY_GLOBAL_ROLES_CHANGES,\n globalRoles: selectedGlobalRolesIds?.sort()?.join()\n });\n }\n }\n\n private async getGlobalRoles() {\n return (await this.userGroupService.list({ pageSize: this.PAGE_SIZE })).data;\n }\n\n private mapGlobalRolesToItems(): Item[] {\n return this.globalRoles.map(({ name, id }) => ({\n name,\n id\n }));\n }\n\n private getSelectedGlobalRolesItems(): Item[] {\n if (!this.globalRolesIds || this.globalRolesIds === ALL_GLOBAL_ROLES_SELECTED) {\n return this.globalRolesItems;\n }\n return this.globalRolesIds\n .map(globalRoleId => this.globalRolesItems.find(gR => gR.id === globalRoleId))\n .filter(Boolean);\n }\n}\n","<fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Availability`of dashboard based on permissions`' | translate }}</legend>\n <c8y-form-group>\n <label for=\"availability\">\n <span\n class=\"m-r-4\"\n id=\"availability\"\n >\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <c8y-select-legacy\n *ngIf=\"!selectHidden\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select-legacy>\n <p\n class=\"form-control-static\"\n *ngIf=\"selectHidden\"\n >\n {{ \"You don't have permission to change global roles.\" | translate }}\n </p>\n </c8y-form-group>\n</fieldset>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { InventoryService } from '@c8y/client';\nimport { ContextDashboardManagedObject } from '../context-dashboard.model';\nimport { AlertService } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-type-dashboard-info',\n templateUrl: './type-dashboard-info.component.html'\n})\nexport class TypeDashboardInfoComponent implements OnInit {\n @Input() deviceTypeValue: string;\n @Input() displayDeviceTypeValue: string;\n @Input() context: ContextDashboardManagedObject;\n deviceTypeInstancesCount: number;\n @Input() asyncRenderSuccess: () => void;\n @Input() asyncRenderFail: () => void;\n\n constructor(\n private inventory: InventoryService,\n private alert: AlertService\n ) {}\n\n async ngOnInit() {\n await this.updateDeviceTypeCount();\n }\n\n private async updateDeviceTypeCount(): Promise<void> {\n try {\n const count = await this.inventory.count({\n type: this.deviceTypeValue || this.context.c8y_Dashboard.deviceTypeValue\n });\n this.deviceTypeInstancesCount = count.data;\n this.asyncRenderSuccess?.();\n } catch (error) {\n this.alert.addServerFailure(error);\n this.asyncRenderFail?.();\n }\n }\n}\n","<ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Target asset model' | translate }}</label>\n <span class=\"m-l-auto\">\n <span class=\"label label-info\">\n {{ displayDeviceTypeValue || context.c8y_Dashboard.deviceTypeValue }}\n </span>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Dashboard instances' | translate }}</label>\n <span class=\"m-l-auto\">{{ deviceTypeInstancesCount }}</span>\n </li>\n <ng-container *ngIf=\"context?.c8y_Dashboard\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Created' | translate }}</label>\n <span class=\"m-l-auto\">\n {{ context.creationTime | c8yDate }} {{ 'by`user`' | translate }} {{ context.owner }}\n </span>\n </li>\n <li\n class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\"\n *ngIf=\"context?.c8y_DashboardHistory?.length\"\n >\n <label class=\"small m-b-0 m-r-8\">{{ 'Last modified' | translate }}</label>\n <span class=\"m-l-auto\">\n {{ context.c8y_DashboardHistory[0].created | c8yDate }} {{ 'by`user`' | translate }}\n {{ context.c8y_DashboardHistory[0].author }}\n </span>\n </li>\n </ng-container>\n</ul>\n","import { Component, EventEmitter, forwardRef, Input, OnInit, Output } from '@angular/core';\nimport { gettext, InterAppService, SupportedApps, SupportedAppKey } from '@c8y/ngx-components';\nimport { IApplication, InventoryService } from '@c8y/client';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { AllowTypeDashboard, ContextDashboardManagedObject } from '../context-dashboard.model';\nimport { Observable } from 'rxjs';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'c8y-typed-dashboard-settings',\n templateUrl: './typed-dashboard-settings.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TypedDashboardSettingsComponent),\n multi: true\n }\n ]\n})\nexport class TypedDashboardSettingsComponent implements ControlValueAccessor, OnInit {\n value: boolean;\n touched = false;\n disabled = false;\n\n @Input() deviceTypeValue: string;\n @Input() displayDeviceTypeValue: string;\n @Input() formInvalid: boolean;\n @Input() mo: ContextDashboardManagedObject;\n @Input() isDevice: boolean;\n @Input() allowTypeDashboard: AllowTypeDashboard;\n @Output() onDuplicateWithoutType = new EventEmitter<void>();\n typedDashboardStatus: string;\n infoText: string;\n deviceTypeInstancesCount: number;\n showSourceNavigationLink$: Observable<boolean>;\n userDeviceManagementApp$: Observable<IApplication>;\n context: any;\n deviceManagementAppKey: SupportedAppKey = SupportedApps.devicemanagement;\n deviceManagementLinkTitle = gettext('Device Info page in {{ deviceManagementAppName }}');\n\n constructor(\n private inventory: InventoryService,\n private interAppService: InterAppService,\n private route: ActivatedRoute\n ) {}\n\n async ngOnInit() {\n this.userDeviceManagementApp$ = this.interAppService.getApp$(this.deviceManagementAppKey);\n this.context = this.route.parent.snapshot.data.contextData;\n this.showSourceNavigationLink$ = this.interAppService.shouldShowAppLink$(\n this.deviceManagementAppKey\n );\n }\n\n async goToDeviceView(): Promise<void> {\n await this.interAppService.navigateToApp(\n this.deviceManagementAppKey,\n `#/device/${this.context.id}/device-info`\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onChange = _ => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onTouched = () => {};\n\n writeValue(value: boolean): void {\n this.value = value;\n this.updateTexts();\n if (value) {\n this.updateDeviceTypeCount();\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n async toggle(): Promise<void> {\n this.value = !this.value;\n this.onChange(this.value);\n if (this.value && this.deviceTypeInstancesCount == null) {\n this.setDisabledState(true);\n await this.updateDeviceTypeCount();\n }\n this.updateTexts();\n this.setDisabledState(false);\n }\n\n private updateTexts(): void {\n this.typedDashboardStatus = this.value\n ? gettext('Enabled`typed dashboard`')\n : gettext('Disabled`typed dashboard`');\n\n if (this.allowTypeDashboard === 'allow_if_type_filled') {\n this.infoText = gettext(\n `<p class=\"p-b-8\">Enabling this option uses the layout and configuration of this dashboard to create dashboard instances for all devices based on the device type.</p>\n <p class=\"p-b-16\">The current device doesn't have a device type assigned to it. Assign a device type to the device via the \"Asset properties\" widget in the <strong>Info</strong> tab of the device.</p>`\n );\n return;\n }\n\n if (this.value) {\n if (this.isDevice) {\n this.infoText = gettext(\n `<p class=\"p-b-8\">\n The layout and configuration of this dashboard is used by all devices based on device type <span class=\"tag tag--info text-12\">{{ displayDeviceTypeValue }}</span>.\n </p>\n <p class=\"p-b-16\">\n Disabling this option removes it from all devices based on the same type and makes it available only for the current instance.\n </p>`\n );\n } else {\n this.infoText = gettext(\n `<p class=\"p-b-8\">\n The layout and configuration of this dashboard is used by all assets based on asset model <span class=\"tag tag--info text-12\">{{ displayDeviceTypeValue }}</span>.\n </p>\n <p class=\"p-b-16\">\n Disabling this option removes it from all assets based on the same model and makes it available only for the current instance.\n </p>`\n );\n }\n } else {\n if (this.isDevice) {\n this.infoText = gettext(\n `<p>Enabling this option uses the layout and configuration of this dashboard to create dashboard instances for all devices based on the type <span class=\"tag tag--info text-12\">{{ displayDeviceTypeValue }}</span>.</p>`\n );\n } else {\n this.infoText = gettext(\n `<p>Enabling this option uses the layout and configuration of this dashboard to create dashboard instances for all assets based on the model <span class=\"tag tag--info text-12\">{{ displayDeviceTypeValue }}</span>.</p>`\n );\n }\n }\n }\n\n private async updateDeviceTypeCount(): Promise<void> {\n const count = await this.inventory.count({\n type: this.deviceTypeValue\n });\n this.deviceTypeInstancesCount = count.data;\n }\n}\n","<fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Dashboard template' | translate }}</legend>\n <div class=\"d-flex p-b-16 gap-16\">\n <label class=\"c8y-switch flex-no-shrink\">\n <input\n type=\"checkbox\"\n [checked]=\"value\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n />\n <span></span>\n <span>{{ typedDashboardStatus | translate }}</span>\n </label>\n <div class=\"flex-grow d-flex d-col\">\n <div\n class=\"flex-grow\"\n [innerHtml]=\"infoText | translate: { displayDeviceTypeValue: displayDeviceTypeValue }\"\n ></div>\n <button\n class=\"btn-link p-0 m-r-auto\"\n type=\"button\"\n *ngIf=\"allowTypeDashboard === 'allow_if_type_filled' && showSourceNavigationLink$ | async\"\n (click)=\"goToDeviceView()\"\n >\n {{\n deviceManagementLinkTitle\n | translate\n : {\n deviceManagementAppName:\n userDeviceManagementApp$ | async | humanizeAppName | async\n }\n }}\n <i c8yIcon=\"external-link\"></i>\n </button>\n </div>\n </div>\n\n <c8y-type-dashboard-info\n *ngIf=\"allowTypeDashboard === 'allow'\"\n [context]=\"mo\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n ></c8y-type-dashboard-info>\n\n <div\n class=\"p-t-8 p-b-16\"\n *ngIf=\"mo?.c8y_Dashboard && value\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n type=\"button\"\n (click)=\"onDuplicateWithoutType.emit()\"\n [disabled]=\"formInvalid\"\n >\n {{ 'Duplicate as regular dashboard' | translate }}\n </button>\n </div>\n</fieldset>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport {\n AllowTypeDashboard,\n ContextDashboard,\n ContextDashboardManagedObject,\n DashboardGlobalRoles\n} from '../context-dashboard.model';\nimport { gettext, NavigatorNode, NavigatorService } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\nimport { DashboardDetailService } from '../dashboard-detail.service';\n\n@Component({\n selector: 'c8y-dashboard-general-settings',\n templateUrl: './dashboard-general-settings.component.html'\n})\nexport class DashboardGeneralSettingsComponent {\n @Input() isReport: boolean;\n @Input() isNamedDashboard: boolean;\n @Input() hideAvailability: boolean;\n @Input() dashboard: ContextDashboard;\n @Input() generalSettingsForm: ReturnType<DashboardDetailService['initGeneralSettingsForm']>;\n @Input() deviceTypeValue: string;\n @Input() displayDeviceTypeValue: string;\n @Input() allowTypeDashboard: AllowTypeDashboard;\n @Input() isDevice: boolean;\n @Input() mo: ContextDashboardManagedObject;\n @Output() onDuplicateWithoutType = new EventEmitter<void>();\n dashboardName: string;\n navigatorNodes$: Observable<NavigatorNode[]>;\n globalRolesIds: DashboardGlobalRoles;\n readonly priorityExampleLabel = gettext('e.g. {{ example }}');\n readonly positionInTabsExampleLabel = gettext('Position in tabs (10000 first, -10000 last)');\n constructor(private navigatorService: NavigatorService) {}\n\n ngOnInit() {\n this.navigatorNodes$ = this.navigatorService.items$;\n this.globalRolesIds = this.dashboard.globalRolesIds;\n }\n\n changeGlobalRoleIds() {\n this.generalSettingsForm.patchValue({ globalRolesIds: this.globalRolesIds });\n this.generalSettingsForm.markAsDirty();\n }\n}\n","<div\n class=\"row\"\n [formGroup]=\"generalSettingsForm\"\n>\n <div\n class=\"col-xs-12 p-b-24\"\n [ngClass]=\"{ 'col-md-6': !isReport, 'col-md-8': isReport }\"\n *ngIf=\"!isNamedDashboard || isReport\"\n >\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg m-b-24\">\n <legend>{{ 'Navigation' | translate }}</legend>\n <div class=\"d-flex gap-16\">\n <c8y-form-group>\n <label>{{ 'Icon' | translate }}</label>\n <c8y-icon-selector-wrapper\n [iconSize]=\"24\"\n name=\"icon\"\n formControlName=\"icon\"\n ></c8y-icon-selector-wrapper>\n </c8y-form-group>\n <c8y-form-group class=\"flex-grow\">\n <label for=\"menuLabel\">\n {{ 'Menu label' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Menu label to display in submenu when dashboard is attached' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"menuLabel\"\n placeholder=\"{{ namePlaceholder | translate }}\"\n name=\"name\"\n type=\"text\"\n formControlName=\"name\"\n />\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"description\">{{ 'Description ' | translate }}</label>\n <textarea\n class=\"form-control\"\n id=\"description\"\n name=\"description\"\n c8y-textarea-autoresize\n formControlName=\"description\"\n ></textarea>\n </c8y-form-group>\n\n <div class=\"row\">\n <div\n class=\"col-lg-7 col-xs-12\"\n *ngIf=\"!isReport\"\n >\n <c8y-form-group>\n <label for=\"position\">\n {{ 'Position in tabs' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ positionInTabsExampleLabel | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"positionNav\"\n placeholder=\"{{ priorityExampleLabel | translate: { example: '500' } }}\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n formControlName=\"priority\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-xs-6\"\n *ngIf=\"isReport\"\n >\n <label translate>Navigator menu item</label>\n <c8y-form-group>\n <label\n class=\"c8y-switch\"\n title=\"{{ 'Show in navigator' | translate }}\"\n >\n <input\n type=\"checkbox\"\n formControlName=\"c8y_IsNavigatorNode\"\n />\n <span></span>\n <span>{{ 'Show in navigator' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-xs-6\"\n *ngIf=\"isReport && generalSettingsForm.value.c8y_IsNavigatorNode\"\n >\n <c8y-form-group>\n <label\n class=\"d-block\"\n for=\"position\"\n >\n {{ 'Position in navigator' | translate }}\n <ng-template #positionInNavPop>\n <span>\n {{ positionInNavigationExampleLabel | translate }} \n {{ 'Existing nodes:' | translate }}\n </span>\n <ul class=\"list-unstyled m-t-16 m-b-0\">\n <li\n class=\"p-t-4 p-b-4\"\n title=\"{{ node.label | translate }}\"\n *ngFor=\"let node of navigatorNodes$ | async\"\n >\n <div class=\"icon-flex fit-w\">\n <i [c8yIcon]=\"node.icon\"></i>\n <span class=\"text-truncate m-l-4 m-r-16 flex-grow\">\n {{ node.label | translate }}\n </span>\n <span class=\"text-medium flex-no-shrink\">{{ node.priority }}</span>\n </div>\n </li>\n </ul>\n </ng-template>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"positionInNavPop\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n placeholder=\"{{ priorityExampleLabel | translate: { example: '500' } }}\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n formControlName=\"priority\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n <c8y-dashboard-availability\n *ngIf=\"\n !!isReport === false &&\n allowTypeDashboard &&\n deviceTypeValue &&\n generalSettingsForm.controls['deviceType'] &&\n !hideAvailability\n \"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"changeGlobalRoleIds()\"\n ></c8y-dashboard-availability>\n </div>\n\n <div class=\"col-xs-12 col-md-6 p-b-24\">\n <c8y-typed-dashboard-settings\n *ngIf=\"allowTypeDashboard !== 'disallow'\"\n formControlName=\"deviceType\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n [formInvalid]=\"generalSettingsForm.invalid\"\n [mo]=\"mo\"\n [isDevice]=\"isDevice\"\n [allowTypeDashboard]=\"allowTypeDashboard\"\n (onDuplicateWithoutType)=\"onDuplicateWithoutType.emit()\"\n ></c8y-typed-dashboard-settings>\n <c8y-dashboard-availability\n *ngIf=\"\n !!isReport === false &&\n (!allowTypeDashboard || !deviceTypeValue || !generalSettingsForm.controls['deviceType']) &&\n !hideAvailability\n \"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"changeGlobalRoleIds()\"\n ></c8y-dashboard-availability>\n </div>\n</div>\n","import { Component, Input, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core';\nimport {\n ContextDashboard,\n DASHBOARD_THEME_CLASSES,\n WIDGET_HEADER_CLASSES\n} from '../context-dashboard.model';\nimport { ContextDashboardService } from '../context-dashboard.service';\nimport { DashboardDetailService } from '../dashboard-detail.service';\n\n@Component({\n selector: 'c8y-dashboard-appearance-settings',\n templateUrl: './dashboard-appearance-settings.component.html'\n})\nexport class DashboardAppearanceSettingsComponent implements OnChanges {\n @Input() dashboard: ContextDashboard;\n @Input() appearanceSettingsForm: ReturnType<DashboardDetailService['initAppearanceSettingsForm']>;\n styling = {\n themeClass: 'dashboard-theme-light',\n headerClass: 'panel-title-regular'\n };\n @Output() previewChanged = new EventEmitter<\n Pick<ContextDashboard, 'classes' | 'widgetClasses'>\n >();\n\n readonly DEFAULT_DASHBOARD_MARGIN = 12;\n\n constructor(private contextDashboardService: ContextDashboardService) {}\n\n ngOnInit() {\n if (this.dashboard) {\n this.setDashboardStyle();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.dashboard) {\n this.dashboard = changes.dashboard.currentValue;\n this.ngOnInit();\n }\n }\n\n changeThemeClass(themeClass: string) {\n this.styling.themeClass = themeClass;\n this.appearanceSettingsForm.patchValue({ classes: { [this.styling.themeClass]: true } });\n this.previewChanged.emit({ classes: { [this.styling.themeClass]: true } });\n this.appearanceSettingsForm.markAsDirty();\n }\n\n changeHeaderClass(headerClass: string) {\n this.styling.headerClass = headerClass;\n this.appearanceSettingsForm.patchValue({ widgetClasses: { [this.styling.headerClass]: true } });\n this.previewChanged.emit({ widgetClasses: { [this.styling.headerClass]: true } });\n this.appearanceSettingsForm.markAsDirty();\n }\n\n private setDashboardStyle() {\n const allClasses = {\n ...this.dashboard.classes,\n ...this.dashboard.widgetClasses\n };\n\n const styles = Object.keys(allClasses).map(c => c.split('-').pop());\n styles.forEach(styleName => {\n this.styling.themeClass = this.contextDashboardService.getStyling(\n DASHBOARD_THEME_CLASSES,\n styleName,\n this.styling.themeClass\n );\n this.styling.headerClass = this.contextDashboardService.getStyling(\n WIDGET_HEADER_CLASSES,\n styleName,\n this.styling.headerClass\n );\n });\n }\n}\n","<div [formGroup]=\"appearanceSettingsForm\">\n <c8y-appearance-settings\n [themeClass]=\"styling.themeClass\"\n [headerClass]=\"styling.headerClass\"\n (themeClassChange)=\"changeThemeClass($event)\"\n (headerClassChange)=\"changeHeaderClass($event)\"\n [dashboardSettings]=\"true\"\n [columns]=\"3\"\n >\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Misc</legend>\n <c8y-form-group>\n <label for=\"margin\">{{ 'Widget margin' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n id=\"margin\"\n placeholder=\"{{ DEFAULT_DASHBOARD_MARGIN }}\"\n name=\"margin\"\n type=\"number\"\n formControlName=\"widgetMargin\"\n />\n <span class=\"input-group-addon\">px</span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Widget titles</label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Translate if possible' | translate }}\"\n >\n <input\n name=\"translateWidgetTitle\"\n type=\"checkbox\"\n formControlName=\"translateWidgetTitle\"\n />\n <span></span>\n <span>{{ 'Translate if possible' | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n </div>\n </c8y-appearance-settings>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport { ContextDashboard } from '../context-dashboard.model';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep } from 'lodash-es';\nimport { ContextDashboardService } from '../context-dashboard.service';\n\n@Component({\n selector: 'c8y-dashboard-version-history',\n templateUrl: './dashboard-version-history.component.html'\n})\nexport class DashboardVersionHistoryComponent {\n @Input() dashboardHistory: ContextDashboard[] = [];\n @Input() isReport: boolean;\n @Output() onRevert: EventEmitter<ContextDashboard> = new EventEmitter();\n dashboardHistoryExtended: (ContextDashboard & { descriptionText?: string })[] = [];\n restoredDashboardMessage = gettext(\n 'Restored dashboard state from {{ restoredStateCreationDate }}'\n );\n versionHistoryLimitMessage = gettext(\n 'Store up to {{ versionHistoryLimit }} dashboard versions. Any additional versions will replace/delete older ones'\n );\n\n constructor(\n private translateService: TranslateService,\n public contextDashboardService: ContextDashboardService\n ) {}\n\n ngOnInit() {\n this.generateDashboardHistoryDescription();\n }\n\n generateDashboardHistoryDescription() {\n for (const dashboard of this.dashboardHistory) {\n const copiedDashboard: ContextDashboard & { descriptionText?: string } = { ...dashboard };\n\n let settingChangesMessage = '';\n let assetModelMessage = '';\n let widgetChanges = '';\n\n if (dashboard.historyDescription.changeType === 'create') {\n copiedDashboard.descriptionText = this.translateService.instant(\n this.isReport ? gettext('Report created.') : gettext('Dashboard created.')\n );\n this.dashboardHistoryExtended.push(copiedDashboard);\n continue;\n }\n if (dashboard.historyDescription.changeType === 'reset') {\n copiedDashboard.descriptionText = this.translateService.instant(gettext('Reset widgets'));\n this.dashboardHistoryExtended.push(copiedDashboard);\n continue;\n }\n\n const isDashboardUpdated = dashboard.historyDescription.dashboardSettingChanges?.length > 0;\n if (isDashboardUpdated) {\n const translatedValuesChanged = dashboard.historyDescription.dashboardSettingChanges\n .map(val => this.translateService.instant(val))\n .join(', ');\n settingChangesMessage = this.translateService.instant(\n this.isReport\n ? gettext('Report updated: {{ values }}.')\n : gettext('Dashboard updated: {{ values }}.'),\n { values: translatedValuesChanged }\n );\n }\n\n const isDeviceDashboard = dashboard.historyDescription.deviceType != null && !this.isReport;\n if (isDeviceDashboard) {\n assetModelMessage = this.translateService.instant(\n dashboard.historyDescription.deviceType\n ? gettext('Dashboard asset model has been enabled.')\n : gettext('Dashboard asset model has been disabled.')\n );\n }\n\n if (dashboard.historyDescription.widgetChanges) {\n for (const change in dashboard.historyDescription.widgetChanges) {\n const widgetList = dashboard.historyDescription.widgetChanges[change];\n if (!widgetList) {\n continue;\n }\n const translatedWidgetList = dashboard.translateWidgetTitle\n ? widgetList.map(widget => this.translateService.instant(widget))\n : widgetList;\n switch (change) {\n case 'added':\n widgetChanges =\n widgetChanges +\n this.translateService.instant(gettext('Added widgets: {{ widgetList }}. '), {\n widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n });\n break;\n case 'removed':\n widgetChanges =\n widgetChanges +\n this.translateService.instant(gettext('Removed widgets: {{ widgetList }}. '), {\n widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n });\n break;\n case 'config':\n widgetChanges =\n widgetChanges +\n this.translateService.instant(gettext('Updated widgets: {{ widgetList }}. '), {\n widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n });\n break;\n case 'arrangement':\n widgetChanges =\n widgetChanges +\n this.translateService.instant(gettext('Rearranged widgets: {{ widgetList }}. '), {\n widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n });\n break;\n default:\n break;\n }\n }\n }\n\n copiedDashboard.descriptionText = `${settingChangesMessage} ${assetModelMessage} ${widgetChanges}`;\n this.dashboardHistoryExtended.push(copiedDashboard);\n }\n }\n\n revertDashboard(dashboard: ContextDashboard): void {\n const newDashboard = cloneDeep(dashboard);\n newDashboard.historyDescription.restored = dashboard.created;\n this.onRevert.emit(newDashboard);\n }\n}\n","<div class=\"bg-component p-t-8 p-b-8 separator-bottom text-center\">\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info\"\n ></i>\n {{\n versionHistoryLimitMessage\n | translate: { versionHistoryLimit: contextDashboardService.VERSION_HISTORY_SIZE_LIMIT }\n }}\n</div>\n<c8y-list-group class=\"p-t-24 p-b-24\">\n <c8y-li-timeline\n *ngFor=\"let dashboard of dashboardHistoryExtended; index as i\"\n [ngClass]=\"{ active: i === 0 }\"\n >\n {{ dashboard.created | date: 'mediumDate' }}\n {{ dashboard.created | date: 'shortTime' }}\n <c8y-li data-cy=\"c8y-dashboard-version-history--history-row\">\n <c8y-li-body>\n <div class=\"d-flex a-i-start\">\n <div class=\"flex-grow\">\n <span\n class=\"text-truncate-wrap\"\n title=\"{{ dashboard.descriptionText }}\"\n data-cy=\"c8y-dashboard-version-history--history-title\"\n >\n {{ dashboard.descriptionText }}\n {{\n dashboard.historyDescription.restored\n ? (restoredDashboardMessage\n | translate\n : {\n restoredStateCreationDate: dashboard.historyDescription.restored | c8yDate\n })\n : ''\n }}\n </span>\n <small\n class=\"text-muted\"\n title=\"{{ 'by`user`' | translate }} {{ dashboard.author }}\"\n *ngIf=\"dashboard.author\"\n >\n <div class=\"icon-flex\">\n <i c8yIcon=\"c8y-user\"></i>\n {{ dashboard.author }}\n </div>\n </small>\n </div>\n\n <span\n class=\"label label-primary m-l-auto\"\n title=\"{{ 'The last saved status of the dashboard' | translate }}\"\n *ngIf=\"i === 0\"\n >\n {{ 'Current`dashboard status`' | translate }}\n </span>\n <span\n class=\"m-l-auto showOnHover\"\n *ngIf=\"dashboardHistoryExtended.length > 1 && i > 0\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Restore the dashboard to this status' | translate }}\"\n type=\"button\"\n (click)=\"revertDashboard(dashboard)\"\n >\n {{ 'Restore' | translate }}\n </button>\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-li-timeline>\n</c8y-list-group>\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n AppStateService,\n ContextData,\n ContextRouteService,\n GainsightService,\n gettext,\n GroupService,\n memoize,\n ModalService,\n Status,\n Tab,\n TabsService\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { clone, cloneDeep, isEqual } from 'lodash-es';\nimport { Observable, Subject } from 'rxjs';\nimport {\n AllowTypeDashboard,\n ContextDashboard,\n ContextDashboardManagedObject,\n DASHBOARD_SETTINGS_CHANGES,\n DashboardDetailsTabId,\n DashboardDetailsTabs,\n DashboardHistoryDescription,\n PRODUCT_EXPERIENCE,\n REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY\n} from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { first } from 'rxjs/operators';\nimport { newDashboardTab } from './new-dashboard.guard';\nimport { DashboardDetailService } from './dashboard-detail.service';\n\n@Component({\n selector: 'c8y-dashboard-detail',\n templateUrl: './dashboard-detail.component.html'\n})\nexport class DashboardDetailComponent implements OnInit, OnChanges, OnDestroy {\n isCollapsed = true;\n currentContext: ContextData;\n currentDashboard: ContextDashboard;\n @Input() isReport: boolean;\n @Input() deviceType: string;\n @Input() context: any;\n @Input() mo: ContextDashboardManagedObject;\n @Input() dashboard: ContextDashboard;\n @Input() isNamedDashboard: boolean;\n @Input() hideAvailability = false;\n deviceTypeValue: string;\n displayDeviceTypeValue: string;\n icons: string[];\n namePlaceholder: string;\n tabs$: Observable<Tab[]>;\n selectedTab: DashboardDetailsTabId = DashboardDetailsTabId.GENERAL;\n dashboardDetailsForm: ReturnType<DashboardDetailService['initForm']>;\n generalSettingsForm: ReturnType<DashboardDetailService['initGeneralSettingsForm']>;\n appearanceSettingsForm: ReturnType<DashboardDetailService['initAppearanceSettingsForm']>;\n allowTypeDashboard: AllowTypeDashboard;\n isEdit: boolean;\n @Output() dashboardSaved = new EventEmitter<ContextDashboard>();\n @Output() previewChanged = new EventEmitter<any>();\n private destroy$: Subject<void> = new Subject();\n\n readonly TABS_OUTLET_NAME = 'dashboardTabs';\n readonly TABS: DashboardDetailsTabs = {\n general: {\n featureId: DashboardDetailsTabId.GENERAL,\n priority: 30,\n label: gettext('General')\n },\n appearance: {\n featureId: DashboardDetailsTabId.APPEARANCE,\n priority: 20,\n label: gettext('Appearance')\n },\n versionHistory: {\n featureId: DashboardDetailsTabId.VERSIONHISTORY,\n priority: 10,\n label: gettext('Version history')\n }\n };\n\n constructor(\n private contextDashboardService: ContextDashboardService,\n private translateService: TranslateService,\n private contextRoute: ContextRouteService,\n private activatedRoute: ActivatedRoute,\n private tabsService: TabsService,\n private router: Router,\n private inventory: InventoryService,\n private route: ActivatedRoute,\n private dashboardDetailService: DashboardDetailService,\n private appState: AppStateService,\n private groupService: GroupService,\n private modal: ModalService,\n private gainsightService: GainsightService\n ) {}\n\n ngOnInit() {\n this.tabs$ = this.tabsService.items$;\n this.currentContext = this.contextRoute.getContextData(this.activatedRoute);\n this.deviceTypeValue = this.context?.type;\n this.displayDeviceTypeValue =\n this.context &&\n this.groupService.isGroup(this.context) &&\n !this.groupService.isAsset(this.context)\n ? this.translateService.instant(gettext('Group'))\n : this.deviceTypeValue;\n\n this.updateAllowTypeDashboard();\n this.initForm();\n }\n\n ngOnChanges(): void {\n this.updateAllowTypeDashboard();\n }\n\n ngAfterContentInit(): void {\n if (!this.isEdit) {\n this.initializeConfiguration();\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async save() {\n const oldDashboard = cloneDeep(this.dashboard);\n this.dashboard = {\n ...this.dashboard,\n ...this.generalSettingsForm.value,\n ...this.appearanceSettingsForm.value\n };\n const dashboardSettingChanges: string[] = Object.keys(this.dashboard).filter(key => {\n if (key === 'c8y_IsNavigatorNode') {\n return !!oldDashboard[key] !== !!this.dashboard[key];\n }\n return !isEqual(oldDashboard[key], this.dashboard[key]);\n });\n\n this.dashboard.author = this.appState.currentUser.value.userName;\n this.dashboard.c8y_IsNavigatorNode = this.dashboard.c8y_IsNavigatorNode\n ? {}\n : this.currentDashboard\n ? null\n : undefined;\n\n this.dashboard.deviceTypeValue ??= this.deviceTypeValue;\n this.dashboard.historyDescription =\n this.updateDashboardHistoryDescription(dashboardSettingChanges);\n if (!this.isEdit && !this.isReport) {\n await this.createNewDashboard();\n } else if (!this.isEdit && this.isReport) {\n await this.createNewReport();\n } else {\n await this.updateDashboard();\n this.mo.c8y_DashboardHistory = [\n this.dashboard,\n ...(this.mo?.c8y_DashboardHistory ? this.mo.c8y_DashboardHistory : [])\n ];\n }\n }\n\n updateDashboardHistoryDescription(dashboardChanges: string[]): DashboardHistoryDescription {\n return {\n changeType: this.isEdit ? 'update' : 'create',\n dashboardSettingChanges: dashboardChanges\n .filter(value => value !== 'deviceType')\n .map(value => DASHBOARD_SETTINGS_CHANGES[value] || value),\n deviceType: dashboardChanges.find(value => value === 'deviceType')\n ? this.dashboard.deviceType\n : undefined\n };\n }\n\n selectTab(selectedTab: DashboardDetailsTabId) {\n this.selectedTab = selectedTab;\n this.tabsService.refresh();\n }\n\n async cancel() {\n if (!this.isEdit && !this.isReport) {\n // dashboard creation in it's own tab- confirm and cleanup triggered in canDeactivate during routing\n this.tabsService.items$.pipe(first()).subscribe((tabs: Tab[]) => {\n const tab = tabs.find(t => t.featureId !== newDashboardTab.featureId);\n this.router.navigateByUrl(tab.path, { replaceUrl: true });\n });\n return;\n } else if (!this.isEdit && this.isReport) {\n this.router.navigate(['reports']);\n return;\n } else if (this.dashboardDetailsForm.dirty && !(await this.confirmClosing())) {\n return;\n }\n this.cleanupAfterDetailsClose();\n }\n\n async canDeactivate(omitConfirm = false): Promise<boolean> {\n let canDeactivate: boolean;\n if (this.isCollapsed || !this.dashboardDetailsForm.dirty) {\n canDeactivate = true;\n } else {\n if (omitConfirm) {\n canDeactivate = false;\n } else {\n canDeactivate = await this.confirmClosing();\n }\n }\n if (canDeactivate) {\n this.cleanupAfterDetailsClose();\n }\n return canDeactivate;\n }\n\n show(isEdit: boolean) {\n this.isEdit = isEdit;\n if (this.isEdit) {\n this.edit();\n }\n this.initForm();\n this.isCollapsed = false;\n }\n\n async revertDashboard(dashboard: ContextDashboard) {\n this.dashboard = dashboard;\n this.dashboard.c8y_IsNavigatorNode = this.dashboard.c8y_IsNavigatorNode\n ? {}\n : this.currentDashboard\n ? null\n : undefined;\n await this.updateDashboard();\n }\n\n async duplicateWithoutType(): Promise<void> {\n const newDashboardName = this.translateService.instant(gettext('{{ dashboardName }} (copy)'), {\n dashboardName: this.generalSettingsForm.value.name\n });\n this.generalSettingsForm.patchValue({\n deviceType: false,\n name: newDashboardName\n });\n // setting edition to false so new dashboard can be created as copy of current one\n this.isEdit = false;\n await this.save();\n }\n\n private updateAllowTypeDashboard(): void {\n this.allowTypeDashboard = this.contextDashboardService.shouldAllowToSetDashboardType(\n this.mo,\n this.currentContext\n );\n }\n\n private initForm(): void {\n this.dashboardDetailsForm = this.dashboardDetailService.initForm(\n this.dashboard,\n this.isReport,\n this.allowTypeDashboard\n );\n this.generalSettingsForm = this.dashboardDetailsForm.get('generalSettingsForm') as FormGroup;\n this.appearanceSettingsForm = this.dashboardDetailsForm.get(\n 'appearanceSettingsForm'\n ) as FormGroup;\n }\n\n private async confirmClosing(): Promise<boolean> {\n try {\n await this.modal.confirm(\n gettext('Close dashboard details'),\n gettext(\n 'Are you sure you want to close dashboard details? All unsaved changes will be lost.'\n ),\n Status.WARNING,\n {\n ok: gettext('Close'),\n cancel: gettext('Cancel')\n }\n );\n return true;\n } catch (e) {\n return false;\n }\n }\n\n private async createNewDashboard() {\n const mo: ContextDashboardManagedObject = await this.contextDashboardService.create(\n this.dashboard,\n this.currentContext\n );\n\n await this.onCreateGSEvent(mo);\n this.cleanupAfterDetailsClose();\n await this.contextDashboardService.navigateToDashboard(mo);\n }\n\n private async onCreateGSEvent(mo: ContextDashboardManagedObject) {\n const parentName = await this.convertStringToHash(this.context?.name);\n const dashboardName = await this.convertStringToHash(this.dashboard?.name);\n\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.ADD_DASHBOARD,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.CREATE,\n name: dashboardName,\n id: mo.id,\n nameId: `${dashboardName}_${this.mo.id}`,\n parentAssetId: this.context?.id ? this.context.id : 'noContext',\n parentAssetName: this.context?.id ? parentName : 'noContext',\n parentAssetType: this.context?.id ? this.context.type : 'noContext',\n parentAssetNameId: this.context?.id ? `${parentName}_${this.context.id}` : 'noContext',\n parentAssetNameDashboardName: this.context?.id\n ? `${parentName}_${dashboardName}`\n : 'noContext',\n parentAssetIdDashboardId: this.context?.id ? `${this.context.id}_${this.mo.id}` : 'noContext',\n parentAssetNameDashboardId: this.context?.id ? `${parentName}_${this.mo.id}` : 'noContext',\n parentAssetNameIdDashboardNameId: this.context?.id\n ? `${parentName}_${this.context.id}_${dashboardName}_${this.mo.id}`\n : 'noContext',\n dashboardType: mo.c8y_Dashboard.deviceType ? mo.c8y_Dashboard.deviceTypeValue : null,\n context: this.contextDashboardService.getContextForGS(\n this.currentContext.contextData as IManagedObject\n )\n });\n }\n\n @memoize()\n private async convertStringToHash(str: string) {\n if (!str) {\n return null;\n }\n return (await this.gainsightService.shouldSendPiiData())\n ? str\n : await this.gainsightService.hashGroupName(str);\n }\n\n private async createNewReport() {\n try {\n const { name, icon, c8y_IsNavigatorNode, priority, description } = this.dashboard;\n const report = (\n await this.contextDashboardService.createReport({\n name,\n icon,\n c8y_IsNavigatorNode,\n priority,\n description\n } as Partial<IManagedObject>)\n ).data;\n\n await this.contextDashboardService.create(\n this.dashboard,\n undefined,\n `${this.contextDashboardService.REPORT_PARTIAL_NAME}${report.id}`\n );\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.REPORTS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.ADD_REPORT,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.CREATE,\n name: report.name,\n id: report.id,\n context: PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.REPORT\n });\n if (report.c8y_IsNavigatorNode) {\n this.contextDashboardService.addReportNavigatorNode(report);\n }\n this.cleanupAfterDetailsClose();\n await this.router.navigate(['reports', report.id]);\n } catch (ex) {\n // intended empty\n }\n }\n\n private async updateDashboard() {\n try {\n const dashboardMO: ContextDashboardManagedObject = cloneDeep(this.mo);\n const cfg = this.dashboard;\n if (this.isReport) {\n const { name, icon, c8y_IsNavigatorNode, priority, description } = cfg;\n dashboardMO.c8y_Dashboard = cfg;\n await this.updateReport({\n id: this.context.id,\n name,\n icon,\n c8y_IsNavigatorNode,\n priority,\n description\n });\n } else {\n dashboardMO.c8y_Dashboard = cfg;\n }\n\n const updatedDashboardMo = await this.contextDashboardService.update(\n dashboardMO,\n this.currentContext\n );\n this.cleanupAfterDetailsClose();\n\n this.dashboardSaved.emit(updatedDashboardMo);\n } catch (ex) {\n // intended empty\n }\n }\n\n private edit() {\n if (this.isReport) {\n const { name, icon, priority, c8y_IsNavigatorNode, description } = this.context;\n Object.assign(this.dashboard, { name, icon, priority, c8y_IsNavigatorNode, description });\n }\n this.isNamedDashboard = this.contextDashboardService.isNamed(this.mo);\n this.selectedTab =\n this.hideAvailability && this.isNamedDashboard\n ? DashboardDetailsTabId.APPEARANCE\n : DashboardDetailsTabId.GENERAL;\n this.initializeConfiguration();\n }\n\n private initializeConfiguration() {\n const defaultDashboardCfg: Partial<ContextDashboard> = {\n name: this.translateService.instant(this.isReport ? gettext('Report') : gettext('Dashboard')),\n priority: this.isReport\n ? REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY\n : this.dashboardDetailService.DEFAULT_DASHBOARD_PRIORITY,\n icon: this.dashboardDetailService.DEFAULT_DASHBOARD_ICON,\n deviceTypeValue: this.deviceType,\n columns: 24\n };\n\n if (this.dashboard) {\n this.currentDashboard = clone(this.dashboard);\n } else {\n this.dashboard = defaultDashboardCfg;\n this.dashboardDetailsForm.markAsDirty();\n }\n this.namePlaceholder = this.isReport ? gettext('e.g. My report') : gettext('e.g. My dashboard');\n }\n\n private async updateReport(mo: Partial<IManagedObject>) {\n mo.c8y_IsNavigatorNode = mo.c8y_IsNavigatorNode ? {} : null;\n const res = await this.inventory.update(mo);\n this.context = res.data;\n if (this.route.parent) {\n this.route.parent.snapshot.data.contextData = this.context;\n }\n this.contextDashboardService.updateNavigatorItem(res.data);\n }\n\n private cleanupAfterDetailsClose() {\n this.isCollapsed = true;\n if (!this.isEdit) {\n const dashboardContext = this.route.snapshot.data.dashboard;\n // hide New dashboard tab\n const tmpNewDashboardTab = [...this.tabsService.state].find(\n t => t.featureId === newDashboardTab.featureId\n );\n // don't hide the new dashboard tab when clicking on the add dashboard button from another dashboard.\n if (!tmpNewDashboardTab || dashboardContext?.c8y_Dashboard) {\n return;\n }\n // hide tab and make it appear as last one to prevent navigating to it\n tmpNewDashboardTab.hide = true;\n tmpNewDashboardTab.priority = -Infinity;\n this.tabsService.refresh();\n }\n this.previewChanged.emit(this.dashboard);\n }\n}\n","<div\n class=\"collapse c8y-top-drawer\"\n [collapse]=\"isCollapsed\"\n [isAnimated]=\"true\"\n>\n <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n <span class=\"h4\">{{ 'Dashboard settings' | translate }}</span>\n </div>\n\n <div\n class=\"d-flex\"\n [formGroup]=\"dashboardDetailsForm\"\n *ngIf=\"!isCollapsed\"\n >\n <c8y-tabs-outlet\n [tabs]=\"tabs$ | async\"\n [outletName]=\"TABS_OUTLET_NAME\"\n [orientation]=\"'vertical'\"\n class=\"c8y-top-drawer--tabs\"\n ></c8y-tabs-outlet>\n <div class=\"inner-scroll c8y-top-drawer__tabs-container flex-grow p-l-24 p-r-lg-32 p-r-xs-24 p-r-sm-24\">\n <c8y-tab\n *ngIf=\"(!isNamedDashboard && !hideAvailability) || isReport\"\n [label]=\"TABS.general.label\"\n [icon]=\"'imac-settings'\"\n [priority]=\"100\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.general.featureId)\"\n [isActive]=\"selectedTab === TABS.general.featureId\"\n ></c8y-tab>\n <c8y-tab\n [label]=\"TABS.appearance.label\"\n [priority]=\"50\"\n [icon]=\"'web-design'\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.appearance.featureId)\"\n [isActive]=\"selectedTab === TABS.appearance.featureId\"\n ></c8y-tab>\n <c8y-tab\n *ngIf=\"mo?.c8y_DashboardHistory\"\n [label]=\"TABS.versionHistory.label\"\n [icon]=\"'versions'\"\n [priority]=\"10\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.versionHistory.featureId)\"\n [isActive]=\"selectedTab === TABS.versionHistory.featureId\"\n ></c8y-tab>\n <ng-container [ngSwitch]=\"selectedTab\">\n <c8y-dashboard-general-settings\n *ngSwitchCase=\"TABS.general.featureId\"\n [isReport]=\"isReport\"\n [isNamedDashboard]=\"isNamedDashboard\"\n [hideAvailability]=\"hideAvailability\"\n [dashboard]=\"dashboard\"\n [generalSettingsForm]=\"generalSettingsForm\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n [mo]=\"mo\"\n [allowTypeDashboard]=\"allowTypeDashboard\"\n [isDevice]=\"!!context?.c8y_IsDevice\"\n class=\"animated fadeIn\"\n (onDuplicateWithoutType)=\"duplicateWithoutType()\"\n ></c8y-dashboard-general-settings>\n <c8y-dashboard-appearance-settings\n *ngSwitchCase=\"TABS.appearance.featureId\"\n [dashboard]=\"dashboard\"\n [appearanceSettingsForm]=\"appearanceSettingsForm\"\n (previewChanged)=\"previewChanged.emit($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-appearance-settings>\n <c8y-dashboard-version-history\n *ngSwitchCase=\"TABS.versionHistory.featureId\"\n [dashboardHistory]=\"mo.c8y_DashboardHistory\"\n [isReport]=\"isReport\"\n (onRevert)=\"revertDashboard($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-version-history>\n </ng-container>\n </div>\n </div>\n\n <div class=\"c8y-top-drawer--footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--cancel-dashboard\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--save-dashboard\"\n (click)=\"save()\"\n [disabled]=\"\n (dashboardDetailsForm?.invalid || dashboardDetailsForm?.pristine) && this.isEdit\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n","import { Injectable, Inject, Optional } from '@angular/core';\nimport { sortBy, cloneDeep, get, omit } from 'lodash-es';\nimport { DynamicComponentService, DynamicComponentDefinition, Widget } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ContextDashboardConfig, CONTEXT_DASHBOARD_CONFIG } from './context-dashboard.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WidgetService {\n widgets: DynamicComponentDefinition[];\n\n constructor(\n private dynamicComponentService: DynamicComponentService,\n private translateService: TranslateService,\n @Optional()\n @Inject(CONTEXT_DASHBOARD_CONFIG)\n public moduleConfig: ContextDashboardConfig | undefined\n ) {\n this.dynamicComponentService.items$.subscribe(widgets => {\n this.widgets = widgets;\n });\n }\n\n async getWidgetDefinition(componentId): Promise<DynamicComponentDefinition> {\n return this.dynamicComponentService.getById(componentId);\n }\n\n getWidgetDefinitions() {\n const translatedComponents = this.widgets.map(cmp => ({\n ...cmp,\n label: this.translateService.instant(cmp.label)\n }));\n\n // cloneDeep and injector lead to a performance issue. We removing the injectors here,\n // as they are not needed, to avoid use of a lot of CPU for cloning.\n const translatedComponentsWithoutInjector = translatedComponents.map(cmp =>\n omit(cmp, 'injector')\n );\n const filterFn: (component: DynamicComponentDefinition) => boolean =\n this.moduleConfig?.widgetFilter ||\n (({ data }) => !(data && data.settings && data.settings.noNewWidgets));\n return cloneDeep(sortBy(translatedComponentsWithoutInjector, 'label').filter(filterFn));\n }\n\n async mapLegacy(widget: Partial<Widget>): Promise<Widget> {\n const cmp = await this.getWidgetDefinition(widget.componentId || widget.name);\n widget = this.mapDisplaySettings(widget, cmp);\n\n if (get(cmp, 'data.settings.upgrade')) {\n widget.widgetComponent = cmp.data.settings.widgetComponent;\n widget.configComponent = cmp.data.settings.configComponent;\n widget.templateUrl = cmp.data.settings.templateUrl;\n widget.configTemplateUrl = cmp.data.settings.configTemplateUrl;\n widget.transformConfigWithContext =\n cmp.data.settings.componentTransformConfigWithContext ||\n cmp.data.settings.transformConfigWithContext ||\n widget.transformConfigWithContext;\n } else {\n delete widget.templateUrl;\n delete widget.configTemplateUrl;\n }\n return widget as Widget;\n }\n\n private mapDisplaySettings(\n widget: Partial<Widget>,\n cmp: DynamicComponentDefinition\n ): Partial<Widget> {\n if (cmp?.data?.displaySettings) {\n widget.config = { displaySettings: cmp.data.displaySettings, ...(widget.config || {}) };\n }\n return widget;\n }\n}\n","import { Input, Component } from '@angular/core';\n\n@Component({\n selector: 'c8y-widget-preview',\n templateUrl: './widget-preview.component.html'\n})\nexport class WidgetPreviewComponent {\n @Input()\n previewClasses: { [key: string]: boolean } = {\n 'dashboard-theme-light': true,\n 'panel-title-regular': true\n };\n\n @Input()\n tab: { name: string; icon: string };\n}\n","<div class=\"legend form-block\" translate>Preview</div>\n<label *ngIf=\"tab\" translate>Tab and layout</label>\n<label *ngIf=\"!tab\" translate>Layout</label>\n<div class=\"dashboard-preview-slot\" [ngClass]=\"previewClasses\">\n <div\n class=\"page-tabs page-tabs-horizontal navigator-open p-absolute overflow-hidden\"\n style=\"left: 0; margin: 0 15px\"\n *ngIf=\"tab\"\n >\n <div class=\"tabContainer hidden-xs\">\n <ul role=\"menu\" class=\"nav nav-tabs nav-tabsc8y\">\n <li role=\"menuitem\" class=\"active\" style=\"left: 16px\">\n <a routerlinkactive=\"\" title=\"{{ tab.name }}\">\n <i class=\"text-primary\" [c8yIcon]=\"tab.icon\"></i>\n <span class=\"txt\">{{ tab.name }}</span>\n </a>\n </li>\n </ul>\n </div>\n <div class=\"visible-xs mobile-tabs\"></div>\n </div>\n <div [ngClass]=\"{ 'm-t-64': !!tab }\">\n <div class=\"card card-dashboard\" style=\"height: 300px\">\n <div class=\"card-header-actions\" style=\"z-index: 8\">\n <div class=\"card-title\">\n <span translate>Widget title</span>\n </div>\n <div class=\"header-actions\">\n <div class=\"optionsBtn dropdown\">\n <button\n type=\"button\"\n title=\"{{ 'Settings' | translate }}\"\n (click)=\"(false)\"\n class=\"btn btn-dot dropdown-toggle c8y-dropdown\"\n aria-haspopup=\"true\"\n >\n <i c8yIcon=\"cog\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"card-inner-scroll p-t-16\">\n <p translate>Widget example content.</p>\n </div>\n </div>\n </div>\n</div>\n","import { Component, OnDestroy, ViewChild } from '@angular/core';\nimport { NgForm } from '@angular/forms';\nimport { DynamicComponentDefinition, Widget, DynamicComponentComponent } from '@c8y/ngx-components';\nimport { AssetSelectionChangeEvent } from '@c8y/ngx-components/assets-navigator';\nimport { clone, cloneDeep, escapeRegExp, get, omit } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { iif, Subject, Subscription, timer } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport {\n ContextDashboardManagedObject,\n WIDGET_CONTENT_CLASSES,\n WIDGET_HEADER_CLASSES,\n ContextWidgetConfig\n} from './context-dashboard.model';\nimport { WidgetService } from './widget.service';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { IManagedObject, InventoryService } from '@c8y/client';\n\n@Component({\n selector: 'c8y-widget-config',\n templateUrl: './widget-config.component.html'\n})\nexport class WidgetConfigComponent implements OnDestroy {\n selectedDevice: IManagedObject;\n mode: 'config' | 'select' | 'style' = 'select';\n searchResult: DynamicComponentDefinition[];\n components: DynamicComponentDefinition[];\n selected: DynamicComponentDefinition;\n searchChange$ = new Subject();\n searchTerm = '';\n context: any;\n componentLabel: string;\n mo: ContextDashboardManagedObject;\n styling = {\n headerClass: 'panel-title-regular',\n contentClass: 'panel-content-light'\n };\n defaultStyling = {\n headerClass: 'panel-title-regular',\n contentClass: 'panel-content-light'\n };\n possibleStyling = { WIDGET_HEADER_CLASSES, WIDGET_CONTENT_CLASSES };\n current: any;\n widgetConfig: ContextWidgetConfig;\n isUpgrade = false;\n widgetHasConfigComponent: boolean;\n\n @ViewChild('config', { static: false })\n dynamicComponent: DynamicComponentComponent;\n\n @ViewChild('configForm', { static: false })\n configForm: NgForm;\n\n get isEdit() {\n return !!this.current;\n }\n\n get isDeviceTypeDashboard(): boolean {\n return !!this.mo.c8y_Dashboard?.deviceType && !!this.mo.c8y_Dashboard?.deviceTypeValue;\n }\n\n result: Promise<Widget> = new Promise((resolve, reject) => {\n this._save = resolve;\n this._cancel = reject;\n });\n\n private searchSub: Subscription;\n private _save: (value: Widget) => void;\n private _cancel: (reason?: any) => void;\n\n constructor(\n private widgetService: WidgetService,\n private modal: BsModalRef,\n private inventory: InventoryService,\n public contextDashboardService: ContextDashboardService\n ) {}\n\n async ngAfterContentInit(): Promise<void> {\n this.components = this.widgetService.getWidgetDefinitions();\n\n if (this.selected) {\n this.current = clone(this.selected);\n this.select(this.selected, this.isEdit ? 'config' : 'select');\n }\n\n this.searchSub = this.searchChange$\n .pipe(\n switchMap((event: KeyboardEvent) => iif(() => event.which !== 13, timer(200), timer(10)))\n )\n .subscribe(() => {\n this.search();\n });\n\n this.setStylings();\n\n if (this.widgetConfig?.device) {\n const { data } = await this.inventory.detail(this.widgetConfig.device.id);\n this.selectedDevice = data;\n }\n }\n\n isSaveDisabled(): boolean {\n return this.configForm?.invalid || this.checkIfDeviceRequired();\n }\n\n checkIfDeviceRequired() {\n return (\n !this.widgetConfig ||\n (!this.widgetConfig.settings.deviceTargetNotRequired &&\n !this.widgetConfig.device &&\n !this.widgetConfig.settings.noDeviceTarget)\n );\n }\n\n selectionChanged(selection?: AssetSelectionChangeEvent) {\n this.widgetConfig.device = selection?.change?.item;\n this.dynamicComponent.emitConfigChange({\n device: this.widgetConfig.device\n });\n }\n\n async save() {\n const hookSuccess = await this.dynamicComponent?.callLifeCycleHooks().toPromise();\n if (!hookSuccess) {\n return;\n }\n\n const { _x, _y, _width, _height } = this.selected.data;\n\n if (\n this.widgetConfig &&\n this.widgetConfig.device &&\n // serializing will be handled by resolver\n !this.selected?.resolve?.device\n ) {\n const { id, name } = this.widgetConfig.device;\n this.widgetConfig.device = { id, name };\n }\n\n const widget = {\n _x,\n _y,\n _width,\n _height,\n config: omit(this.widgetConfig, ['settings', 'displaySettings']),\n title: this.selected.data.title,\n componentId: this.selected.id,\n id: this.isEdit ? this.current.data.id : String(Math.random()).substr(2),\n classes: this.getStyle(),\n ...(!this.isEdit ? this.widgetConfig.settings.widgetDefaults : {})\n } as Widget;\n\n this._save(widget);\n }\n\n select(cmp, mode: 'select' | 'config' = 'config') {\n if (mode === 'config' && this.configForm) {\n const formGroup = this.configForm.control;\n for (const control of Object.keys(formGroup.controls)) {\n formGroup.removeControl(control);\n }\n }\n\n cmp.data = cmp.data || {};\n this.selected = cmp;\n\n this.isUpgrade = !!get(cmp, 'data.settings.upgrade');\n this.contextDashboardService.formDisabled = this.isUpgrade;\n\n if (this.isEdit) {\n const { _x, _y, _width, _height, classes, title } = this.current.data;\n this.selected.data = { ...this.selected.data, _x, _y, _width, _height, classes, title };\n }\n\n /* this.selected.component cannot be checked since it is faulty for widgets like Help and Service, \n but exists for Applications widget and this would cause chaotic behaviour.\n */\n this.widgetHasConfigComponent =\n !!this.selected.loadConfigComponent || mode === 'select' || mode === 'config';\n\n this.widgetConfig = cloneDeep(this.composeWidgetConfig(this.selected, this.context));\n\n this.selected.data.title = this.selected.data.title || cmp.label;\n this.componentLabel = cmp.label;\n this.mode = mode;\n }\n\n search() {\n if (this.searchTerm.length > 0) {\n this.searchResult = this.components.filter(cmp =>\n new RegExp(escapeRegExp(this.searchTerm.trim()), 'i').test(cmp.label)\n );\n } else {\n this.resetSearch();\n }\n }\n\n resetSearch() {\n this.searchTerm = '';\n this.searchResult = undefined;\n }\n\n changeMode(mode: 'config' | 'select' | 'style') {\n this.mode = mode;\n }\n\n close() {\n this._cancel();\n this.modal.hide();\n }\n\n getStyle(isPreview = false) {\n const cssClasses = {};\n if (isPreview || !this.isDashboardDefaultStyle(this.styling.headerClass)) {\n cssClasses[this.styling.headerClass] = true;\n }\n\n if (isPreview || !this.isDashboardDefaultStyle(this.styling.contentClass)) {\n cssClasses[this.styling.contentClass] = true;\n }\n\n if (isPreview) {\n cssClasses[`dashboard-theme-${this.defaultStyling.contentClass.split('-').pop()}`] = true;\n }\n\n return cssClasses;\n }\n\n ngOnDestroy(): void {\n this.contextDashboardService.formDisabled = true;\n if (this.searchSub) {\n this.searchSub.unsubscribe();\n }\n }\n\n hasConfig() {\n if (this.widgetConfig.settings?.upgrade) {\n return (\n this.widgetConfig.settings?.configComponent || this.widgetConfig.settings?.configTemplateUrl\n );\n }\n return !this.dynamicComponent?.error;\n }\n\n private isAnyOfAlarmsWidget(): boolean {\n return (\n this.widgetConfig?.settings?.alarmListWidget ||\n this.widgetConfig?.settings?.criticalAlarmsWidget ||\n this.widgetConfig?.settings?.recentAlarmsWidget\n );\n }\n\n private setStylings(): void {\n const dashboardClasses: string[] =\n (this.mo.c8y_Dashboard?.classes && Object.keys(this.mo.c8y_Dashboard.classes)) || [];\n const dashboardWidgetClasses: string[] =\n (this.mo.c8y_Dashboard?.widgetClasses && Object.keys(this.mo.c8y_Dashboard.widgetClasses)) ||\n [];\n const widgetClasses: string[] = this.isEdit ? Object.keys(this.current.data.classes) : [];\n\n this.styling = this.setDefaultStyle([\n ...dashboardClasses,\n ...dashboardWidgetClasses,\n ...widgetClasses\n ]);\n this.defaultStyling = this.setDefaultStyle([...dashboardClasses, ...dashboardWidgetClasses]);\n }\n\n private isDashboardDefaultStyle(className) {\n const allClasses = {\n ...this.mo.c8y_Dashboard.classes,\n ...this.mo.c8y_Dashboard.widgetClasses\n };\n const styles = Object.keys(allClasses).map(cssClass => ({ class: cssClass }));\n const style = this.contextDashboardService.getStyling(\n styles,\n className.split('-').pop(),\n undefined\n );\n return !!style;\n }\n\n private setDefaultStyle(setClasses: string[]) {\n let contentClass = this.styling.contentClass;\n let headerClass = this.styling.headerClass;\n const styles = this.contextDashboardService\n .getFilteredDashboardStyles(setClasses)\n .map(c => c.split('-').pop());\n styles.forEach(styleName => {\n contentClass = this.contextDashboardService.getStyling(\n WIDGET_CONTENT_CLASSES,\n styleName,\n contentClass\n );\n headerClass = this.contextDashboardService.getStyling(\n WIDGET_HEADER_CLASSES,\n styleName,\n headerClass\n );\n });\n\n return { headerClass, contentClass };\n }\n\n private composeWidgetConfig(selectedComponent, context = {}) {\n const setting = {\n settings: {\n ...selectedComponent.data.settings,\n ...get(selectedComponent.data.settings, 'ng1.options'),\n ...get(selectedComponent.data, 'ng1.options'),\n context,\n dashboardMo: this.mo.c8y_Dashboard\n },\n ...selectedComponent.data.config\n } as ContextWidgetConfig;\n return this.applyTargetIfDeviceDashboard(setting);\n }\n\n private applyTargetIfDeviceDashboard(widgetConfig: ContextWidgetConfig) {\n const isDeviceType = this.contextDashboardService.isDeviceType(this.mo);\n\n if (isDeviceType) {\n widgetConfig.settings.hideTarget = isDeviceType;\n\n const noDeviceTarget = widgetConfig.settings.ng1\n ? widgetConfig.settings.ng1.options.noDeviceTarget\n : widgetConfig.settings.noDeviceTarget;\n\n if (!noDeviceTarget) {\n widgetConfig.device = {\n id: this.context.id,\n name: this.context.name\n };\n }\n }\n return widgetConfig;\n }\n}\n","<div class=\"modal-header\">\n <div\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form\n name=\"form\"\n #configForm=\"ngForm\"\n>\n <div\n class=\"c8y-modal-tabs\"\n id=\"modal-body\"\n >\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n class=\"btn\"\n title=\"{{ 'Select widget' | translate }}\"\n type=\"button\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n class=\"btn\"\n title=\"{{ 'Configuration' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n class=\"btn\"\n title=\"{{ 'Appearance' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll modal-inner-scroll--fixed\">\n <div\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0 elevation-md\"\n style=\"z-index: 2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search…' | translate }}\"\n type=\"text\"\n data-cy=\"widget-config--Search\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"modal-body bg-level-2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n title=\"{{ cmp.description | translate }}\"\n data-cy=\"widget-config--widget-list\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean d-col card p-8\"\n [class.active]=\"selected === cmp\"\n type=\"button\"\n (click)=\"select(cmp)\"\n >\n <div\n class=\"text-center p-8 m-b-8 d-col flex-center flex-grow bg-level-2\"\n role=\"presentation\"\n >\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <div class=\"h1\"><i c8yIcon=\"file-image-o\"></i></div>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img\n class=\"widget-thumbnail\"\n alt\n [src]=\"cmp.previewImage\"\n />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </button>\n </div>\n\n <div\n class=\"c8y-empty-state text-center\"\n *ngIf=\"searchResult && searchResult.length === 0\"\n >\n <div\n class=\"h1\"\n c8yIcon=\"search\"\n ></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p\n class=\"m-r-8\"\n translate\n >\n Rephrase your search term.\n </p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Reset search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div\n class=\"d-flex d-col fit-h\"\n *ngIf=\"selected\"\n [ngClass]=\"{ hidden: mode !== 'config' }\"\n >\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label\n for=\"widgetTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"widgetTitle\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n name=\"title\"\n type=\"text\"\n required\n [(ngModel)]=\"selected.data.title\"\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row flex-grow\"\n [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\"\n >\n <div\n class=\"a-s-stretch\"\n [ngStyle]=\"isLegacyAlarmWidget ? { 'pointer-events': 'none', opacity: '0.5' } : {}\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget && mode === 'config'\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div\n class=\"fit-h bg-inherit p-l-16\"\n [ngClass]=\"{ 'p-r-24': !hasConfig() }\"\n >\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig(),\n showSelected: true\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24 p-t-16': !widgetConfig.settings?.noDeviceTarget }\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div\n class=\"modal-body p-t-0\"\n style=\"height: calc(100vh - 310px)\"\n *ngIf=\"mode === 'style'\"\n >\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"widget-config--cancel-widget\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n data-cy=\"widget-config--save-widget\"\n (click)=\"save()\"\n [disabled]=\"\n !dynamicComponent ||\n (((this.contextDashboardService.formDisabled$ | async) || isSaveDisabled()) &&\n !!widgetHasConfigComponent)\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n","import { Injectable } from '@angular/core';\nimport { DashboardChildrenState } from '../context-dashboard.model';\nimport { cloneDeep } from 'lodash-es';\n\n/**\n * Holds current state of dashboard children during edit mode.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardOriginatorService {\n /**\n * Current dashboard children state name for indicating what change will be undone.\n */\n get currentStateName(): string {\n return this.state?.name;\n }\n /**\n * Current dashboard children state.\n * @private\n */\n private state: DashboardChildrenState;\n /**\n * Initializes dashboard children state on edit mode start.\n * @param state Dashboard children initial state.\n */\n initState(state: DashboardChildrenState): void {\n this.state = state;\n }\n /**\n * Updates dashboard children state when it is changed or restored with undo/redo.\n * @param state Dashboard children updated state.\n */\n setState(state: DashboardChildrenState): void {\n this.state = state;\n }\n /**\n * Returns copy of current state.\n */\n getState(): DashboardChildrenState {\n return cloneDeep(this.state);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DashboardChildrenState } from '../context-dashboard.model';\nimport { DashboardOriginatorService } from './dashboard-originator.service';\n\n/**\n * Caretaker is responsible for undo and redo functionalities.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardCaretakerService {\n /**\n * Current undo stack length for defining undo button disable state.\n */\n get undoStackLength(): number {\n return this.undoStack.length;\n }\n /**\n * Redo stack latest item for defining redo button disable state and its' title.\n */\n get redoStackLastItem(): DashboardChildrenState {\n return this.redoStack[this.redoStack.length - 1];\n }\n /**\n * List of dashboard children changes.\n * @private\n */\n private undoStack: DashboardChildrenState[] = [];\n /**\n * List of dashboard children changes that were undone and can be redone back.\n * @private\n */\n private redoStack: DashboardChildrenState[] = [];\n\n constructor(private originator: DashboardOriginatorService) {}\n /**\n * Adds current dashboard children state to undo stack and clears redo stack.\n */\n backup(): void {\n this.undoStack.push(this.originator.getState());\n this.redoStack = [];\n }\n /**\n * Reverts last dashboard children change and puts it in redo stack.\n * @returns Current state of dashboard children after reverting last change.\n */\n undo(): DashboardChildrenState | undefined {\n if (!this.undoStack.length) {\n return;\n }\n const memento = this.undoStack.pop();\n this.redoStack.push(this.originator.getState());\n\n this.originator.setState(memento);\n return memento;\n }\n /**\n * Applies previously undone change.\n * @returns Current state of dashboard children after applying previously undone change.\n */\n redo(): DashboardChildrenState | undefined {\n if (!this.redoStack.length) {\n return;\n }\n this.undoStack.push(this.originator.getState());\n const memento = this.redoStack.pop();\n\n this.originator.setState(memento);\n return memento;\n }\n /**\n * Clears both undo and redo stack, sets current state as initial state and returns initial state.\n * @returns Initial state of dashboard children.\n */\n reset() {\n const initialItem = this.undoStack[0] || this.originator.getState();\n this.undoStack = [];\n this.redoStack = [];\n this.originator.initState(initialItem);\n return initialItem;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DashboardOriginatorService } from './dashboard-originator.service';\nimport { DashboardCaretakerService } from './dashboard-caretaker.service';\nimport { DashboardChildrenState } from '../context-dashboard.model';\n/**\n * Facade for implementation of Memento design pattern (caretaker, originator). Responsible for undo/redo feature\n * during edit mode of dashboard.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardEditModeService {\n get undoButtonDisabled(): boolean {\n return this.caretaker.undoStackLength === 0;\n }\n /**\n * Current dashboard change name for undo button title.\n */\n get changeToUndoName(): string {\n return this.originator.currentStateName;\n }\n /**\n * Redo stack latest item for defining redo button disable state and its title.\n */\n get redoStackLastItem(): DashboardChildrenState {\n return this.caretaker.redoStackLastItem;\n }\n\n constructor(\n private originator: DashboardOriginatorService,\n private caretaker: DashboardCaretakerService\n ) {}\n /**\n * Initializes dashboard children state on edit mode start.\n * @param state Dashboard children initial state.\n */\n init(state: DashboardChildrenState) {\n this.originator.initState(state);\n }\n /**\n * Saves current state for further undo actions and sets new dashboard children state.\n * @param state Dashboard children updated state.\n */\n newState(state: DashboardChildrenState) {\n this.caretaker.backup();\n this.originator.setState(state);\n }\n /**\n * Returns copy of current state.\n */\n getCurrentState(): DashboardChildrenState {\n return this.originator.getState();\n }\n /**\n * Reverts last dashboard children change.\n * @returns Current state of dashboard children after reverting last change.\n */\n undo(): DashboardChildrenState {\n return this.caretaker.undo();\n }\n /**\n * Applies previously undone change.\n * @returns Current state of dashboard children after applying previously undone change.\n */\n redo(): DashboardChildrenState {\n return this.caretaker.redo();\n }\n /**\n * Resets dashboard children state to initial one and returns initial state.\n * @returns Initial state of dashboard children.\n */\n reset(): DashboardChildrenState {\n return this.caretaker.reset();\n }\n}\n","import {\n Component,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n ViewChild\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n ActionBarService,\n AlertService,\n BreadcrumbItem,\n CopyDashboardDisabledReason,\n DashboardChange,\n DashboardChildChange,\n DashboardChildComponent,\n DashboardCopyPermission,\n DynamicComponentDefinition,\n GainsightService,\n gettext,\n memoize,\n ModalService,\n NEW_DASHBOARD_QUERY_PARAM,\n RevertChangeType,\n Status,\n Widget,\n WidgetChange,\n WidgetsDashboardComponent\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep, every, findIndex, kebabCase, keyBy, omit, some } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Subscription } from 'rxjs';\nimport {\n CanDeactivateComponent,\n CONTEXT_DASHBOARD_CONFIG,\n ContextDashboard,\n ContextDashboardConfig,\n ContextDashboardManagedObject,\n DASHBOARD_CHILDREN_STATE_NAME,\n DashboardChildrenState,\n DashboardHistoryDescription,\n PRODUCT_EXPERIENCE,\n WIDGET_HEADER_CLASSES\n} from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { WidgetConfigComponent } from './widget-config.component';\nimport { WidgetService } from './widget.service';\nimport { DashboardEditModeService } from './memento/dashboard-edit-mode.service';\nimport { IManagedObject } from '@c8y/client';\n\n/**\n * The context dashboard is a dashboard which resolves it data from the current context (device or group)\n * it is displayed on. It usually uses the route.data for it, but you can pass\n * a different managedObject to the [mo] input parameter to change that behavior.\n */\n@Component({\n selector: 'c8y-context-dashboard',\n templateUrl: './context-dashboard.component.html',\n host: {\n style: `\n display: block;\n `,\n class: 'dashboard c8y-grid-dashboard'\n }\n})\nexport class ContextDashboardComponent implements OnInit, OnDestroy, CanDeactivateComponent {\n @Input()\n name: string;\n @Input()\n childrenClasses = '';\n @Input()\n context: any;\n @Input()\n setTitle = false;\n\n @Input()\n defaultWidgets: Widget[] = [];\n @Input()\n canCopy = true;\n @Input()\n canDelete = true;\n @Input()\n isLoading = true;\n @Input()\n breadcrumbSettings: BreadcrumbItem;\n @Input()\n showContextHelpButton = true;\n /** Whether to translate widget titles. However, dashboard's own setting takes precedence. It does not override dashboard's setting */\n @Input() translateWidgetTitle: boolean;\n /**\n * Hides dashboard availability selection.\n */\n @Input()\n hideAvailability = false;\n\n @HostBinding('class')\n class = '';\n\n @ViewChild(DashboardDetailComponent, { static: true }) dashboardDetails: DashboardDetailComponent;\n @ViewChild(WidgetsDashboardComponent, { static: true })\n widgetsDashboard: WidgetsDashboardComponent;\n\n get disabled(): boolean {\n return !this.hasPermissionToEditDashboard || !this.dashboardDetails?.isCollapsed;\n }\n\n widgets: Widget[] = [];\n mo: ContextDashboardManagedObject;\n dashboard: ContextDashboard;\n title: string;\n isCopyDisabled: DashboardCopyPermission;\n isReport: boolean;\n readonly dashboardTypeLabel = gettext('Dashboard for \"{{ dashboardType }}\"');\n readonly dashboardTypePopover = gettext(`\n The layout and configuration of this dashboard is used by all other assets of model type\n <strong>{{ dashboardType }}</strong>. Any changes made to this dashboard instance will be applied to all\n other instances.`);\n private dataSub: Subscription;\n private hasPermissionToEditDashboard = false;\n\n constructor(\n private route: ActivatedRoute,\n private router: Router,\n private contextDashboardService: ContextDashboardService,\n private alert: AlertService,\n private renderer: Renderer2,\n @Inject(CONTEXT_DASHBOARD_CONFIG) public moduleConfig: ContextDashboardConfig,\n private widgetService: WidgetService,\n private bsModal: BsModalService,\n private gainsightService: GainsightService,\n private actionBarService: ActionBarService,\n private translateService: TranslateService,\n private modal: ModalService,\n public editModeService: DashboardEditModeService\n ) {}\n\n ngOnInit() {\n if (!this.name) {\n this.loadContextDashboard();\n return;\n }\n this.loadNamedDashboard();\n }\n\n @HostListener('window:beforeunload', ['$event'])\n async beforeUnloadHandler($event: BeforeUnloadEvent) {\n const canDeactivate = await this.canDeactivate(true);\n if (!canDeactivate) {\n $event.returnValue = true;\n }\n }\n\n /**\n * Applies the current context to the widget\n * @param widget The widget to apply the context to.\n */\n applyDeviceTarget(widget) {\n if (widget.config.device) {\n widget.config.device = { id: this.context.id, name: this.context.name };\n }\n }\n\n /**\n * Removes the route listener.\n */\n ngOnDestroy(): void {\n if (this.dataSub) {\n this.dataSub.unsubscribe();\n }\n const isNewDashboard = this.route.snapshot.queryParams[NEW_DASHBOARD_QUERY_PARAM];\n if (isNewDashboard) {\n this.router.navigate([], {\n queryParams: null\n });\n }\n }\n /**\n * Guards component from unintended navigation away or closing tab without saving changes.\n * Navigation continues if true is returned, and navigation is cancelled if returned value is false.\n * @param omitConfirm Omits confirm calls inside method body (without this param, when method is used in\n * on 'beforeunload' event handler, error is thrown in console because confirm is blocked by browser anyway and returns false)\n */\n async canDeactivate(omitConfirm = false): Promise<boolean> {\n const canDeactivate =\n (await this.dashboardDetails.canDeactivate(omitConfirm)) &&\n (await this.widgetsDashboard.canDeactivate(omitConfirm));\n\n // Needed in order to reset edit mode, otherwise when switching between dashboards, the edit mode is still enabled.\n if (canDeactivate) {\n await this.cancelEditMode(true);\n }\n return canDeactivate;\n }\n\n /**\n * Restores the dashboard widgets to the default widgets.\n */\n async restore() {\n const mesg = gettext(\n 'You are about to reset the widgets of this dashboard. All changes to the dashboard widgets will get lost and cannot be recovered. Do you want to proceed?'\n );\n\n try {\n await this.modal.confirm(gettext('Reset widgets'), mesg, Status.WARNING, {\n ok: gettext('Reset`dashboard`'),\n cancel: gettext('Cancel')\n });\n\n this.isLoading = true;\n this.mo.c8y_Dashboard.children = this.contextDashboardService.mapWidgets(this.defaultWidgets);\n this.mo.c8y_Dashboard.historyDescription = {\n changeType: 'reset'\n };\n await this.contextDashboardService.update(this.mo);\n await this.onLoad();\n } catch (error) {\n if (error) {\n this.alert.addServerFailure(error);\n }\n } finally {\n this.isLoading = false;\n }\n }\n /**\n * Method called on every widgets dimensions or position change but also for adding new widget (because adding\n * widget causes layout changes). It recognizes what type of change has been done and updates current widgets state\n * accordingly.\n * @param child Change object.\n */\n positionOrWidgetDimensionChange(child: DashboardChildChange | DashboardChange): void {\n const currentState = this.editModeService.getCurrentState()?.children || {};\n const descriptionProp: keyof DashboardHistoryDescription['widgetChanges'] =\n child.children.length === Object.values(currentState).length ? 'arrangement' : 'added';\n let changeName: DashboardChildrenState['name'];\n let widgetsChanged: Widget[];\n if (descriptionProp === 'added') {\n changeName = DASHBOARD_CHILDREN_STATE_NAME.added;\n const addedWidget = child.children.find(c => !currentState[c.data.id]);\n widgetsChanged = [addedWidget.data];\n } else {\n changeName = DASHBOARD_CHILDREN_STATE_NAME.arrangement;\n widgetsChanged = child.children\n .map(c => {\n const lastStateChild = currentState[c.data.id];\n if (\n c.x != lastStateChild._x ||\n c.y != lastStateChild._y ||\n c.width != lastStateChild._width ||\n c.height != lastStateChild._height\n ) {\n return c.data;\n }\n })\n .filter(Boolean);\n }\n\n this.updateDashboardChildren(child, changeName, descriptionProp, widgetsChanged);\n }\n\n async revertChange(revertType: RevertChangeType): Promise<void> {\n let dashboardChildren: ContextDashboard['children'];\n if (revertType === 'undo') {\n dashboardChildren = this.editModeService.undo().children;\n } else {\n dashboardChildren = this.editModeService.redo().children;\n }\n await this.setWidgets(dashboardChildren);\n }\n\n /**\n * Updates all dashboards children's. Useful for position changes on the dashboard.\n * @param child The child to change.\n * @param changeName Name of the change to indicate it on undo/redo button.\n * @param descriptionProp Property to add to dashboard change history.\n * @param widgetsChanged List of changed widgets.\n */\n updateDashboardChildren(\n child: DashboardChildChange | DashboardChange,\n changeName: DashboardChildrenState['name'],\n descriptionProp: keyof DashboardHistoryDescription['widgetChanges'],\n widgetsChanged: Widget[]\n ): void {\n const { children } = child;\n const mappedChildren: { [id: string]: Widget } = keyBy(\n children.map(c => this.componentToWidget(c)),\n 'id'\n );\n this.setNewState(\n { name: changeName, children: mappedChildren },\n descriptionProp,\n widgetsChanged\n );\n }\n\n /**\n * Copies the dashboard and current context to a clipboard.\n */\n async copyDashboard() {\n const viewContext = this.route.parent.snapshot.data?.context;\n\n this.contextDashboardService.copyClipboard = {\n dashboardId: this.mo.id,\n dashboard: cloneDeep(this.mo.c8y_Dashboard),\n context: cloneDeep({\n context: viewContext,\n contextData: this.context\n })\n };\n\n if (viewContext) {\n const ctx = viewContext.split('/').shift();\n const msg = this.translateService.instant(\n 'Dashboard copied. Navigate to the desired {{ ctx }} and select \"Paste dashboard\"',\n { ctx }\n );\n this.alert.success(msg);\n }\n this.actionBarService.refresh();\n }\n\n /**\n * Remove the complete dashboard and navigate away.\n */\n async deleteDashboard() {\n await this.contextDashboardService.delete(this.mo);\n if (this.route.parent) {\n const route = this.route.parent.snapshot.url.map(segment => segment.path).join('/');\n this.router.navigateByUrl(route);\n }\n await this.onDeleteGSEvent();\n }\n\n get isDeviceTypeDashboard(): boolean {\n return !!this.dashboard?.deviceType;\n }\n\n /**\n * Edits a widget on the dashboard.\n * @param change The widget change event.\n */\n async editWidget(change: WidgetChange) {\n const { x, y, width, height } = change.source;\n const component = await this.widgetService.getWidgetDefinition(\n change.widget.name || change.widget.componentId\n );\n if (!component) {\n this.addWidget();\n return;\n }\n await this.addWidget({\n ...component,\n data: { ...component.data, ...change.widget, _x: x, _y: y, _width: width, _height: height }\n });\n }\n\n /**\n * Adds a widget to the dashboard.\n * @param selected Define a selected component to switch to edit mode directly.\n */\n async addWidget(selected?: DynamicComponentDefinition) {\n const partialCloneSelected = selected\n ? {\n ...selected,\n data: cloneDeep(selected.data)\n }\n : selected;\n\n const activeContext = this.context.contextData ? this.context.contextData : this.context;\n const initialState: Partial<WidgetConfigComponent> = {\n mo: this.mo,\n context: this.context.c8y_Report ? {} : activeContext,\n selected: partialCloneSelected\n };\n\n const modal = this.bsModal.show(WidgetConfigComponent, {\n class: 'modal-lg',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n initialState,\n ignoreBackdropClick: true,\n keyboard: false\n }).content as WidgetConfigComponent;\n\n try {\n const newWidget = await modal.result;\n if (!this.mo.c8y_Dashboard.children) {\n this.mo.c8y_Dashboard.children = {};\n }\n newWidget.classes = this.mergeWidgetClasses(newWidget);\n await this.updateWidget(newWidget);\n // New state in edit mode is added only for widget update. When adding widget, layout change is always triggered,\n // so it's easier to set new state on layout change only\n if (selected) {\n const children = {\n ...this.editModeService.getCurrentState().children,\n [newWidget.id]: newWidget\n };\n this.setNewState(\n {\n name: DASHBOARD_CHILDREN_STATE_NAME.config,\n children\n },\n 'config',\n [newWidget]\n );\n }\n modal.close();\n } catch (ex) {\n // intended empty\n }\n }\n\n async saveWidgetsToDashboard() {\n const currentState = this.editModeService.getCurrentState();\n this.mo.c8y_Dashboard.children = currentState.children;\n\n this.mo.c8y_Dashboard.historyDescription = {\n changeType: 'update',\n widgetChanges: this.mapStateToHistoryDescription(currentState.changeHistory)\n };\n await this.contextDashboardService.update(this.mo);\n this.editModeService.reset();\n this.editModeService.init({\n name: DASHBOARD_CHILDREN_STATE_NAME.initial,\n children: this.mo.c8y_Dashboard.children,\n changeHistory: {}\n });\n\n this.isCopyDisabled = this.getDashboardCopyPermissionState();\n }\n\n async cancelEditMode(onDeactivate = false): Promise<void> {\n const dashboardChildren = this.editModeService.reset();\n if (this.dashboard) {\n this.dashboard.historyDescription = {};\n }\n this.widgetsDashboard.editMode$.next(false);\n if (!onDeactivate) {\n // when setWidgets is called during navigation from device to device, navigation fails\n await this.setWidgets(dashboardChildren.children);\n }\n }\n\n /**\n * Updates a widget or adds a new one if it doesn't exist on\n * the dashboard.\n * @param widget The new widget\n */\n async updateWidget(widget) {\n const index = findIndex(this.widgets, { id: widget.id });\n const isNew = index === -1;\n const mappedWidget = await this.widgetService.mapLegacy(widget);\n if (isNew) {\n this.widgets.push(mappedWidget);\n } else {\n this.widgets.splice(index, 1, mappedWidget);\n }\n }\n\n /**\n * Removes a widget and rearranges the remaining ones\n * if necessary.\n * @param change The change event.\n */\n async deleteWidget(change: WidgetChange) {\n try {\n const { widget, source } = change;\n const removed = this.widgets.find(({ id }) => id === widget.id);\n this.widgets.splice(this.widgets.indexOf(removed), 1);\n\n const { dashboard } = source;\n dashboard.children = dashboard.children.filter(c => c.data.id !== widget.id);\n\n // using setTimeout to give the component the chance to remove it.\n const sleep = timeout => new Promise(resolve => setTimeout(resolve, timeout));\n await sleep(0);\n\n const child = new DashboardChildChange(source);\n child.collapseUpAll();\n this.updateDashboardChildren(child, DASHBOARD_CHILDREN_STATE_NAME.removed, 'removed', [\n widget\n ]);\n } catch (e) {\n this.alert.addServerFailure(e);\n }\n }\n\n /**\n * This is a workaround to ensure that the dragged-element\n * (which is attached to the body) has the right styling.\n */\n addDashboardClassToBody() {\n this.class.split(' ').forEach(cssClass => {\n this.renderer.addClass(document.body, cssClass);\n });\n }\n\n /**\n * This is a workaround to ensure that the dragged-element\n * (which is attached to the body) has the right styling.\n */\n removeDashboardClassFromBody() {\n this.class.split(' ').forEach(cssClass => {\n this.renderer.removeClass(document.body, cssClass);\n });\n }\n\n async onLoad(trackExperience?: boolean) {\n this.hasPermissionToEditDashboard = this.dashboard\n ? await this.contextDashboardService.canEditDashboard(this.mo)\n : false;\n this.canCopy =\n this.contextDashboardService.isDeviceDashboard(this.mo) ||\n this.contextDashboardService.isDeviceType(this.mo) ||\n this.contextDashboardService.isGroupDashboard(this.mo);\n const dashboardChildren: ContextDashboard['children'] = cloneDeep(\n this.mo.c8y_Dashboard?.children\n );\n const dashboardClasses = {\n 'c8y-grid-dashboard': true,\n dashboard: true,\n ...this.dashboard?.classes\n };\n this.isCopyDisabled = this.dashboard\n ? this.getDashboardCopyPermissionState()\n : { state: false, reason: null };\n this.editModeService.init({\n name: gettext('Initial state'),\n children: dashboardChildren,\n changeHistory: {}\n });\n\n await this.setWidgets(dashboardChildren, trackExperience);\n this.class = Object.keys(dashboardClasses).join(' ');\n if (this.isReport) {\n this.addReportDashboardSettings();\n }\n this.isLoading = false;\n\n if (!this.dashboard) {\n this.dashboardDetails.show(false);\n } else {\n await this.onLoadGSEvent();\n }\n }\n\n async dashboardPreview(layoutChanges: ContextDashboard) {\n if (layoutChanges?.classes) {\n const dashboardClasses = {\n 'c8y-grid-dashboard': true,\n dashboard: true,\n ...layoutChanges.classes\n };\n this.class = Object.keys(dashboardClasses).join(' ');\n } else if (this.dashboard) {\n this.dashboard.widgetClasses = {\n ...this.dashboard.widgetClasses,\n ...layoutChanges.widgetClasses\n };\n }\n }\n\n async reloadDashboard(dashboardMo: ContextDashboardManagedObject) {\n this.dashboard = dashboardMo.c8y_Dashboard;\n this.mo = dashboardMo;\n await this.onLoad();\n }\n\n private async setWidgets(\n dashboardChildren: ContextDashboard['children'],\n trackExperience = false\n ): Promise<void> {\n const isDeviceType = this.contextDashboardService.isDeviceType(this.mo);\n this.widgets = await Promise.all<Widget>(\n Object.values(dashboardChildren || {}).map(widget => {\n widget.classes = this.mergeWidgetClasses(widget);\n if (isDeviceType) {\n this.applyDeviceTarget(widget);\n }\n if (trackExperience) {\n this.gainsightService.triggerEvent('loadWidget', {\n widgetName: widget.componentId || widget.name\n });\n }\n return this.widgetService.mapLegacy(widget);\n })\n );\n }\n\n private loadContextDashboard() {\n this.dataSub = this.route.data.subscribe(({ dashboard, isReport }) => {\n this.context = this.route.parent.snapshot.data.contextData || {};\n this.title = this.context?.name;\n this.mo = dashboard;\n this.dashboard = this.mo.c8y_Dashboard;\n this.isReport = isReport || this.contextDashboardService.isReport(this.mo);\n if (this.isReport && this.dashboard && !this.dashboard?.name) {\n this.dashboard.name = this.title;\n }\n if (this.isReport && this.dashboard) {\n this.dashboard.c8y_IsNavigatorNode = this.context.c8y_IsNavigatorNode;\n }\n this.patchSensorPhoneDashboard(this.dashboard, this.mo.owner, this.context?.type);\n this.onLoad(true);\n });\n }\n\n /**\n * To enable translation for widgets within the dashboard, the \"translateWidgetTitle\" flag must be enabled.\n * The property needs to be patched, as the \"Sensor App\" does not provide this setting.\n */\n private patchSensorPhoneDashboard(dashboard: ContextDashboard, owner: string, type: string) {\n if (type === 'c8y_SensorPhone' && owner?.includes('device_phone')) {\n dashboard.translateWidgetTitle = true;\n }\n }\n\n private loadNamedDashboard() {\n this.dataSub = this.contextDashboardService\n .getNamedDashboardOrCreate(this.name, this.defaultWidgets, this.context)\n .subscribe(mo => {\n this.context = this.context || {};\n this.mo = mo;\n this.dashboard = this.mo.c8y_Dashboard;\n this.onLoad(true);\n });\n }\n\n private mergeWidgetClasses(widget: Widget): Record<string, boolean> {\n const hasHeaderClass = WIDGET_HEADER_CLASSES.find(\n el => widget.classes && widget.classes[el.class]\n );\n const widgetClasses = hasHeaderClass\n ? { ...widget.classes }\n : { ...this.dashboard.widgetClasses, ...widget.classes };\n return {\n card: true,\n 'card-dashboard': true,\n [kebabCase(widget.componentId || widget.name)]: true,\n ...widgetClasses\n };\n }\n\n private componentToWidget(child: DashboardChildComponent) {\n return {\n ...omit(child.data, ['componentTransformConfigWithContext', 'transformConfigWithContext']), // remove legacy\n ...({\n _x: child.x,\n _y: child.y,\n _width: child.width,\n _height: child.height\n } as Widget)\n };\n }\n\n private addReportDashboardSettings() {\n this.setTitle = true;\n this.title = this.context?.name || gettext('New report');\n this.breadcrumbSettings = {\n icon: 'th',\n label: 'Reports',\n path: 'reports'\n };\n this.canDelete = false;\n }\n\n private getDashboardCopyPermissionState(): DashboardCopyPermission {\n if (!this.contextDashboardService.hasPermissionsToCopyDashboard()) {\n return { state: false, reason: CopyDashboardDisabledReason.PERMISSIONS };\n }\n const allDashboardChildrenAreValid = every(this.mo.c8y_Dashboard.children, child => {\n const config = child.config || {};\n const dataPoints = config.datapoints || [];\n return !(\n (config.device && config.device.id !== this.context.id) ||\n some(dataPoints, dataPoint => dataPoint.__target?.id !== this.context.id)\n );\n });\n if (!allDashboardChildrenAreValid) {\n return { state: false, reason: CopyDashboardDisabledReason.WRONG_REFERENCE };\n }\n return { state: true };\n }\n\n private setNewState(\n state: Pick<DashboardChildrenState, 'name' | 'children'>,\n descriptionProp: keyof DashboardHistoryDescription['widgetChanges'],\n widgetsChanged: Widget[]\n ): void {\n const description = this.getDescriptionForNewState(descriptionProp, widgetsChanged);\n this.editModeService.newState({ ...state, changeHistory: description });\n }\n\n private getDescriptionForNewState(\n descriptionProp: keyof DashboardHistoryDescription['widgetChanges'],\n widgetsChanged: Widget[]\n ): DashboardChildrenState['changeHistory'] {\n const changeHistory = this.editModeService.getCurrentState().changeHistory;\n if (!changeHistory[descriptionProp]) {\n changeHistory[descriptionProp] = {};\n }\n widgetsChanged.forEach(w => {\n if (descriptionProp === 'removed' && changeHistory.added?.[w.id]) {\n // if widget was added during current edit session and then removed, it should not be at description at all\n delete changeHistory.added[w.id];\n if (changeHistory.config?.[w.id]) {\n delete changeHistory.config[w.id];\n }\n if (changeHistory.arrangement?.[w.id]) {\n delete changeHistory?.arrangement[w.id];\n }\n } else if (\n (descriptionProp === 'config' || descriptionProp === 'arrangement') &&\n changeHistory.added?.[w.id]\n ) {\n // if widget was added and then modified in current edit session, it should only be indicated as added\n } else {\n changeHistory[descriptionProp][w.id] = w;\n }\n });\n\n return changeHistory;\n }\n\n private mapStateToHistoryDescription(\n description: DashboardChildrenState['changeHistory']\n ): DashboardHistoryDescription['widgetChanges'] {\n const historyDescription: DashboardHistoryDescription['widgetChanges'] = {};\n for (const [key, value] of Object.entries(description)) {\n const widgets = Object.values(value);\n if (!widgets.length) {\n continue;\n }\n historyDescription[key] = Object.values(value).map(widget => widget.title);\n }\n return historyDescription;\n }\n\n private async onDeleteGSEvent() {\n const parentName = await this.convertStringToHash(this.context?.name);\n const dashboardName = await this.convertStringToHash(this.dashboard?.name);\n\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DELETE_DASHBOARD,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.DELETE,\n name: dashboardName,\n id: this.mo.id,\n nameId: `${dashboardName}_${this.mo.id}`,\n parentAssetId: this.context?.id ? this.context.id : 'noContext',\n parentAssetName: this.context?.id ? parentName : 'noContext',\n parentAssetType: this.context?.id ? this.context.type : 'noContext',\n parentAssetNameId: this.context?.id ? `${parentName}_${this.context.id}` : 'noContext',\n parentAssetNameDashboardName: this.context?.id\n ? `${parentName}_${dashboardName}`\n : 'noContext',\n parentAssetIdDashboardId: this.context?.id ? `${this.context.id}_${this.mo.id}` : 'noContext',\n parentAssetNameDashboardId: this.context?.id ? `${parentName}_${this.mo.id}` : 'noContext',\n parentAssetNameIdDashboardNameId: this.context?.id\n ? `${parentName}_${this.context.id}_${dashboardName}_${this.mo.id}`\n : 'noContext',\n dashboardType: this.dashboard.deviceType ? this.dashboard.deviceTypeValue : null,\n context: this.contextDashboardService.getContextForGS(this.context)\n });\n }\n\n private async onLoadGSEvent() {\n const parentName = await this.convertStringToHash(this.context?.name);\n const dashboardName =\n (await this.convertStringToHash(this.dashboard?.name)) ??\n this.extractDefaultDashboardName(this.mo) ??\n 'none';\n\n this.gainsightService.triggerEvent(\n this.isReport\n ? PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.REPORTS\n : PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS,\n {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_VIEW,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.LOAD,\n name: dashboardName,\n id: this.mo.id,\n nameId: `${dashboardName}_${this.mo.id}`,\n parentAssetId: this.context?.id ? this.context.id : 'noContext',\n parentAssetName: this.context?.id ? parentName : 'noContext',\n parentAssetType: this.context?.id ? this.context.type : 'noContext',\n parentAssetNameId: this.context?.id ? `${parentName}_${this.context.id}` : 'noContext',\n parentAssetNameDashboardName: this.context?.id\n ? `${parentName}_${dashboardName}`\n : 'noContext',\n parentAssetIdDashboardId: this.context?.id\n ? `${this.context.id}_${this.mo.id}`\n : 'noContext',\n parentAssetNameDashboardId: this.context?.id ? `${parentName}_${this.mo.id}` : 'noContext',\n parentAssetNameIdDashboardNameId: this.context?.id\n ? `${parentName}_${this.context.id}_${dashboardName}_${this.mo.id}`\n : 'noContext',\n dashboardType: this.dashboard.deviceType ? this.dashboard.deviceTypeValue : null,\n context: this.isReport\n ? PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.REPORT\n : this.contextDashboardService.getContextForGS(this.context)\n }\n );\n }\n\n private extractDefaultDashboardName(obj: IManagedObject): string | null {\n const nameKey = Object.keys(obj).find(key => key.startsWith('c8y_Dashboard!name!'));\n if (nameKey) {\n return nameKey.split('!').pop();\n }\n return null;\n }\n\n @memoize()\n private async convertStringToHash(str: string) {\n if (!str) {\n return null;\n }\n return (await this.gainsightService.shouldSendPiiData())\n ? str\n : this.gainsightService.hashGroupName(str);\n }\n}\n","<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10000\"\n *ngIf=\"dashboard?.deviceType && dashboard.deviceTypeValue\"\n>\n <button\n class=\"btn-clean btn-link\"\n popoverTitle=\"{{ 'Dashboard template' | translate }}\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dashboardTypePopoverRef\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n >\n <span class=\"tag tag--info text-12\">\n <span class=\"dashboard-template-marker\"></span>\n {{ dashboardTypeLabel | translate: { dashboardType: dashboard.deviceTypeValue } }}\n </span>\n </button>\n <ng-template #dashboardTypePopoverRef>\n <div\n [innerHTML]=\"dashboardTypePopover | translate: { dashboardType: dashboard.deviceTypeValue }\"\n ></div>\n </ng-template>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"-1\"\n *ngIf=\"defaultWidgets.length > 0\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset widgets' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"disabled || (widgetsDashboard?.editMode$ | async)\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"reset\"\n ></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n {{ 'Reset widgets' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/cockpit/working-with-dashboards/#working-with-dashboards\"\n *ngIf=\"showContextHelpButton\"\n></c8y-help>\n\n<c8y-dashboard-detail\n class=\"d-contents\"\n [isReport]=\"isReport\"\n [dashboard]=\"dashboard\"\n [mo]=\"mo\"\n [context]=\"context\"\n [deviceType]=\"context?.type\"\n [hideAvailability]=\"hideAvailability\"\n (dashboardSaved)=\"reloadDashboard($event)\"\n (previewChanged)=\"dashboardPreview($event)\"\n></c8y-dashboard-detail>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [isCopyDisabled]=\"isCopyDisabled\"\n [settings]=\"{\n isLoading: isLoading,\n isDisabled: disabled,\n canDelete: canDelete && !!dashboard,\n translateWidgetTitle: dashboard?.translateWidgetTitle ?? translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard?.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy && !!dashboard,\n defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n [editModeButtons]=\"{\n undoButtonDisabled: editModeService.undoButtonDisabled,\n changeToUndoName: editModeService.changeToUndoName,\n redoButtonDisabled: !editModeService.redoStackLastItem,\n changeToRedoName: editModeService.redoStackLastItem?.name\n }\"\n (onChangeDashboard)=\"positionOrWidgetDimensionChange($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onSaveDashboard)=\"saveWidgetsToDashboard()\"\n (onCancelDashboard)=\"cancelEditMode()\"\n (revertChange)=\"revertChange($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"dashboardDetails.show(true)\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n","import { Component, Inject, Optional, ViewChild } from '@angular/core';\nimport { AppStateService, gettext } from '@c8y/ngx-components';\nimport {\n CockpitDashboardConfig,\n COCKPIT_HOME_DASHBOARD_CONFIG,\n DEFAULT_COCKPIT_HOME_WIDGETS\n} from './cockpit-dashboard.model';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\nimport { ContextDashboardComponent } from '../context-dashboard.component';\n\n@Component({\n selector: 'c8y-cockpit-dashboard',\n templateUrl: './cockpit-dashboard.component.html'\n})\nexport class CockpitDashboardComponent implements CanDeactivateComponent {\n defaultWidgets = DEFAULT_COCKPIT_HOME_WIDGETS;\n dashboardName = 'home-cockpit1';\n pageTitle: string = gettext('Home');\n @ViewChild(ContextDashboardComponent, { static: true })\n contextDashboard: ContextDashboardComponent;\n\n constructor(\n private appState: AppStateService,\n @Optional()\n @Inject(COCKPIT_HOME_DASHBOARD_CONFIG)\n private homeDashboardConfig: CockpitDashboardConfig\n ) {\n const config = {\n ...this.homeDashboardConfig,\n dashboardName: appState.currentApplication.value?.config?.homeDashboardName,\n userSpecific: appState.currentApplication.value?.config?.userSpecificHomeDashboard\n };\n this.applyDashboardConfig(config);\n }\n\n canDeactivate(): Promise<boolean> {\n return this.contextDashboard.canDeactivate();\n }\n\n private applyDashboardConfig(config: CockpitDashboardConfig) {\n if (!config) {\n return;\n }\n\n if (config.dashboardName) {\n this.dashboardName = config.dashboardName;\n }\n\n if (config.defaultWidgets) {\n this.defaultWidgets = config.defaultWidgets;\n }\n\n if (config.userSpecific && this.appState.currentUser.value) {\n this.dashboardName = `${this.appState.currentUser.value.userName.replace(/\\./g, '__')}_${\n this.dashboardName\n }`;\n }\n\n if (config.pageTitle) {\n this.pageTitle = config.pageTitle;\n }\n }\n}\n","<c8y-title>\n {{ pageTitle | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n","import { Component, OnInit, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { gettext, ViewContext } from '@c8y/ngx-components';\nimport { DashboardContext } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Component({\n selector: 'c8y-paste-dashboard-action',\n template: `\n <ng-template #templatePaste>\n <li>\n <button\n class=\"btn btn-link\"\n title=\"{{ buttonTitle | translate }}\"\n type=\"button\"\n (click)=\"pasteDashboard()\"\n [disabled]=\"pasteDisabled\"\n >\n <i class=\"m-r-4\" c8yIcon=\"clipboard\"></i>\n <span ngNonBindable translate [translateParams]=\"{ dashboardName: dashboardName }\">\n Paste dashboard \"{{ dashboardName }}\"\n </span>\n </button>\n </li>\n </ng-template>\n `\n})\nexport class PasteDashboardActionComponent implements OnInit {\n pasteDisabled = false;\n @ViewChild('templatePaste', { read: TemplateRef, static: true }) templatePaste;\n dashboardName = '';\n buttonTitle: string;\n private currentViewContext: ViewContext;\n private currentUrl: string;\n private contextMO: IManagedObject;\n private contextId: string;\n\n constructor(\n private vcRef: ViewContainerRef,\n private router: Router,\n private contextDashboardService: ContextDashboardService,\n private inventoryService: InventoryService\n ) {}\n\n async ngOnInit() {\n this.currentUrl = this.router.url;\n this.contextId = this.currentUrl.match(/\\d+/)[0];\n\n const isDevice: boolean = new RegExp(/device\\/\\d+/).test(this.currentUrl);\n const isGroup: boolean = new RegExp(/group\\/\\d+/).test(this.currentUrl);\n this.currentViewContext = isDevice ? ViewContext.Device : isGroup ? ViewContext.Group : null;\n await this.checkIfPasteIsAllowed();\n\n this.vcRef.createEmbeddedView(this.templatePaste);\n const clipboard = this.contextDashboardService.copyClipboard;\n if (clipboard) {\n this.dashboardName = clipboard.dashboard.name;\n }\n }\n\n async pasteDashboard() {\n if (!this.contextMO) {\n this.contextMO = await this.getContextMo(this.contextId);\n }\n const context: DashboardContext = {\n context: this.currentViewContext,\n contextData: this.contextMO\n };\n\n await this.contextDashboardService.pasteDashboard(context);\n }\n\n private async getContextMo(id: string): Promise<IManagedObject> {\n return (await this.inventoryService.detail(id)).data;\n }\n\n private async checkIfPasteIsAllowed(): Promise<void> {\n const clipboardViewContext = this.contextDashboardService.copyClipboard.context.context;\n const isTypeDashboard = this.contextDashboardService.copyClipboard?.dashboard?.deviceType;\n\n if (this.currentViewContext !== clipboardViewContext) {\n if (clipboardViewContext === ViewContext.Device) {\n this.buttonTitle = gettext('Device dashboards can only be copied into a device.');\n } else if (clipboardViewContext === ViewContext.Group) {\n this.buttonTitle = gettext('Group dashboards can only be copied into a group.');\n }\n this.pasteDisabled = true;\n return;\n } else if (isTypeDashboard) {\n this.contextMO = await this.getContextMo(this.contextId);\n const dashboardDeviceType =\n this.contextDashboardService.copyClipboard.dashboard.deviceTypeValue;\n if (dashboardDeviceType === this.contextMO.type) {\n this.buttonTitle = gettext(\n 'Dashboard template can only be copied into assets of a different type.'\n );\n this.pasteDisabled = true;\n return;\n }\n }\n\n this.buttonTitle = gettext('Paste dashboard');\n this.pasteDisabled = false;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ViewContext, ActionBarFactory, ActionBarItem } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { PasteDashboardActionComponent } from './paste-dashboard-action.component';\n\nexport abstract class DashboardActionBarFactory implements ActionBarFactory {\n protected abstract targetContext: ViewContext.Device | ViewContext.Group;\n routeChanges$: Observable<any>;\n\n private contextDashboardService = inject(ContextDashboardService);\n\n get(activeRoute: ActivatedRoute) {\n const actions = [];\n const data =\n !activeRoute.parent || activeRoute.snapshot.data.context\n ? activeRoute.snapshot.data\n : activeRoute.parent.snapshot.data;\n const { contextData } = data;\n const canPaste =\n contextData &&\n data.context === this.targetContext &&\n this.contextDashboardService.copyClipboard;\n\n if (canPaste) {\n actions.push({\n priority: -10,\n placement: 'more',\n template: PasteDashboardActionComponent\n } as ActionBarItem);\n }\n\n return actions;\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DeviceDashboardActionBarFactory extends DashboardActionBarFactory {\n protected targetContext: ViewContext.Device | ViewContext.Group = ViewContext.Device;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GroupDashboardActionBarFactory extends DashboardActionBarFactory {\n protected targetContext: ViewContext.Device | ViewContext.Group = ViewContext.Group;\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { Tab } from '@c8y/ngx-components';\nimport { ContextDashboardType } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Injectable({ providedIn: 'root' })\nexport class DeviceDashboardGuard {\n constructor(private contextDashboardService: ContextDashboardService) {}\n\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean | Tab[]> {\n return this.contextDashboardService.activateDashboards(route, [\n ContextDashboardType.Device,\n ContextDashboardType.Type\n ]);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { Tab } from '@c8y/ngx-components';\nimport { ContextDashboardType } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Injectable({ providedIn: 'root' })\nexport class GroupDashboardGuard {\n constructor(private contextDashboardService: ContextDashboardService) {}\n\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean | Tab[]> {\n return this.contextDashboardService.activateDashboards(route, [\n ContextDashboardType.Group,\n ContextDashboardType.Type\n ]);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport {\n CoreModule,\n hookActionBar,\n HookProviderTypes,\n hookRoute,\n hookTab,\n ViewContext\n} from '@c8y/ngx-components';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { AssetSelectorModule } from '@c8y/ngx-components/assets-navigator';\nimport { AddDashboardComponent } from './add-dashboard.component';\nimport { AddDeviceDashboardFactory, AddGroupDashboardFactory } from './add-dashboard.factory';\nimport { AppearanceSettingsComponent } from './appearance-settings.component';\nimport { ContextDashboardComponent } from './context-dashboard.component';\nimport {\n CONTEXT_DASHBOARD_CONFIG,\n ContextDashboardConfig,\n CanDeactivateComponent\n} from './context-dashboard.model';\nimport {\n DeviceDashboardActionBarFactory,\n GroupDashboardActionBarFactory\n} from './dashboard-action-bar.factory';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { DeviceDashboardGuard } from './device-dashboard.guard';\nimport { GroupDashboardGuard } from './group-dashboard.guard';\nimport { PasteDashboardActionComponent } from './paste-dashboard-action.component';\nimport { WidgetConfigComponent } from './widget-config.component';\nimport { WidgetPreviewComponent } from './widget-preview.component';\nimport { DashboardAvailabilityComponent } from './dashboard-availability.component';\nimport { IconSelectorModule } from '@c8y/ngx-components/icon-selector';\nimport { NewDashboardGuard, newDashboardTab } from './new-dashboard.guard';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { DashboardGeneralSettingsComponent } from './dashboard-settings/dashboard-general-settings.component';\nimport { DashboardAppearanceSettingsComponent } from './dashboard-settings/dashboard-appearance-settings.component';\nimport { DashboardVersionHistoryComponent } from './dashboard-settings/dashboard-version-history.component';\nimport { TypedDashboardSettingsComponent } from './dashboard-settings/typed-dashboard-settings.component';\nimport { TypeDashboardInfoComponent } from './type-dashboard-info/type-dashboard-info.component';\n\nconst defaultConfig = {\n allowFullscreen: true\n} as const satisfies ContextDashboardConfig;\n\n@NgModule({\n declarations: [\n AppearanceSettingsComponent,\n ContextDashboardComponent,\n WidgetConfigComponent,\n WidgetPreviewComponent,\n DashboardDetailComponent,\n AddDashboardComponent,\n PasteDashboardActionComponent,\n DashboardAvailabilityComponent,\n DashboardGeneralSettingsComponent,\n DashboardAppearanceSettingsComponent,\n DashboardVersionHistoryComponent,\n TypedDashboardSettingsComponent,\n TypeDashboardInfoComponent\n ],\n imports: [\n CoreModule,\n TooltipModule,\n PopoverModule,\n AssetSelectorModule,\n IconSelectorModule,\n BsDropdownModule.forRoot(),\n CollapseModule.forRoot()\n ],\n exports: [\n ContextDashboardComponent,\n WidgetConfigComponent,\n DashboardDetailComponent,\n TypeDashboardInfoComponent\n ],\n providers: [\n {\n provide: CONTEXT_DASHBOARD_CONFIG,\n useValue: defaultConfig\n }\n ]\n})\nexport class ContextDashboardModule {\n static config(config: ContextDashboardConfig = {}): ModuleWithProviders<ContextDashboardModule> {\n return {\n ngModule: ContextDashboardModule,\n providers: [\n {\n provide: CONTEXT_DASHBOARD_CONFIG,\n useValue: { ...defaultConfig, ...config }\n },\n hookRoute(config.routes || [])\n ]\n };\n }\n}\n\n@NgModule({\n imports: [ContextDashboardModule],\n declarations: [],\n providers: [\n hookRoute([\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [DeviceDashboardGuard],\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n context: ViewContext.Device\n },\n // new dashboard route should be defined last\n {\n path: newDashboardTab.path,\n component: ContextDashboardComponent,\n canActivate: [NewDashboardGuard],\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n context: ViewContext.Device\n }\n ]),\n hookTab(AddDeviceDashboardFactory, { providerType: HookProviderTypes.ExistingProvider }),\n hookActionBar(DeviceDashboardActionBarFactory)\n ]\n})\nexport class DeviceContextDashboardModule {}\n\n@NgModule({\n imports: [ContextDashboardModule],\n declarations: [],\n providers: [\n hookRoute([\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [GroupDashboardGuard],\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n context: ViewContext.Group\n },\n // new dashboard route should be defined last\n {\n path: newDashboardTab.path,\n component: ContextDashboardComponent,\n canActivate: [NewDashboardGuard],\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n context: ViewContext.Group\n }\n ]),\n hookTab(AddGroupDashboardFactory, { providerType: HookProviderTypes.ExistingProvider }),\n hookActionBar(GroupDashboardActionBarFactory)\n ]\n})\nexport class GroupContextDashboardModule {}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport {\n ContextDashboardModule,\n DeviceContextDashboardModule,\n GroupContextDashboardModule\n} from '../context-dashboard.module';\nimport { hookNavigator, gettext, CoreModule, hookRoute } from '@c8y/ngx-components';\nimport { CockpitDashboardComponent } from './cockpit-dashboard.component';\nimport { CockpitDashboardConfig, COCKPIT_HOME_DASHBOARD_CONFIG } from './cockpit-dashboard.model';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\n\n@NgModule({\n imports: [CoreModule, ContextDashboardModule],\n declarations: [CockpitDashboardComponent],\n providers: [\n hookNavigator({ label: gettext('Home'), icon: 'home', priority: 10000, path: '/' }),\n hookRoute({\n path: '',\n component: CockpitDashboardComponent,\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()]\n })\n ]\n})\nexport class CockpitHomeDashboardModule {}\n\n@NgModule({\n imports: [CockpitHomeDashboardModule, DeviceContextDashboardModule, GroupContextDashboardModule]\n})\nexport class CockpitDashboardModule {\n static config(config: CockpitDashboardConfig = {}): ModuleWithProviders<CockpitDashboardModule> {\n return {\n ngModule: CockpitDashboardModule,\n providers: [\n {\n provide: COCKPIT_HOME_DASHBOARD_CONFIG,\n useValue: config\n }\n ]\n };\n }\n}\n","import { Component, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { InventoryService } from '@c8y/client';\nimport { ContextData, gettext, Widget } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { from, Subscription } from 'rxjs';\nimport { map, mergeMap, tap, toArray } from 'rxjs/operators';\nimport { WidgetService } from '../widget.service';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\nimport { ContextDashboardComponent } from '../context-dashboard.component';\n\n@Component({\n selector: 'c8y-device-info-dashboard-dashboard',\n templateUrl: './device-info-dashboard.component.html'\n})\nexport class DeviceInfoDashboardComponent implements CanDeactivateComponent {\n isLoading = true;\n title: string;\n dashboardName = '';\n widgetsList: Widget[];\n currentContext: ContextData;\n contextSubscription: Subscription;\n widgetsSubscription: Subscription;\n @ViewChild(ContextDashboardComponent, { static: false })\n contextDashboard: ContextDashboardComponent;\n\n DEVICE_INFO_WIDGETS = [\n {\n name: 'deviceStatusWidget',\n title: gettext('Device status'),\n _x: 0,\n _y: 0,\n _height: 5,\n _width: 8\n },\n {\n name: 'Data points graph',\n title: gettext('Device and communication'),\n _x: 8,\n _y: 0,\n _height: 5,\n _width: 16,\n config: {\n interval: 'hours',\n aggregation: 'NONE',\n realtime: true,\n datapointsInitialDisplayLimit: 3,\n datapoints: [\n {\n fragment: 'c8y_Battery',\n series: 'level',\n label: this.translateService.instant('Battery: level'),\n unit: '%',\n renderType: 'min',\n lineType: 'line',\n color: '#5e07b3',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'rssi',\n label: this.translateService.instant('Signal: RSSI'),\n unit: 'dBm',\n renderType: 'min',\n lineType: 'line',\n color: '#a7d0f1',\n __active: true\n },\n {\n fragment: 'c8y_MemoryMeasurement',\n series: 'Used',\n label: this.translateService.instant('Memory: used'),\n unit: 'MB',\n renderType: 'min',\n lineType: 'line',\n color: '#f75229',\n __active: true\n },\n {\n fragment: 'c8y_CPUMeasurement',\n series: 'Workload',\n label: this.translateService.instant('CPU: workload'),\n unit: '%',\n renderType: 'min',\n lineType: 'line',\n color: '#b24f3e',\n __active: true\n },\n {\n fragment: 'c8y_NetworkStatistics',\n series: 'Upload',\n label: this.translateService.instant('Network: upload'),\n unit: 'KB/s',\n renderType: 'min',\n lineType: 'line',\n color: '#88c039',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'RCSP',\n label: this.translateService.instant('Signal: RCSP'),\n renderType: 'min',\n lineType: 'line',\n color: '#5e2f19',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'RSCP',\n label: this.translateService.instant('Signal: RSCP'),\n renderType: 'min',\n lineType: 'line',\n color: '#5e2f19',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'RSRP',\n label: this.translateService.instant('Signal: RSRP'),\n renderType: 'min',\n lineType: 'line',\n color: '#43ba3b',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'RSRQ',\n label: this.translateService.instant('Signal: RSRQ'),\n renderType: 'min',\n lineType: 'line',\n color: '#14b0b3',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'ber',\n label: this.translateService.instant('Signal: BER'),\n unit: '%',\n renderType: 'min',\n lineType: 'line',\n color: '#44ff33',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'ECN0',\n label: this.translateService.instant('Signal: ECN0'),\n renderType: 'min',\n lineType: 'line',\n color: '#873efa',\n __active: true\n },\n {\n fragment: 'c8y_NetworkStatistics',\n series: 'Download',\n label: this.translateService.instant('Network: download'),\n unit: 'KB/s',\n renderType: 'min',\n lineType: 'line',\n color: '#f27a45',\n __active: true\n },\n {\n fragment: 'c8y_MemoryMeasurement',\n series: 'Total',\n label: this.translateService.instant('Memory: total'),\n unit: 'MB',\n renderType: 'min',\n lineType: 'line',\n color: '#dadd8c',\n __active: true\n }\n ],\n alarmsEventsConfigs: [\n {\n label: 'c8y_LocationUpdate',\n timelineType: 'EVENT',\n color: '#6f6cd0',\n filters: {\n type: 'c8y_LocationUpdate'\n },\n __active: true\n },\n {\n label: 'c8y_UnavailabilityAlarm',\n timelineType: 'ALARM',\n color: '#375bf2',\n filters: {\n type: 'c8y_UnavailabilityAlarm'\n },\n __active: true\n }\n ]\n }\n },\n {\n name: 'Asset Properties',\n title: gettext('Device data'),\n config: {\n options: {\n properties: [\n {\n id: 'c8ySchema!!id',\n __active: true,\n keyPath: ['id'],\n type: 'string',\n label: 'ID'\n },\n {\n id: 'c8ySchema!!name',\n __active: true,\n keyPath: ['name'],\n type: 'string',\n label: 'Name'\n },\n {\n id: 'c8ySchema!!type',\n __active: true,\n keyPath: ['type'],\n type: 'string',\n label: 'Type'\n },\n {\n id: 'c8ySchema!!lastUpdated',\n __active: true,\n keyPath: ['lastUpdated'],\n type: 'string',\n label: 'Last Updated'\n },\n {\n id: 'c8ySchema!!creationTime',\n __active: true,\n keyPath: ['creationTime'],\n type: 'string',\n label: 'Creation Time'\n }\n ],\n allowDisplayAndEditKnownProperties: false,\n hiddenPropertiesKeyPaths: ['owner']\n }\n },\n _x: 0,\n _y: 5,\n _height: 8,\n _width: 8\n },\n {\n name: 'Alarm list',\n title: gettext('Active, critical alarms'),\n _x: 8,\n _y: 5,\n _height: 4,\n _width: 8,\n config: {\n options: {\n orderMode: 'ACTIVE_FIRST',\n severity: { CRITICAL: true },\n status: {\n ACTIVE: true,\n ACKNOWLEDGED: false,\n CLEARED: false\n },\n types: []\n }\n }\n },\n {\n name: 'deviceGroupAssignmentWidget',\n title: gettext('Group assignment'),\n _x: 16,\n _y: 5,\n _height: 4,\n _width: 8\n },\n {\n componentId: 'Map',\n title: gettext('Location'),\n _x: 8,\n _y: 9,\n _height: 4,\n _width: 16\n }\n ] as Widget[];\n\n constructor(\n private router: ActivatedRoute,\n private widgetService: WidgetService,\n private translateService: TranslateService,\n private inventoryService: InventoryService\n ) {}\n\n ngOnInit() {\n this.contextSubscription = this.router.parent.data\n .pipe(\n tap(({ contextData }) => {\n const contextNameValid = contextData.name && contextData.name.trim();\n this.title = contextNameValid ? contextData.name : contextData.id;\n this.dashboardName = `${contextData.id}-device-info`;\n })\n )\n .subscribe(async data => {\n this.currentContext = data as ContextData;\n this.addDeviceTargetForDP(data.contextData.id, data.contextData.name);\n });\n\n this.widgetsSubscription = from(this.DEVICE_INFO_WIDGETS)\n .pipe(\n mergeMap(widget => this.widgetService.mapLegacy(widget)),\n map(widget => {\n let device = this.router.parent.snapshot.data.contextData;\n if (device) {\n device = {\n name: device.name,\n id: device.id\n };\n }\n return {\n ...widget,\n config: {\n ...widget.config,\n device\n }\n };\n }),\n toArray()\n )\n .subscribe(async data => {\n await this.filterSupportedSeriesForDP(this.currentContext.contextData.id, data);\n this.widgetsList = data;\n this.isLoading = false;\n });\n }\n\n addDeviceTargetForDP(id: string | number, name: string) {\n const dpWidget = this.DEVICE_INFO_WIDGETS.filter(item => item.name == 'Data points graph')[0];\n // Add target to dataPoint config\n dpWidget.config.datapoints.map(item => (item['__target'] = { id, name }));\n // Add target to alarmEvents Config\n dpWidget.config.alarmsEventsConfigs.map(item => (item['__target'] = { id, name }));\n }\n\n async filterSupportedSeriesForDP(id: string | number, widgets: Widget[]) {\n const supportedMeasurements = await this.inventoryService.getMeasurementsAndSeries(id);\n const isDataPointSupported = dp =>\n supportedMeasurements.some(\n ({ fragment, series }) => dp.fragment === fragment && dp.series === series\n );\n const dpWidget = widgets.find(({ name }) => name === 'Data points graph');\n dpWidget.config.datapoints = dpWidget.config.datapoints.filter(isDataPointSupported);\n }\n\n ngOnDestroy() {\n this.widgetsSubscription.unsubscribe();\n this.contextSubscription.unsubscribe();\n }\n\n canDeactivate(): Promise<boolean> {\n return this.contextDashboard?.canDeactivate();\n }\n}\n","<div *ngIf=\"!isLoading\">\n <c8y-title>\n {{ title }}\n </c8y-title>\n <c8y-context-dashboard\n [translateWidgetTitle]=\"true\"\n [name]=\"dashboardName\"\n [context]=\"currentContext\"\n [defaultWidgets]=\"widgetsList\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n ></c8y-context-dashboard>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CoreModule, hookRoute, ViewContext, gettext } from '@c8y/ngx-components';\nimport { ContextDashboardModule } from '../context-dashboard.module';\nimport { DeviceInfoDashboardComponent } from './device-info-dashboard.component';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\n\n@NgModule({\n declarations: [DeviceInfoDashboardComponent],\n imports: [CommonModule, CoreModule, ContextDashboardModule],\n exports: [],\n providers: [\n hookRoute({\n context: ViewContext.Device,\n path: 'device-info',\n component: DeviceInfoDashboardComponent,\n label: gettext('Info'),\n priority: 10000,\n icon: 'asterisk',\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()]\n })\n ]\n})\nexport class DeviceInfoDashboardModule {}\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { gettext, Widget } from '@c8y/ngx-components';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\nimport { WidgetService } from '../widget.service';\nimport { ContextDashboardComponent } from '../context-dashboard.component';\n\n@Component({\n selector: 'c8y-device-management-home-dashboard',\n templateUrl: './device-management-home-dashboard.component.html'\n})\nexport class DeviceManagementHomeDashboardComponent implements OnInit, CanDeactivateComponent {\n widgets = [];\n dashboardName = 'home-dm1';\n defaultWidgets = [\n {\n name: 'devicemanagement.welcome.widget',\n title: gettext('Quick links'),\n _x: 0,\n _y: 0,\n _height: 4,\n _width: 12\n },\n {\n name: 'Recent Alarms',\n title: gettext('Recent alarms'),\n _x: 12,\n _y: 0,\n _height: 4,\n _width: 12\n }\n ] as Widget[];\n @ViewChild(ContextDashboardComponent, { static: true })\n contextDashboard: ContextDashboardComponent;\n\n constructor(private widgetService: WidgetService) {}\n\n ngOnInit() {\n this.defaultWidgets.map(async widget => {\n await this.widgetService\n .mapLegacy(widget)\n .then(transformedWidget => this.widgets.push(transformedWidget));\n });\n }\n\n canDeactivate(): Promise<boolean> {\n return this.contextDashboard?.canDeactivate();\n }\n}\n","<c8y-title>\n {{ 'Home' | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CoreModule, gettext, hookNavigator, hookRoute } from '@c8y/ngx-components';\nimport { ContextDashboardModule } from '../context-dashboard.module';\nimport { DeviceManagementHomeDashboardComponent } from './device-management-home-dashboard.component';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\n\n@NgModule({\n declarations: [DeviceManagementHomeDashboardComponent],\n imports: [CommonModule, CoreModule, ContextDashboardModule],\n exports: [],\n providers: [\n hookRoute({\n path: '',\n component: DeviceManagementHomeDashboardComponent,\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()]\n }),\n hookNavigator({ label: gettext('Home'), icon: 'home', priority: 10000, path: '/' })\n ]\n})\nexport class DeviceManagementHomeDashboardModule {}\n","import { Injectable } from '@angular/core';\nimport { TabFactory, Tab, gettext } from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\n\n@Injectable()\nexport class DashboardManagerTabsFactory implements TabFactory {\n constructor(public router: Router) {}\n\n get() {\n const tabs: Tab[] = [];\n\n if (this.router.url.match(/\\/dashboard-manager/g)) {\n tabs.push({\n path: 'dashboard-manager/type-dashboards',\n priority: 1000,\n label: gettext('Type dashboards')\n } as Tab);\n }\n\n return tabs;\n }\n}\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\n\nexport class DeviceTypeValueGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'deviceTypeValue';\n this.path = 'c8y_Dashboard.deviceTypeValue';\n this.header = gettext('Target asset model');\n\n this.filterable = true;\n this.sortable = false;\n\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'deviceTypeValues',\n label: gettext('Filter dashboards by target asset model'),\n addText: gettext('Add next`target asset model`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: 'c8y_MQTTDevice'\n }),\n getFilter: (model: any): any => {\n const filter: any = {};\n if (model.deviceTypeValues.length) {\n filter[this.path] = { __in: model.deviceTypeValues };\n }\n return filter;\n }\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n Column,\n DataGridService,\n gettext,\n ModalService,\n Pagination,\n Status,\n UserPreferencesService\n} from '@c8y/ngx-components';\nimport { IManagedObject, InventoryService, IResultList, QueriesUtil } from '@c8y/client';\nimport { ContextDashboardManagedObject } from '../context-dashboard.model';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DeviceTypeValueGridColumn } from './type-dashboards-list/device-type-value.grid-column';\nimport { TypeDashboardFilter } from './dashboard-manager.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardManagerService extends DataGridService {\n queriesUtil: QueriesUtil;\n baseQuery = {\n __filter: {\n __and: [\n { 'c8y_Dashboard.deviceType': { __eq: true } },\n { __has: 'c8y_Dashboard.deviceTypeValue' }\n ]\n }\n };\n private TYPE_DASHBOARDS_QUERY =\n '$filter=((c8y_Dashboard.deviceType eq true) and (has(c8y_Dashboard.deviceTypeValue)))';\n constructor(\n protected inventory: InventoryService,\n protected userPreferencesService: UserPreferencesService,\n protected modal: ModalService,\n protected translateService: TranslateService\n ) {\n super(userPreferencesService);\n }\n\n getColumns(): Column[] {\n return [\n {\n name: 'icon',\n header: gettext('Icon'),\n path: 'c8y_Dashboard.icon',\n sortable: false,\n gridTrackSize: '45px'\n },\n {\n name: 'name',\n header: gettext('Name'),\n path: 'name',\n sortable: false,\n gridTrackSize: '200px'\n },\n {\n name: 'description',\n header: gettext('Description'),\n path: 'c8y_Dashboard.description',\n sortable: false\n },\n new DeviceTypeValueGridColumn(),\n {\n name: 'lastUpdated',\n header: gettext('Last update'),\n path: 'lastUpdated',\n sortable: false,\n gridTrackSize: '200px'\n }\n ];\n }\n\n getDefaultPagination(): Pagination {\n return {\n pageSize: 25,\n currentPage: 1\n };\n }\n\n async getData(\n columns: Column[],\n pagination: Pagination,\n text?: string\n ): Promise<IResultList<IManagedObject>> {\n const filters = this.getFilters(columns, pagination, text);\n\n return await this.inventory.list(filters);\n }\n\n async getCount(columns: Column[], pagination: Pagination, text?: string): Promise<number> {\n const filters = this.getFilters(columns, pagination, text);\n\n const filteredItemsCount = await this.inventory.list({\n ...filters,\n pageSize: 1,\n currentPage: 1,\n withTotalPages: true\n });\n return filteredItemsCount.paging.totalPages;\n }\n\n async getTotal(): Promise<number> {\n return (\n await this.inventory.list({\n query: this.TYPE_DASHBOARDS_QUERY,\n pageSize: 1,\n withTotalPages: true\n })\n ).paging.totalPages;\n }\n\n async delete(dashboard: ContextDashboardManagedObject, onSuccess: () => void): Promise<void> {\n try {\n const msg: string = gettext(\n `You are about to delete the dashboard \"{{ dashboardName }}\" from all devices of type \"{{ deviceType }}\".\n Do you want to proceed?`\n );\n\n await this.modal.confirm(\n gettext('Delete dashboard'),\n this.translateService.instant(msg, {\n dashboardName: dashboard.c8y_Dashboard.name,\n deviceType: dashboard.c8y_Dashboard.deviceTypeValue\n }),\n Status.DANGER,\n {\n ok: gettext('Delete'),\n cancel: gettext('Cancel')\n }\n );\n await this.inventory.delete(dashboard);\n onSuccess();\n } catch (ex) {\n // intended empty\n }\n }\n\n private getFilters(\n columns: Column[],\n pagination: Pagination,\n text?: string\n ): TypeDashboardFilter {\n return {\n query: this.getQueryString(columns),\n ...(text && { text }),\n pageSize: pagination.pageSize,\n currentPage: pagination.currentPage,\n withTotalPages: true\n };\n }\n\n private getQueryString(columns: Column[]): string {\n const queryFromColumns = this.getQueryObj(columns);\n const fullQuery = this.queriesUtil.addAndFilter(queryFromColumns, this.baseQuery);\n return this.queriesUtil.buildQuery(fullQuery);\n }\n}\n","import { ColumnConfig } from '@c8y/ngx-components';\nimport { NameDeviceGridColumn } from '@c8y/ngx-components/device-grid';\n\nexport class BasicNameDeviceGridColumn extends NameDeviceGridColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'basic-name';\n this.cellRendererComponent = null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Column, DataGridService, Pagination, UserPreferencesService } from '@c8y/ngx-components';\nimport { InventoryService } from '@c8y/client';\nimport {\n GroupDeviceGridColumn,\n RegistrationDateDeviceGridColumn,\n TypeDeviceGridColumn\n} from '@c8y/ngx-components/device-grid';\nimport { BasicNameDeviceGridColumn } from './basic-name.device-grid-column';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TypeDashboardAssetsGridService extends DataGridService {\n constructor(\n protected inventoryService: InventoryService,\n protected userPreferencesService: UserPreferencesService\n ) {\n super(userPreferencesService);\n }\n\n getDefaultColumns(columnsForDevice = true): Column[] {\n return columnsForDevice\n ? [\n new BasicNameDeviceGridColumn(),\n new TypeDeviceGridColumn(),\n new GroupDeviceGridColumn(),\n new RegistrationDateDeviceGridColumn()\n ]\n : [\n new BasicNameDeviceGridColumn(),\n new TypeDeviceGridColumn(),\n new RegistrationDateDeviceGridColumn()\n ];\n }\n\n async getData(columns: Column[], pagination: Pagination, query: any = {}, text = null) {\n const filters = {\n ...this.getFilters(columns, pagination, query, text),\n withGroups: true\n };\n return this.inventoryService.list(filters);\n }\n\n async getCount(columns: Column[], pagination: Pagination, query: any = {}, text: string = null) {\n const filters = {\n ...this.getFilters(columns, pagination, query, text),\n pageSize: 1,\n currentPage: 1\n };\n return (await this.inventoryService.list(filters)).paging.totalPages;\n }\n\n async getTotal(query: any = {}): Promise<number> {\n const filters = {\n query: this.queriesUtil.buildQuery(query),\n pageSize: 1,\n withTotalPages: true\n };\n return (await this.inventoryService.list(filters)).paging.totalPages;\n }\n\n private getFilters(columns: Column[], pagination: Pagination, query: any, text?: string) {\n return {\n ...{ query: this.getDeviceQueryString(columns, query) },\n ...(text && { text }),\n pageSize: pagination.pageSize,\n currentPage: pagination.currentPage,\n withChildren: false,\n withTotalPages: true\n };\n }\n\n private getDeviceQueryString(columns: Column[], query: any): string {\n let fullQuery = this.getQueryObj(columns);\n fullQuery = this.queriesUtil.addAndFilter(fullQuery, query);\n return this.queriesUtil.buildQuery(fullQuery);\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport {\n ActionControl,\n alertOnError,\n Column,\n DataSourceModifier,\n gettext,\n ModalLabels,\n ServerSideDataCallback,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\nimport { IManagedObject } from '@c8y/client';\nimport { TypeDashboardAssetsGridService } from './type-dashboard-assets-grid.service';\nimport { ContextDashboardManagedObject } from '../../../context-dashboard/context-dashboard.model';\nimport { ContextDashboardService } from '../../../context-dashboard/context-dashboard.service';\n\n@Component({\n selector: 'c8y-type-dashboard-target-assets-grid',\n templateUrl: './type-dashboard-target-assets-grid.component.html'\n})\nexport class TypeDashboardTargetAssetsGridComponent implements OnInit {\n labels: ModalLabels = { cancel: gettext('Cancel') };\n columns: Column[];\n actionControls: ActionControl[] = [\n {\n type: 'navigateToInstance',\n text: gettext('Open instance`dashboard`'),\n callback: item => this.navigateToDevice(item as IManagedObject),\n icon: 'file-create'\n }\n ];\n loadMoreItemsLabel = gettext('Load more assets');\n loadingItemsLabel: string = gettext('Loading assets…');\n pagination = {\n pageSize: 25,\n currentPage: 1\n };\n serverSideDataCallback: ServerSideDataCallback;\n\n @Input() dashboard: ContextDashboardManagedObject;\n @Output() onNavigateToAsset: EventEmitter<void> = new EventEmitter<void>();\n private isDeviceDashboard: boolean;\n\n constructor(\n private router: Router,\n private assetsGridService: TypeDashboardAssetsGridService,\n private contextDashboardService: ContextDashboardService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n }\n\n ngOnInit() {\n this.isDeviceDashboard = this.contextDashboardService.isDeviceDashboard(this.dashboard);\n this.columns = this.assetsGridService.getDefaultColumns(this.isDeviceDashboard);\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const baseQuery = { type: this.dashboard.c8y_Dashboard.deviceTypeValue };\n\n const { res, data, paging } = await alertOnError(\n this.assetsGridService.getData(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n baseQuery,\n dataSourceModifier.searchText\n )\n );\n\n const filteredSize = await alertOnError(\n this.assetsGridService.getCount(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n baseQuery,\n dataSourceModifier.searchText\n )\n );\n const size = await alertOnError(this.assetsGridService.getTotal(baseQuery));\n\n const serverSideDataResult = {\n res,\n data,\n paging,\n filteredSize,\n size\n };\n\n return serverSideDataResult;\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n\n navigateToDevice(val: IManagedObject): void {\n const parentSubPath = this.isDeviceDashboard ? 'device' : 'group';\n this.onNavigateToAsset.emit();\n this.router.navigate([`/${parentSubPath}/${val.id}/dashboard/${this.dashboard.id}`]);\n }\n}\n","<c8y-data-grid\n [title]=\"''\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"actionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [showSearch]=\"true\"\n>\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'Refine your search terms.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n</c8y-data-grid>\n","import { Component, HostListener, Input } from '@angular/core';\nimport { gettext, ModalLabels } from '@c8y/ngx-components';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { ContextDashboardManagedObject } from '../../context-dashboard.model';\n\n@Component({\n selector: 'c8y-type-dashboard-target-assets-modal',\n templateUrl: './type-dashboard-target-assets-modal.component.html'\n})\nexport class TypeDashboardTargetAssetsModalComponent {\n labels: ModalLabels = { cancel: gettext('Cancel') };\n @Input() dashboard: ContextDashboardManagedObject;\n\n constructor(private bsModalRef: BsModalRef) {}\n\n @HostListener('document:keydown', ['$event'])\n handleKeyboardEvent(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.close();\n }\n }\n\n close(): void {\n this.bsModalRef.hide();\n }\n}\n","<c8y-modal\n title=\"{{ 'Select dashboard instance to edit' | translate }}\"\n (onClose)=\"close()\"\n (onDismiss)=\"close()\"\n [labels]=\"labels\"\n [disabled]=\"true\"\n [headerClasses]=\"'has-data-grid'\"\n>\n <c8y-type-dashboard-target-assets-grid\n [dashboard]=\"dashboard\"\n (onNavigateToAsset)=\"close()\"\n ></c8y-type-dashboard-target-assets-grid>\n</c8y-modal>\n","import { Component, EventEmitter } from '@angular/core';\nimport {\n ActionControl,\n alertOnError,\n BuiltInActionType,\n Column,\n DataSourceModifier,\n DisplayOptions,\n gettext,\n ServerSideDataCallback,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { DashboardManagerService } from '../dashboard-manager.service';\nimport { ContextDashboardManagedObject } from '../../context-dashboard.model';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { TypeDashboardTargetAssetsModalComponent } from '../type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component';\n\n@Component({\n selector: 'c8y-dashboard-manager',\n templateUrl: './type-dashboards-list.component.html'\n})\nexport class TypeDashboardsListComponent {\n title = gettext('Type dashboards');\n loadMoreItemsLabel = gettext('Load more dashboards');\n loadingItemsLabel: string = gettext('Loading dashboards…');\n columns = this.dashboardManagerService.getColumns();\n pagination = this.dashboardManagerService.getDefaultPagination();\n actionControls: ActionControl[] = [\n {\n type: BuiltInActionType.Edit,\n text: gettext('Edit dashboard'),\n callback: item => this.openTargetAssetsModal(item as ContextDashboardManagedObject)\n },\n {\n type: BuiltInActionType.Delete,\n text: gettext('Delete dashboard'),\n callback: item => this.delete(item as ContextDashboardManagedObject)\n }\n ];\n serverSideDataCallback: ServerSideDataCallback;\n displayOptions: DisplayOptions = {\n striped: true,\n bordered: false,\n gridHeader: true,\n filter: true,\n hover: false\n };\n refresh = new EventEmitter<void>();\n\n constructor(\n private dashboardManagerService: DashboardManagerService,\n private bsModalService: BsModalService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n }\n\n async delete(dashboard: ContextDashboardManagedObject) {\n await this.dashboardManagerService.delete(dashboard, () => this.refresh.emit());\n }\n\n openTargetAssetsModal(dashboard: ContextDashboardManagedObject): void {\n const initialState: Pick<TypeDashboardTargetAssetsModalComponent, 'dashboard'> = { dashboard };\n this.bsModalService.show(TypeDashboardTargetAssetsModalComponent, {\n class: 'modal-lg',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n ignoreBackdropClick: true,\n initialState\n });\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const { res, data, paging } = await alertOnError(\n this.dashboardManagerService.getData(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n dataSourceModifier.searchText\n )\n );\n const filteredSize = await alertOnError(\n this.dashboardManagerService.getCount(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n dataSourceModifier.searchText\n )\n );\n const size = await alertOnError(this.dashboardManagerService.getTotal());\n\n return {\n res,\n data,\n paging,\n filteredSize,\n size\n };\n }\n}\n","<c8y-title>\n {{ 'Dashboard manager' | translate }}\n</c8y-title>\n\n<div class=\"content-fullpage d-flex d-col border-top border-bottom\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"actionControls\"\n [showSearch]=\"true\"\n [displayOptions]=\"displayOptions\"\n [refresh]=\"refresh\"\n [expandableRows]=\"'ASYNC'\"\n >\n <div\n *c8yExpandableRow=\"\n let context;\n let asyncRenderSuccess = asyncRenderSuccess;\n let asyncRenderFail = asyncRenderFail\n \"\n >\n <c8y-type-dashboard-info\n [context]=\"context\"\n [asyncRenderSuccess]=\"asyncRenderSuccess\"\n [asyncRenderFail]=\"asyncRenderFail\"\n ></c8y-type-dashboard-info>\n </div>\n\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No matching dashboards.' | translate\"\n [subtitle]=\"'Refine your search terms' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column name=\"icon\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <i [c8yIcon]=\"context.value\"></i>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"deviceTypeValue\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span class=\"label label-info\">\n {{ context.value }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n","import { NgModule } from '@angular/core';\nimport {\n CoreModule,\n gettext,\n hookNavigator,\n hookRoute,\n hookTab,\n ModalModule,\n NavigatorNode\n} from '@c8y/ngx-components';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { DeviceGridModule } from '@c8y/ngx-components/device-grid';\nimport { DashboardManagerTabsFactory } from './dashboard-manager-tabs.factory';\nimport { TypeDashboardsListComponent } from './type-dashboards-list/type-dashboards-list.component';\nimport { ContextDashboardModule } from '../context-dashboard.module';\nimport { TypeDashboardTargetAssetsModalComponent } from './type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component';\nimport { TypeDashboardTargetAssetsGridComponent } from './type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component';\n\nconst DASHBOARD_MANAGER_PATH = 'dashboard-manager';\n\n@NgModule({\n declarations: [\n TypeDashboardsListComponent,\n TypeDashboardTargetAssetsModalComponent,\n TypeDashboardTargetAssetsGridComponent\n ],\n imports: [CoreModule, TooltipModule, DeviceGridModule, ContextDashboardModule, ModalModule],\n providers: [\n hookTab(DashboardManagerTabsFactory),\n hookRoute([\n {\n path: DASHBOARD_MANAGER_PATH,\n redirectTo: `${DASHBOARD_MANAGER_PATH}/type-dashboards`,\n pathMatch: 'full'\n },\n {\n path: `${DASHBOARD_MANAGER_PATH}/type-dashboards`,\n component: TypeDashboardsListComponent\n }\n ]),\n hookNavigator(\n new NavigatorNode({\n parent: gettext('Configuration'),\n path: DASHBOARD_MANAGER_PATH,\n label: gettext('Dashboard manager'),\n icon: 'management1',\n routerLinkExact: false,\n featureId: 'dashboardManager'\n })\n )\n ]\n})\nexport class DashboardManagerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","i5.TypeDashboardInfoComponent","i6.DashboardAvailabilityComponent","i7.TypedDashboardSettingsComponent","i1.ContextDashboardService","i4.AppearanceSettingsComponent","i2.ContextDashboardService","i5","i6.DashboardDetailService","i7","i8","i10.DashboardGeneralSettingsComponent","i11.DashboardAppearanceSettingsComponent","i12.DashboardVersionHistoryComponent","i1.WidgetService","i4.ContextDashboardService","i6","i9.AppearanceSettingsComponent","i10.WidgetPreviewComponent","i1.DashboardOriginatorService","i2.DashboardCaretakerService","i4.WidgetService","i7.DashboardEditModeService","i9","i10.DashboardDetailComponent","i2.ContextDashboardComponent","i2.WidgetService","i7.ContextDashboardComponent","i3.ContextDashboardComponent","i2.TypeDashboardAssetsGridService","i3.ContextDashboardService","i3.TypeDashboardTargetAssetsGridComponent","i1.DashboardManagerService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-context-dashboard.mjs","sources":["../../context-dashboard/new-dashboard.guard.ts","../../context-dashboard/add-dashboard.component.ts","../../context-dashboard/add-dashboard.component.html","../../context-dashboard/add-dashboard.factory.ts","../../context-dashboard/context-dashboard.model.ts","../../context-dashboard/appearance-settings.component.ts","../../context-dashboard/appearance-settings.component.html","../../context-dashboard/cockpit-dashboard/cockpit-dashboard.model.ts","../../context-dashboard/context-dashboard.service.ts","../../context-dashboard/dashboard-detail.service.ts","../../context-dashboard/dashboard-availability.component.ts","../../context-dashboard/dashboard-availability.component.html","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.ts","../../context-dashboard/type-dashboard-info/type-dashboard-info.component.html","../../context-dashboard/dashboard-settings/typed-dashboard-settings.component.ts","../../context-dashboard/dashboard-settings/typed-dashboard-settings.component.html","../../context-dashboard/dashboard-settings/dashboard-general-settings.component.ts","../../context-dashboard/dashboard-settings/dashboard-general-settings.component.html","../../context-dashboard/dashboard-settings/dashboard-appearance-settings.component.ts","../../context-dashboard/dashboard-settings/dashboard-appearance-settings.component.html","../../context-dashboard/dashboard-settings/dashboard-version-history.component.ts","../../context-dashboard/dashboard-settings/dashboard-version-history.component.html","../../context-dashboard/dashboard-detail.component.ts","../../context-dashboard/dashboard-detail.component.html","../../context-dashboard/widget.service.ts","../../context-dashboard/widget-preview.component.ts","../../context-dashboard/widget-preview.component.html","../../context-dashboard/widget-config.component.ts","../../context-dashboard/widget-config.component.html","../../context-dashboard/memento/dashboard-originator.service.ts","../../context-dashboard/memento/dashboard-caretaker.service.ts","../../context-dashboard/memento/dashboard-edit-mode.service.ts","../../context-dashboard/context-dashboard.component.ts","../../context-dashboard/context-dashboard.component.html","../../context-dashboard/cockpit-dashboard/cockpit-dashboard.component.ts","../../context-dashboard/cockpit-dashboard/cockpit-dashboard.component.html","../../context-dashboard/paste-dashboard-action.component.ts","../../context-dashboard/dashboard-action-bar.factory.ts","../../context-dashboard/device-dashboard.guard.ts","../../context-dashboard/group-dashboard.guard.ts","../../context-dashboard/context-dashboard.module.ts","../../context-dashboard/cockpit-dashboard/cockpit-dashboard.module.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.ts","../../context-dashboard/device-info-dashboard/device-info-dashboard.component.html","../../context-dashboard/device-info-dashboard/device-info-dashboard.module.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.ts","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.html","../../context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.ts","../../context-dashboard/dashboard-manager/dashboard-manager-tabs.factory.ts","../../context-dashboard/dashboard-manager/type-dashboards-list/device-type-value.grid-column.ts","../../context-dashboard/dashboard-manager/dashboard-manager.service.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/basic-name.device-grid-column.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-assets-grid.service.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.html","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.ts","../../context-dashboard/dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.html","../../context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.ts","../../context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.html","../../context-dashboard/dashboard-manager/dashboard-manager.module.ts","../../context-dashboard/c8y-ngx-components-context-dashboard.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { gettext, Tab } from '@c8y/ngx-components';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { ContextDashboardManagedObject } from './context-dashboard.model';\n\nexport const newDashboardTab: Tab<string> = {\n featureId: 'newDashboard',\n icon: 'th',\n label: gettext('New dashboard'),\n path: 'dashboard/new-dashboard',\n // place tab as last one and hide it so it won't be opened until user initiates adding new dashboard\n hide: true,\n priority: -Infinity\n};\n\n@Injectable({ providedIn: 'root' })\nexport class NewDashboardGuard {\n tab: Tab;\n\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean | Tab[]> {\n const tabActive = route.routeConfig.path === newDashboardTab.path;\n if (tabActive) {\n const dashboard: Partial<ContextDashboardManagedObject> = {\n c8y_Dashboard: null\n };\n route.data = { dashboard };\n }\n if (!this.tab) {\n this.tab = {\n ...newDashboardTab,\n hide: !tabActive,\n priority: tabActive ? Infinity : -Infinity\n };\n }\n return of([this.tab]);\n }\n}\n","import { Component } from '@angular/core';\nimport { TabsService } from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\nimport { newDashboardTab } from './new-dashboard.guard';\n\n@Component({\n selector: '[c8y-add-dashboard]',\n templateUrl: './add-dashboard.component.html',\n host: { class: 'd-flex a-i-stretch sticky-right' }\n})\nexport class AddDashboardComponent {\n constructor(\n private tabsService: TabsService,\n private router: Router\n ) {}\n\n addDashboard() {\n const tempNewDashboardTab = [...this.tabsService.state].find(\n t => t.featureId === newDashboardTab.featureId\n );\n // navigate before tab is displayed, because in DashboardDetailComponent tab is hidden on navigation from it.\n this.router.navigate(\n typeof tempNewDashboardTab.path === 'string'\n ? [tempNewDashboardTab.path]\n : tempNewDashboardTab.path,\n { replaceUrl: true }\n );\n // show tab and make it appear as first one\n tempNewDashboardTab.hide = false;\n tempNewDashboardTab.priority = Infinity;\n this.tabsService.refresh();\n }\n}\n","<div class=\"d-flex a-i-stretch m-b-8 m-t-8 p-l-8 hidden-xs\">\n <button\n class=\"btn btn-default btn-sm p-l-8 p-r-8 fit-h p-b-0 p-t-0 d-flex a-i-center\"\n title=\"{{ 'Add dashboard' | translate }}\"\n type=\"button\"\n (click)=\"addDashboard()\"\n >\n <i\n class=\"icon-20 m-r-4\"\n c8yIcon=\"add-circle-outline\"\n ></i>\n <span>{{ 'Add dashboard' | translate }}</span>\n </button>\n <div class=\"p-r-sm-40\"></div>\n</div>\n","import { Injectable, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IIdentified } from '@c8y/client';\nimport {\n ContextData,\n ContextRouteService,\n ExtensionFactory,\n Permissions,\n Tab,\n ViewContext\n} from '@c8y/ngx-components';\nimport { AddDashboardComponent } from './add-dashboard.component';\n\nexport abstract class AddDashboardFactory implements ExtensionFactory<Tab> {\n protected abstract targetContext: ViewContext.Device | ViewContext.Group;\n currentContext: ContextData;\n\n private permissions = inject(Permissions);\n private contextRoute = inject(ContextRouteService);\n\n async get(activatedRoute?: ActivatedRoute): Promise<Tab | Tab[]> {\n this.currentContext = this.contextRoute.getContextData(activatedRoute);\n if (\n this.currentContext?.context === this.targetContext &&\n (await this.hasPermission(this.currentContext.contextData))\n ) {\n return [\n {\n component: AddDashboardComponent,\n priority: -Infinity,\n showAlways: true\n }\n ];\n }\n return [];\n }\n\n private async hasPermission(context: IIdentified) {\n if (context?.id) {\n return await this.permissions.canEdit(\n [\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_INVENTORY_CREATE,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_CREATE\n ],\n context\n );\n }\n return this.permissions.hasAnyRole([\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_INVENTORY_CREATE,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_CREATE\n ]);\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddDeviceDashboardFactory extends AddDashboardFactory {\n protected targetContext: ViewContext.Device | ViewContext.Group = ViewContext.Device;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AddGroupDashboardFactory extends AddDashboardFactory {\n protected targetContext: ViewContext.Device | ViewContext.Group = ViewContext.Group;\n}\n","import { InjectionToken } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport {\n Widget,\n DynamicComponentDefinition,\n Route,\n gettext,\n ViewContext,\n WidgetDisplaySettings,\n TabWithTemplate,\n WidgetSettings\n} from '@c8y/ngx-components';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\nexport const CONTEXT_DASHBOARD_CONFIG = new InjectionToken<any>('ContextDashboardConfig');\nexport const DASHBOARD_SETTINGS_CHANGES = {\n classes: gettext('theme'),\n globalRolesIds: gettext('global roles'),\n widgetClasses: gettext('widget header style'),\n widgetMargin: gettext('widget margin'),\n icon: gettext('icon'),\n name: gettext('name'),\n priority: gettext('priority'),\n c8y_IsNavigatorNode: gettext('navigator item'),\n translateWidgetTitle: gettext('translate widget title')\n} as const satisfies Partial<Record<keyof ContextDashboard, string>>;\n\nexport interface ContextDashboardConfig {\n widgetFilter?: (component: DynamicComponentDefinition) => boolean;\n allowFullscreen?: boolean;\n /**\n * @deprecated\n */\n routes?: Route[];\n}\n\nexport interface ContextWidgetConfig {\n /**\n * Settings that define how the default config component is\n * displayed. They are static and will not be saved.\n */\n settings?: WidgetSettings;\n\n /**\n * Settings that are injected in any displaying component.\n */\n displaySettings?: WidgetDisplaySettings;\n\n /**\n * Whatever should be added to the configuration when a widget is created.\n */\n config?: {\n /**\n * Any other information that should be stored here.\n */\n [key: string]: any;\n };\n /**\n * The selected device or group (note: naming is inconsistent as group was added later\n * but must stay for already implemented widgets)\n */\n device?: {\n id?: string | number;\n name?: string;\n [key: string]: any;\n };\n /**\n * Any other information that should be stored here.\n */\n [key: string]: any;\n}\n\nexport interface ContextDashboardManagedObject extends IManagedObject {\n c8y_Dashboard?: ContextDashboard;\n name?: string;\n c8y_DashboardHistory?: ContextDashboard[];\n}\n\nexport interface ContextDashboard {\n icon?: SupportedIconsSuggestions;\n name?: string;\n priority?: number;\n deviceType?: boolean;\n deviceTypeValue?: string;\n isFrozen?: boolean;\n classes?: { [key: string]: boolean };\n widgetClasses?: { [key: string]: boolean };\n widgetMargin?: number;\n translateWidgetTitle?: boolean;\n global?: boolean;\n /**\n * The amount of columns on that dashboard.\n * Can be freely chosen, but product uses either 12 or 24.\n */\n columns?: number;\n children?: {\n [id: string]: Widget;\n };\n globalRolesIds?: DashboardGlobalRoles;\n c8y_IsNavigatorNode?: object;\n description?: string;\n historyDescription?: DashboardHistoryDescription;\n created?: string;\n author?: string;\n}\n/**\n * Object describing changes applied to dashboard settings and its widgets. Used to display user-friendly change log.\n */\nexport interface DashboardHistoryDescription {\n /**\n * Indicates type of dashboard change (or creation).\n */\n changeType?: 'reset' | 'create' | 'update';\n /**\n * List of dashboard settings that has been changed.\n */\n dashboardSettingChanges?: (keyof typeof DASHBOARD_SETTINGS_CHANGES)[];\n /**\n * True if dashboard is typed dashboard, false if it's not.\n */\n deviceType?: boolean;\n /**\n * Object containing lists of widgets (by title) that has been changed, grouped by change type, e.g.:\n * ```ts\n * widgetChanges: {\n * removed: ['Applications'],\n * config?: ['Data points graph', 'Events list'],\n * },\n * ```\n */\n widgetChanges?: {\n removed?: string[];\n added?: string[];\n config?: string[];\n arrangement?: string[];\n };\n /**\n * String used to display the date from which the state was restored.\n */\n restored?: string;\n}\n\nexport const DASHBOARD_CHILDREN_STATE_NAME = {\n initial: gettext('Initial state'),\n config: gettext('Widget configuration changed'),\n removed: gettext('Widget removed'),\n added: gettext('Widget added'),\n arrangement: gettext('Widgets rearranged')\n} as const satisfies Record<keyof DashboardHistoryDescription['widgetChanges'] | 'initial', string>;\n/**\n * Object representing state of dashboard widgets. Its main purpose is to allow to undo and redo changes\n * applied to dashboard children.\n */\nexport type DashboardChildrenState = {\n /**\n * Name of the change applied to dashboard that results in current state, e.g. 'widget removed'\n */\n name: (typeof DASHBOARD_CHILDREN_STATE_NAME)[keyof typeof DASHBOARD_CHILDREN_STATE_NAME];\n /**\n * Dashboard children in particular, immutable state.\n */\n children: ContextDashboard['children'];\n /**\n * Object describing changes applied to dashboard widgets that can be easily mapped to DashboardHistoryDescription widgetChanges.\n * ```ts\n * {\n * removed: {\n * 0969692617637703: { componentId: \"Data points graph\", config: {...}, classes: {...} ...}\n * },\n * config: {\n * 6347567345767653: { componentId: \"Applications\", config: {...}, classes: {...} ...},\n * 6456345634564566: { componentId: \"Events list\", config: {...}, classes: {...} ...},\n * }\n * }\n * ```\n */\n changeHistory: Partial<\n Record<\n keyof DashboardHistoryDescription['widgetChanges'],\n {\n [id: string]: Widget;\n }\n >\n >;\n};\n\nexport enum ContextDashboardType {\n Device = 'device',\n Type = 'type',\n Group = 'group',\n Named = 'name',\n Report = 'report'\n}\n\nexport enum DashboardDetailsTabId {\n GENERAL = 'general',\n APPEARANCE = 'appearance',\n VERSIONHISTORY = 'versionHistory'\n}\n\nexport type DashboardDetailsTabs = Record<\n DashboardDetailsTabId,\n TabWithTemplate<string> & { featureId: DashboardDetailsTabId }\n>;\n\nexport const WIDGET_HEADER_CLASSES = [\n {\n label: gettext('Regular`style`'),\n class: 'panel-title-regular',\n description: gettext('The widget has no border between header and content.')\n },\n {\n label: gettext('Border`style`'),\n class: 'panel-title-border',\n description: gettext('The widget has a small separation border between header and content.')\n },\n {\n label: gettext('Overlay`style`'),\n class: 'panel-title-overlay',\n description: gettext('The widget content overlays the header.')\n },\n {\n label: gettext('Hidden`style`'),\n class: 'panel-title-hidden',\n description: gettext('The widget header is not shown.')\n }\n] as const;\n\nexport const WIDGET_CONTENT_CLASSES = [\n {\n label: gettext('Branded`style`'),\n class: 'panel-content-branded',\n description: gettext('The widget is styled with the main brand color.')\n },\n {\n label: gettext('Match dashboard`style`'),\n class: 'panel-content-light',\n description: gettext('The widget appearance matches the dashboard appearance.')\n },\n {\n label: gettext('Light`style`'),\n class: 'panel-content-white',\n description: gettext('The widget has light appearance, that is, dark text on light background.')\n },\n {\n label: gettext('Dark`style`'),\n class: 'panel-content-dark',\n description: gettext('The widget has dark appearance, that is, light text on dark background.')\n },\n {\n label: gettext('Transparent`style`'),\n class: 'panel-content-transparent',\n description: gettext('The widget has no background.')\n }\n] as const;\n\nexport const DASHBOARD_THEME_CLASSES = [\n {\n label: gettext('Match UI`theme`'),\n class: 'dashboard-theme-light',\n description: gettext('The dashboard appearance matches the UI appearance.')\n },\n {\n label: gettext('Light`theme`'),\n class: 'dashboard-theme-white',\n description: gettext(\n 'The dashboard has light appearance, that is, dark text on light background.'\n )\n },\n {\n label: gettext('Dark`theme`'),\n class: 'dashboard-theme-dark',\n description: gettext(\n 'The dashboard has dark appearance, that is, light text on dark background.'\n )\n },\n // {\n // label: gettext('Transparent`theme`'),\n // class: 'dashboard-theme-transparent',\n // description: gettext(\n // 'The dashboard is styled with a transparent background and therefore is border-less.'\n // )\n // },\n {\n label: gettext('Branded`theme`'),\n class: 'dashboard-theme-branded',\n description: gettext('The dashboard is styled using the brand palette.')\n }\n] as const;\n\nexport const STYLING_CLASS_PREFIXES = [\n 'dashboard-theme-',\n 'panel-title-',\n 'panel-content-'\n] as const;\n\nexport interface DashboardCopyClipboard {\n dashboardId: string;\n dashboard: ContextDashboard;\n context: DashboardContext;\n}\n\nexport interface DashboardContext {\n context: ViewContext;\n contextData: Partial<IManagedObject>;\n}\n\nexport const ALL_GLOBAL_ROLES_SELECTED = 'all' as const;\nexport type DashboardGlobalRoles = number[] | typeof ALL_GLOBAL_ROLES_SELECTED;\n\nexport const PRODUCT_EXPERIENCE = {\n DASHBOARD: {\n EVENTS: {\n DASHBOARDS: 'dashboards',\n REPORTS: 'reports'\n },\n COMPONENTS: {\n DASHBOARD_VIEW: 'context-dashboard',\n DASHBOARD_AVAILABILITY: 'dashboard-availability',\n REPORTS_LIST: 'report-dashboard-list',\n ADD_REPORT: 'report-dashboard-list',\n ADD_DASHBOARD: 'add-dashboard',\n DELETE_DASHBOARD: 'context-dashboard'\n },\n CONTEXT: {\n REPORT: 'report',\n DEVICE: 'device',\n ASSET: 'asset',\n GROUP: 'group'\n },\n ACTIONS: {\n APPLY_GLOBAL_ROLES_CHANGES: 'applyGlobalRolesChanges',\n DELETE: 'delete',\n LOAD: 'load',\n CREATE: 'create',\n ADD_REPORT: 'addReport'\n }\n }\n} as const;\n\nexport interface CanDeactivateComponent {\n canDeactivate: () => boolean | Observable<boolean> | Promise<boolean>;\n}\n\nexport const REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY = 30;\n\nexport type AllowTypeDashboard = 'allow' | 'disallow' | 'allow_if_type_filled';\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { DASHBOARD_THEME_CLASSES, WIDGET_HEADER_CLASSES } from './context-dashboard.model';\nimport { gettext } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-appearance-settings',\n templateUrl: './appearance-settings.component.html'\n})\nexport class AppearanceSettingsComponent {\n @Input()\n themeClass = 'dashboard-theme-light';\n @Input()\n headerClass = 'panel-title-regular';\n @Input()\n defaultThemeClass: string;\n @Input()\n defaultHeaderClass: string;\n @Input()\n dashboardSettings: boolean;\n @Output()\n themeClassChange = new EventEmitter<string>();\n @Output()\n headerClassChange = new EventEmitter<string>();\n\n @Input()\n possibleStylingTheme = DASHBOARD_THEME_CLASSES;\n\n @Input()\n possibleStylingHeader = WIDGET_HEADER_CLASSES;\n\n @Input()\n columns: 1 | 3 = 1;\n\n dashboardDefaultLabel = gettext('Dashboard default');\n\n themeClassClick(value) {\n value = this.resetToDefault(value, this.themeClass, this.defaultThemeClass);\n this.themeClass = value;\n this.themeClassChange.emit(value);\n }\n\n headerClassClick(value) {\n value = this.resetToDefault(value, this.headerClass, this.defaultHeaderClass);\n this.headerClass = value;\n this.headerClassChange.emit(value);\n }\n\n private resetToDefault(value: string, compareTo: string, defaultValue: string) {\n if (defaultValue && value === compareTo) {\n value = defaultValue;\n }\n return value;\n }\n}\n","<div class=\"row\">\n <div class=\"col-md-{{ 12 / columns }} col-xs-12\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend *ngIf=\"dashboardSettings\">{{ 'Default theme' | translate }}</legend>\n <legend *ngIf=\"!dashboardSettings\">{{ 'Theme' | translate }}</legend>\n <ul class=\"list-group\">\n <li\n class=\"list-group-item d-flex a-i-center p-l-0 p-r-0 fit-w\"\n *ngFor=\"let themeClassItem of possibleStylingTheme; let i = index\"\n >\n <div\n class=\"list-item-checkbox\"\n style=\"max-width: calc(100% - 24px)\"\n >\n <label class=\"c8y-radio\">\n <input\n name=\"content\"\n type=\"radio\"\n [id]=\"'groupradiocontentclass' + i\"\n [value]=\"themeClassItem.class\"\n [ngModel]=\"themeClass\"\n (click)=\"themeClassClick(themeClassItem.class)\"\n />\n <span></span>\n <span\n class=\"text-truncate\"\n title=\"{{ themeClassItem.label | translate }}{{\n themeClassItem.class === defaultThemeClass\n ? ' | ' + (dashboardDefaultLabel | translate)\n : ''\n }}\"\n >\n <span>{{ themeClassItem.label | translate }}</span>\n <br />\n <small\n class=\"text-muted\"\n *ngIf=\"themeClassItem.class === defaultThemeClass\"\n >\n {{ dashboardDefaultLabel | translate }}\n </small>\n </span>\n </label>\n </div>\n\n <button\n class=\"btn-help btn-help--sm m-l-auto\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ themeClassItem.description | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </li>\n </ul>\n </fieldset>\n </div>\n <div class=\"col-md-{{ 12 / columns }} col-xs-12\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend *ngIf=\"dashboardSettings\">\n {{ 'Default widget header style' | translate }}\n </legend>\n <legend *ngIf=\"!dashboardSettings\">\n {{ 'Widget header style' | translate }}\n </legend>\n <ul class=\"list-group\">\n <li\n class=\"list-group-item d-flex a-i-center p-l-0 p-r-0\"\n *ngFor=\"let headerClassItem of possibleStylingHeader; let i = index\"\n >\n <div\n class=\"list-item-checkbox\"\n style=\"max-width: calc(100% - 24px)\"\n >\n <label class=\"c8y-radio\">\n <input\n name=\"header\"\n type=\"radio\"\n [id]=\"'groupradioheaderclass' + i\"\n [value]=\"headerClassItem.class\"\n [ngModel]=\"headerClass\"\n (click)=\"headerClassClick(headerClassItem.class)\"\n />\n <span></span>\n <span\n class=\"text-truncate\"\n title=\"{{ headerClassItem.label | translate }}{{\n headerClassItem.class === defaultHeaderClass\n ? ' | ' + (dashboardDefaultLabel | translate)\n : ''\n }}\"\n >\n <span>{{ headerClassItem.label | translate }}</span>\n <br />\n <small\n class=\"text-muted\"\n *ngIf=\"headerClassItem.class === defaultHeaderClass\"\n >\n {{ dashboardDefaultLabel | translate }}\n </small>\n </span>\n </label>\n </div>\n <button\n class=\"btn-help btn-help--sm m-l-auto\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ headerClassItem.description | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </li>\n </ul>\n </fieldset>\n </div>\n <ng-content></ng-content>\n</div>\n","import { InjectionToken } from '@angular/core';\nimport { gettext, Widget } from '@c8y/ngx-components';\n\n/**\n * A hook to define the default widgets of the home dashboard in the cockpit app.\n */\nexport const COCKPIT_HOME_DASHBOARD_CONFIG = new InjectionToken('CockpitHomeDashboardConfig');\n\nexport interface CockpitDashboardConfig {\n /**\n * Allows to have customized dashboard context name in case the CockpitDashboardModule is used in different apps and should have individual home dashboards per app\n */\n dashboardName?: string;\n /**\n * Allows to define the default widgets shown on the Cockpit Homepage\n */\n defaultWidgets?: Widget[];\n /**\n * Allows to have a different page title than the default 'Home'\n */\n pageTitle?: string;\n /**\n * Allows to have individual home dashboards per user\n */\n userSpecific?: boolean;\n}\n\n/**\n * An array of widgets that is per default placed on the home dashboard of the cockpit app.\n */\nexport const DEFAULT_COCKPIT_HOME_WIDGETS = [\n {\n name: 'cockpit.welcome.widget',\n title: gettext('Welcome to Cockpit'),\n _x: 0,\n _y: 0,\n _height: 5,\n _width: 24,\n classes: { 'panel-title-hidden': true }\n },\n {\n name: 'Asset Alarms',\n title: gettext('Active, critical alarms'),\n _x: 0,\n _y: 5,\n _height: 4,\n _width: 12\n },\n {\n name: 'Recent Alarms',\n title: gettext('Recent alarms'),\n _x: 0,\n _y: 9,\n _height: 4,\n _width: 12\n },\n {\n name: 'Map',\n title: gettext('Map'),\n _x: 12,\n _y: 5,\n _height: 8,\n _width: 12\n }\n] as Partial<Widget>[] as Widget[];\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { IManagedObject, InventoryService, IResultList, QueriesUtil } from '@c8y/client';\nimport {\n AlertService,\n ApplicationOptions,\n ContextData,\n DynamicComponentService,\n getActivatedRoute,\n gettext,\n GroupService,\n ModalService,\n NavigatorNode,\n NavigatorService,\n NEW_DASHBOARD_QUERY_PARAM,\n OptionsService,\n Permissions,\n Status,\n Tab,\n TabsService,\n ViewContext,\n Widget\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n assign,\n cloneDeep,\n forEach,\n get,\n has,\n keyBy,\n keys,\n pick,\n reduce,\n set,\n some\n} from 'lodash-es';\nimport { combineLatest, from, Observable, of, Subject } from 'rxjs';\nimport { catchError, filter, map, mergeMap, tap, throwIfEmpty, toArray } from 'rxjs/operators';\nimport {\n ALL_GLOBAL_ROLES_SELECTED,\n AllowTypeDashboard,\n ContextDashboard,\n ContextDashboardManagedObject,\n ContextDashboardType,\n DashboardContext,\n DashboardCopyClipboard,\n PRODUCT_EXPERIENCE,\n STYLING_CLASS_PREFIXES\n} from './context-dashboard.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ContextDashboardService {\n dashboardTabs$: Observable<Tab[]>;\n formDisabled$: Observable<boolean>;\n readonly REPORT_PARTIAL_NAME = 'report_';\n copyClipboard: DashboardCopyClipboard;\n queriesUtil: QueriesUtil;\n readonly VERSION_HISTORY_SIZE_LIMIT = 10;\n private readonly INVENTORY_ROLES = [\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN\n ];\n private cache = new Map<string, ContextDashboardManagedObject>();\n private readonly DEFAULT_PAGESIZE = 1000;\n private readonly FRAGMENT_NAME = 'c8y_Dashboard';\n private readonly DASHBOARD_ROUTE_PATH = 'dashboard';\n private readonly INDEX_SPLIT = '!';\n private readonly CACHE_TIMEOUT = 500;\n private _formDisabled = true;\n private formDisabledSubject = new Subject<boolean>();\n private contextDashboardsCache: {\n query: string;\n result: Promise<IResultList<IManagedObject>>;\n timestamp: number;\n };\n private readonly HIDE_TYPE_DASHBOARD_FOR_ASSETS: keyof ApplicationOptions =\n 'hideTypeDashboardForAssets';\n\n get formDisabled() {\n return this._formDisabled;\n }\n\n set formDisabled(value) {\n this._formDisabled = value;\n this.formDisabledSubject.next(value);\n }\n\n constructor(\n private inventory: InventoryService,\n private tabs: TabsService,\n private modal: ModalService,\n private translateService: TranslateService,\n private router: Router,\n private navigator: NavigatorService,\n private permissions: Permissions,\n private alert: AlertService,\n private dynamicComponent: DynamicComponentService,\n private groupService: GroupService,\n private optionsService: OptionsService\n ) {\n this.formDisabled$ = this.formDisabledSubject.asObservable();\n this.queriesUtil = new QueriesUtil();\n }\n\n async create(dashboardCfg: ContextDashboard, context?: ContextData, name = '') {\n let dashboard: Partial<ContextDashboardManagedObject> = {};\n assign(\n dashboard,\n this.adjustDashboardFor24Columns({ c8y_Dashboard: dashboardCfg }),\n this.updateDashboardHistory(dashboard, dashboardCfg)\n );\n\n const [dashboardType, dashboardFragments] = this.getDashboardFragments(\n { c8y_Dashboard: dashboardCfg } as ContextDashboardManagedObject,\n context,\n name,\n false\n );\n dashboard = { ...dashboard, ...dashboardFragments };\n\n if (this.shouldSetGlobal(dashboard, context)) {\n assign(dashboard, { c8y_Global: {} });\n }\n dashboard.name = dashboard.c8y_Dashboard.name;\n const { data } =\n dashboardType === ContextDashboardType.Group ||\n dashboardType === ContextDashboardType.Device ||\n (context && dashboardType === ContextDashboardType.Named)\n ? await this.inventory.childAdditionsCreate(\n dashboard,\n (context?.contextData.id as string) || ''\n )\n : await this.inventory.create(dashboard);\n return data as ContextDashboardManagedObject;\n }\n\n async detail(dashboardMO: ContextDashboardManagedObject) {\n let { data } = await this.inventory.detail(dashboardMO);\n data = this.adjustDashboardFor24Columns(data as ContextDashboardManagedObject);\n this.cache.set(dashboardMO.id, data);\n return data;\n }\n\n async update(\n dashboard: ContextDashboardManagedObject,\n context?: ContextData\n ): Promise<ContextDashboardManagedObject> {\n const dashboardCfg = dashboard.c8y_Dashboard;\n dashboard.name = dashboard.c8y_Dashboard.name;\n assign(\n dashboard,\n this.adjustDashboardFor24Columns({ c8y_Dashboard: dashboardCfg }),\n this.updateDashboardHistory(dashboard, dashboardCfg)\n );\n\n const keepFragments = this.clean(pick(dashboard, [this.FRAGMENT_NAME, 'id', 'name']));\n keepFragments.c8y_DashboardHistory = dashboard.c8y_DashboardHistory;\n await this.serializeWidgetConfigs(keepFragments);\n\n const [, dashboardTypeFragments] = this.getDashboardFragments(dashboard, context, '', true);\n keepFragments.c8y_Global = this.shouldSetGlobal({ ...dashboard, ...dashboardTypeFragments });\n const { data } = await this.inventory.update({ ...keepFragments, ...dashboardTypeFragments });\n this.cache.set(dashboard.id, data);\n return data;\n }\n\n async delete(dashboard: ContextDashboardManagedObject, withConfirmation = true) {\n try {\n if (withConfirmation) {\n let msg: string = gettext(\n `You are about to delete the dashboard \"{{ dashboardName }}\". Do you want to proceed?`\n );\n if (this.isDeviceType(dashboard)) {\n msg = gettext(\n `You are about to delete the dashboard \"{{ dashboardName }}\" from all devices of the type \"{{ deviceType }}\".\n Do you want to proceed?`\n );\n }\n await this.modal.confirm(\n gettext('Delete dashboard'),\n this.translateService.instant(msg, {\n dashboardName: dashboard.c8y_Dashboard.name,\n deviceType: dashboard.c8y_Dashboard.deviceTypeValue\n }),\n Status.DANGER,\n {\n ok: gettext('Delete'),\n cancel: gettext('Cancel')\n }\n );\n }\n await this.inventory.delete(dashboard);\n const tabToRemove = Array.from(this.tabs.state).find(tab => {\n if (typeof tab.path === 'string') {\n return tab.path.endsWith(`${this.DASHBOARD_ROUTE_PATH}/${dashboard.id}`);\n }\n });\n this.tabs.remove(tabToRemove);\n queueMicrotask(() => {\n this.tabs.refresh();\n });\n } catch (ex) {\n // intended empty\n }\n }\n\n updateDashboardHistory(\n dashboard: Partial<ContextDashboardManagedObject>,\n dashboardCfg: ContextDashboard\n ): Partial<ContextDashboardManagedObject> {\n if (!dashboard.c8y_DashboardHistory) {\n dashboard.c8y_DashboardHistory = [];\n }\n if (!dashboardCfg.historyDescription) {\n dashboardCfg.historyDescription = { changeType: 'create' };\n }\n\n dashboardCfg.created = new Date().toISOString();\n dashboard.c8y_DashboardHistory = cloneDeep([dashboardCfg, ...dashboard.c8y_DashboardHistory]);\n\n if (dashboard.c8y_DashboardHistory.length > this.VERSION_HISTORY_SIZE_LIMIT) {\n dashboard.c8y_DashboardHistory = [\n ...dashboard.c8y_DashboardHistory.slice(0, this.VERSION_HISTORY_SIZE_LIMIT)\n ];\n }\n\n return dashboard;\n }\n\n activateDashboards(\n route: ActivatedRouteSnapshot,\n types: ContextDashboardType[]\n ): Observable<boolean | Tab[]> {\n const { dashboardId } = route.params;\n if (dashboardId) {\n return this.getDashboard$(dashboardId, types, route.parent.data.contextData).pipe(\n tap(dashboard => {\n route.data = { dashboard };\n }),\n map(() => true),\n catchError(() => {\n return of(false);\n })\n );\n }\n\n this.dashboardTabs$ = this.getTabs$(\n route.data.contextData,\n types,\n route?.parent?.data as ContextData\n );\n return this.dashboardTabs$;\n }\n\n getNamedDashboardOrCreate(name: string, defaultWidgets: Widget[], context?: ContextData) {\n const children = this.mapWidgets(defaultWidgets);\n return this.getDashboard$(name, [ContextDashboardType.Named]).pipe(\n throwIfEmpty(),\n catchError(() =>\n from(\n this.create(\n {\n children,\n widgetClasses: { 'dashboard-theme-light': true, 'panel-title-regular': true }\n },\n context,\n name\n )\n )\n )\n );\n }\n\n updateNavigatorItem(mo: IManagedObject) {\n this.navigator.state.forEach(node => {\n if (node.path === `reports/${mo.id}`) {\n this.navigator.remove(node);\n }\n });\n if (mo.c8y_IsNavigatorNode) {\n const nodeToAdd = new NavigatorNode({\n label: mo.name,\n path: `reports/${mo.id}`,\n icon: mo.icon,\n priority: mo.priority\n });\n this.navigator.add(nodeToAdd);\n }\n }\n\n async navigateToDashboard(dashboardMO: ContextDashboardManagedObject) {\n if (/dashboard/.test(this.router.url)) {\n this.router.navigate(['..', dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router),\n queryParams: {\n [NEW_DASHBOARD_QUERY_PARAM]: true\n }\n });\n } else if (/^\\/(device|group)\\/[0-9]+$/.test(this.router.url)) {\n // in case the add dashboard button is the only tab on that route\n this.router.navigate(['.', this.DASHBOARD_ROUTE_PATH, dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router)\n });\n } else {\n this.router.navigate(['..', this.DASHBOARD_ROUTE_PATH, dashboardMO.id], {\n relativeTo: getActivatedRoute(this.router)\n });\n }\n }\n\n /**\n * Checks if user is able to edit dashboard according to his roles and dashboard ownership.\n *\n * @param mo - Dashboard managed object.\n * @returns True if user is able to edit dashboard, false if he cannot.\n */\n async canEditDashboard(mo: ContextDashboardManagedObject): Promise<boolean> {\n return await this.permissions.canEdit(this.INVENTORY_ROLES, mo);\n }\n\n /**\n * Checks if user has permissions to copy dashboard according to his roles.\n *\n * @returns True if user has permissions to copy dashboard, false if he cannot.\n */\n hasPermissionsToCopyDashboard(): boolean {\n return this.permissions.hasAnyRole([\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_INVENTORY_CREATE,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_CREATE\n ]);\n }\n\n isNamed(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}`\n ).test(prop)\n );\n }\n\n isReport(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}${this.REPORT_PARTIAL_NAME}`\n ).test(prop)\n );\n }\n\n isDeviceType(dashboard: Partial<ContextDashboardManagedObject>) {\n return some(keys(dashboard), prop => {\n const matchingProp = new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Type}${this.INDEX_SPLIT}`\n ).test(prop);\n if (!matchingProp) {\n return false;\n } else {\n // there might be matching key, but its value can be {} or null\n return !!dashboard[prop];\n }\n });\n }\n\n isDeviceDashboard(dashboard: Partial<ContextDashboardManagedObject>): boolean {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Device}${this.INDEX_SPLIT}`\n ).test(prop)\n );\n }\n\n isGroupDashboard(dashboard: Partial<ContextDashboardManagedObject>): boolean {\n return some(keys(dashboard), prop =>\n new RegExp(\n `^${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Group}${this.INDEX_SPLIT}`\n ).test(prop)\n );\n }\n\n getFilteredDashboardStyles(styleList: string[]) {\n return styleList.filter(c =>\n STYLING_CLASS_PREFIXES.some(classPrefix => c.startsWith(classPrefix))\n );\n }\n\n getStyling(styleList, styleName, defaultValue) {\n const styling = styleList.find(\n style => style && new RegExp(`-${styleName}$`, 'i').test(style.class)\n );\n return styling ? styling.class : defaultValue;\n }\n\n mapWidgets(widgets: Widget[]) {\n return keyBy(\n widgets.map(widget => {\n widget.id = String(Math.random()).substr(2);\n return widget;\n }),\n 'id'\n );\n }\n\n getDashboard$(dashboardIdOrName, dashboardType: ContextDashboardType[], mo?: IManagedObject) {\n const cache = this.cache.get(dashboardIdOrName);\n\n const dashboards = mo\n ? this.getContextDashboards(mo, dashboardType)\n : this.getNamedDashboard(dashboardIdOrName);\n\n const cacheRefresh = this.getContextDashboards$(dashboards).pipe(\n tap(dashboard => this.cacheDashboard(dashboard)),\n filter(\n dashboard =>\n dashboard.id === dashboardIdOrName ||\n has(\n dashboard,\n `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}${dashboardIdOrName}`\n )\n )\n );\n return cache ? of(cache) : cacheRefresh;\n }\n\n async pasteDashboard(newContext: DashboardContext): Promise<void> {\n if (this.copyClipboard) {\n try {\n const dashboardToPaste = this.createContextDashboardCopy(\n this.copyClipboard.dashboard,\n newContext.contextData,\n this.copyClipboard.context.contextData\n );\n const dashboard = await this.create(this.clean(dashboardToPaste), newContext);\n\n // linking childAdditions for e.g. to grant access to the images uploaded by the image widget for users with only inventory roles.\n const { data: childAdditions } = await this.inventory.childAdditionsList(\n this.copyClipboard.dashboardId,\n { pageSize: 2000 }\n );\n if (childAdditions.length) {\n await this.inventory.childAdditionsBulkAdd(childAdditions, dashboard.id);\n }\n\n this.copyClipboard = undefined;\n this.navigateToDashboard(dashboard);\n } catch {\n this.alert.warning(gettext('Insufficient permissions for this action.'));\n }\n }\n }\n\n /**\n * Creates fragment that associates dashboards with device/asset. It consists of three elements:\n * - FRAGMENT_NAME - static string\n * - dashboard type (e.g. 'group', 'device')\n * - fragment value ( id of device/asset if it is not typed dashboard; deviceTypeValue property of dashboard if it is type dashboard)\n * Example fragment for device dashboard: 'c8y_Dashboard!device!773200'\n * Example fragment for group dashboard: 'c8y_Dashboard!group!84129208'\n * Example fragment for typed device dashboard: 'c8y_Dashboard!type!c8y_lwm2m_connector_device'\n *\n * @param contextDashboardType Type of dashboard\n * @param value Fragment value\n * @returns Fragment for dashboard\n */\n createFragmentKey<T extends ContextDashboardType, V extends string>(\n contextDashboardType: T,\n value: V\n ) {\n return `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${contextDashboardType}${this.INDEX_SPLIT}${value}` as const;\n }\n\n /**\n * Indicates if dashboard can be set to type dashboard.\n * First, it checks if deviceTypeValue exists and if user has permission to set dashboard type.\n * Then, case from sensor app is checked- dashboard created with sensor app has deviceType set to true but\n * type fragment is missing- we do not support this combination.\n * @param mo Dashboard managed object\n * @param context {ContextData} Current context\n * @returns True if dashboard can be set to type dashboard, false if it is forbidden.\n */\n shouldAllowToSetDashboardType(\n mo: ContextDashboardManagedObject,\n context: ContextData\n ): AllowTypeDashboard {\n // disallow if dashboard managed object or context is missing or context is not device/asset/group\n if (\n !mo ||\n !context?.contextData ||\n (context.context !== ViewContext.Device && context.context !== ViewContext.Group)\n ) {\n return 'disallow';\n }\n\n // if context is asset/group and type dashboard feature is hidden for assets/groups or asset/group has no typ, return disallow\n const typeDashboardHiddenForAssets = this.optionsService.get(\n this.HIDE_TYPE_DASHBOARD_FOR_ASSETS,\n true\n );\n if (\n context.context === ViewContext.Group &&\n (typeDashboardHiddenForAssets || !context.contextData.type)\n ) {\n return 'disallow';\n }\n\n // if user has no permission to change dashboard, return disallow\n if (!this.permissions.hasAnyRole(this.INVENTORY_ROLES)) {\n return 'disallow';\n }\n\n // case from sensor app is checked- dashboard created with sensor app has deviceType set to true but\n // type fragment is missing- we do not support this combination.\n const typeFragment = this.createFragmentKey(\n ContextDashboardType.Type,\n context?.contextData?.type\n );\n if (\n mo?.c8y_Dashboard &&\n mo?.c8y_Dashboard.deviceType &&\n context?.contextData?.type &&\n !mo[typeFragment]\n ) {\n return 'disallow';\n }\n\n // if view context is Device and contextData of this device has no type yet but type dashboard can be set when type is filled,\n // return allow_if_type_filled\n if (\n !context?.contextData?.type &&\n context.context === ViewContext.Device &&\n this.permissions.hasAnyRole(this.INVENTORY_ROLES)\n ) {\n return 'allow_if_type_filled';\n }\n\n return 'allow';\n }\n\n createReport(reportCfg: Partial<IManagedObject>) {\n const report: Partial<IManagedObject> = {};\n Object.assign(report, reportCfg);\n Object.assign(report, { c8y_Report: {} });\n return this.inventory.create(report);\n }\n\n addReportNavigatorNode(report: IManagedObject): void {\n const node = new NavigatorNode({\n label: report.name,\n path: `reports/${report.id}`,\n icon: report.icon,\n priority: report.priority\n });\n this.navigator.add(node);\n }\n\n getContextForGS(mo: IManagedObject): string | null {\n if (this.groupService.isDevice(mo)) {\n return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.DEVICE;\n } else if (this.groupService.isAsset(mo)) {\n return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.ASSET;\n } else if (this.groupService.isGroup(mo)) {\n return PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.GROUP;\n } else {\n return null;\n }\n }\n\n async getContextDashboards(\n mo: IManagedObject,\n dashboardType: ContextDashboardType[]\n ): Promise<IResultList<IManagedObject>> {\n const filterCriteria = dashboardType.map(t => ({\n // it's necessary to wrap fragment in quotes because dashboard type can contain spaces\n __has: `'${this.createDashboardFragment(mo, t)}'`\n }));\n\n // the has query above does not work for device type dashboards where the type contains a dot\n const typeFilterCriteria =\n dashboardType.includes(ContextDashboardType.Type) && mo.type\n ? {\n __and: [\n { 'c8y_Dashboard.deviceType': { __eq: true } },\n { 'c8y_Dashboard.deviceTypeValue': { __eq: mo.type } }\n ]\n }\n : undefined;\n const finalFilterCriteria = typeFilterCriteria\n ? [...filterCriteria, typeFilterCriteria]\n : filterCriteria;\n\n const query = this.queriesUtil.buildQuery({\n __filter: {\n __or: finalFilterCriteria\n }\n });\n const now = Date.now();\n const cacheHasValidResponse =\n this.contextDashboardsCache &&\n this.contextDashboardsCache.query === query &&\n now - this.contextDashboardsCache.timestamp < this.CACHE_TIMEOUT;\n\n if (cacheHasValidResponse) {\n return this.contextDashboardsCache.result;\n } else {\n this.contextDashboardsCache = null;\n }\n\n this.contextDashboardsCache = {\n query,\n result: this.inventory.list({\n query,\n pageSize: this.DEFAULT_PAGESIZE\n }),\n timestamp: now\n };\n return this.contextDashboardsCache.result;\n }\n\n /**\n * Creates a tuple describing the dashboard type and its fragments. For assets like devices and groups, it's possible\n * to have two fragments: one indicating this particular device/asset with its ID, and the second indicating\n * the device/asset type (if the dashboard is meant to be applied to all assets of this type).\n *\n * @param dashboardMO - Dashboard managed object.\n * @param context - Context data of asset.\n * @param name - Name of the dashboard.\n * @param isEdit - True if existing dashboard is updated, false when it's creation of new dashboard.\n * @returns Tuple of dashboard type and object containing dashboard fragments.\n */\n private getDashboardFragments(\n dashboardMO: ContextDashboardManagedObject,\n context: ContextData,\n name: string,\n isEdit: boolean\n ): [ContextDashboardType, Record<string, object>] {\n let dashboardType: ContextDashboardType;\n const id = (context?.contextData?.id as string) || '';\n const fragments: Record<string, object> = {};\n\n if (name) {\n // a named dashboard should not receive any other fragments\n dashboardType = ContextDashboardType.Named;\n const namedFragmentKey = this.createFragmentKey(ContextDashboardType.Named, name);\n fragments[namedFragmentKey] = {};\n } else if (context?.context === ViewContext.Device || context?.context === ViewContext.Group) {\n // get base type for device or group\n const defaultType =\n context.context === ViewContext.Device\n ? ContextDashboardType.Device\n : ContextDashboardType.Group;\n dashboardType = dashboardMO.c8y_Dashboard.deviceType\n ? ContextDashboardType.Type\n : defaultType;\n\n // clear fragments from other asset if current asset is not origin of this dashboard\n this.clearRedundantFragment(dashboardMO, defaultType, fragments);\n\n // add base fragment for particular asset\n const deviceOrGroupFragmentKey = this.createFragmentKey(defaultType, id);\n fragments[deviceOrGroupFragmentKey] = {};\n\n // add or clear type fragment\n if (dashboardMO.c8y_Dashboard.deviceType || isEdit) {\n const typeFragmentKey = this.createFragmentKey(\n ContextDashboardType.Type,\n dashboardMO.c8y_Dashboard.deviceTypeValue\n );\n fragments[typeFragmentKey] = dashboardMO.c8y_Dashboard.deviceType ? {} : null;\n }\n }\n\n return [dashboardType, fragments];\n }\n /**\n * Clears fragments that originates from other managed object.\n * E.g. typed dashboard is created for device A of type c8y_MQTTDevice and id 1, so it gets fragments object\n * ```ts\n * {\n * c8y_Dashboard!device!1: {},\n * c8y_Dashboard!type!c8y_MQTTDevice: {}\n * }\n *```\n * then, on device B of type c8y_MQTTDevice and id 2, which also has access to this dashboard, deviceType is set to\n * false, so dashboard is not typed dashboard anymore and now belongs to device B, therefore fragments should look like\n * ```ts\n * {\n * c8y_Dashboard!device!1: null, // this value is cleared because dashboard is doesn't belong to device A anymore\n * c8y_Dashboard!device!2: {}, // assign dashboard to device B\n * c8y_Dashboard!type!c8y_MQTTDevice: null // this value is cleared in getDashboardFragments method as it's not typed dashboard anymore\n * }\n * ```\n *\n * @param dashboardMO - Dashboard managed object.\n * @param type - Context dashboard type.\n * @param fragments - Fragments object.\n */\n private clearRedundantFragment(\n dashboardMO: ContextDashboardManagedObject,\n type: ContextDashboardType,\n fragments: Record<string, object>\n ): void {\n Object.keys(dashboardMO)\n .filter(key => key.startsWith(this.createFragmentKey(type, '')))\n .forEach(key => (fragments[key] = null));\n }\n\n /**\n * Used to migrate dashboards from previous 12 columns layout to 24 columns.\n */\n private adjustDashboardFor24Columns<T extends { c8y_Dashboard?: ContextDashboard }>(\n dashboards: T[]\n ): T[];\n private adjustDashboardFor24Columns<T extends { c8y_Dashboard?: ContextDashboard }>(\n dashboards: T\n ): T;\n private adjustDashboardFor24Columns<T extends { c8y_Dashboard?: ContextDashboard }>(\n dashboards: T | T[]\n ): T | T[] {\n if (Array.isArray(dashboards)) {\n return dashboards.map(dashboard => this.adjustDashboardFor24Columns(dashboard));\n }\n // if `columns` attribute exists, dashboard was already adjusted.\n if (dashboards.c8y_Dashboard.columns) {\n return dashboards;\n }\n\n dashboards.c8y_Dashboard.columns = 24;\n if (!dashboards.c8y_Dashboard.children) {\n return dashboards;\n }\n\n // Newly created NamedContextDashboards are still created with 12 columns for backwards compatibility.\n // Default widgets might be already configured for 24 columns.\n // If a widget is already configured for more than 12 columns, we should not adjust it.\n const alreadyHasWidgetsConfiguredForMoreThan12Columns = Object.values(\n dashboards.c8y_Dashboard.children\n ).some(widget => widget._x + widget._width > 12);\n if (alreadyHasWidgetsConfiguredForMoreThan12Columns) {\n return dashboards;\n }\n\n // we need to multiply both _width and _x attributes with 2 to migrate from 12 to 24 columns.\n Object.values(dashboards.c8y_Dashboard.children).forEach(widget => {\n if (widget._width) {\n widget._width = widget._width * 2;\n }\n if (widget._x) {\n widget._x = widget._x * 2;\n }\n });\n return dashboards;\n }\n\n private async serializeWidgetConfigs(dashboard: ContextDashboardManagedObject): Promise<void> {\n const children = cloneDeep(dashboard.c8y_Dashboard.children);\n if (!children) {\n return;\n }\n const configs = Object.values(children);\n const details = configs.map(({ componentId, config }) => ({ componentId, config }));\n const results = await this.dynamicComponent.serializeConfigs(details);\n results.forEach((result, index) => {\n Object.entries(result).forEach(([key, value]) => {\n set(details[index].config, key, value);\n });\n });\n dashboard.c8y_Dashboard.children = children;\n }\n\n private createContextDashboardCopy(\n dash: ContextDashboard,\n newContext: Partial<IManagedObject>,\n oldContext: Partial<IManagedObject>\n ): ContextDashboard {\n const children = reduce(\n dash.children,\n (_children, child) => {\n const { id } = child;\n const cfg = child.config;\n const propertiesToCopy = {\n device: device => this.replaceContextInObj(device, newContext, oldContext),\n datapoints: dataPoints =>\n this.replaceContextInDataPoints(dataPoints, newContext, oldContext),\n dataPoints: dataPoints =>\n this.replaceContextInDataPoints(dataPoints, newContext, oldContext),\n datapointsGauge: dataPoints =>\n this.replaceContextInDataPoints(dataPoints, newContext, oldContext),\n datapointsLabels: dataPoints =>\n this.replaceContextInDataPoints(dataPoints, newContext, oldContext)\n };\n\n if (cfg) {\n this.copyProperties(cfg, propertiesToCopy);\n if (cfg.options) {\n this.copyProperties(cfg.options, propertiesToCopy);\n }\n }\n\n _children[id] = cloneDeep(child);\n return _children;\n },\n {}\n );\n\n dash.children = children;\n\n const isTypeDashboard = dash.deviceType && !!dash.deviceTypeValue;\n if (isTypeDashboard) {\n dash.deviceTypeValue = newContext.type;\n }\n return dash;\n }\n\n private copyProperties(obj, propertiesToCopy) {\n forEach(propertiesToCopy, (copyFn, property) => {\n if (obj[property]) {\n obj[property] = copyFn(obj[property]);\n }\n });\n }\n\n private replaceContextInDataPoints(\n dataPoints,\n newContext: Partial<IManagedObject>,\n oldContext: Partial<IManagedObject>\n ) {\n dataPoints.forEach(dp => {\n dp.__target = this.replaceContextInObj(dp.__target, newContext, oldContext);\n });\n return dataPoints;\n }\n\n private replaceContextInObj(\n obj: Partial<IManagedObject>,\n newContext: Partial<IManagedObject>,\n oldContext: Partial<IManagedObject>\n ) {\n if (obj && obj.id === oldContext.id) {\n Object.assign(obj, pick(newContext, ['id', 'name']));\n }\n return obj;\n }\n\n private getTabs$(\n mo: ContextDashboardManagedObject,\n dashboardType: ContextDashboardType[],\n context?: ContextData\n ) {\n const dashboards = this.getContextDashboards(mo, dashboardType);\n\n return this.getContextDashboards$(dashboards).pipe(\n mergeMap(dashboard => this.verifyDashboardAvailability$(dashboard)),\n // Due to MTM-62321 named context dashboards included fragments for device and groups.\n // therefore some device-info dashboards (from DM app) might occur in cockpit on device level.\n // We need to filter those out..\n filter(([dashboard]) => {\n // list all identifiers of the dashboard (name, device, group, type)\n const dashboardIdentifiers = Object.keys(dashboard)\n .filter(key => key.startsWith(`${this.FRAGMENT_NAME}${this.INDEX_SPLIT}`))\n .map(key => key.split(this.INDEX_SPLIT)[1]);\n // if dashboard is not named, it's safe to include it\n if (!dashboardIdentifiers.includes(ContextDashboardType.Named)) {\n return true;\n }\n // if dashboard is named, but also has a context identifier, we skip it\n if (\n dashboardIdentifiers.includes(ContextDashboardType.Device) ||\n dashboardIdentifiers.includes(ContextDashboardType.Group)\n ) {\n return false;\n }\n\n // all others are good..\n return true;\n }),\n mergeMap(([dashboard]) => this.removeDashboardMoProperty(dashboard)),\n tap(dashboard => this.cacheDashboard(dashboard)),\n map(dashboard => this.createDashboardTab(dashboard, context)),\n toArray()\n );\n }\n\n private verifyDashboardAvailability$(dashboard: ContextDashboardManagedObject) {\n const globalRolesIds = dashboard?.c8y_Dashboard?.globalRolesIds;\n const canEdit = from(\n this.permissions.canEdit(this.INVENTORY_ROLES, dashboard, { skipRequestCheck: true })\n );\n const hasAnyGlobalRole =\n !globalRolesIds || globalRolesIds === ALL_GLOBAL_ROLES_SELECTED\n ? of(true)\n : of(this.permissions.hasAnyGlobalRole(globalRolesIds));\n\n return combineLatest([of(dashboard), canEdit, hasAnyGlobalRole]).pipe(\n filter(([, canEdit, hasAnyGlobalRole]) => canEdit || hasAnyGlobalRole)\n );\n }\n\n private getContextDashboards$(request: Promise<IResultList<IManagedObject>>) {\n return from(request).pipe(\n mergeMap(response =>\n this.adjustDashboardFor24Columns(response.data as ContextDashboardManagedObject[])\n )\n );\n }\n\n /**\n * Cleans already corrupted dashboards from dashboardMo property.\n * Added to fix dashboards on the cloud instance (eu-latest).\n * @deprecated This is going to be removed after 1007.7.0.\n */\n private async removeDashboardMoProperty(\n dashboard: ContextDashboardManagedObject\n ): Promise<ContextDashboardManagedObject> {\n const dashboardCopy = cloneDeep(dashboard);\n const children = get(dashboardCopy, 'c8y_Dashboard.children');\n let updateDashboard = false;\n\n forEach(children, child => {\n if (get(child, 'componentTransformConfigWithContext')) {\n delete child.componentTransformConfigWithContext;\n updateDashboard = true;\n }\n if (get(child, 'config.dashboardMo')) {\n delete child.config.dashboardMo;\n updateDashboard = true;\n }\n });\n\n if (updateDashboard) {\n await this.update(dashboardCopy);\n }\n return dashboardCopy;\n }\n\n private cacheDashboard(dashboard: ContextDashboardManagedObject) {\n this.cache.set(dashboard.id, dashboard);\n }\n\n private createDashboardTab(dashboard: ContextDashboardManagedObject, context?: ContextData) {\n const { c8y_Dashboard: _dashboard, id } = dashboard;\n return {\n icon: _dashboard.icon,\n path: `${this.DASHBOARD_ROUTE_PATH}/${id}`,\n label: _dashboard.name,\n priority: _dashboard.priority,\n hide: this.isReport(dashboard),\n badge:\n _dashboard.deviceType && this.shouldAllowToSetDashboardType(dashboard, context)\n ? gettext('Dashboard template')\n : null,\n tooltipText: _dashboard.description || gettext('Dashboard template')\n } as Tab;\n }\n\n private clean(dashboard) {\n const jsonString = JSON.stringify(dashboard, (key, value) => {\n if (key === '$$hashKey' || key === 'klasses') {\n return undefined;\n }\n\n return value;\n });\n return JSON.parse(jsonString);\n }\n\n private getNamedDashboard(name: string) {\n return this.inventory.list({\n fragmentType: `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${ContextDashboardType.Named}${this.INDEX_SPLIT}${name}`,\n pageSize: 1\n });\n }\n\n private createDashboardFragment(mo: IManagedObject, type: ContextDashboardType) {\n let value;\n if (mo.c8y_Report) {\n value = `${this.REPORT_PARTIAL_NAME}${mo.id}`;\n } else {\n value = type === ContextDashboardType.Type ? mo.type : mo.id;\n }\n return `${this.FRAGMENT_NAME}${this.INDEX_SPLIT}${type}${this.INDEX_SPLIT}${value}`;\n }\n\n private shouldSetGlobal(dashboard: Partial<ContextDashboardManagedObject>, context?) {\n if (\n (!context && this.isNamed(dashboard) && !this.isReport(dashboard)) ||\n this.isDeviceType(dashboard)\n ) {\n return {};\n }\n return null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { AllowTypeDashboard, ContextDashboard } from './context-dashboard.model';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '@c8y/ngx-components';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardDetailService {\n styling = {\n themeClass: 'dashboard-theme-light',\n headerClass: 'panel-title-regular'\n };\n\n readonly DEFAULT_DASHBOARD_MARGIN = 12;\n readonly DEFAULT_DASHBOARD_ICON = 'th';\n readonly DEFAULT_DASHBOARD_PRIORITY = 5000;\n\n constructor(\n private fb: FormBuilder,\n private translateService: TranslateService\n ) {}\n /**\n * Creates dashboard details form divided into two groups- general settings and appearance settings.\n * @param dashboard Context dashboard object\n * @param isReport True if its report dashboard\n * @param allowTypeDashboard Allow to make dashboard type dashboard\n * @returns Dashboard details form\n */\n initForm(\n dashboard: ContextDashboard,\n isReport: boolean,\n allowTypeDashboard: AllowTypeDashboard\n ): FormGroup {\n return this.fb.group({\n generalSettingsForm: this.initGeneralSettingsForm(dashboard, isReport, allowTypeDashboard),\n appearanceSettingsForm: this.initAppearanceSettingsForm(dashboard)\n });\n }\n /**\n * Creates form group for general settings of dashboard.\n * @param dashboard Context dashboard object\n * @param isReport True if its report dashboard\n * @param deviceTypeValue Value used for typed dashboard\n * @returns Dashboard general settings form\n */\n initGeneralSettingsForm(\n dashboard: ContextDashboard,\n isReport: boolean,\n allowTypeDashboard: AllowTypeDashboard\n ): FormGroup {\n const globalRolesIdsValue = !dashboard?.globalRolesIds\n ? null\n : Array.isArray(dashboard.globalRolesIds)\n ? [...dashboard.globalRolesIds]\n : dashboard.globalRolesIds;\n return this.fb.group({\n icon: [dashboard?.icon || this.DEFAULT_DASHBOARD_ICON, [Validators.minLength(1)]],\n priority: [\n dashboard?.priority || this.DEFAULT_DASHBOARD_PRIORITY,\n [Validators.min(-10000), Validators.max(10000), Validators.required]\n ],\n name: [\n dashboard?.name ||\n (isReport\n ? this.translateService.instant(gettext('Report'))\n : this.translateService.instant(gettext('Dashboard'))),\n [Validators.required, Validators.maxLength(512)]\n ],\n description: [dashboard?.description || null, [Validators.maxLength(1_000)]],\n globalRolesIds: [globalRolesIdsValue],\n c8y_IsNavigatorNode: [!!dashboard?.c8y_IsNavigatorNode],\n ...(allowTypeDashboard !== 'disallow' && {\n deviceType: [\n {\n value: dashboard?.deviceType ?? false,\n disabled: allowTypeDashboard === 'allow_if_type_filled'\n }\n ]\n })\n });\n }\n /**\n * Creates form group for appearance settings of dashboard.\n * @param dashboard Context dashboard object\n * @returns Dashboard appearance settings form\n */\n initAppearanceSettingsForm(dashboard: ContextDashboard): FormGroup {\n return this.fb.group({\n widgetMargin: [\n dashboard?.widgetMargin || this.DEFAULT_DASHBOARD_MARGIN,\n [Validators.min(0), Validators.max(50)]\n ],\n translateWidgetTitle: [!!dashboard?.translateWidgetTitle],\n classes: [dashboard?.classes || { [this.styling.themeClass]: true }],\n widgetClasses: [dashboard?.widgetClasses || { [this.styling.headerClass]: true }]\n });\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IUserGroup, UserGroupService } from '@c8y/client';\nimport { GainsightService, Item, Permissions } from '@c8y/ngx-components';\nimport {\n DashboardGlobalRoles,\n ALL_GLOBAL_ROLES_SELECTED,\n PRODUCT_EXPERIENCE\n} from './context-dashboard.model';\n\n@Component({\n selector: 'c8y-dashboard-availability',\n templateUrl: './dashboard-availability.component.html'\n})\nexport class DashboardAvailabilityComponent implements OnInit {\n /**\n * Ids of global roles assigned to the dashboard or a string \"all\" indicating the selection of all global roles.\n * The value undefined is treated as equivalent to 'all'.\n */\n @Input()\n get globalRolesIds(): DashboardGlobalRoles {\n return this._globalRolesIds;\n }\n set globalRolesIds(ids: DashboardGlobalRoles) {\n if (!ids || ids === ALL_GLOBAL_ROLES_SELECTED) {\n this._globalRolesIds = ALL_GLOBAL_ROLES_SELECTED;\n return;\n }\n this._globalRolesIds = [...ids];\n }\n @Output() globalRolesIdsChange = new EventEmitter<DashboardGlobalRoles>();\n globalRolesItems: Item[] = [];\n globalRolesItemsSelected: Item[] = [];\n selectHidden = false;\n private globalRoles: IUserGroup[] = [];\n private PAGE_SIZE = 100;\n private _globalRolesIds: DashboardGlobalRoles;\n\n constructor(\n private userGroupService: UserGroupService,\n private gainsightService: GainsightService,\n private permissions: Permissions\n ) {}\n\n async ngOnInit() {\n if (this.permissions.hasRole(Permissions.ROLE_USER_MANAGEMENT_READ)) {\n this.globalRoles = await this.getGlobalRoles();\n this.globalRolesItems = this.mapGlobalRolesToItems();\n this.globalRolesItemsSelected = this.getSelectedGlobalRolesItems();\n } else {\n this.selectHidden = true;\n }\n }\n\n onSelected(items: Item[]) {\n if (!items || !Array.isArray(items)) {\n return;\n }\n\n const allItemsSelected = items.length === this.globalRolesItems.length;\n this.globalRolesItemsSelected = items;\n\n if (allItemsSelected) {\n this.globalRolesIdsChange.emit(ALL_GLOBAL_ROLES_SELECTED);\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_AVAILABILITY,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.APPLY_GLOBAL_ROLES_CHANGES,\n globalRoles: ALL_GLOBAL_ROLES_SELECTED\n });\n } else {\n const selectedGlobalRolesIds = items.map(i => i.id);\n this.globalRolesIdsChange.emit([...selectedGlobalRolesIds]);\n\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_AVAILABILITY,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.APPLY_GLOBAL_ROLES_CHANGES,\n globalRoles: selectedGlobalRolesIds?.sort()?.join()\n });\n }\n }\n\n private async getGlobalRoles() {\n return (await this.userGroupService.list({ pageSize: this.PAGE_SIZE })).data;\n }\n\n private mapGlobalRolesToItems(): Item[] {\n return this.globalRoles.map(({ name, id }) => ({\n name,\n id\n }));\n }\n\n private getSelectedGlobalRolesItems(): Item[] {\n if (!this.globalRolesIds || this.globalRolesIds === ALL_GLOBAL_ROLES_SELECTED) {\n return this.globalRolesItems;\n }\n return this.globalRolesIds\n .map(globalRoleId => this.globalRolesItems.find(gR => gR.id === globalRoleId))\n .filter(Boolean);\n }\n}\n","<fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Availability`of dashboard based on permissions`' | translate }}</legend>\n <c8y-form-group>\n <label for=\"availability\">\n <span\n class=\"m-r-4\"\n id=\"availability\"\n >\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <c8y-select-legacy\n *ngIf=\"!selectHidden\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select-legacy>\n <p\n class=\"form-control-static\"\n *ngIf=\"selectHidden\"\n >\n {{ \"You don't have permission to change global roles.\" | translate }}\n </p>\n </c8y-form-group>\n</fieldset>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { InventoryService } from '@c8y/client';\nimport { ContextDashboardManagedObject } from '../context-dashboard.model';\nimport { AlertService } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-type-dashboard-info',\n templateUrl: './type-dashboard-info.component.html'\n})\nexport class TypeDashboardInfoComponent implements OnInit {\n @Input() deviceTypeValue: string;\n @Input() displayDeviceTypeValue: string;\n @Input() context: ContextDashboardManagedObject;\n deviceTypeInstancesCount: number;\n @Input() asyncRenderSuccess: () => void;\n @Input() asyncRenderFail: () => void;\n\n constructor(\n private inventory: InventoryService,\n private alert: AlertService\n ) {}\n\n async ngOnInit() {\n await this.updateDeviceTypeCount();\n }\n\n private async updateDeviceTypeCount(): Promise<void> {\n try {\n const count = await this.inventory.count({\n type: this.deviceTypeValue || this.context.c8y_Dashboard.deviceTypeValue\n });\n this.deviceTypeInstancesCount = count.data;\n this.asyncRenderSuccess?.();\n } catch (error) {\n this.alert.addServerFailure(error);\n this.asyncRenderFail?.();\n }\n }\n}\n","<ul class=\"list-unstyled small animated fadeIn\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Target asset model' | translate }}</label>\n <span class=\"m-l-auto\">\n <span class=\"label label-info\">\n {{ displayDeviceTypeValue || context.c8y_Dashboard.deviceTypeValue }}\n </span>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Dashboard instances' | translate }}</label>\n <span class=\"m-l-auto\">{{ deviceTypeInstancesCount }}</span>\n </li>\n <ng-container *ngIf=\"context?.c8y_Dashboard\">\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Created' | translate }}</label>\n <span class=\"m-l-auto\">\n {{ context.creationTime | c8yDate }} {{ 'by`user`' | translate }} {{ context.owner }}\n </span>\n </li>\n <li\n class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\"\n *ngIf=\"context?.c8y_DashboardHistory?.length\"\n >\n <label class=\"small m-b-0 m-r-8\">{{ 'Last modified' | translate }}</label>\n <span class=\"m-l-auto\">\n {{ context.c8y_DashboardHistory[0].created | c8yDate }} {{ 'by`user`' | translate }}\n {{ context.c8y_DashboardHistory[0].author }}\n </span>\n </li>\n </ng-container>\n</ul>\n","import { Component, EventEmitter, forwardRef, Input, OnInit, Output } from '@angular/core';\nimport { gettext, InterAppService, SupportedApps, SupportedAppKey } from '@c8y/ngx-components';\nimport { IApplication, InventoryService } from '@c8y/client';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { AllowTypeDashboard, ContextDashboardManagedObject } from '../context-dashboard.model';\nimport { Observable } from 'rxjs';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'c8y-typed-dashboard-settings',\n templateUrl: './typed-dashboard-settings.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TypedDashboardSettingsComponent),\n multi: true\n }\n ]\n})\nexport class TypedDashboardSettingsComponent implements ControlValueAccessor, OnInit {\n value: boolean;\n touched = false;\n disabled = false;\n\n @Input() deviceTypeValue: string;\n @Input() displayDeviceTypeValue: string;\n @Input() formInvalid: boolean;\n @Input() mo: ContextDashboardManagedObject;\n @Input() isDevice: boolean;\n @Input() allowTypeDashboard: AllowTypeDashboard;\n @Output() onDuplicateWithoutType = new EventEmitter<void>();\n typedDashboardStatus: string;\n infoText: string;\n deviceTypeInstancesCount: number;\n showSourceNavigationLink$: Observable<boolean>;\n userDeviceManagementApp$: Observable<IApplication>;\n context: any;\n deviceManagementAppKey: SupportedAppKey = SupportedApps.devicemanagement;\n deviceManagementLinkTitle = gettext('Device Info page in {{ deviceManagementAppName }}');\n\n constructor(\n private inventory: InventoryService,\n private interAppService: InterAppService,\n private route: ActivatedRoute\n ) {}\n\n async ngOnInit() {\n this.userDeviceManagementApp$ = this.interAppService.getApp$(this.deviceManagementAppKey);\n this.context = this.route.parent.snapshot.data.contextData;\n this.showSourceNavigationLink$ = this.interAppService.shouldShowAppLink$(\n this.deviceManagementAppKey\n );\n }\n\n async goToDeviceView(): Promise<void> {\n await this.interAppService.navigateToApp(\n this.deviceManagementAppKey,\n `#/device/${this.context.id}/device-info`\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onChange = _ => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onTouched = () => {};\n\n writeValue(value: boolean): void {\n this.value = value;\n this.updateTexts();\n if (value) {\n this.updateDeviceTypeCount();\n }\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(onTouched: any): void {\n this.onTouched = onTouched;\n }\n\n markAsTouched(): void {\n if (!this.touched) {\n this.onTouched();\n this.touched = true;\n }\n }\n\n setDisabledState(disabled: boolean): void {\n this.disabled = disabled;\n }\n\n async toggle(): Promise<void> {\n this.value = !this.value;\n this.onChange(this.value);\n if (this.value && this.deviceTypeInstancesCount == null) {\n this.setDisabledState(true);\n await this.updateDeviceTypeCount();\n }\n this.updateTexts();\n this.setDisabledState(false);\n }\n\n private updateTexts(): void {\n this.typedDashboardStatus = this.value\n ? gettext('Enabled`typed dashboard`')\n : gettext('Disabled`typed dashboard`');\n\n if (this.allowTypeDashboard === 'allow_if_type_filled') {\n this.infoText = gettext(\n `<p class=\"p-b-8\">Enabling this option uses the layout and configuration of this dashboard to create dashboard instances for all devices based on the device type.</p>\n <p class=\"p-b-16\">The current device doesn't have a device type assigned to it. Assign a device type to the device via the \"Asset properties\" widget in the <strong>Info</strong> tab of the device.</p>`\n );\n return;\n }\n\n if (this.value) {\n if (this.isDevice) {\n this.infoText = gettext(\n `<p class=\"p-b-8\">\n The layout and configuration of this dashboard is used by all devices based on device type <span class=\"tag tag--info text-12\">{{ displayDeviceTypeValue }}</span>.\n </p>\n <p class=\"p-b-16\">\n Disabling this option removes it from all devices based on the same type and makes it available only for the current instance.\n </p>`\n );\n } else {\n this.infoText = gettext(\n `<p class=\"p-b-8\">\n The layout and configuration of this dashboard is used by all assets based on asset model <span class=\"tag tag--info text-12\">{{ displayDeviceTypeValue }}</span>.\n </p>\n <p class=\"p-b-16\">\n Disabling this option removes it from all assets based on the same model and makes it available only for the current instance.\n </p>`\n );\n }\n } else {\n if (this.isDevice) {\n this.infoText = gettext(\n `<p>Enabling this option uses the layout and configuration of this dashboard to create dashboard instances for all devices based on the type <span class=\"tag tag--info text-12\">{{ displayDeviceTypeValue }}</span>.</p>`\n );\n } else {\n this.infoText = gettext(\n `<p>Enabling this option uses the layout and configuration of this dashboard to create dashboard instances for all assets based on the model <span class=\"tag tag--info text-12\">{{ displayDeviceTypeValue }}</span>.</p>`\n );\n }\n }\n }\n\n private async updateDeviceTypeCount(): Promise<void> {\n const count = await this.inventory.count({\n type: this.deviceTypeValue\n });\n this.deviceTypeInstancesCount = count.data;\n }\n}\n","<fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend>{{ 'Dashboard template' | translate }}</legend>\n <div class=\"d-flex p-b-16 gap-16\">\n <label class=\"c8y-switch flex-no-shrink\">\n <input\n type=\"checkbox\"\n [checked]=\"value\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\"\n />\n <span></span>\n <span>{{ typedDashboardStatus | translate }}</span>\n </label>\n <div class=\"flex-grow d-flex d-col\">\n <div\n class=\"flex-grow\"\n [innerHtml]=\"infoText | translate: { displayDeviceTypeValue: displayDeviceTypeValue }\"\n ></div>\n <button\n class=\"btn-link p-0 m-r-auto\"\n type=\"button\"\n *ngIf=\"allowTypeDashboard === 'allow_if_type_filled' && showSourceNavigationLink$ | async\"\n (click)=\"goToDeviceView()\"\n >\n {{\n deviceManagementLinkTitle\n | translate\n : {\n deviceManagementAppName:\n userDeviceManagementApp$ | async | humanizeAppName | async\n }\n }}\n <i c8yIcon=\"external-link\"></i>\n </button>\n </div>\n </div>\n\n <c8y-type-dashboard-info\n *ngIf=\"allowTypeDashboard === 'allow'\"\n [context]=\"mo\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n ></c8y-type-dashboard-info>\n\n <div\n class=\"p-t-8 p-b-16\"\n *ngIf=\"mo?.c8y_Dashboard && value\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n type=\"button\"\n (click)=\"onDuplicateWithoutType.emit()\"\n [disabled]=\"formInvalid\"\n >\n {{ 'Duplicate as regular dashboard' | translate }}\n </button>\n </div>\n</fieldset>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport {\n AllowTypeDashboard,\n ContextDashboard,\n ContextDashboardManagedObject,\n DashboardGlobalRoles\n} from '../context-dashboard.model';\nimport { gettext, NavigatorNode, NavigatorService } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\nimport { DashboardDetailService } from '../dashboard-detail.service';\n\n@Component({\n selector: 'c8y-dashboard-general-settings',\n templateUrl: './dashboard-general-settings.component.html'\n})\nexport class DashboardGeneralSettingsComponent {\n @Input() isReport: boolean;\n @Input() isNamedDashboard: boolean;\n @Input() hideAvailability: boolean;\n @Input() dashboard: ContextDashboard;\n @Input() generalSettingsForm: ReturnType<DashboardDetailService['initGeneralSettingsForm']>;\n @Input() deviceTypeValue: string;\n @Input() displayDeviceTypeValue: string;\n @Input() allowTypeDashboard: AllowTypeDashboard;\n @Input() isDevice: boolean;\n @Input() mo: ContextDashboardManagedObject;\n @Output() onDuplicateWithoutType = new EventEmitter<void>();\n dashboardName: string;\n navigatorNodes$: Observable<NavigatorNode[]>;\n globalRolesIds: DashboardGlobalRoles;\n readonly priorityExampleLabel = gettext('e.g. {{ example }}');\n readonly positionInTabsExampleLabel = gettext('Position in tabs (10000 first, -10000 last)');\n constructor(private navigatorService: NavigatorService) {}\n\n ngOnInit() {\n this.navigatorNodes$ = this.navigatorService.items$;\n this.globalRolesIds = this.dashboard.globalRolesIds;\n }\n\n changeGlobalRoleIds() {\n this.generalSettingsForm.patchValue({ globalRolesIds: this.globalRolesIds });\n this.generalSettingsForm.markAsDirty();\n }\n}\n","<div\n class=\"row\"\n [formGroup]=\"generalSettingsForm\"\n>\n <div\n class=\"col-xs-12 p-b-24\"\n [ngClass]=\"{ 'col-md-6': !isReport, 'col-md-8': isReport }\"\n *ngIf=\"!isNamedDashboard || isReport\"\n >\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg m-b-24\">\n <legend>{{ 'Navigation' | translate }}</legend>\n <div class=\"d-flex gap-16\">\n <c8y-form-group>\n <label>{{ 'Icon' | translate }}</label>\n <c8y-icon-selector-wrapper\n [iconSize]=\"24\"\n name=\"icon\"\n formControlName=\"icon\"\n ></c8y-icon-selector-wrapper>\n </c8y-form-group>\n <c8y-form-group class=\"flex-grow\">\n <label for=\"menuLabel\">\n {{ 'Menu label' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Menu label to display in submenu when dashboard is attached' | translate\n }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"menuLabel\"\n placeholder=\"{{ namePlaceholder | translate }}\"\n name=\"name\"\n type=\"text\"\n formControlName=\"name\"\n />\n </c8y-form-group>\n </div>\n\n <c8y-form-group>\n <label for=\"description\">{{ 'Description ' | translate }}</label>\n <textarea\n class=\"form-control\"\n id=\"description\"\n name=\"description\"\n c8y-textarea-autoresize\n formControlName=\"description\"\n ></textarea>\n </c8y-form-group>\n\n <div class=\"row\">\n <div\n class=\"col-lg-7 col-xs-12\"\n *ngIf=\"!isReport\"\n >\n <c8y-form-group>\n <label for=\"position\">\n {{ 'Position in tabs' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ positionInTabsExampleLabel | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n id=\"positionNav\"\n placeholder=\"{{ priorityExampleLabel | translate: { example: '500' } }}\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n formControlName=\"priority\"\n />\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-xs-6\"\n *ngIf=\"isReport\"\n >\n <label translate>Navigator menu item</label>\n <c8y-form-group>\n <label\n class=\"c8y-switch\"\n title=\"{{ 'Show in navigator' | translate }}\"\n >\n <input\n type=\"checkbox\"\n formControlName=\"c8y_IsNavigatorNode\"\n />\n <span></span>\n <span>{{ 'Show in navigator' | translate }}</span>\n </label>\n </c8y-form-group>\n </div>\n\n <div\n class=\"col-xs-6\"\n *ngIf=\"isReport && generalSettingsForm.value.c8y_IsNavigatorNode\"\n >\n <c8y-form-group>\n <label\n class=\"d-block\"\n for=\"position\"\n >\n {{ 'Position in navigator' | translate }}\n <ng-template #positionInNavPop>\n <span>\n {{ positionInNavigationExampleLabel | translate }} \n {{ 'Existing nodes:' | translate }}\n </span>\n <ul class=\"list-unstyled m-t-16 m-b-0\">\n <li\n class=\"p-t-4 p-b-4\"\n title=\"{{ node.label | translate }}\"\n *ngFor=\"let node of navigatorNodes$ | async\"\n >\n <div class=\"icon-flex fit-w\">\n <i [c8yIcon]=\"node.icon\"></i>\n <span class=\"text-truncate m-l-4 m-r-16 flex-grow\">\n {{ node.label | translate }}\n </span>\n <span class=\"text-medium flex-no-shrink\">{{ node.priority }}</span>\n </div>\n </li>\n </ul>\n </ng-template>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"positionInNavPop\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n </label>\n <input\n class=\"form-control\"\n placeholder=\"{{ priorityExampleLabel | translate: { example: '500' } }}\"\n name=\"priority\"\n for=\"position\"\n type=\"number\"\n formControlName=\"priority\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n <c8y-dashboard-availability\n *ngIf=\"\n !!isReport === false &&\n allowTypeDashboard &&\n deviceTypeValue &&\n generalSettingsForm.controls['deviceType'] &&\n !hideAvailability\n \"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"changeGlobalRoleIds()\"\n ></c8y-dashboard-availability>\n </div>\n\n <div class=\"col-xs-12 col-md-6 p-b-24\">\n <c8y-typed-dashboard-settings\n *ngIf=\"allowTypeDashboard !== 'disallow'\"\n formControlName=\"deviceType\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n [formInvalid]=\"generalSettingsForm.invalid\"\n [mo]=\"mo\"\n [isDevice]=\"isDevice\"\n [allowTypeDashboard]=\"allowTypeDashboard\"\n (onDuplicateWithoutType)=\"onDuplicateWithoutType.emit()\"\n ></c8y-typed-dashboard-settings>\n <c8y-dashboard-availability\n *ngIf=\"\n !!isReport === false &&\n (!allowTypeDashboard || !deviceTypeValue || !generalSettingsForm.controls['deviceType']) &&\n !hideAvailability\n \"\n [(globalRolesIds)]=\"globalRolesIds\"\n (globalRolesIdsChange)=\"changeGlobalRoleIds()\"\n ></c8y-dashboard-availability>\n </div>\n</div>\n","import { Component, Input, OnChanges, SimpleChanges, Output, EventEmitter } from '@angular/core';\nimport {\n ContextDashboard,\n DASHBOARD_THEME_CLASSES,\n WIDGET_HEADER_CLASSES\n} from '../context-dashboard.model';\nimport { ContextDashboardService } from '../context-dashboard.service';\nimport { DashboardDetailService } from '../dashboard-detail.service';\n\n@Component({\n selector: 'c8y-dashboard-appearance-settings',\n templateUrl: './dashboard-appearance-settings.component.html'\n})\nexport class DashboardAppearanceSettingsComponent implements OnChanges {\n @Input() dashboard: ContextDashboard;\n @Input() appearanceSettingsForm: ReturnType<DashboardDetailService['initAppearanceSettingsForm']>;\n styling = {\n themeClass: 'dashboard-theme-light',\n headerClass: 'panel-title-regular'\n };\n @Output() previewChanged = new EventEmitter<\n Pick<ContextDashboard, 'classes' | 'widgetClasses'>\n >();\n\n readonly DEFAULT_DASHBOARD_MARGIN = 12;\n\n constructor(private contextDashboardService: ContextDashboardService) {}\n\n ngOnInit() {\n if (this.dashboard) {\n this.setDashboardStyle();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.dashboard) {\n this.dashboard = changes.dashboard.currentValue;\n this.ngOnInit();\n }\n }\n\n changeThemeClass(themeClass: string) {\n this.styling.themeClass = themeClass;\n this.appearanceSettingsForm.patchValue({ classes: { [this.styling.themeClass]: true } });\n this.previewChanged.emit({ classes: { [this.styling.themeClass]: true } });\n this.appearanceSettingsForm.markAsDirty();\n }\n\n changeHeaderClass(headerClass: string) {\n this.styling.headerClass = headerClass;\n this.appearanceSettingsForm.patchValue({ widgetClasses: { [this.styling.headerClass]: true } });\n this.previewChanged.emit({ widgetClasses: { [this.styling.headerClass]: true } });\n this.appearanceSettingsForm.markAsDirty();\n }\n\n private setDashboardStyle() {\n const allClasses = {\n ...this.dashboard.classes,\n ...this.dashboard.widgetClasses\n };\n\n const styles = Object.keys(allClasses).map(c => c.split('-').pop());\n styles.forEach(styleName => {\n this.styling.themeClass = this.contextDashboardService.getStyling(\n DASHBOARD_THEME_CLASSES,\n styleName,\n this.styling.themeClass\n );\n this.styling.headerClass = this.contextDashboardService.getStyling(\n WIDGET_HEADER_CLASSES,\n styleName,\n this.styling.headerClass\n );\n });\n }\n}\n","<div [formGroup]=\"appearanceSettingsForm\">\n <c8y-appearance-settings\n [themeClass]=\"styling.themeClass\"\n [headerClass]=\"styling.headerClass\"\n (themeClassChange)=\"changeThemeClass($event)\"\n (headerClassChange)=\"changeHeaderClass($event)\"\n [dashboardSettings]=\"true\"\n [columns]=\"3\"\n >\n <div class=\"col-md-4\">\n <fieldset class=\"c8y-fieldset c8y-fieldset--lg\">\n <legend translate>Misc</legend>\n <c8y-form-group>\n <label for=\"margin\">{{ 'Widget margin' | translate }}</label>\n <div class=\"input-group\">\n <input\n class=\"form-control\"\n id=\"margin\"\n placeholder=\"{{ DEFAULT_DASHBOARD_MARGIN }}\"\n name=\"margin\"\n type=\"number\"\n formControlName=\"widgetMargin\"\n />\n <span class=\"input-group-addon\">px</span>\n </div>\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate>Widget titles</label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Translate if possible' | translate }}\"\n >\n <input\n name=\"translateWidgetTitle\"\n type=\"checkbox\"\n formControlName=\"translateWidgetTitle\"\n />\n <span></span>\n <span>{{ 'Translate if possible' | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n </div>\n </c8y-appearance-settings>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport { ContextDashboard } from '../context-dashboard.model';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep } from 'lodash-es';\nimport { ContextDashboardService } from '../context-dashboard.service';\n\n@Component({\n selector: 'c8y-dashboard-version-history',\n templateUrl: './dashboard-version-history.component.html'\n})\nexport class DashboardVersionHistoryComponent {\n @Input() dashboardHistory: ContextDashboard[] = [];\n @Input() isReport: boolean;\n @Output() onRevert: EventEmitter<ContextDashboard> = new EventEmitter();\n dashboardHistoryExtended: (ContextDashboard & { descriptionText?: string })[] = [];\n restoredDashboardMessage = gettext(\n 'Restored dashboard state from {{ restoredStateCreationDate }}'\n );\n versionHistoryLimitMessage = gettext(\n 'Store up to {{ versionHistoryLimit }} dashboard versions. Any additional versions will replace/delete older ones'\n );\n\n constructor(\n private translateService: TranslateService,\n public contextDashboardService: ContextDashboardService\n ) {}\n\n ngOnInit() {\n this.generateDashboardHistoryDescription();\n }\n\n generateDashboardHistoryDescription() {\n for (const dashboard of this.dashboardHistory) {\n const copiedDashboard: ContextDashboard & { descriptionText?: string } = { ...dashboard };\n\n let settingChangesMessage = '';\n let assetModelMessage = '';\n let widgetChanges = '';\n\n if (dashboard.historyDescription.changeType === 'create') {\n copiedDashboard.descriptionText = this.translateService.instant(\n this.isReport ? gettext('Report created.') : gettext('Dashboard created.')\n );\n this.dashboardHistoryExtended.push(copiedDashboard);\n continue;\n }\n if (dashboard.historyDescription.changeType === 'reset') {\n copiedDashboard.descriptionText = this.translateService.instant(gettext('Reset widgets'));\n this.dashboardHistoryExtended.push(copiedDashboard);\n continue;\n }\n\n const isDashboardUpdated = dashboard.historyDescription.dashboardSettingChanges?.length > 0;\n if (isDashboardUpdated) {\n const translatedValuesChanged = dashboard.historyDescription.dashboardSettingChanges\n .map(val => this.translateService.instant(val))\n .join(', ');\n settingChangesMessage = this.translateService.instant(\n this.isReport\n ? gettext('Report updated: {{ values }}.')\n : gettext('Dashboard updated: {{ values }}.'),\n { values: translatedValuesChanged }\n );\n }\n\n const isDeviceDashboard = dashboard.historyDescription.deviceType != null && !this.isReport;\n if (isDeviceDashboard) {\n assetModelMessage = this.translateService.instant(\n dashboard.historyDescription.deviceType\n ? gettext('Dashboard asset model has been enabled.')\n : gettext('Dashboard asset model has been disabled.')\n );\n }\n\n if (dashboard.historyDescription.widgetChanges) {\n for (const change in dashboard.historyDescription.widgetChanges) {\n const widgetList = dashboard.historyDescription.widgetChanges[change];\n if (!widgetList) {\n continue;\n }\n const translatedWidgetList = dashboard.translateWidgetTitle\n ? widgetList.map(widget => this.translateService.instant(widget))\n : widgetList;\n switch (change) {\n case 'added':\n widgetChanges =\n widgetChanges +\n this.translateService.instant(gettext('Added widgets: {{ widgetList }}. '), {\n widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n });\n break;\n case 'removed':\n widgetChanges =\n widgetChanges +\n this.translateService.instant(gettext('Removed widgets: {{ widgetList }}. '), {\n widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n });\n break;\n case 'config':\n widgetChanges =\n widgetChanges +\n this.translateService.instant(gettext('Updated widgets: {{ widgetList }}. '), {\n widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n });\n break;\n case 'arrangement':\n widgetChanges =\n widgetChanges +\n this.translateService.instant(gettext('Rearranged widgets: {{ widgetList }}. '), {\n widgetList: `\"${translatedWidgetList.join('\", \"')}\"`\n });\n break;\n default:\n break;\n }\n }\n }\n\n copiedDashboard.descriptionText = `${settingChangesMessage} ${assetModelMessage} ${widgetChanges}`;\n this.dashboardHistoryExtended.push(copiedDashboard);\n }\n }\n\n revertDashboard(dashboard: ContextDashboard): void {\n const newDashboard = cloneDeep(dashboard);\n newDashboard.historyDescription.restored = dashboard.created;\n this.onRevert.emit(newDashboard);\n }\n}\n","<div class=\"bg-component p-t-8 p-b-8 separator-bottom text-center\">\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info\"\n ></i>\n {{\n versionHistoryLimitMessage\n | translate: { versionHistoryLimit: contextDashboardService.VERSION_HISTORY_SIZE_LIMIT }\n }}\n</div>\n<c8y-list-group class=\"p-t-24 p-b-24\">\n <c8y-li-timeline\n *ngFor=\"let dashboard of dashboardHistoryExtended; index as i\"\n [ngClass]=\"{ active: i === 0 }\"\n >\n {{ dashboard.created | date: 'mediumDate' }}\n {{ dashboard.created | date: 'shortTime' }}\n <c8y-li data-cy=\"c8y-dashboard-version-history--history-row\">\n <c8y-li-body>\n <div class=\"d-flex a-i-start\">\n <div class=\"flex-grow\">\n <span\n class=\"text-truncate-wrap\"\n title=\"{{ dashboard.descriptionText }}\"\n data-cy=\"c8y-dashboard-version-history--history-title\"\n >\n {{ dashboard.descriptionText }}\n {{\n dashboard.historyDescription.restored\n ? (restoredDashboardMessage\n | translate\n : {\n restoredStateCreationDate: dashboard.historyDescription.restored | c8yDate\n })\n : ''\n }}\n </span>\n <small\n class=\"text-muted\"\n title=\"{{ 'by`user`' | translate }} {{ dashboard.author }}\"\n *ngIf=\"dashboard.author\"\n >\n <div class=\"icon-flex\">\n <i c8yIcon=\"c8y-user\"></i>\n {{ dashboard.author }}\n </div>\n </small>\n </div>\n\n <span\n class=\"label label-primary m-l-auto\"\n title=\"{{ 'The last saved status of the dashboard' | translate }}\"\n *ngIf=\"i === 0\"\n >\n {{ 'Current`dashboard status`' | translate }}\n </span>\n <span\n class=\"m-l-auto showOnHover\"\n *ngIf=\"dashboardHistoryExtended.length > 1 && i > 0\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Restore the dashboard to this status' | translate }}\"\n type=\"button\"\n (click)=\"revertDashboard(dashboard)\"\n >\n {{ 'Restore' | translate }}\n </button>\n </span>\n </div>\n </c8y-li-body>\n </c8y-li>\n </c8y-li-timeline>\n</c8y-list-group>\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n AppStateService,\n ContextData,\n ContextRouteService,\n GainsightService,\n gettext,\n GroupService,\n memoize,\n ModalService,\n Status,\n Tab,\n TabsService\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { clone, cloneDeep, isEqual } from 'lodash-es';\nimport { Observable, Subject } from 'rxjs';\nimport {\n AllowTypeDashboard,\n ContextDashboard,\n ContextDashboardManagedObject,\n DASHBOARD_SETTINGS_CHANGES,\n DashboardDetailsTabId,\n DashboardDetailsTabs,\n DashboardHistoryDescription,\n PRODUCT_EXPERIENCE,\n REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY\n} from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { first } from 'rxjs/operators';\nimport { newDashboardTab } from './new-dashboard.guard';\nimport { DashboardDetailService } from './dashboard-detail.service';\n\n@Component({\n selector: 'c8y-dashboard-detail',\n templateUrl: './dashboard-detail.component.html'\n})\nexport class DashboardDetailComponent implements OnInit, OnChanges, OnDestroy {\n isCollapsed = true;\n currentContext: ContextData;\n currentDashboard: ContextDashboard;\n @Input() isReport: boolean;\n @Input() deviceType: string;\n @Input() context: any;\n @Input() mo: ContextDashboardManagedObject;\n @Input() dashboard: ContextDashboard;\n @Input() isNamedDashboard: boolean;\n @Input() hideAvailability = false;\n deviceTypeValue: string;\n displayDeviceTypeValue: string;\n icons: string[];\n namePlaceholder: string;\n tabs$: Observable<Tab[]>;\n selectedTab: DashboardDetailsTabId = DashboardDetailsTabId.GENERAL;\n dashboardDetailsForm: ReturnType<DashboardDetailService['initForm']>;\n generalSettingsForm: ReturnType<DashboardDetailService['initGeneralSettingsForm']>;\n appearanceSettingsForm: ReturnType<DashboardDetailService['initAppearanceSettingsForm']>;\n allowTypeDashboard: AllowTypeDashboard;\n isEdit: boolean;\n @Output() dashboardSaved = new EventEmitter<ContextDashboard>();\n @Output() previewChanged = new EventEmitter<any>();\n private destroy$: Subject<void> = new Subject();\n\n readonly TABS_OUTLET_NAME = 'dashboardTabs';\n readonly TABS: DashboardDetailsTabs = {\n general: {\n featureId: DashboardDetailsTabId.GENERAL,\n priority: 30,\n label: gettext('General')\n },\n appearance: {\n featureId: DashboardDetailsTabId.APPEARANCE,\n priority: 20,\n label: gettext('Appearance')\n },\n versionHistory: {\n featureId: DashboardDetailsTabId.VERSIONHISTORY,\n priority: 10,\n label: gettext('Version history')\n }\n };\n\n constructor(\n private contextDashboardService: ContextDashboardService,\n private translateService: TranslateService,\n private contextRoute: ContextRouteService,\n private activatedRoute: ActivatedRoute,\n private tabsService: TabsService,\n private router: Router,\n private inventory: InventoryService,\n private route: ActivatedRoute,\n private dashboardDetailService: DashboardDetailService,\n private appState: AppStateService,\n private groupService: GroupService,\n private modal: ModalService,\n private gainsightService: GainsightService\n ) {}\n\n ngOnInit() {\n this.tabs$ = this.tabsService.items$;\n this.currentContext = this.contextRoute.getContextData(this.activatedRoute);\n this.deviceTypeValue = this.context?.type;\n this.displayDeviceTypeValue =\n this.context &&\n this.groupService.isGroup(this.context) &&\n !this.groupService.isAsset(this.context)\n ? this.translateService.instant(gettext('Group'))\n : this.deviceTypeValue;\n\n this.updateAllowTypeDashboard();\n this.initForm();\n }\n\n ngOnChanges(): void {\n this.updateAllowTypeDashboard();\n }\n\n ngAfterContentInit(): void {\n if (!this.isEdit) {\n this.initializeConfiguration();\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n async save() {\n const oldDashboard = cloneDeep(this.dashboard);\n this.dashboard = {\n ...this.dashboard,\n ...this.generalSettingsForm.value,\n ...this.appearanceSettingsForm.value\n };\n const dashboardSettingChanges: string[] = Object.keys(this.dashboard).filter(key => {\n if (key === 'c8y_IsNavigatorNode') {\n return !!oldDashboard[key] !== !!this.dashboard[key];\n }\n return !isEqual(oldDashboard[key], this.dashboard[key]);\n });\n\n this.dashboard.author = this.appState.currentUser.value.userName;\n this.dashboard.c8y_IsNavigatorNode = this.dashboard.c8y_IsNavigatorNode\n ? {}\n : this.currentDashboard\n ? null\n : undefined;\n\n this.dashboard.deviceTypeValue ??= this.deviceTypeValue;\n this.dashboard.historyDescription =\n this.updateDashboardHistoryDescription(dashboardSettingChanges);\n if (!this.isEdit && !this.isReport) {\n await this.createNewDashboard();\n } else if (!this.isEdit && this.isReport) {\n await this.createNewReport();\n } else {\n await this.updateDashboard();\n this.mo.c8y_DashboardHistory = [\n this.dashboard,\n ...(this.mo?.c8y_DashboardHistory ? this.mo.c8y_DashboardHistory : [])\n ];\n }\n }\n\n updateDashboardHistoryDescription(dashboardChanges: string[]): DashboardHistoryDescription {\n return {\n changeType: this.isEdit ? 'update' : 'create',\n dashboardSettingChanges: dashboardChanges\n .filter(value => value !== 'deviceType')\n .map(value => DASHBOARD_SETTINGS_CHANGES[value] || value),\n deviceType: dashboardChanges.find(value => value === 'deviceType')\n ? this.dashboard.deviceType\n : undefined\n };\n }\n\n selectTab(selectedTab: DashboardDetailsTabId) {\n this.selectedTab = selectedTab;\n this.tabsService.refresh();\n }\n\n async cancel() {\n if (!this.isEdit && !this.isReport) {\n // dashboard creation in it's own tab- confirm and cleanup triggered in canDeactivate during routing\n this.tabsService.items$.pipe(first()).subscribe((tabs: Tab[]) => {\n const tab = tabs.find(t => t.featureId !== newDashboardTab.featureId);\n this.router.navigate(typeof tab.path === 'string' ? [tab.path] : tab.path, {\n replaceUrl: true\n });\n });\n return;\n } else if (!this.isEdit && this.isReport) {\n this.router.navigate(['reports']);\n return;\n } else if (this.dashboardDetailsForm.dirty && !(await this.confirmClosing())) {\n return;\n }\n this.cleanupAfterDetailsClose();\n }\n\n async canDeactivate(omitConfirm = false): Promise<boolean> {\n let canDeactivate: boolean;\n if (this.isCollapsed || !this.dashboardDetailsForm.dirty) {\n canDeactivate = true;\n } else {\n if (omitConfirm) {\n canDeactivate = false;\n } else {\n canDeactivate = await this.confirmClosing();\n }\n }\n if (canDeactivate) {\n this.cleanupAfterDetailsClose();\n }\n return canDeactivate;\n }\n\n show(isEdit: boolean) {\n this.isEdit = isEdit;\n if (this.isEdit) {\n this.edit();\n }\n this.initForm();\n this.isCollapsed = false;\n }\n\n async revertDashboard(dashboard: ContextDashboard) {\n this.dashboard = dashboard;\n this.dashboard.c8y_IsNavigatorNode = this.dashboard.c8y_IsNavigatorNode\n ? {}\n : this.currentDashboard\n ? null\n : undefined;\n await this.updateDashboard();\n }\n\n async duplicateWithoutType(): Promise<void> {\n const newDashboardName = this.translateService.instant(gettext('{{ dashboardName }} (copy)'), {\n dashboardName: this.generalSettingsForm.value.name\n });\n this.generalSettingsForm.patchValue({\n deviceType: false,\n name: newDashboardName\n });\n // setting edition to false so new dashboard can be created as copy of current one\n this.isEdit = false;\n await this.save();\n }\n\n private updateAllowTypeDashboard(): void {\n this.allowTypeDashboard = this.contextDashboardService.shouldAllowToSetDashboardType(\n this.mo,\n this.currentContext\n );\n }\n\n private initForm(): void {\n this.dashboardDetailsForm = this.dashboardDetailService.initForm(\n this.dashboard,\n this.isReport,\n this.allowTypeDashboard\n );\n this.generalSettingsForm = this.dashboardDetailsForm.get('generalSettingsForm') as FormGroup;\n this.appearanceSettingsForm = this.dashboardDetailsForm.get(\n 'appearanceSettingsForm'\n ) as FormGroup;\n }\n\n private async confirmClosing(): Promise<boolean> {\n try {\n await this.modal.confirm(\n gettext('Close dashboard details'),\n gettext(\n 'Are you sure you want to close dashboard details? All unsaved changes will be lost.'\n ),\n Status.WARNING,\n {\n ok: gettext('Close'),\n cancel: gettext('Cancel')\n }\n );\n return true;\n } catch (e) {\n return false;\n }\n }\n\n private async createNewDashboard() {\n const mo: ContextDashboardManagedObject = await this.contextDashboardService.create(\n this.dashboard,\n this.currentContext\n );\n\n await this.onCreateGSEvent(mo);\n this.cleanupAfterDetailsClose();\n await this.contextDashboardService.navigateToDashboard(mo);\n }\n\n private async onCreateGSEvent(mo: ContextDashboardManagedObject) {\n const parentName = await this.convertStringToHash(this.context?.name);\n const dashboardName = await this.convertStringToHash(this.dashboard?.name);\n\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.ADD_DASHBOARD,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.CREATE,\n name: dashboardName,\n id: mo.id,\n nameId: `${dashboardName}_${this.mo.id}`,\n parentAssetId: this.context?.id ? this.context.id : 'noContext',\n parentAssetName: this.context?.id ? parentName : 'noContext',\n parentAssetType: this.context?.id ? this.context.type : 'noContext',\n parentAssetNameId: this.context?.id ? `${parentName}_${this.context.id}` : 'noContext',\n parentAssetNameDashboardName: this.context?.id\n ? `${parentName}_${dashboardName}`\n : 'noContext',\n parentAssetIdDashboardId: this.context?.id ? `${this.context.id}_${this.mo.id}` : 'noContext',\n parentAssetNameDashboardId: this.context?.id ? `${parentName}_${this.mo.id}` : 'noContext',\n parentAssetNameIdDashboardNameId: this.context?.id\n ? `${parentName}_${this.context.id}_${dashboardName}_${this.mo.id}`\n : 'noContext',\n dashboardType: mo.c8y_Dashboard.deviceType ? mo.c8y_Dashboard.deviceTypeValue : null,\n context: this.contextDashboardService.getContextForGS(\n this.currentContext.contextData as IManagedObject\n )\n });\n }\n\n @memoize()\n private async convertStringToHash(str: string) {\n if (!str) {\n return null;\n }\n return (await this.gainsightService.shouldSendPiiData())\n ? str\n : await this.gainsightService.hashGroupName(str);\n }\n\n private async createNewReport() {\n try {\n const { name, icon, c8y_IsNavigatorNode, priority, description } = this.dashboard;\n const report = (\n await this.contextDashboardService.createReport({\n name,\n icon,\n c8y_IsNavigatorNode,\n priority,\n description\n } as Partial<IManagedObject>)\n ).data;\n\n await this.contextDashboardService.create(\n this.dashboard,\n undefined,\n `${this.contextDashboardService.REPORT_PARTIAL_NAME}${report.id}`\n );\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.REPORTS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.ADD_REPORT,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.CREATE,\n name: report.name,\n id: report.id,\n context: PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.REPORT\n });\n if (report.c8y_IsNavigatorNode) {\n this.contextDashboardService.addReportNavigatorNode(report);\n }\n this.cleanupAfterDetailsClose();\n await this.router.navigate(['reports', report.id]);\n } catch (ex) {\n // intended empty\n }\n }\n\n private async updateDashboard() {\n try {\n const dashboardMO: ContextDashboardManagedObject = cloneDeep(this.mo);\n const cfg = this.dashboard;\n if (this.isReport) {\n const { name, icon, c8y_IsNavigatorNode, priority, description } = cfg;\n dashboardMO.c8y_Dashboard = cfg;\n await this.updateReport({\n id: this.context.id,\n name,\n icon,\n c8y_IsNavigatorNode,\n priority,\n description\n });\n } else {\n dashboardMO.c8y_Dashboard = cfg;\n }\n\n const updatedDashboardMo = await this.contextDashboardService.update(\n dashboardMO,\n this.currentContext\n );\n this.cleanupAfterDetailsClose();\n\n this.dashboardSaved.emit(updatedDashboardMo);\n } catch (ex) {\n // intended empty\n }\n }\n\n private edit() {\n if (this.isReport) {\n const { name, icon, priority, c8y_IsNavigatorNode, description } = this.context;\n Object.assign(this.dashboard, { name, icon, priority, c8y_IsNavigatorNode, description });\n }\n this.isNamedDashboard = this.contextDashboardService.isNamed(this.mo);\n this.selectedTab =\n this.hideAvailability && this.isNamedDashboard\n ? DashboardDetailsTabId.APPEARANCE\n : DashboardDetailsTabId.GENERAL;\n this.initializeConfiguration();\n }\n\n private initializeConfiguration() {\n const defaultDashboardCfg: Partial<ContextDashboard> = {\n name: this.translateService.instant(this.isReport ? gettext('Report') : gettext('Dashboard')),\n priority: this.isReport\n ? REPORT_DEFAULT_NAVIGATION_NODE_PRIORITY\n : this.dashboardDetailService.DEFAULT_DASHBOARD_PRIORITY,\n icon: this.dashboardDetailService.DEFAULT_DASHBOARD_ICON,\n deviceTypeValue: this.deviceType,\n columns: 24\n };\n\n if (this.dashboard) {\n this.currentDashboard = clone(this.dashboard);\n } else {\n this.dashboard = defaultDashboardCfg;\n this.dashboardDetailsForm.markAsDirty();\n }\n this.namePlaceholder = this.isReport ? gettext('e.g. My report') : gettext('e.g. My dashboard');\n }\n\n private async updateReport(mo: Partial<IManagedObject>) {\n mo.c8y_IsNavigatorNode = mo.c8y_IsNavigatorNode ? {} : null;\n const res = await this.inventory.update(mo);\n this.context = res.data;\n if (this.route.parent) {\n this.route.parent.snapshot.data.contextData = this.context;\n }\n this.contextDashboardService.updateNavigatorItem(res.data);\n }\n\n private cleanupAfterDetailsClose() {\n this.isCollapsed = true;\n if (!this.isEdit) {\n const dashboardContext = this.route.snapshot.data.dashboard;\n // hide New dashboard tab\n const tmpNewDashboardTab = [...this.tabsService.state].find(\n t => t.featureId === newDashboardTab.featureId\n );\n // don't hide the new dashboard tab when clicking on the add dashboard button from another dashboard.\n if (!tmpNewDashboardTab || dashboardContext?.c8y_Dashboard) {\n return;\n }\n // hide tab and make it appear as last one to prevent navigating to it\n tmpNewDashboardTab.hide = true;\n tmpNewDashboardTab.priority = -Infinity;\n this.tabsService.refresh();\n }\n this.previewChanged.emit(this.dashboard);\n }\n}\n","<div\n class=\"collapse c8y-top-drawer\"\n [collapse]=\"isCollapsed\"\n [isAnimated]=\"true\"\n>\n <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n <span class=\"h4\">{{ 'Dashboard settings' | translate }}</span>\n </div>\n\n <div\n class=\"d-flex\"\n [formGroup]=\"dashboardDetailsForm\"\n *ngIf=\"!isCollapsed\"\n >\n <c8y-tabs-outlet\n [tabs]=\"tabs$ | async\"\n [outletName]=\"TABS_OUTLET_NAME\"\n [orientation]=\"'vertical'\"\n class=\"c8y-top-drawer--tabs\"\n ></c8y-tabs-outlet>\n <div class=\"inner-scroll c8y-top-drawer__tabs-container flex-grow p-l-24 p-r-lg-32 p-r-xs-24 p-r-sm-24\">\n <c8y-tab\n *ngIf=\"(!isNamedDashboard && !hideAvailability) || isReport\"\n [label]=\"TABS.general.label\"\n [icon]=\"'imac-settings'\"\n [priority]=\"100\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.general.featureId)\"\n [isActive]=\"selectedTab === TABS.general.featureId\"\n ></c8y-tab>\n <c8y-tab\n [label]=\"TABS.appearance.label\"\n [priority]=\"50\"\n [icon]=\"'web-design'\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.appearance.featureId)\"\n [isActive]=\"selectedTab === TABS.appearance.featureId\"\n ></c8y-tab>\n <c8y-tab\n *ngIf=\"mo?.c8y_DashboardHistory\"\n [label]=\"TABS.versionHistory.label\"\n [icon]=\"'versions'\"\n [priority]=\"10\"\n [tabsOutlet]=\"TABS_OUTLET_NAME\"\n (onSelect)=\"selectTab(TABS.versionHistory.featureId)\"\n [isActive]=\"selectedTab === TABS.versionHistory.featureId\"\n ></c8y-tab>\n <ng-container [ngSwitch]=\"selectedTab\">\n <c8y-dashboard-general-settings\n *ngSwitchCase=\"TABS.general.featureId\"\n [isReport]=\"isReport\"\n [isNamedDashboard]=\"isNamedDashboard\"\n [hideAvailability]=\"hideAvailability\"\n [dashboard]=\"dashboard\"\n [generalSettingsForm]=\"generalSettingsForm\"\n [deviceTypeValue]=\"deviceTypeValue\"\n [displayDeviceTypeValue]=\"displayDeviceTypeValue\"\n [mo]=\"mo\"\n [allowTypeDashboard]=\"allowTypeDashboard\"\n [isDevice]=\"!!context?.c8y_IsDevice\"\n class=\"animated fadeIn\"\n (onDuplicateWithoutType)=\"duplicateWithoutType()\"\n ></c8y-dashboard-general-settings>\n <c8y-dashboard-appearance-settings\n *ngSwitchCase=\"TABS.appearance.featureId\"\n [dashboard]=\"dashboard\"\n [appearanceSettingsForm]=\"appearanceSettingsForm\"\n (previewChanged)=\"previewChanged.emit($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-appearance-settings>\n <c8y-dashboard-version-history\n *ngSwitchCase=\"TABS.versionHistory.featureId\"\n [dashboardHistory]=\"mo.c8y_DashboardHistory\"\n [isReport]=\"isReport\"\n (onRevert)=\"revertDashboard($event)\"\n class=\"animated fadeIn\"\n ></c8y-dashboard-version-history>\n </ng-container>\n </div>\n </div>\n\n <div class=\"c8y-top-drawer--footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--cancel-dashboard\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n data-cy=\"dashboard-detail--save-dashboard\"\n (click)=\"save()\"\n [disabled]=\"\n (dashboardDetailsForm?.invalid || dashboardDetailsForm?.pristine) && this.isEdit\n \"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</div>\n","import { Injectable, Inject, Optional } from '@angular/core';\nimport { sortBy, cloneDeep, get, omit } from 'lodash-es';\nimport { DynamicComponentService, DynamicComponentDefinition, Widget } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ContextDashboardConfig, CONTEXT_DASHBOARD_CONFIG } from './context-dashboard.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WidgetService {\n widgets: DynamicComponentDefinition[];\n\n constructor(\n private dynamicComponentService: DynamicComponentService,\n private translateService: TranslateService,\n @Optional()\n @Inject(CONTEXT_DASHBOARD_CONFIG)\n public moduleConfig: ContextDashboardConfig | undefined\n ) {\n this.dynamicComponentService.items$.subscribe(widgets => {\n this.widgets = widgets;\n });\n }\n\n async getWidgetDefinition(componentId): Promise<DynamicComponentDefinition> {\n return this.dynamicComponentService.getById(componentId);\n }\n\n getWidgetDefinitions() {\n const translatedComponents = this.widgets.map(cmp => ({\n ...cmp,\n label: this.translateService.instant(cmp.label)\n }));\n\n // cloneDeep and injector lead to a performance issue. We removing the injectors here,\n // as they are not needed, to avoid use of a lot of CPU for cloning.\n const translatedComponentsWithoutInjector = translatedComponents.map(cmp =>\n omit(cmp, 'injector')\n );\n const filterFn: (component: DynamicComponentDefinition) => boolean =\n this.moduleConfig?.widgetFilter ||\n (({ data }) => !(data && data.settings && data.settings.noNewWidgets));\n return cloneDeep(sortBy(translatedComponentsWithoutInjector, 'label').filter(filterFn));\n }\n\n async mapLegacy(widget: Partial<Widget>): Promise<Widget> {\n const cmp = await this.getWidgetDefinition(widget.componentId || widget.name);\n widget = this.mapDisplaySettings(widget, cmp);\n\n if (get(cmp, 'data.settings.upgrade')) {\n widget.widgetComponent = cmp.data.settings.widgetComponent;\n widget.configComponent = cmp.data.settings.configComponent;\n widget.templateUrl = cmp.data.settings.templateUrl;\n widget.configTemplateUrl = cmp.data.settings.configTemplateUrl;\n widget.transformConfigWithContext =\n cmp.data.settings.componentTransformConfigWithContext ||\n cmp.data.settings.transformConfigWithContext ||\n widget.transformConfigWithContext;\n } else {\n delete widget.templateUrl;\n delete widget.configTemplateUrl;\n }\n return widget as Widget;\n }\n\n private mapDisplaySettings(\n widget: Partial<Widget>,\n cmp: DynamicComponentDefinition\n ): Partial<Widget> {\n if (cmp?.data?.displaySettings) {\n widget.config = { displaySettings: cmp.data.displaySettings, ...(widget.config || {}) };\n }\n return widget;\n }\n}\n","import { Input, Component } from '@angular/core';\n\n@Component({\n selector: 'c8y-widget-preview',\n templateUrl: './widget-preview.component.html'\n})\nexport class WidgetPreviewComponent {\n @Input()\n previewClasses: { [key: string]: boolean } = {\n 'dashboard-theme-light': true,\n 'panel-title-regular': true\n };\n\n @Input()\n tab: { name: string; icon: string };\n}\n","<div class=\"legend form-block\" translate>Preview</div>\n<label *ngIf=\"tab\" translate>Tab and layout</label>\n<label *ngIf=\"!tab\" translate>Layout</label>\n<div class=\"dashboard-preview-slot\" [ngClass]=\"previewClasses\">\n <div\n class=\"page-tabs page-tabs-horizontal navigator-open p-absolute overflow-hidden\"\n style=\"left: 0; margin: 0 15px\"\n *ngIf=\"tab\"\n >\n <div class=\"tabContainer hidden-xs\">\n <ul role=\"menu\" class=\"nav nav-tabs nav-tabsc8y\">\n <li role=\"menuitem\" class=\"active\" style=\"left: 16px\">\n <a routerlinkactive=\"\" title=\"{{ tab.name }}\">\n <i class=\"text-primary\" [c8yIcon]=\"tab.icon\"></i>\n <span class=\"txt\">{{ tab.name }}</span>\n </a>\n </li>\n </ul>\n </div>\n <div class=\"visible-xs mobile-tabs\"></div>\n </div>\n <div [ngClass]=\"{ 'm-t-64': !!tab }\">\n <div class=\"card card-dashboard\" style=\"height: 300px\">\n <div class=\"card-header-actions\" style=\"z-index: 8\">\n <div class=\"card-title\">\n <span translate>Widget title</span>\n </div>\n <div class=\"header-actions\">\n <div class=\"optionsBtn dropdown\">\n <button\n type=\"button\"\n title=\"{{ 'Settings' | translate }}\"\n (click)=\"(false)\"\n class=\"btn btn-dot dropdown-toggle c8y-dropdown\"\n aria-haspopup=\"true\"\n >\n <i c8yIcon=\"cog\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"card-inner-scroll p-t-16\">\n <p translate>Widget example content.</p>\n </div>\n </div>\n </div>\n</div>\n","import { Component, OnDestroy, ViewChild } from '@angular/core';\nimport { NgForm } from '@angular/forms';\nimport { DynamicComponentDefinition, Widget, DynamicComponentComponent } from '@c8y/ngx-components';\nimport { AssetSelectionChangeEvent } from '@c8y/ngx-components/assets-navigator';\nimport { clone, cloneDeep, escapeRegExp, get, omit } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { iif, Subject, Subscription, timer } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport {\n ContextDashboardManagedObject,\n WIDGET_CONTENT_CLASSES,\n WIDGET_HEADER_CLASSES,\n ContextWidgetConfig\n} from './context-dashboard.model';\nimport { WidgetService } from './widget.service';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { IManagedObject, InventoryService } from '@c8y/client';\n\n@Component({\n selector: 'c8y-widget-config',\n templateUrl: './widget-config.component.html'\n})\nexport class WidgetConfigComponent implements OnDestroy {\n selectedDevice: IManagedObject;\n mode: 'config' | 'select' | 'style' = 'select';\n searchResult: DynamicComponentDefinition[];\n components: DynamicComponentDefinition[];\n selected: DynamicComponentDefinition;\n searchChange$ = new Subject();\n searchTerm = '';\n context: any;\n componentLabel: string;\n mo: ContextDashboardManagedObject;\n styling = {\n headerClass: 'panel-title-regular',\n contentClass: 'panel-content-light'\n };\n defaultStyling = {\n headerClass: 'panel-title-regular',\n contentClass: 'panel-content-light'\n };\n possibleStyling = { WIDGET_HEADER_CLASSES, WIDGET_CONTENT_CLASSES };\n current: any;\n widgetConfig: ContextWidgetConfig;\n isUpgrade = false;\n widgetHasConfigComponent: boolean;\n\n @ViewChild('config', { static: false })\n dynamicComponent: DynamicComponentComponent;\n\n @ViewChild('configForm', { static: false })\n configForm: NgForm;\n\n get isEdit() {\n return !!this.current;\n }\n\n get isDeviceTypeDashboard(): boolean {\n return !!this.mo.c8y_Dashboard?.deviceType && !!this.mo.c8y_Dashboard?.deviceTypeValue;\n }\n\n result: Promise<Widget> = new Promise((resolve, reject) => {\n this._save = resolve;\n this._cancel = reject;\n });\n\n private searchSub: Subscription;\n private _save: (value: Widget) => void;\n private _cancel: (reason?: any) => void;\n\n constructor(\n private widgetService: WidgetService,\n private modal: BsModalRef,\n private inventory: InventoryService,\n public contextDashboardService: ContextDashboardService\n ) {}\n\n async ngAfterContentInit(): Promise<void> {\n this.components = this.widgetService.getWidgetDefinitions();\n\n if (this.selected) {\n this.current = clone(this.selected);\n this.select(this.selected, this.isEdit ? 'config' : 'select');\n }\n\n this.searchSub = this.searchChange$\n .pipe(\n switchMap((event: KeyboardEvent) => iif(() => event.which !== 13, timer(200), timer(10)))\n )\n .subscribe(() => {\n this.search();\n });\n\n this.setStylings();\n\n if (this.widgetConfig?.device) {\n const { data } = await this.inventory.detail(this.widgetConfig.device.id);\n this.selectedDevice = data;\n }\n }\n\n isSaveDisabled(): boolean {\n return this.configForm?.invalid || this.checkIfDeviceRequired();\n }\n\n checkIfDeviceRequired() {\n return (\n !this.widgetConfig ||\n (!this.widgetConfig.settings.deviceTargetNotRequired &&\n !this.widgetConfig.device &&\n !this.widgetConfig.settings.noDeviceTarget)\n );\n }\n\n selectionChanged(selection?: AssetSelectionChangeEvent) {\n this.widgetConfig.device = selection?.change?.item;\n this.dynamicComponent.emitConfigChange({\n device: this.widgetConfig.device\n });\n }\n\n async save() {\n const hookSuccess = await this.dynamicComponent?.callLifeCycleHooks().toPromise();\n if (!hookSuccess) {\n return;\n }\n\n const { _x, _y, _width, _height } = this.selected.data;\n\n if (\n this.widgetConfig &&\n this.widgetConfig.device &&\n // serializing will be handled by resolver\n !this.selected?.resolve?.device\n ) {\n const { id, name } = this.widgetConfig.device;\n this.widgetConfig.device = { id, name };\n }\n\n const widget = {\n _x,\n _y,\n _width,\n _height,\n config: omit(this.widgetConfig, ['settings', 'displaySettings']),\n title: this.selected.data.title,\n componentId: this.selected.id,\n id: this.isEdit ? this.current.data.id : String(Math.random()).substr(2),\n classes: this.getStyle(),\n ...(!this.isEdit ? this.widgetConfig.settings.widgetDefaults : {})\n } as Widget;\n\n this._save(widget);\n }\n\n select(cmp, mode: 'select' | 'config' = 'config') {\n if (mode === 'config' && this.configForm) {\n const formGroup = this.configForm.control;\n for (const control of Object.keys(formGroup.controls)) {\n formGroup.removeControl(control);\n }\n }\n\n cmp.data = cmp.data || {};\n this.selected = cmp;\n\n this.isUpgrade = !!get(cmp, 'data.settings.upgrade');\n this.contextDashboardService.formDisabled = this.isUpgrade;\n\n if (this.isEdit) {\n const { _x, _y, _width, _height, classes, title } = this.current.data;\n this.selected.data = { ...this.selected.data, _x, _y, _width, _height, classes, title };\n }\n\n /* this.selected.component cannot be checked since it is faulty for widgets like Help and Service, \n but exists for Applications widget and this would cause chaotic behaviour.\n */\n this.widgetHasConfigComponent =\n !!this.selected.loadConfigComponent || mode === 'select' || mode === 'config';\n\n this.widgetConfig = cloneDeep(this.composeWidgetConfig(this.selected, this.context));\n\n this.selected.data.title = this.selected.data.title || cmp.label;\n this.componentLabel = cmp.label;\n this.mode = mode;\n }\n\n search() {\n if (this.searchTerm.length > 0) {\n this.searchResult = this.components.filter(cmp =>\n new RegExp(escapeRegExp(this.searchTerm.trim()), 'i').test(cmp.label)\n );\n } else {\n this.resetSearch();\n }\n }\n\n resetSearch() {\n this.searchTerm = '';\n this.searchResult = undefined;\n }\n\n changeMode(mode: 'config' | 'select' | 'style') {\n this.mode = mode;\n }\n\n close() {\n this._cancel();\n this.modal.hide();\n }\n\n getStyle(isPreview = false) {\n const cssClasses = {};\n if (isPreview || !this.isDashboardDefaultStyle(this.styling.headerClass)) {\n cssClasses[this.styling.headerClass] = true;\n }\n\n if (isPreview || !this.isDashboardDefaultStyle(this.styling.contentClass)) {\n cssClasses[this.styling.contentClass] = true;\n }\n\n if (isPreview) {\n cssClasses[`dashboard-theme-${this.defaultStyling.contentClass.split('-').pop()}`] = true;\n }\n\n return cssClasses;\n }\n\n ngOnDestroy(): void {\n this.contextDashboardService.formDisabled = true;\n if (this.searchSub) {\n this.searchSub.unsubscribe();\n }\n }\n\n hasConfig() {\n if (this.widgetConfig.settings?.upgrade) {\n return (\n this.widgetConfig.settings?.configComponent || this.widgetConfig.settings?.configTemplateUrl\n );\n }\n return !this.dynamicComponent?.error;\n }\n\n private isAnyOfAlarmsWidget(): boolean {\n return (\n this.widgetConfig?.settings?.alarmListWidget ||\n this.widgetConfig?.settings?.criticalAlarmsWidget ||\n this.widgetConfig?.settings?.recentAlarmsWidget\n );\n }\n\n private setStylings(): void {\n const dashboardClasses: string[] =\n (this.mo.c8y_Dashboard?.classes && Object.keys(this.mo.c8y_Dashboard.classes)) || [];\n const dashboardWidgetClasses: string[] =\n (this.mo.c8y_Dashboard?.widgetClasses && Object.keys(this.mo.c8y_Dashboard.widgetClasses)) ||\n [];\n const widgetClasses: string[] = this.isEdit ? Object.keys(this.current.data.classes) : [];\n\n this.styling = this.setDefaultStyle([\n ...dashboardClasses,\n ...dashboardWidgetClasses,\n ...widgetClasses\n ]);\n this.defaultStyling = this.setDefaultStyle([...dashboardClasses, ...dashboardWidgetClasses]);\n }\n\n private isDashboardDefaultStyle(className) {\n const allClasses = {\n ...this.mo.c8y_Dashboard.classes,\n ...this.mo.c8y_Dashboard.widgetClasses\n };\n const styles = Object.keys(allClasses).map(cssClass => ({ class: cssClass }));\n const style = this.contextDashboardService.getStyling(\n styles,\n className.split('-').pop(),\n undefined\n );\n return !!style;\n }\n\n private setDefaultStyle(setClasses: string[]) {\n let contentClass = this.styling.contentClass;\n let headerClass = this.styling.headerClass;\n const styles = this.contextDashboardService\n .getFilteredDashboardStyles(setClasses)\n .map(c => c.split('-').pop());\n styles.forEach(styleName => {\n contentClass = this.contextDashboardService.getStyling(\n WIDGET_CONTENT_CLASSES,\n styleName,\n contentClass\n );\n headerClass = this.contextDashboardService.getStyling(\n WIDGET_HEADER_CLASSES,\n styleName,\n headerClass\n );\n });\n\n return { headerClass, contentClass };\n }\n\n private composeWidgetConfig(selectedComponent, context = {}) {\n const setting = {\n settings: {\n ...selectedComponent.data.settings,\n ...get(selectedComponent.data.settings, 'ng1.options'),\n ...get(selectedComponent.data, 'ng1.options'),\n context,\n dashboardMo: this.mo.c8y_Dashboard\n },\n ...selectedComponent.data.config\n } as ContextWidgetConfig;\n return this.applyTargetIfDeviceDashboard(setting);\n }\n\n private applyTargetIfDeviceDashboard(widgetConfig: ContextWidgetConfig) {\n const isDeviceType = this.contextDashboardService.isDeviceType(this.mo);\n\n if (isDeviceType) {\n widgetConfig.settings.hideTarget = isDeviceType;\n\n const noDeviceTarget = widgetConfig.settings.ng1\n ? widgetConfig.settings.ng1.options.noDeviceTarget\n : widgetConfig.settings.noDeviceTarget;\n\n if (!noDeviceTarget) {\n widgetConfig.device = {\n id: this.context.id,\n name: this.context.name\n };\n }\n }\n return widgetConfig;\n }\n}\n","<div class=\"modal-header\">\n <div\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form\n name=\"form\"\n #configForm=\"ngForm\"\n>\n <div\n class=\"c8y-modal-tabs\"\n id=\"modal-body\"\n >\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n class=\"btn\"\n title=\"{{ 'Select widget' | translate }}\"\n type=\"button\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n class=\"btn\"\n title=\"{{ 'Configuration' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n class=\"btn\"\n title=\"{{ 'Appearance' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll modal-inner-scroll--fixed\">\n <div\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0 elevation-md\"\n style=\"z-index: 2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search…' | translate }}\"\n type=\"text\"\n data-cy=\"widget-config--Search\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"modal-body bg-level-2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n title=\"{{ cmp.description | translate }}\"\n data-cy=\"widget-config--widget-list\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean d-col card p-8\"\n [class.active]=\"selected === cmp\"\n type=\"button\"\n (click)=\"select(cmp)\"\n >\n <div\n class=\"text-center p-8 m-b-8 d-col flex-center flex-grow bg-level-2\"\n role=\"presentation\"\n >\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <div class=\"h1\"><i c8yIcon=\"file-image-o\"></i></div>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img\n class=\"widget-thumbnail\"\n alt\n [src]=\"cmp.previewImage\"\n />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </button>\n </div>\n\n <div\n class=\"c8y-empty-state text-center\"\n *ngIf=\"searchResult && searchResult.length === 0\"\n >\n <div\n class=\"h1\"\n c8yIcon=\"search\"\n ></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p\n class=\"m-r-8\"\n translate\n >\n Rephrase your search term.\n </p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Reset search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div\n class=\"d-flex d-col fit-h\"\n *ngIf=\"selected\"\n [ngClass]=\"{ hidden: mode !== 'config' }\"\n >\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label\n for=\"widgetTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"widgetTitle\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n name=\"title\"\n type=\"text\"\n required\n [(ngModel)]=\"selected.data.title\"\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row flex-grow\"\n [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\"\n >\n <div\n class=\"a-s-stretch\"\n [ngStyle]=\"isLegacyAlarmWidget ? { 'pointer-events': 'none', opacity: '0.5' } : {}\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget && mode === 'config'\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div\n class=\"fit-h bg-inherit p-l-16\"\n [ngClass]=\"{ 'p-r-24': !hasConfig() }\"\n >\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig(),\n showSelected: true\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24 p-t-16': !widgetConfig.settings?.noDeviceTarget }\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div\n class=\"modal-body p-t-0\"\n style=\"height: calc(100vh - 310px)\"\n *ngIf=\"mode === 'style'\"\n >\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n data-cy=\"widget-config--cancel-widget\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n data-cy=\"widget-config--save-widget\"\n (click)=\"save()\"\n [disabled]=\"\n !dynamicComponent ||\n (((this.contextDashboardService.formDisabled$ | async) || isSaveDisabled()) &&\n !!widgetHasConfigComponent)\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n","import { Injectable } from '@angular/core';\nimport { DashboardChildrenState } from '../context-dashboard.model';\nimport { cloneDeep } from 'lodash-es';\n\n/**\n * Holds current state of dashboard children during edit mode.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardOriginatorService {\n /**\n * Current dashboard children state name for indicating what change will be undone.\n */\n get currentStateName(): string {\n return this.state?.name;\n }\n /**\n * Current dashboard children state.\n * @private\n */\n private state: DashboardChildrenState;\n /**\n * Initializes dashboard children state on edit mode start.\n * @param state Dashboard children initial state.\n */\n initState(state: DashboardChildrenState): void {\n this.state = state;\n }\n /**\n * Updates dashboard children state when it is changed or restored with undo/redo.\n * @param state Dashboard children updated state.\n */\n setState(state: DashboardChildrenState): void {\n this.state = state;\n }\n /**\n * Returns copy of current state.\n */\n getState(): DashboardChildrenState {\n return cloneDeep(this.state);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DashboardChildrenState } from '../context-dashboard.model';\nimport { DashboardOriginatorService } from './dashboard-originator.service';\n\n/**\n * Caretaker is responsible for undo and redo functionalities.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardCaretakerService {\n /**\n * Current undo stack length for defining undo button disable state.\n */\n get undoStackLength(): number {\n return this.undoStack.length;\n }\n /**\n * Redo stack latest item for defining redo button disable state and its' title.\n */\n get redoStackLastItem(): DashboardChildrenState {\n return this.redoStack[this.redoStack.length - 1];\n }\n /**\n * List of dashboard children changes.\n * @private\n */\n private undoStack: DashboardChildrenState[] = [];\n /**\n * List of dashboard children changes that were undone and can be redone back.\n * @private\n */\n private redoStack: DashboardChildrenState[] = [];\n\n constructor(private originator: DashboardOriginatorService) {}\n /**\n * Adds current dashboard children state to undo stack and clears redo stack.\n */\n backup(): void {\n this.undoStack.push(this.originator.getState());\n this.redoStack = [];\n }\n /**\n * Reverts last dashboard children change and puts it in redo stack.\n * @returns Current state of dashboard children after reverting last change.\n */\n undo(): DashboardChildrenState | undefined {\n if (!this.undoStack.length) {\n return;\n }\n const memento = this.undoStack.pop();\n this.redoStack.push(this.originator.getState());\n\n this.originator.setState(memento);\n return memento;\n }\n /**\n * Applies previously undone change.\n * @returns Current state of dashboard children after applying previously undone change.\n */\n redo(): DashboardChildrenState | undefined {\n if (!this.redoStack.length) {\n return;\n }\n this.undoStack.push(this.originator.getState());\n const memento = this.redoStack.pop();\n\n this.originator.setState(memento);\n return memento;\n }\n /**\n * Clears both undo and redo stack, sets current state as initial state and returns initial state.\n * @returns Initial state of dashboard children.\n */\n reset() {\n const initialItem = this.undoStack[0] || this.originator.getState();\n this.undoStack = [];\n this.redoStack = [];\n this.originator.initState(initialItem);\n return initialItem;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DashboardOriginatorService } from './dashboard-originator.service';\nimport { DashboardCaretakerService } from './dashboard-caretaker.service';\nimport { DashboardChildrenState } from '../context-dashboard.model';\n/**\n * Facade for implementation of Memento design pattern (caretaker, originator). Responsible for undo/redo feature\n * during edit mode of dashboard.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardEditModeService {\n get undoButtonDisabled(): boolean {\n return this.caretaker.undoStackLength === 0;\n }\n /**\n * Current dashboard change name for undo button title.\n */\n get changeToUndoName(): string {\n return this.originator.currentStateName;\n }\n /**\n * Redo stack latest item for defining redo button disable state and its title.\n */\n get redoStackLastItem(): DashboardChildrenState {\n return this.caretaker.redoStackLastItem;\n }\n\n constructor(\n private originator: DashboardOriginatorService,\n private caretaker: DashboardCaretakerService\n ) {}\n /**\n * Initializes dashboard children state on edit mode start.\n * @param state Dashboard children initial state.\n */\n init(state: DashboardChildrenState) {\n this.originator.initState(state);\n }\n /**\n * Saves current state for further undo actions and sets new dashboard children state.\n * @param state Dashboard children updated state.\n */\n newState(state: DashboardChildrenState) {\n this.caretaker.backup();\n this.originator.setState(state);\n }\n /**\n * Returns copy of current state.\n */\n getCurrentState(): DashboardChildrenState {\n return this.originator.getState();\n }\n /**\n * Reverts last dashboard children change.\n * @returns Current state of dashboard children after reverting last change.\n */\n undo(): DashboardChildrenState {\n return this.caretaker.undo();\n }\n /**\n * Applies previously undone change.\n * @returns Current state of dashboard children after applying previously undone change.\n */\n redo(): DashboardChildrenState {\n return this.caretaker.redo();\n }\n /**\n * Resets dashboard children state to initial one and returns initial state.\n * @returns Initial state of dashboard children.\n */\n reset(): DashboardChildrenState {\n return this.caretaker.reset();\n }\n}\n","import {\n Component,\n HostBinding,\n HostListener,\n Inject,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n ViewChild\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n ActionBarService,\n AlertService,\n BreadcrumbItem,\n CopyDashboardDisabledReason,\n DashboardChange,\n DashboardChildChange,\n DashboardChildComponent,\n DashboardCopyPermission,\n DynamicComponentDefinition,\n GainsightService,\n gettext,\n memoize,\n ModalService,\n NEW_DASHBOARD_QUERY_PARAM,\n RevertChangeType,\n Status,\n Widget,\n WidgetChange,\n WidgetsDashboardComponent\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep, every, findIndex, kebabCase, keyBy, omit, some } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Subscription } from 'rxjs';\nimport {\n CanDeactivateComponent,\n CONTEXT_DASHBOARD_CONFIG,\n ContextDashboard,\n ContextDashboardConfig,\n ContextDashboardManagedObject,\n DASHBOARD_CHILDREN_STATE_NAME,\n DashboardChildrenState,\n DashboardHistoryDescription,\n PRODUCT_EXPERIENCE,\n WIDGET_HEADER_CLASSES\n} from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { WidgetConfigComponent } from './widget-config.component';\nimport { WidgetService } from './widget.service';\nimport { DashboardEditModeService } from './memento/dashboard-edit-mode.service';\nimport { IManagedObject } from '@c8y/client';\n\n/**\n * The context dashboard is a dashboard which resolves it data from the current context (device or group)\n * it is displayed on. It usually uses the route.data for it, but you can pass\n * a different managedObject to the [mo] input parameter to change that behavior.\n */\n@Component({\n selector: 'c8y-context-dashboard',\n templateUrl: './context-dashboard.component.html',\n host: {\n style: `\n display: block;\n `,\n class: 'dashboard c8y-grid-dashboard'\n }\n})\nexport class ContextDashboardComponent implements OnInit, OnDestroy, CanDeactivateComponent {\n @Input()\n name: string;\n @Input()\n childrenClasses = '';\n @Input()\n context: any;\n @Input()\n setTitle = false;\n\n @Input()\n defaultWidgets: Widget[] = [];\n @Input()\n canCopy = true;\n @Input()\n canDelete = true;\n @Input()\n isLoading = true;\n @Input()\n breadcrumbSettings: BreadcrumbItem;\n @Input()\n showContextHelpButton = true;\n /** Whether to translate widget titles. However, dashboard's own setting takes precedence. It does not override dashboard's setting */\n @Input() translateWidgetTitle: boolean;\n /**\n * Hides dashboard availability selection.\n */\n @Input()\n hideAvailability = false;\n\n @HostBinding('class')\n class = '';\n\n @ViewChild(DashboardDetailComponent, { static: true }) dashboardDetails: DashboardDetailComponent;\n @ViewChild(WidgetsDashboardComponent, { static: true })\n widgetsDashboard: WidgetsDashboardComponent;\n\n get disabled(): boolean {\n return !this.hasPermissionToEditDashboard || !this.dashboardDetails?.isCollapsed;\n }\n\n widgets: Widget[] = [];\n mo: ContextDashboardManagedObject;\n dashboard: ContextDashboard;\n title: string;\n isCopyDisabled: DashboardCopyPermission;\n isReport: boolean;\n readonly dashboardTypeLabel = gettext('Dashboard for \"{{ dashboardType }}\"');\n readonly dashboardTypePopover = gettext(`\n The layout and configuration of this dashboard is used by all other assets of model type\n <strong>{{ dashboardType }}</strong>. Any changes made to this dashboard instance will be applied to all\n other instances.`);\n private dataSub: Subscription;\n private hasPermissionToEditDashboard = false;\n\n constructor(\n private route: ActivatedRoute,\n private router: Router,\n private contextDashboardService: ContextDashboardService,\n private alert: AlertService,\n private renderer: Renderer2,\n @Inject(CONTEXT_DASHBOARD_CONFIG) public moduleConfig: ContextDashboardConfig,\n private widgetService: WidgetService,\n private bsModal: BsModalService,\n private gainsightService: GainsightService,\n private actionBarService: ActionBarService,\n private translateService: TranslateService,\n private modal: ModalService,\n public editModeService: DashboardEditModeService\n ) {}\n\n ngOnInit() {\n if (!this.name) {\n this.loadContextDashboard();\n return;\n }\n this.loadNamedDashboard();\n }\n\n @HostListener('window:beforeunload', ['$event'])\n async beforeUnloadHandler($event: BeforeUnloadEvent) {\n const canDeactivate = await this.canDeactivate(true);\n if (!canDeactivate) {\n $event.returnValue = true;\n }\n }\n\n /**\n * Applies the current context to the widget\n * @param widget The widget to apply the context to.\n */\n applyDeviceTarget(widget) {\n if (widget.config.device) {\n widget.config.device = { id: this.context.id, name: this.context.name };\n }\n }\n\n /**\n * Removes the route listener.\n */\n ngOnDestroy(): void {\n if (this.dataSub) {\n this.dataSub.unsubscribe();\n }\n const isNewDashboard = this.route.snapshot.queryParams[NEW_DASHBOARD_QUERY_PARAM];\n if (isNewDashboard) {\n this.router.navigate([], {\n queryParams: null\n });\n }\n }\n /**\n * Guards component from unintended navigation away or closing tab without saving changes.\n * Navigation continues if true is returned, and navigation is cancelled if returned value is false.\n * @param omitConfirm Omits confirm calls inside method body (without this param, when method is used in\n * on 'beforeunload' event handler, error is thrown in console because confirm is blocked by browser anyway and returns false)\n */\n async canDeactivate(omitConfirm = false): Promise<boolean> {\n const canDeactivate =\n (await this.dashboardDetails.canDeactivate(omitConfirm)) &&\n (await this.widgetsDashboard.canDeactivate(omitConfirm));\n\n // Needed in order to reset edit mode, otherwise when switching between dashboards, the edit mode is still enabled.\n if (canDeactivate) {\n await this.cancelEditMode(true);\n }\n return canDeactivate;\n }\n\n /**\n * Restores the dashboard widgets to the default widgets.\n */\n async restore() {\n const mesg = gettext(\n 'You are about to reset the widgets of this dashboard. All changes to the dashboard widgets will get lost and cannot be recovered. Do you want to proceed?'\n );\n\n try {\n await this.modal.confirm(gettext('Reset widgets'), mesg, Status.WARNING, {\n ok: gettext('Reset`dashboard`'),\n cancel: gettext('Cancel')\n });\n\n this.isLoading = true;\n this.mo.c8y_Dashboard.children = this.contextDashboardService.mapWidgets(this.defaultWidgets);\n this.mo.c8y_Dashboard.historyDescription = {\n changeType: 'reset'\n };\n await this.contextDashboardService.update(this.mo);\n await this.onLoad();\n } catch (error) {\n if (error) {\n this.alert.addServerFailure(error);\n }\n } finally {\n this.isLoading = false;\n }\n }\n /**\n * Method called on every widgets dimensions or position change but also for adding new widget (because adding\n * widget causes layout changes). It recognizes what type of change has been done and updates current widgets state\n * accordingly.\n * @param child Change object.\n */\n positionOrWidgetDimensionChange(child: DashboardChildChange | DashboardChange): void {\n const currentState = this.editModeService.getCurrentState()?.children || {};\n const descriptionProp: keyof DashboardHistoryDescription['widgetChanges'] =\n child.children.length === Object.values(currentState).length ? 'arrangement' : 'added';\n let changeName: DashboardChildrenState['name'];\n let widgetsChanged: Widget[];\n if (descriptionProp === 'added') {\n changeName = DASHBOARD_CHILDREN_STATE_NAME.added;\n const addedWidget = child.children.find(c => !currentState[c.data.id]);\n widgetsChanged = [addedWidget.data];\n } else {\n changeName = DASHBOARD_CHILDREN_STATE_NAME.arrangement;\n widgetsChanged = child.children\n .map(c => {\n const lastStateChild = currentState[c.data.id];\n if (\n c.x != lastStateChild._x ||\n c.y != lastStateChild._y ||\n c.width != lastStateChild._width ||\n c.height != lastStateChild._height\n ) {\n return c.data;\n }\n })\n .filter(Boolean);\n }\n\n this.updateDashboardChildren(child, changeName, descriptionProp, widgetsChanged);\n }\n\n async revertChange(revertType: RevertChangeType): Promise<void> {\n let dashboardChildren: ContextDashboard['children'];\n if (revertType === 'undo') {\n dashboardChildren = this.editModeService.undo().children;\n } else {\n dashboardChildren = this.editModeService.redo().children;\n }\n await this.setWidgets(dashboardChildren);\n }\n\n /**\n * Updates all dashboards children's. Useful for position changes on the dashboard.\n * @param child The child to change.\n * @param changeName Name of the change to indicate it on undo/redo button.\n * @param descriptionProp Property to add to dashboard change history.\n * @param widgetsChanged List of changed widgets.\n */\n updateDashboardChildren(\n child: DashboardChildChange | DashboardChange,\n changeName: DashboardChildrenState['name'],\n descriptionProp: keyof DashboardHistoryDescription['widgetChanges'],\n widgetsChanged: Widget[]\n ): void {\n const { children } = child;\n const mappedChildren: { [id: string]: Widget } = keyBy(\n children.map(c => this.componentToWidget(c)),\n 'id'\n );\n this.setNewState(\n { name: changeName, children: mappedChildren },\n descriptionProp,\n widgetsChanged\n );\n }\n\n /**\n * Copies the dashboard and current context to a clipboard.\n */\n async copyDashboard() {\n const viewContext = this.route.parent.snapshot.data?.context;\n\n this.contextDashboardService.copyClipboard = {\n dashboardId: this.mo.id,\n dashboard: cloneDeep(this.mo.c8y_Dashboard),\n context: cloneDeep({\n context: viewContext,\n contextData: this.context\n })\n };\n\n if (viewContext) {\n const ctx = viewContext.split('/').shift();\n const msg = this.translateService.instant(\n 'Dashboard copied. Navigate to the desired {{ ctx }} and select \"Paste dashboard\"',\n { ctx }\n );\n this.alert.success(msg);\n }\n this.actionBarService.refresh();\n }\n\n /**\n * Remove the complete dashboard and navigate away.\n */\n async deleteDashboard() {\n await this.contextDashboardService.delete(this.mo);\n if (this.route.parent) {\n const route = this.route.parent.snapshot.url.map(segment => segment.path).join('/');\n this.router.navigateByUrl(route);\n }\n await this.onDeleteGSEvent();\n }\n\n get isDeviceTypeDashboard(): boolean {\n return !!this.dashboard?.deviceType;\n }\n\n /**\n * Edits a widget on the dashboard.\n * @param change The widget change event.\n */\n async editWidget(change: WidgetChange) {\n const { x, y, width, height } = change.source;\n const component = await this.widgetService.getWidgetDefinition(\n change.widget.name || change.widget.componentId\n );\n if (!component) {\n this.addWidget();\n return;\n }\n await this.addWidget({\n ...component,\n data: { ...component.data, ...change.widget, _x: x, _y: y, _width: width, _height: height }\n });\n }\n\n /**\n * Adds a widget to the dashboard.\n * @param selected Define a selected component to switch to edit mode directly.\n */\n async addWidget(selected?: DynamicComponentDefinition) {\n const partialCloneSelected = selected\n ? {\n ...selected,\n data: cloneDeep(selected.data)\n }\n : selected;\n\n const activeContext = this.context.contextData ? this.context.contextData : this.context;\n const initialState: Partial<WidgetConfigComponent> = {\n mo: this.mo,\n context: this.context.c8y_Report ? {} : activeContext,\n selected: partialCloneSelected\n };\n\n const modal = this.bsModal.show(WidgetConfigComponent, {\n class: 'modal-lg',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n initialState,\n ignoreBackdropClick: true,\n keyboard: false\n }).content as WidgetConfigComponent;\n\n try {\n const newWidget = await modal.result;\n if (!this.mo.c8y_Dashboard.children) {\n this.mo.c8y_Dashboard.children = {};\n }\n newWidget.classes = this.mergeWidgetClasses(newWidget);\n await this.updateWidget(newWidget);\n // New state in edit mode is added only for widget update. When adding widget, layout change is always triggered,\n // so it's easier to set new state on layout change only\n if (selected) {\n const children = {\n ...this.editModeService.getCurrentState().children,\n [newWidget.id]: newWidget\n };\n this.setNewState(\n {\n name: DASHBOARD_CHILDREN_STATE_NAME.config,\n children\n },\n 'config',\n [newWidget]\n );\n }\n modal.close();\n } catch (ex) {\n // intended empty\n }\n }\n\n async saveWidgetsToDashboard() {\n const currentState = this.editModeService.getCurrentState();\n this.mo.c8y_Dashboard.children = currentState.children;\n\n this.mo.c8y_Dashboard.historyDescription = {\n changeType: 'update',\n widgetChanges: this.mapStateToHistoryDescription(currentState.changeHistory)\n };\n await this.contextDashboardService.update(this.mo);\n this.editModeService.reset();\n this.editModeService.init({\n name: DASHBOARD_CHILDREN_STATE_NAME.initial,\n children: this.mo.c8y_Dashboard.children,\n changeHistory: {}\n });\n\n this.isCopyDisabled = this.getDashboardCopyPermissionState();\n }\n\n async cancelEditMode(onDeactivate = false): Promise<void> {\n const dashboardChildren = this.editModeService.reset();\n if (this.dashboard) {\n this.dashboard.historyDescription = {};\n }\n this.widgetsDashboard.editMode$.next(false);\n if (!onDeactivate) {\n // when setWidgets is called during navigation from device to device, navigation fails\n await this.setWidgets(dashboardChildren.children);\n }\n }\n\n /**\n * Updates a widget or adds a new one if it doesn't exist on\n * the dashboard.\n * @param widget The new widget\n */\n async updateWidget(widget) {\n const index = findIndex(this.widgets, { id: widget.id });\n const isNew = index === -1;\n const mappedWidget = await this.widgetService.mapLegacy(widget);\n if (isNew) {\n this.widgets.push(mappedWidget);\n } else {\n this.widgets.splice(index, 1, mappedWidget);\n }\n }\n\n /**\n * Removes a widget and rearranges the remaining ones\n * if necessary.\n * @param change The change event.\n */\n async deleteWidget(change: WidgetChange) {\n try {\n const { widget, source } = change;\n const removed = this.widgets.find(({ id }) => id === widget.id);\n this.widgets.splice(this.widgets.indexOf(removed), 1);\n\n const { dashboard } = source;\n dashboard.children = dashboard.children.filter(c => c.data.id !== widget.id);\n\n // using setTimeout to give the component the chance to remove it.\n const sleep = timeout => new Promise(resolve => setTimeout(resolve, timeout));\n await sleep(0);\n\n const child = new DashboardChildChange(source);\n child.collapseUpAll();\n this.updateDashboardChildren(child, DASHBOARD_CHILDREN_STATE_NAME.removed, 'removed', [\n widget\n ]);\n } catch (e) {\n this.alert.addServerFailure(e);\n }\n }\n\n /**\n * This is a workaround to ensure that the dragged-element\n * (which is attached to the body) has the right styling.\n */\n addDashboardClassToBody() {\n this.class.split(' ').forEach(cssClass => {\n this.renderer.addClass(document.body, cssClass);\n });\n }\n\n /**\n * This is a workaround to ensure that the dragged-element\n * (which is attached to the body) has the right styling.\n */\n removeDashboardClassFromBody() {\n this.class.split(' ').forEach(cssClass => {\n this.renderer.removeClass(document.body, cssClass);\n });\n }\n\n async onLoad(trackExperience?: boolean) {\n this.hasPermissionToEditDashboard = this.dashboard\n ? await this.contextDashboardService.canEditDashboard(this.mo)\n : false;\n this.canCopy =\n this.contextDashboardService.isDeviceDashboard(this.mo) ||\n this.contextDashboardService.isDeviceType(this.mo) ||\n this.contextDashboardService.isGroupDashboard(this.mo);\n const dashboardChildren: ContextDashboard['children'] = cloneDeep(\n this.mo.c8y_Dashboard?.children\n );\n const dashboardClasses = {\n 'c8y-grid-dashboard': true,\n dashboard: true,\n ...this.dashboard?.classes\n };\n this.isCopyDisabled = this.dashboard\n ? this.getDashboardCopyPermissionState()\n : { state: false, reason: null };\n this.editModeService.init({\n name: gettext('Initial state'),\n children: dashboardChildren,\n changeHistory: {}\n });\n\n await this.setWidgets(dashboardChildren, trackExperience);\n this.class = Object.keys(dashboardClasses).join(' ');\n if (this.isReport) {\n this.addReportDashboardSettings();\n }\n this.isLoading = false;\n\n if (!this.dashboard) {\n this.dashboardDetails.show(false);\n } else {\n await this.onLoadGSEvent();\n }\n }\n\n async dashboardPreview(layoutChanges: ContextDashboard) {\n if (layoutChanges?.classes) {\n const dashboardClasses = {\n 'c8y-grid-dashboard': true,\n dashboard: true,\n ...layoutChanges.classes\n };\n this.class = Object.keys(dashboardClasses).join(' ');\n } else if (this.dashboard) {\n this.dashboard.widgetClasses = {\n ...this.dashboard.widgetClasses,\n ...layoutChanges.widgetClasses\n };\n }\n }\n\n async reloadDashboard(dashboardMo: ContextDashboardManagedObject) {\n this.dashboard = dashboardMo.c8y_Dashboard;\n this.mo = dashboardMo;\n await this.onLoad();\n }\n\n private async setWidgets(\n dashboardChildren: ContextDashboard['children'],\n trackExperience = false\n ): Promise<void> {\n const isDeviceType = this.contextDashboardService.isDeviceType(this.mo);\n this.widgets = await Promise.all<Widget>(\n Object.values(dashboardChildren || {}).map(widget => {\n widget.classes = this.mergeWidgetClasses(widget);\n if (isDeviceType) {\n this.applyDeviceTarget(widget);\n }\n if (trackExperience) {\n this.gainsightService.triggerEvent('loadWidget', {\n widgetName: widget.componentId || widget.name\n });\n }\n return this.widgetService.mapLegacy(widget);\n })\n );\n }\n\n private loadContextDashboard() {\n this.dataSub = this.route.data.subscribe(({ dashboard, isReport }) => {\n this.context = this.route.parent.snapshot.data.contextData || {};\n this.title = this.context?.name;\n this.mo = dashboard;\n this.dashboard = this.mo.c8y_Dashboard;\n this.isReport = isReport || this.contextDashboardService.isReport(this.mo);\n if (this.isReport && this.dashboard && !this.dashboard?.name) {\n this.dashboard.name = this.title;\n }\n if (this.isReport && this.dashboard) {\n this.dashboard.c8y_IsNavigatorNode = this.context.c8y_IsNavigatorNode;\n }\n this.patchSensorPhoneDashboard(this.dashboard, this.mo.owner, this.context?.type);\n this.onLoad(true);\n });\n }\n\n /**\n * To enable translation for widgets within the dashboard, the \"translateWidgetTitle\" flag must be enabled.\n * The property needs to be patched, as the \"Sensor App\" does not provide this setting.\n */\n private patchSensorPhoneDashboard(dashboard: ContextDashboard, owner: string, type: string) {\n if (type === 'c8y_SensorPhone' && owner?.includes('device_phone')) {\n dashboard.translateWidgetTitle = true;\n }\n }\n\n private loadNamedDashboard() {\n this.dataSub = this.contextDashboardService\n .getNamedDashboardOrCreate(this.name, this.defaultWidgets, this.context)\n .subscribe(mo => {\n this.context = this.context || {};\n this.mo = mo;\n this.dashboard = this.mo.c8y_Dashboard;\n this.onLoad(true);\n });\n }\n\n private mergeWidgetClasses(widget: Widget): Record<string, boolean> {\n const hasHeaderClass = WIDGET_HEADER_CLASSES.find(\n el => widget.classes && widget.classes[el.class]\n );\n const widgetClasses = hasHeaderClass\n ? { ...widget.classes }\n : { ...this.dashboard.widgetClasses, ...widget.classes };\n return {\n card: true,\n 'card-dashboard': true,\n [kebabCase(widget.componentId || widget.name)]: true,\n ...widgetClasses\n };\n }\n\n private componentToWidget(child: DashboardChildComponent) {\n return {\n ...omit(child.data, ['componentTransformConfigWithContext', 'transformConfigWithContext']), // remove legacy\n ...({\n _x: child.x,\n _y: child.y,\n _width: child.width,\n _height: child.height\n } as Widget)\n };\n }\n\n private addReportDashboardSettings() {\n this.setTitle = true;\n this.title = this.context?.name || gettext('New report');\n this.breadcrumbSettings = {\n icon: 'th',\n label: 'Reports',\n path: 'reports'\n };\n this.canDelete = false;\n }\n\n private getDashboardCopyPermissionState(): DashboardCopyPermission {\n if (!this.contextDashboardService.hasPermissionsToCopyDashboard()) {\n return { state: false, reason: CopyDashboardDisabledReason.PERMISSIONS };\n }\n const allDashboardChildrenAreValid = every(this.mo.c8y_Dashboard.children, child => {\n const config = child.config || {};\n const dataPoints = config.datapoints || [];\n return !(\n (config.device && config.device.id !== this.context.id) ||\n some(dataPoints, dataPoint => dataPoint.__target?.id !== this.context.id)\n );\n });\n if (!allDashboardChildrenAreValid) {\n return { state: false, reason: CopyDashboardDisabledReason.WRONG_REFERENCE };\n }\n return { state: true };\n }\n\n private setNewState(\n state: Pick<DashboardChildrenState, 'name' | 'children'>,\n descriptionProp: keyof DashboardHistoryDescription['widgetChanges'],\n widgetsChanged: Widget[]\n ): void {\n const description = this.getDescriptionForNewState(descriptionProp, widgetsChanged);\n this.editModeService.newState({ ...state, changeHistory: description });\n }\n\n private getDescriptionForNewState(\n descriptionProp: keyof DashboardHistoryDescription['widgetChanges'],\n widgetsChanged: Widget[]\n ): DashboardChildrenState['changeHistory'] {\n const changeHistory = this.editModeService.getCurrentState().changeHistory;\n if (!changeHistory[descriptionProp]) {\n changeHistory[descriptionProp] = {};\n }\n widgetsChanged.forEach(w => {\n if (descriptionProp === 'removed' && changeHistory.added?.[w.id]) {\n // if widget was added during current edit session and then removed, it should not be at description at all\n delete changeHistory.added[w.id];\n if (changeHistory.config?.[w.id]) {\n delete changeHistory.config[w.id];\n }\n if (changeHistory.arrangement?.[w.id]) {\n delete changeHistory?.arrangement[w.id];\n }\n } else if (\n (descriptionProp === 'config' || descriptionProp === 'arrangement') &&\n changeHistory.added?.[w.id]\n ) {\n // if widget was added and then modified in current edit session, it should only be indicated as added\n } else {\n changeHistory[descriptionProp][w.id] = w;\n }\n });\n\n return changeHistory;\n }\n\n private mapStateToHistoryDescription(\n description: DashboardChildrenState['changeHistory']\n ): DashboardHistoryDescription['widgetChanges'] {\n const historyDescription: DashboardHistoryDescription['widgetChanges'] = {};\n for (const [key, value] of Object.entries(description)) {\n const widgets = Object.values(value);\n if (!widgets.length) {\n continue;\n }\n historyDescription[key] = Object.values(value).map(widget => widget.title);\n }\n return historyDescription;\n }\n\n private async onDeleteGSEvent() {\n const parentName = await this.convertStringToHash(this.context?.name);\n const dashboardName = await this.convertStringToHash(this.dashboard?.name);\n\n this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS, {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DELETE_DASHBOARD,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.DELETE,\n name: dashboardName,\n id: this.mo.id,\n nameId: `${dashboardName}_${this.mo.id}`,\n parentAssetId: this.context?.id ? this.context.id : 'noContext',\n parentAssetName: this.context?.id ? parentName : 'noContext',\n parentAssetType: this.context?.id ? this.context.type : 'noContext',\n parentAssetNameId: this.context?.id ? `${parentName}_${this.context.id}` : 'noContext',\n parentAssetNameDashboardName: this.context?.id\n ? `${parentName}_${dashboardName}`\n : 'noContext',\n parentAssetIdDashboardId: this.context?.id ? `${this.context.id}_${this.mo.id}` : 'noContext',\n parentAssetNameDashboardId: this.context?.id ? `${parentName}_${this.mo.id}` : 'noContext',\n parentAssetNameIdDashboardNameId: this.context?.id\n ? `${parentName}_${this.context.id}_${dashboardName}_${this.mo.id}`\n : 'noContext',\n dashboardType: this.dashboard.deviceType ? this.dashboard.deviceTypeValue : null,\n context: this.contextDashboardService.getContextForGS(this.context)\n });\n }\n\n private async onLoadGSEvent() {\n const parentName = await this.convertStringToHash(this.context?.name);\n const dashboardName =\n (await this.convertStringToHash(this.dashboard?.name)) ??\n this.extractDefaultDashboardName(this.mo) ??\n 'none';\n\n this.gainsightService.triggerEvent(\n this.isReport\n ? PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.REPORTS\n : PRODUCT_EXPERIENCE.DASHBOARD.EVENTS.DASHBOARDS,\n {\n component: PRODUCT_EXPERIENCE.DASHBOARD.COMPONENTS.DASHBOARD_VIEW,\n action: PRODUCT_EXPERIENCE.DASHBOARD.ACTIONS.LOAD,\n name: dashboardName,\n id: this.mo.id,\n nameId: `${dashboardName}_${this.mo.id}`,\n parentAssetId: this.context?.id ? this.context.id : 'noContext',\n parentAssetName: this.context?.id ? parentName : 'noContext',\n parentAssetType: this.context?.id ? this.context.type : 'noContext',\n parentAssetNameId: this.context?.id ? `${parentName}_${this.context.id}` : 'noContext',\n parentAssetNameDashboardName: this.context?.id\n ? `${parentName}_${dashboardName}`\n : 'noContext',\n parentAssetIdDashboardId: this.context?.id\n ? `${this.context.id}_${this.mo.id}`\n : 'noContext',\n parentAssetNameDashboardId: this.context?.id ? `${parentName}_${this.mo.id}` : 'noContext',\n parentAssetNameIdDashboardNameId: this.context?.id\n ? `${parentName}_${this.context.id}_${dashboardName}_${this.mo.id}`\n : 'noContext',\n dashboardType: this.dashboard.deviceType ? this.dashboard.deviceTypeValue : null,\n context: this.isReport\n ? PRODUCT_EXPERIENCE.DASHBOARD.CONTEXT.REPORT\n : this.contextDashboardService.getContextForGS(this.context)\n }\n );\n }\n\n private extractDefaultDashboardName(obj: IManagedObject): string | null {\n const nameKey = Object.keys(obj).find(key => key.startsWith('c8y_Dashboard!name!'));\n if (nameKey) {\n return nameKey.split('!').pop();\n }\n return null;\n }\n\n @memoize()\n private async convertStringToHash(str: string) {\n if (!str) {\n return null;\n }\n return (await this.gainsightService.shouldSendPiiData())\n ? str\n : this.gainsightService.hashGroupName(str);\n }\n}\n","<c8y-title *ngIf=\"title\">\n {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"10000\"\n *ngIf=\"dashboard?.deviceType && dashboard.deviceTypeValue\"\n>\n <button\n class=\"btn-clean btn-link\"\n popoverTitle=\"{{ 'Dashboard template' | translate }}\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dashboardTypePopoverRef\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n >\n <span class=\"tag tag--info text-12\">\n <span class=\"dashboard-template-marker\"></span>\n {{ dashboardTypeLabel | translate: { dashboardType: dashboard.deviceTypeValue } }}\n </span>\n </button>\n <ng-template #dashboardTypePopoverRef>\n <div\n [innerHTML]=\"dashboardTypePopover | translate: { dashboardType: dashboard.deviceTypeValue }\"\n ></div>\n </ng-template>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"-1\"\n *ngIf=\"defaultWidgets.length > 0\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Reset widgets' | translate }}\"\n type=\"button\"\n px-event=\"Reset dashboard\"\n (click)=\"restore()\"\n [disabled]=\"disabled || (widgetsDashboard?.editMode$ | async)\"\n data-cy=\"context-dashboard--button-reset-dashboard\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"reset\"\n ></i>\n <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n {{ 'Reset widgets' | translate }}\n </span>\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/cockpit/working-with-dashboards/#working-with-dashboards\"\n *ngIf=\"showContextHelpButton\"\n></c8y-help>\n\n<c8y-dashboard-detail\n class=\"d-contents\"\n [isReport]=\"isReport\"\n [dashboard]=\"dashboard\"\n [mo]=\"mo\"\n [context]=\"context\"\n [deviceType]=\"context?.type\"\n [hideAvailability]=\"hideAvailability\"\n (dashboardSaved)=\"reloadDashboard($event)\"\n (previewChanged)=\"dashboardPreview($event)\"\n></c8y-dashboard-detail>\n\n<c8y-widgets-dashboard\n [context]=\"context\"\n [contextDashboard]=\"dashboard\"\n [widgets]=\"widgets\"\n [isCopyDisabled]=\"isCopyDisabled\"\n [settings]=\"{\n isLoading: isLoading,\n isDisabled: disabled,\n canDelete: canDelete && !!dashboard,\n translateWidgetTitle: dashboard?.translateWidgetTitle ?? translateWidgetTitle,\n allowFullscreen: moduleConfig.allowFullscreen,\n title: setTitle ? dashboard?.name || title : undefined,\n widgetMargin: dashboard?.widgetMargin,\n canCopy: canCopy && !!dashboard,\n defaultWidth: dashboard?.columns >= 24 ? 8 : 4,\n columns: dashboard?.columns || 12\n }\"\n [breadcrumb]=\"breadcrumbSettings\"\n [editModeButtons]=\"{\n undoButtonDisabled: editModeService.undoButtonDisabled,\n changeToUndoName: editModeService.changeToUndoName,\n redoButtonDisabled: !editModeService.redoStackLastItem,\n changeToRedoName: editModeService.redoStackLastItem?.name\n }\"\n (onChangeDashboard)=\"positionOrWidgetDimensionChange($event)\"\n (onAddWidget)=\"addWidget()\"\n (onEditWidget)=\"editWidget($event)\"\n (onDeleteWidget)=\"deleteWidget($event)\"\n (onSaveDashboard)=\"saveWidgetsToDashboard()\"\n (onCancelDashboard)=\"cancelEditMode()\"\n (revertChange)=\"revertChange($event)\"\n (onChangeStart)=\"addDashboardClassToBody()\"\n (onChangeEnd)=\"removeDashboardClassFromBody()\"\n (onEditDashboard)=\"dashboardDetails.show(true)\"\n (onCopyDashboard)=\"copyDashboard()\"\n (onDeleteDashboard)=\"deleteDashboard()\"\n></c8y-widgets-dashboard>\n","import { Component, Inject, Optional, ViewChild } from '@angular/core';\nimport { AppStateService, gettext } from '@c8y/ngx-components';\nimport {\n CockpitDashboardConfig,\n COCKPIT_HOME_DASHBOARD_CONFIG,\n DEFAULT_COCKPIT_HOME_WIDGETS\n} from './cockpit-dashboard.model';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\nimport { ContextDashboardComponent } from '../context-dashboard.component';\n\n@Component({\n selector: 'c8y-cockpit-dashboard',\n templateUrl: './cockpit-dashboard.component.html'\n})\nexport class CockpitDashboardComponent implements CanDeactivateComponent {\n defaultWidgets = DEFAULT_COCKPIT_HOME_WIDGETS;\n dashboardName = 'home-cockpit1';\n pageTitle: string = gettext('Home');\n @ViewChild(ContextDashboardComponent, { static: true })\n contextDashboard: ContextDashboardComponent;\n\n constructor(\n private appState: AppStateService,\n @Optional()\n @Inject(COCKPIT_HOME_DASHBOARD_CONFIG)\n private homeDashboardConfig: CockpitDashboardConfig\n ) {\n const config = {\n ...this.homeDashboardConfig,\n dashboardName: appState.currentApplication.value?.config?.homeDashboardName,\n userSpecific: appState.currentApplication.value?.config?.userSpecificHomeDashboard\n };\n this.applyDashboardConfig(config);\n }\n\n canDeactivate(): Promise<boolean> {\n return this.contextDashboard.canDeactivate();\n }\n\n private applyDashboardConfig(config: CockpitDashboardConfig) {\n if (!config) {\n return;\n }\n\n if (config.dashboardName) {\n this.dashboardName = config.dashboardName;\n }\n\n if (config.defaultWidgets) {\n this.defaultWidgets = config.defaultWidgets;\n }\n\n if (config.userSpecific && this.appState.currentUser.value) {\n this.dashboardName = `${this.appState.currentUser.value.userName.replace(/\\./g, '__')}_${\n this.dashboardName\n }`;\n }\n\n if (config.pageTitle) {\n this.pageTitle = config.pageTitle;\n }\n }\n}\n","<c8y-title>\n {{ pageTitle | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n","import { Component, OnInit, TemplateRef, ViewChild, ViewContainerRef } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { gettext, ViewContext } from '@c8y/ngx-components';\nimport { DashboardContext } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Component({\n selector: 'c8y-paste-dashboard-action',\n template: `\n <ng-template #templatePaste>\n <li>\n <button\n class=\"btn btn-link\"\n title=\"{{ buttonTitle | translate }}\"\n type=\"button\"\n (click)=\"pasteDashboard()\"\n [disabled]=\"pasteDisabled\"\n >\n <i class=\"m-r-4\" c8yIcon=\"clipboard\"></i>\n <span ngNonBindable translate [translateParams]=\"{ dashboardName: dashboardName }\">\n Paste dashboard \"{{ dashboardName }}\"\n </span>\n </button>\n </li>\n </ng-template>\n `\n})\nexport class PasteDashboardActionComponent implements OnInit {\n pasteDisabled = false;\n @ViewChild('templatePaste', { read: TemplateRef, static: true }) templatePaste;\n dashboardName = '';\n buttonTitle: string;\n private currentViewContext: ViewContext;\n private currentUrl: string;\n private contextMO: IManagedObject;\n private contextId: string;\n\n constructor(\n private vcRef: ViewContainerRef,\n private router: Router,\n private contextDashboardService: ContextDashboardService,\n private inventoryService: InventoryService\n ) {}\n\n async ngOnInit() {\n this.currentUrl = this.router.url;\n this.contextId = this.currentUrl.match(/\\d+/)[0];\n\n const isDevice: boolean = new RegExp(/device\\/\\d+/).test(this.currentUrl);\n const isGroup: boolean = new RegExp(/group\\/\\d+/).test(this.currentUrl);\n this.currentViewContext = isDevice ? ViewContext.Device : isGroup ? ViewContext.Group : null;\n await this.checkIfPasteIsAllowed();\n\n this.vcRef.createEmbeddedView(this.templatePaste);\n const clipboard = this.contextDashboardService.copyClipboard;\n if (clipboard) {\n this.dashboardName = clipboard.dashboard.name;\n }\n }\n\n async pasteDashboard() {\n if (!this.contextMO) {\n this.contextMO = await this.getContextMo(this.contextId);\n }\n const context: DashboardContext = {\n context: this.currentViewContext,\n contextData: this.contextMO\n };\n\n await this.contextDashboardService.pasteDashboard(context);\n }\n\n private async getContextMo(id: string): Promise<IManagedObject> {\n return (await this.inventoryService.detail(id)).data;\n }\n\n private async checkIfPasteIsAllowed(): Promise<void> {\n const clipboardViewContext = this.contextDashboardService.copyClipboard.context.context;\n const isTypeDashboard = this.contextDashboardService.copyClipboard?.dashboard?.deviceType;\n\n if (this.currentViewContext !== clipboardViewContext) {\n if (clipboardViewContext === ViewContext.Device) {\n this.buttonTitle = gettext('Device dashboards can only be copied into a device.');\n } else if (clipboardViewContext === ViewContext.Group) {\n this.buttonTitle = gettext('Group dashboards can only be copied into a group.');\n }\n this.pasteDisabled = true;\n return;\n } else if (isTypeDashboard) {\n this.contextMO = await this.getContextMo(this.contextId);\n const dashboardDeviceType =\n this.contextDashboardService.copyClipboard.dashboard.deviceTypeValue;\n if (dashboardDeviceType === this.contextMO.type) {\n this.buttonTitle = gettext(\n 'Dashboard template can only be copied into assets of a different type.'\n );\n this.pasteDisabled = true;\n return;\n }\n }\n\n this.buttonTitle = gettext('Paste dashboard');\n this.pasteDisabled = false;\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { ViewContext, ActionBarFactory, ActionBarItem } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\nimport { ContextDashboardService } from './context-dashboard.service';\nimport { PasteDashboardActionComponent } from './paste-dashboard-action.component';\n\nexport abstract class DashboardActionBarFactory implements ActionBarFactory {\n protected abstract targetContext: ViewContext.Device | ViewContext.Group;\n routeChanges$: Observable<any>;\n\n private contextDashboardService = inject(ContextDashboardService);\n\n get(activeRoute: ActivatedRoute) {\n const actions = [];\n const data =\n !activeRoute.parent || activeRoute.snapshot.data.context\n ? activeRoute.snapshot.data\n : activeRoute.parent.snapshot.data;\n const { contextData } = data;\n const canPaste =\n contextData &&\n data.context === this.targetContext &&\n this.contextDashboardService.copyClipboard;\n\n if (canPaste) {\n actions.push({\n priority: -10,\n placement: 'more',\n template: PasteDashboardActionComponent\n } as ActionBarItem);\n }\n\n return actions;\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DeviceDashboardActionBarFactory extends DashboardActionBarFactory {\n protected targetContext: ViewContext.Device | ViewContext.Group = ViewContext.Device;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class GroupDashboardActionBarFactory extends DashboardActionBarFactory {\n protected targetContext: ViewContext.Device | ViewContext.Group = ViewContext.Group;\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { Tab } from '@c8y/ngx-components';\nimport { ContextDashboardType } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Injectable({ providedIn: 'root' })\nexport class DeviceDashboardGuard {\n constructor(private contextDashboardService: ContextDashboardService) {}\n\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean | Tab[]> {\n return this.contextDashboardService.activateDashboards(route, [\n ContextDashboardType.Device,\n ContextDashboardType.Type\n ]);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { Tab } from '@c8y/ngx-components';\nimport { ContextDashboardType } from './context-dashboard.model';\nimport { ContextDashboardService } from './context-dashboard.service';\n\n@Injectable({ providedIn: 'root' })\nexport class GroupDashboardGuard {\n constructor(private contextDashboardService: ContextDashboardService) {}\n\n canActivate(route: ActivatedRouteSnapshot): Observable<boolean | Tab[]> {\n return this.contextDashboardService.activateDashboards(route, [\n ContextDashboardType.Group,\n ContextDashboardType.Type\n ]);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport {\n CoreModule,\n hookActionBar,\n HookProviderTypes,\n hookRoute,\n hookTab,\n ViewContext\n} from '@c8y/ngx-components';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { AssetSelectorModule } from '@c8y/ngx-components/assets-navigator';\nimport { AddDashboardComponent } from './add-dashboard.component';\nimport { AddDeviceDashboardFactory, AddGroupDashboardFactory } from './add-dashboard.factory';\nimport { AppearanceSettingsComponent } from './appearance-settings.component';\nimport { ContextDashboardComponent } from './context-dashboard.component';\nimport {\n CONTEXT_DASHBOARD_CONFIG,\n ContextDashboardConfig,\n CanDeactivateComponent\n} from './context-dashboard.model';\nimport {\n DeviceDashboardActionBarFactory,\n GroupDashboardActionBarFactory\n} from './dashboard-action-bar.factory';\nimport { DashboardDetailComponent } from './dashboard-detail.component';\nimport { DeviceDashboardGuard } from './device-dashboard.guard';\nimport { GroupDashboardGuard } from './group-dashboard.guard';\nimport { PasteDashboardActionComponent } from './paste-dashboard-action.component';\nimport { WidgetConfigComponent } from './widget-config.component';\nimport { WidgetPreviewComponent } from './widget-preview.component';\nimport { DashboardAvailabilityComponent } from './dashboard-availability.component';\nimport { IconSelectorModule } from '@c8y/ngx-components/icon-selector';\nimport { NewDashboardGuard, newDashboardTab } from './new-dashboard.guard';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { DashboardGeneralSettingsComponent } from './dashboard-settings/dashboard-general-settings.component';\nimport { DashboardAppearanceSettingsComponent } from './dashboard-settings/dashboard-appearance-settings.component';\nimport { DashboardVersionHistoryComponent } from './dashboard-settings/dashboard-version-history.component';\nimport { TypedDashboardSettingsComponent } from './dashboard-settings/typed-dashboard-settings.component';\nimport { TypeDashboardInfoComponent } from './type-dashboard-info/type-dashboard-info.component';\n\nconst defaultConfig = {\n allowFullscreen: true\n} as const satisfies ContextDashboardConfig;\n\n@NgModule({\n declarations: [\n AppearanceSettingsComponent,\n ContextDashboardComponent,\n WidgetConfigComponent,\n WidgetPreviewComponent,\n DashboardDetailComponent,\n AddDashboardComponent,\n PasteDashboardActionComponent,\n DashboardAvailabilityComponent,\n DashboardGeneralSettingsComponent,\n DashboardAppearanceSettingsComponent,\n DashboardVersionHistoryComponent,\n TypedDashboardSettingsComponent,\n TypeDashboardInfoComponent\n ],\n imports: [\n CoreModule,\n TooltipModule,\n PopoverModule,\n AssetSelectorModule,\n IconSelectorModule,\n BsDropdownModule.forRoot(),\n CollapseModule.forRoot()\n ],\n exports: [\n ContextDashboardComponent,\n WidgetConfigComponent,\n DashboardDetailComponent,\n TypeDashboardInfoComponent\n ],\n providers: [\n {\n provide: CONTEXT_DASHBOARD_CONFIG,\n useValue: defaultConfig\n }\n ]\n})\nexport class ContextDashboardModule {\n static config(config: ContextDashboardConfig = {}): ModuleWithProviders<ContextDashboardModule> {\n return {\n ngModule: ContextDashboardModule,\n providers: [\n {\n provide: CONTEXT_DASHBOARD_CONFIG,\n useValue: { ...defaultConfig, ...config }\n },\n hookRoute(config.routes || [])\n ]\n };\n }\n}\n\n@NgModule({\n imports: [ContextDashboardModule],\n declarations: [],\n providers: [\n hookRoute([\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [DeviceDashboardGuard],\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n context: ViewContext.Device\n },\n // new dashboard route should be defined last\n {\n path: newDashboardTab.path,\n component: ContextDashboardComponent,\n canActivate: [NewDashboardGuard],\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n context: ViewContext.Device\n }\n ]),\n hookTab(AddDeviceDashboardFactory, { providerType: HookProviderTypes.ExistingProvider }),\n hookActionBar(DeviceDashboardActionBarFactory)\n ]\n})\nexport class DeviceContextDashboardModule {}\n\n@NgModule({\n imports: [ContextDashboardModule],\n declarations: [],\n providers: [\n hookRoute([\n {\n path: 'dashboard/:dashboardId',\n component: ContextDashboardComponent,\n canActivate: [GroupDashboardGuard],\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n context: ViewContext.Group\n },\n // new dashboard route should be defined last\n {\n path: newDashboardTab.path,\n component: ContextDashboardComponent,\n canActivate: [NewDashboardGuard],\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()],\n context: ViewContext.Group\n }\n ]),\n hookTab(AddGroupDashboardFactory, { providerType: HookProviderTypes.ExistingProvider }),\n hookActionBar(GroupDashboardActionBarFactory)\n ]\n})\nexport class GroupContextDashboardModule {}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport {\n ContextDashboardModule,\n DeviceContextDashboardModule,\n GroupContextDashboardModule\n} from '../context-dashboard.module';\nimport { hookNavigator, gettext, CoreModule, hookRoute } from '@c8y/ngx-components';\nimport { CockpitDashboardComponent } from './cockpit-dashboard.component';\nimport { CockpitDashboardConfig, COCKPIT_HOME_DASHBOARD_CONFIG } from './cockpit-dashboard.model';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\n\n@NgModule({\n imports: [CoreModule, ContextDashboardModule],\n declarations: [CockpitDashboardComponent],\n providers: [\n hookNavigator({ label: gettext('Home'), icon: 'home', priority: 10000, path: '/' }),\n hookRoute({\n path: '',\n component: CockpitDashboardComponent,\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()]\n })\n ]\n})\nexport class CockpitHomeDashboardModule {}\n\n@NgModule({\n imports: [CockpitHomeDashboardModule, DeviceContextDashboardModule, GroupContextDashboardModule]\n})\nexport class CockpitDashboardModule {\n static config(config: CockpitDashboardConfig = {}): ModuleWithProviders<CockpitDashboardModule> {\n return {\n ngModule: CockpitDashboardModule,\n providers: [\n {\n provide: COCKPIT_HOME_DASHBOARD_CONFIG,\n useValue: config\n }\n ]\n };\n }\n}\n","import { Component, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { InventoryService } from '@c8y/client';\nimport { ContextData, gettext, Widget } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { from, Subscription } from 'rxjs';\nimport { map, mergeMap, tap, toArray } from 'rxjs/operators';\nimport { WidgetService } from '../widget.service';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\nimport { ContextDashboardComponent } from '../context-dashboard.component';\n\n@Component({\n selector: 'c8y-device-info-dashboard-dashboard',\n templateUrl: './device-info-dashboard.component.html'\n})\nexport class DeviceInfoDashboardComponent implements CanDeactivateComponent {\n isLoading = true;\n title: string;\n dashboardName = '';\n widgetsList: Widget[];\n currentContext: ContextData;\n contextSubscription: Subscription;\n widgetsSubscription: Subscription;\n @ViewChild(ContextDashboardComponent, { static: false })\n contextDashboard: ContextDashboardComponent;\n\n DEVICE_INFO_WIDGETS = [\n {\n name: 'deviceStatusWidget',\n title: gettext('Device status'),\n _x: 0,\n _y: 0,\n _height: 5,\n _width: 8\n },\n {\n name: 'Data points graph',\n title: gettext('Device and communication'),\n _x: 8,\n _y: 0,\n _height: 5,\n _width: 16,\n config: {\n interval: 'hours',\n aggregation: 'NONE',\n realtime: true,\n datapointsInitialDisplayLimit: 3,\n datapoints: [\n {\n fragment: 'c8y_Battery',\n series: 'level',\n label: this.translateService.instant('Battery: level'),\n unit: '%',\n renderType: 'min',\n lineType: 'line',\n color: '#5e07b3',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'rssi',\n label: this.translateService.instant('Signal: RSSI'),\n unit: 'dBm',\n renderType: 'min',\n lineType: 'line',\n color: '#a7d0f1',\n __active: true\n },\n {\n fragment: 'c8y_MemoryMeasurement',\n series: 'Used',\n label: this.translateService.instant('Memory: used'),\n unit: 'MB',\n renderType: 'min',\n lineType: 'line',\n color: '#f75229',\n __active: true\n },\n {\n fragment: 'c8y_CPUMeasurement',\n series: 'Workload',\n label: this.translateService.instant('CPU: workload'),\n unit: '%',\n renderType: 'min',\n lineType: 'line',\n color: '#b24f3e',\n __active: true\n },\n {\n fragment: 'c8y_NetworkStatistics',\n series: 'Upload',\n label: this.translateService.instant('Network: upload'),\n unit: 'KB/s',\n renderType: 'min',\n lineType: 'line',\n color: '#88c039',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'RCSP',\n label: this.translateService.instant('Signal: RCSP'),\n renderType: 'min',\n lineType: 'line',\n color: '#5e2f19',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'RSCP',\n label: this.translateService.instant('Signal: RSCP'),\n renderType: 'min',\n lineType: 'line',\n color: '#5e2f19',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'RSRP',\n label: this.translateService.instant('Signal: RSRP'),\n renderType: 'min',\n lineType: 'line',\n color: '#43ba3b',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'RSRQ',\n label: this.translateService.instant('Signal: RSRQ'),\n renderType: 'min',\n lineType: 'line',\n color: '#14b0b3',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'ber',\n label: this.translateService.instant('Signal: BER'),\n unit: '%',\n renderType: 'min',\n lineType: 'line',\n color: '#44ff33',\n __active: true\n },\n {\n fragment: 'c8y_SignalStrength',\n series: 'ECN0',\n label: this.translateService.instant('Signal: ECN0'),\n renderType: 'min',\n lineType: 'line',\n color: '#873efa',\n __active: true\n },\n {\n fragment: 'c8y_NetworkStatistics',\n series: 'Download',\n label: this.translateService.instant('Network: download'),\n unit: 'KB/s',\n renderType: 'min',\n lineType: 'line',\n color: '#f27a45',\n __active: true\n },\n {\n fragment: 'c8y_MemoryMeasurement',\n series: 'Total',\n label: this.translateService.instant('Memory: total'),\n unit: 'MB',\n renderType: 'min',\n lineType: 'line',\n color: '#dadd8c',\n __active: true\n }\n ],\n alarmsEventsConfigs: [\n {\n label: 'c8y_LocationUpdate',\n timelineType: 'EVENT',\n color: '#6f6cd0',\n filters: {\n type: 'c8y_LocationUpdate'\n },\n __active: true\n },\n {\n label: 'c8y_UnavailabilityAlarm',\n timelineType: 'ALARM',\n color: '#375bf2',\n filters: {\n type: 'c8y_UnavailabilityAlarm'\n },\n __active: true\n }\n ]\n }\n },\n {\n name: 'Asset Properties',\n title: gettext('Device data'),\n config: {\n options: {\n properties: [\n {\n id: 'c8ySchema!!id',\n __active: true,\n keyPath: ['id'],\n type: 'string',\n label: 'ID'\n },\n {\n id: 'c8ySchema!!name',\n __active: true,\n keyPath: ['name'],\n type: 'string',\n label: 'Name'\n },\n {\n id: 'c8ySchema!!type',\n __active: true,\n keyPath: ['type'],\n type: 'string',\n label: 'Type'\n },\n {\n id: 'c8ySchema!!lastUpdated',\n __active: true,\n keyPath: ['lastUpdated'],\n type: 'string',\n label: 'Last Updated'\n },\n {\n id: 'c8ySchema!!creationTime',\n __active: true,\n keyPath: ['creationTime'],\n type: 'string',\n label: 'Creation Time'\n }\n ],\n allowDisplayAndEditKnownProperties: false,\n hiddenPropertiesKeyPaths: ['owner']\n }\n },\n _x: 0,\n _y: 5,\n _height: 8,\n _width: 8\n },\n {\n name: 'Alarm list',\n title: gettext('Active, critical alarms'),\n _x: 8,\n _y: 5,\n _height: 4,\n _width: 8,\n config: {\n options: {\n orderMode: 'ACTIVE_FIRST',\n severity: { CRITICAL: true },\n status: {\n ACTIVE: true,\n ACKNOWLEDGED: false,\n CLEARED: false\n },\n types: []\n }\n }\n },\n {\n name: 'deviceGroupAssignmentWidget',\n title: gettext('Group assignment'),\n _x: 16,\n _y: 5,\n _height: 4,\n _width: 8\n },\n {\n componentId: 'Map',\n title: gettext('Location'),\n _x: 8,\n _y: 9,\n _height: 4,\n _width: 16\n }\n ] as Widget[];\n\n constructor(\n private router: ActivatedRoute,\n private widgetService: WidgetService,\n private translateService: TranslateService,\n private inventoryService: InventoryService\n ) {}\n\n ngOnInit() {\n this.contextSubscription = this.router.parent.data\n .pipe(\n tap(({ contextData }) => {\n const contextNameValid = contextData.name && contextData.name.trim();\n this.title = contextNameValid ? contextData.name : contextData.id;\n this.dashboardName = `${contextData.id}-device-info`;\n })\n )\n .subscribe(async data => {\n this.currentContext = data as ContextData;\n this.addDeviceTargetForDP(data.contextData.id, data.contextData.name);\n });\n\n this.widgetsSubscription = from(this.DEVICE_INFO_WIDGETS)\n .pipe(\n mergeMap(widget => this.widgetService.mapLegacy(widget)),\n map(widget => {\n let device = this.router.parent.snapshot.data.contextData;\n if (device) {\n device = {\n name: device.name,\n id: device.id\n };\n }\n return {\n ...widget,\n config: {\n ...widget.config,\n device\n }\n };\n }),\n toArray()\n )\n .subscribe(async data => {\n await this.filterSupportedSeriesForDP(this.currentContext.contextData.id, data);\n this.widgetsList = data;\n this.isLoading = false;\n });\n }\n\n addDeviceTargetForDP(id: string | number, name: string) {\n const dpWidget = this.DEVICE_INFO_WIDGETS.filter(item => item.name == 'Data points graph')[0];\n // Add target to dataPoint config\n dpWidget.config.datapoints.map(item => (item['__target'] = { id, name }));\n // Add target to alarmEvents Config\n dpWidget.config.alarmsEventsConfigs.map(item => (item['__target'] = { id, name }));\n }\n\n async filterSupportedSeriesForDP(id: string | number, widgets: Widget[]) {\n const supportedMeasurements = await this.inventoryService.getMeasurementsAndSeries(id);\n const isDataPointSupported = dp =>\n supportedMeasurements.some(\n ({ fragment, series }) => dp.fragment === fragment && dp.series === series\n );\n const dpWidget = widgets.find(({ name }) => name === 'Data points graph');\n dpWidget.config.datapoints = dpWidget.config.datapoints.filter(isDataPointSupported);\n }\n\n ngOnDestroy() {\n this.widgetsSubscription.unsubscribe();\n this.contextSubscription.unsubscribe();\n }\n\n canDeactivate(): Promise<boolean> {\n return this.contextDashboard?.canDeactivate();\n }\n}\n","<div *ngIf=\"!isLoading\">\n <c8y-title>\n {{ title }}\n </c8y-title>\n <c8y-context-dashboard\n [translateWidgetTitle]=\"true\"\n [name]=\"dashboardName\"\n [context]=\"currentContext\"\n [defaultWidgets]=\"widgetsList\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n ></c8y-context-dashboard>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CoreModule, hookRoute, ViewContext, gettext } from '@c8y/ngx-components';\nimport { ContextDashboardModule } from '../context-dashboard.module';\nimport { DeviceInfoDashboardComponent } from './device-info-dashboard.component';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\n\n@NgModule({\n declarations: [DeviceInfoDashboardComponent],\n imports: [CommonModule, CoreModule, ContextDashboardModule],\n exports: [],\n providers: [\n hookRoute({\n context: ViewContext.Device,\n path: 'device-info',\n component: DeviceInfoDashboardComponent,\n label: gettext('Info'),\n priority: 10000,\n icon: 'asterisk',\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()]\n })\n ]\n})\nexport class DeviceInfoDashboardModule {}\n","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { gettext, Widget } from '@c8y/ngx-components';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\nimport { WidgetService } from '../widget.service';\nimport { ContextDashboardComponent } from '../context-dashboard.component';\n\n@Component({\n selector: 'c8y-device-management-home-dashboard',\n templateUrl: './device-management-home-dashboard.component.html'\n})\nexport class DeviceManagementHomeDashboardComponent implements OnInit, CanDeactivateComponent {\n widgets = [];\n dashboardName = 'home-dm1';\n defaultWidgets = [\n {\n name: 'devicemanagement.welcome.widget',\n title: gettext('Quick links'),\n _x: 0,\n _y: 0,\n _height: 4,\n _width: 12\n },\n {\n name: 'Recent Alarms',\n title: gettext('Recent alarms'),\n _x: 12,\n _y: 0,\n _height: 4,\n _width: 12\n }\n ] as Widget[];\n @ViewChild(ContextDashboardComponent, { static: true })\n contextDashboard: ContextDashboardComponent;\n\n constructor(private widgetService: WidgetService) {}\n\n ngOnInit() {\n this.defaultWidgets.map(async widget => {\n await this.widgetService\n .mapLegacy(widget)\n .then(transformedWidget => this.widgets.push(transformedWidget));\n });\n }\n\n canDeactivate(): Promise<boolean> {\n return this.contextDashboard?.canDeactivate();\n }\n}\n","<c8y-title>\n {{ 'Home' | translate }}\n</c8y-title>\n\n<c8y-context-dashboard\n [name]=\"dashboardName\"\n [defaultWidgets]=\"defaultWidgets\"\n [canDelete]=\"false\"\n [hideAvailability]=\"true\"\n></c8y-context-dashboard>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CoreModule, gettext, hookNavigator, hookRoute } from '@c8y/ngx-components';\nimport { ContextDashboardModule } from '../context-dashboard.module';\nimport { DeviceManagementHomeDashboardComponent } from './device-management-home-dashboard.component';\nimport { CanDeactivateComponent } from '../context-dashboard.model';\n\n@NgModule({\n declarations: [DeviceManagementHomeDashboardComponent],\n imports: [CommonModule, CoreModule, ContextDashboardModule],\n exports: [],\n providers: [\n hookRoute({\n path: '',\n component: DeviceManagementHomeDashboardComponent,\n canDeactivate: [(component: CanDeactivateComponent) => component.canDeactivate()]\n }),\n hookNavigator({ label: gettext('Home'), icon: 'home', priority: 10000, path: '/' })\n ]\n})\nexport class DeviceManagementHomeDashboardModule {}\n","import { Injectable } from '@angular/core';\nimport { TabFactory, Tab, gettext } from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\n\n@Injectable()\nexport class DashboardManagerTabsFactory implements TabFactory {\n constructor(public router: Router) {}\n\n get() {\n const tabs: Tab[] = [];\n\n if (this.router.url.match(/\\/dashboard-manager/g)) {\n tabs.push({\n path: 'dashboard-manager/type-dashboards',\n priority: 1000,\n label: gettext('Type dashboards')\n } as Tab);\n }\n\n return tabs;\n }\n}\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\n\nexport class DeviceTypeValueGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'deviceTypeValue';\n this.path = 'c8y_Dashboard.deviceTypeValue';\n this.header = gettext('Target asset model');\n\n this.filterable = true;\n this.sortable = false;\n\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'deviceTypeValues',\n label: gettext('Filter dashboards by target asset model'),\n addText: gettext('Add next`target asset model`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: 'c8y_MQTTDevice'\n }),\n getFilter: (model: any): any => {\n const filter: any = {};\n if (model.deviceTypeValues.length) {\n filter[this.path] = { __in: model.deviceTypeValues };\n }\n return filter;\n }\n };\n }\n}\n","import { Injectable } from '@angular/core';\nimport {\n Column,\n DataGridService,\n gettext,\n ModalService,\n Pagination,\n Status,\n UserPreferencesService\n} from '@c8y/ngx-components';\nimport { IManagedObject, InventoryService, IResultList, QueriesUtil } from '@c8y/client';\nimport { ContextDashboardManagedObject } from '../context-dashboard.model';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DeviceTypeValueGridColumn } from './type-dashboards-list/device-type-value.grid-column';\nimport { TypeDashboardFilter } from './dashboard-manager.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DashboardManagerService extends DataGridService {\n queriesUtil: QueriesUtil;\n baseQuery = {\n __filter: {\n __and: [\n { 'c8y_Dashboard.deviceType': { __eq: true } },\n { __has: 'c8y_Dashboard.deviceTypeValue' }\n ]\n }\n };\n private TYPE_DASHBOARDS_QUERY =\n '$filter=((c8y_Dashboard.deviceType eq true) and (has(c8y_Dashboard.deviceTypeValue)))';\n constructor(\n protected inventory: InventoryService,\n protected userPreferencesService: UserPreferencesService,\n protected modal: ModalService,\n protected translateService: TranslateService\n ) {\n super(userPreferencesService);\n }\n\n getColumns(): Column[] {\n return [\n {\n name: 'icon',\n header: gettext('Icon'),\n path: 'c8y_Dashboard.icon',\n sortable: false,\n gridTrackSize: '45px'\n },\n {\n name: 'name',\n header: gettext('Name'),\n path: 'name',\n sortable: false,\n gridTrackSize: '200px'\n },\n {\n name: 'description',\n header: gettext('Description'),\n path: 'c8y_Dashboard.description',\n sortable: false\n },\n new DeviceTypeValueGridColumn(),\n {\n name: 'lastUpdated',\n header: gettext('Last update'),\n path: 'lastUpdated',\n sortable: false,\n gridTrackSize: '200px'\n }\n ];\n }\n\n getDefaultPagination(): Pagination {\n return {\n pageSize: 25,\n currentPage: 1\n };\n }\n\n async getData(\n columns: Column[],\n pagination: Pagination,\n text?: string\n ): Promise<IResultList<IManagedObject>> {\n const filters = this.getFilters(columns, pagination, text);\n\n return await this.inventory.list(filters);\n }\n\n async getTotal(): Promise<number> {\n return (\n await this.inventory.list({\n query: this.TYPE_DASHBOARDS_QUERY,\n withTotalElements: true\n })\n ).paging.totalElements;\n }\n\n async delete(dashboard: ContextDashboardManagedObject, onSuccess: () => void): Promise<void> {\n try {\n const msg: string = gettext(\n `You are about to delete the dashboard \"{{ dashboardName }}\" from all devices of type \"{{ deviceType }}\".\n Do you want to proceed?`\n );\n\n await this.modal.confirm(\n gettext('Delete dashboard'),\n this.translateService.instant(msg, {\n dashboardName: dashboard.c8y_Dashboard.name,\n deviceType: dashboard.c8y_Dashboard.deviceTypeValue\n }),\n Status.DANGER,\n {\n ok: gettext('Delete'),\n cancel: gettext('Cancel')\n }\n );\n await this.inventory.delete(dashboard);\n onSuccess();\n } catch (ex) {\n // intended empty\n }\n }\n\n private getFilters(\n columns: Column[],\n pagination: Pagination,\n text?: string\n ): TypeDashboardFilter {\n return {\n query: this.getQueryString(columns),\n ...(text && { text }),\n pageSize: pagination.pageSize,\n currentPage: pagination.currentPage,\n withTotalPages: true,\n withTotalElements: true\n };\n }\n\n private getQueryString(columns: Column[]): string {\n const queryFromColumns = this.getQueryObj(columns);\n const fullQuery = this.queriesUtil.addAndFilter(queryFromColumns, this.baseQuery);\n return this.queriesUtil.buildQuery(fullQuery);\n }\n}\n","import { ColumnConfig } from '@c8y/ngx-components';\nimport { NameDeviceGridColumn } from '@c8y/ngx-components/device-grid';\n\nexport class BasicNameDeviceGridColumn extends NameDeviceGridColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'basic-name';\n this.cellRendererComponent = null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Column, DataGridService, Pagination, UserPreferencesService } from '@c8y/ngx-components';\nimport { InventoryService } from '@c8y/client';\nimport {\n GroupDeviceGridColumn,\n RegistrationDateDeviceGridColumn,\n TypeDeviceGridColumn\n} from '@c8y/ngx-components/device-grid';\nimport { BasicNameDeviceGridColumn } from './basic-name.device-grid-column';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TypeDashboardAssetsGridService extends DataGridService {\n constructor(\n protected inventoryService: InventoryService,\n protected userPreferencesService: UserPreferencesService\n ) {\n super(userPreferencesService);\n }\n\n getDefaultColumns(columnsForDevice = true): Column[] {\n return columnsForDevice\n ? [\n new BasicNameDeviceGridColumn(),\n new TypeDeviceGridColumn(),\n new GroupDeviceGridColumn(),\n new RegistrationDateDeviceGridColumn()\n ]\n : [\n new BasicNameDeviceGridColumn(),\n new TypeDeviceGridColumn(),\n new RegistrationDateDeviceGridColumn()\n ];\n }\n\n async getData(columns: Column[], pagination: Pagination, query: any = {}, text = null) {\n const filters = {\n ...this.getFilters(columns, pagination, query, text),\n withGroups: true\n };\n return this.inventoryService.list(filters);\n }\n\n async getCount(columns: Column[], pagination: Pagination, query: any = {}, text: string = null) {\n const filters = {\n ...this.getFilters(columns, pagination, query, text),\n pageSize: 1,\n currentPage: 1\n };\n return (await this.inventoryService.list(filters)).paging.totalPages;\n }\n\n async getTotal(query: any = {}): Promise<number> {\n const filters = {\n query: this.queriesUtil.buildQuery(query),\n pageSize: 1,\n withTotalPages: true\n };\n return (await this.inventoryService.list(filters)).paging.totalPages;\n }\n\n private getFilters(columns: Column[], pagination: Pagination, query: any, text?: string) {\n return {\n ...{ query: this.getDeviceQueryString(columns, query) },\n ...(text && { text }),\n pageSize: pagination.pageSize,\n currentPage: pagination.currentPage,\n withChildren: false,\n withTotalPages: true\n };\n }\n\n private getDeviceQueryString(columns: Column[], query: any): string {\n let fullQuery = this.getQueryObj(columns);\n fullQuery = this.queriesUtil.addAndFilter(fullQuery, query);\n return this.queriesUtil.buildQuery(fullQuery);\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport {\n ActionControl,\n alertOnError,\n Column,\n DataSourceModifier,\n gettext,\n ModalLabels,\n ServerSideDataCallback,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { Router } from '@angular/router';\nimport { IManagedObject } from '@c8y/client';\nimport { TypeDashboardAssetsGridService } from './type-dashboard-assets-grid.service';\nimport { ContextDashboardManagedObject } from '../../../context-dashboard/context-dashboard.model';\nimport { ContextDashboardService } from '../../../context-dashboard/context-dashboard.service';\n\n@Component({\n selector: 'c8y-type-dashboard-target-assets-grid',\n templateUrl: './type-dashboard-target-assets-grid.component.html'\n})\nexport class TypeDashboardTargetAssetsGridComponent implements OnInit {\n labels: ModalLabels = { cancel: gettext('Cancel') };\n columns: Column[];\n actionControls: ActionControl[] = [\n {\n type: 'navigateToInstance',\n text: gettext('Open instance`dashboard`'),\n callback: item => this.navigateToDevice(item as IManagedObject),\n icon: 'file-create'\n }\n ];\n loadMoreItemsLabel = gettext('Load more assets');\n loadingItemsLabel: string = gettext('Loading assets…');\n pagination = {\n pageSize: 25,\n currentPage: 1\n };\n serverSideDataCallback: ServerSideDataCallback;\n\n @Input() dashboard: ContextDashboardManagedObject;\n @Output() onNavigateToAsset: EventEmitter<void> = new EventEmitter<void>();\n private isDeviceDashboard: boolean;\n\n constructor(\n private router: Router,\n private assetsGridService: TypeDashboardAssetsGridService,\n private contextDashboardService: ContextDashboardService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n }\n\n ngOnInit() {\n this.isDeviceDashboard = this.contextDashboardService.isDeviceDashboard(this.dashboard);\n this.columns = this.assetsGridService.getDefaultColumns(this.isDeviceDashboard);\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const baseQuery = { type: this.dashboard.c8y_Dashboard.deviceTypeValue };\n\n const { res, data, paging } = await alertOnError(\n this.assetsGridService.getData(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n baseQuery,\n dataSourceModifier.searchText\n )\n );\n\n const filteredSize = await alertOnError(\n this.assetsGridService.getCount(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n baseQuery,\n dataSourceModifier.searchText\n )\n );\n const size = await alertOnError(this.assetsGridService.getTotal(baseQuery));\n\n const serverSideDataResult = {\n res,\n data,\n paging,\n filteredSize,\n size\n };\n\n return serverSideDataResult;\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n\n navigateToDevice(val: IManagedObject): void {\n const parentSubPath = this.isDeviceDashboard ? 'device' : 'group';\n this.onNavigateToAsset.emit();\n this.router.navigate([`/${parentSubPath}/${val.id}/dashboard/${this.dashboard.id}`]);\n }\n}\n","<c8y-data-grid\n [title]=\"''\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"actionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [showSearch]=\"true\"\n>\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'Refine your search terms.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n</c8y-data-grid>\n","import { Component, HostListener, Input } from '@angular/core';\nimport { gettext, ModalLabels } from '@c8y/ngx-components';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { ContextDashboardManagedObject } from '../../context-dashboard.model';\n\n@Component({\n selector: 'c8y-type-dashboard-target-assets-modal',\n templateUrl: './type-dashboard-target-assets-modal.component.html'\n})\nexport class TypeDashboardTargetAssetsModalComponent {\n labels: ModalLabels = { cancel: gettext('Cancel') };\n @Input() dashboard: ContextDashboardManagedObject;\n\n constructor(private bsModalRef: BsModalRef) {}\n\n @HostListener('document:keydown', ['$event'])\n handleKeyboardEvent(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n this.close();\n }\n }\n\n close(): void {\n this.bsModalRef.hide();\n }\n}\n","<c8y-modal\n title=\"{{ 'Select dashboard instance to edit' | translate }}\"\n (onClose)=\"close()\"\n (onDismiss)=\"close()\"\n [labels]=\"labels\"\n [disabled]=\"true\"\n [headerClasses]=\"'has-data-grid'\"\n>\n <c8y-type-dashboard-target-assets-grid\n [dashboard]=\"dashboard\"\n (onNavigateToAsset)=\"close()\"\n ></c8y-type-dashboard-target-assets-grid>\n</c8y-modal>\n","import { Component, EventEmitter } from '@angular/core';\nimport {\n ActionControl,\n alertOnError,\n BuiltInActionType,\n Column,\n DataSourceModifier,\n DisplayOptions,\n gettext,\n ServerSideDataCallback,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { DashboardManagerService } from '../dashboard-manager.service';\nimport { ContextDashboardManagedObject } from '../../context-dashboard.model';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { TypeDashboardTargetAssetsModalComponent } from '../type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component';\n\n@Component({\n selector: 'c8y-dashboard-manager',\n templateUrl: './type-dashboards-list.component.html'\n})\nexport class TypeDashboardsListComponent {\n title = gettext('Type dashboards');\n loadMoreItemsLabel = gettext('Load more dashboards');\n loadingItemsLabel: string = gettext('Loading dashboards…');\n columns = this.dashboardManagerService.getColumns();\n pagination = this.dashboardManagerService.getDefaultPagination();\n actionControls: ActionControl[] = [\n {\n type: BuiltInActionType.Edit,\n text: gettext('Edit dashboard'),\n callback: item => this.openTargetAssetsModal(item as ContextDashboardManagedObject)\n },\n {\n type: BuiltInActionType.Delete,\n text: gettext('Delete dashboard'),\n callback: item => this.delete(item as ContextDashboardManagedObject)\n }\n ];\n serverSideDataCallback: ServerSideDataCallback;\n displayOptions: DisplayOptions = {\n striped: true,\n bordered: false,\n gridHeader: true,\n filter: true,\n hover: false\n };\n refresh = new EventEmitter<void>();\n\n constructor(\n private dashboardManagerService: DashboardManagerService,\n private bsModalService: BsModalService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n }\n\n async delete(dashboard: ContextDashboardManagedObject) {\n await this.dashboardManagerService.delete(dashboard, () => this.refresh.emit());\n }\n\n openTargetAssetsModal(dashboard: ContextDashboardManagedObject): void {\n const initialState: Pick<TypeDashboardTargetAssetsModalComponent, 'dashboard'> = { dashboard };\n this.bsModalService.show(TypeDashboardTargetAssetsModalComponent, {\n class: 'modal-lg',\n ariaDescribedby: 'modal-body',\n ariaLabelledBy: 'modal-title',\n ignoreBackdropClick: true,\n initialState\n });\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const { res, data, paging } = await alertOnError(\n this.dashboardManagerService.getData(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n dataSourceModifier.searchText\n )\n );\n const filteredSize = paging.totalElements;\n const size = await alertOnError(this.dashboardManagerService.getTotal());\n\n return {\n res,\n data,\n paging,\n filteredSize,\n size\n };\n }\n}\n","<c8y-title>\n {{ 'Dashboard manager' | translate }}\n</c8y-title>\n\n<div class=\"content-fullpage d-flex d-col border-top border-bottom\">\n <c8y-data-grid\n [title]=\"title\"\n [loadMoreItemsLabel]=\"loadMoreItemsLabel\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"'auto'\"\n [actionControls]=\"actionControls\"\n [showSearch]=\"true\"\n [displayOptions]=\"displayOptions\"\n [refresh]=\"refresh\"\n [expandableRows]=\"'ASYNC'\"\n >\n <div\n *c8yExpandableRow=\"\n let context;\n let asyncRenderSuccess = asyncRenderSuccess;\n let asyncRenderFail = asyncRenderFail\n \"\n >\n <c8y-type-dashboard-info\n [context]=\"context\"\n [asyncRenderSuccess]=\"asyncRenderSuccess\"\n [asyncRenderFail]=\"asyncRenderFail\"\n ></c8y-type-dashboard-info>\n </div>\n\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No matching dashboards.' | translate\"\n [subtitle]=\"'Refine your search terms' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column name=\"icon\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <i [c8yIcon]=\"context.value\"></i>\n </ng-container>\n </c8y-column>\n\n <c8y-column name=\"deviceTypeValue\">\n <ng-container *c8yCellRendererDef=\"let context\">\n <span class=\"label label-info\">\n {{ context.value }}\n </span>\n </ng-container>\n </c8y-column>\n\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n","import { NgModule } from '@angular/core';\nimport {\n CoreModule,\n gettext,\n hookNavigator,\n hookRoute,\n hookTab,\n ModalModule,\n NavigatorNode\n} from '@c8y/ngx-components';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { DeviceGridModule } from '@c8y/ngx-components/device-grid';\nimport { DashboardManagerTabsFactory } from './dashboard-manager-tabs.factory';\nimport { TypeDashboardsListComponent } from './type-dashboards-list/type-dashboards-list.component';\nimport { ContextDashboardModule } from '../context-dashboard.module';\nimport { TypeDashboardTargetAssetsModalComponent } from './type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component';\nimport { TypeDashboardTargetAssetsGridComponent } from './type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component';\n\nconst DASHBOARD_MANAGER_PATH = 'dashboard-manager';\n\n@NgModule({\n declarations: [\n TypeDashboardsListComponent,\n TypeDashboardTargetAssetsModalComponent,\n TypeDashboardTargetAssetsGridComponent\n ],\n imports: [CoreModule, TooltipModule, DeviceGridModule, ContextDashboardModule, ModalModule],\n providers: [\n hookTab(DashboardManagerTabsFactory),\n hookRoute([\n {\n path: DASHBOARD_MANAGER_PATH,\n redirectTo: `${DASHBOARD_MANAGER_PATH}/type-dashboards`,\n pathMatch: 'full'\n },\n {\n path: `${DASHBOARD_MANAGER_PATH}/type-dashboards`,\n component: TypeDashboardsListComponent\n }\n ]),\n hookNavigator(\n new NavigatorNode({\n parent: gettext('Configuration'),\n path: DASHBOARD_MANAGER_PATH,\n label: gettext('Dashboard manager'),\n icon: 'management1',\n routerLinkExact: false,\n featureId: 'dashboardManager'\n })\n )\n ]\n})\nexport class DashboardManagerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","i5.TypeDashboardInfoComponent","i6.DashboardAvailabilityComponent","i7.TypedDashboardSettingsComponent","i1.ContextDashboardService","i4.AppearanceSettingsComponent","i2.ContextDashboardService","i5","i6.DashboardDetailService","i7","i8","i10.DashboardGeneralSettingsComponent","i11.DashboardAppearanceSettingsComponent","i12.DashboardVersionHistoryComponent","i1.WidgetService","i4.ContextDashboardService","i6","i9.AppearanceSettingsComponent","i10.WidgetPreviewComponent","i1.DashboardOriginatorService","i2.DashboardCaretakerService","i4.WidgetService","i7.DashboardEditModeService","i9","i10.DashboardDetailComponent","i2.ContextDashboardComponent","i2.WidgetService","i7.ContextDashboardComponent","i3.ContextDashboardComponent","i2.TypeDashboardAssetsGridService","i3.ContextDashboardService","i3.TypeDashboardTargetAssetsGridComponent","i1.DashboardManagerService"],"mappings":"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"}
|