@c8y/ngx-components 1022.10.1 → 1022.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/actility-device-registration/actility-device-registration-button.component.d.ts +1 -1
- package/actility-device-registration/actility-device-registration-button.component.d.ts.map +1 -1
- package/actility-device-registration/actility-device-registration.component.d.ts +1 -1
- package/actility-device-registration/actility-device-registration.component.d.ts.map +1 -1
- package/actility-device-registration/actility-device-registration.module.d.ts +4 -4
- package/actility-device-registration/actility-device-registration.module.d.ts.map +1 -1
- package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.d.ts +1 -1
- package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.d.ts.map +1 -1
- package/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.d.ts +25 -1
- package/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.d.ts.map +1 -1
- package/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.d.ts +1 -1
- package/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.d.ts.map +1 -1
- package/alarm-event-selector/alarm-event-selector-modal/alarm-event-selector-modal.component.d.ts +1 -1
- package/alarm-event-selector/alarm-event-selector-modal/alarm-event-selector-modal.component.d.ts.map +1 -1
- package/alarm-event-selector/alarm-event-selector.component.d.ts +1 -1
- package/alarm-event-selector/alarm-event-selector.component.d.ts.map +1 -1
- package/alarm-event-selector/alarm-event-selector.module.d.ts +15 -15
- package/alarm-event-selector/alarm-event-selector.module.d.ts.map +1 -1
- package/alarm-event-selector/custom-alarm-event-form/custom-alarm-event-form.component.d.ts +1 -1
- package/alarm-event-selector/custom-alarm-event-form/custom-alarm-event-form.component.d.ts.map +1 -1
- package/alarm-event-selector/pipes/includes-alarm.pipe.d.ts +1 -1
- package/alarm-event-selector/pipes/includes-alarm.pipe.d.ts.map +1 -1
- package/alarms/alarm-details.component.d.ts +1 -1
- package/alarms/alarm-details.component.d.ts.map +1 -1
- package/alarms/alarm-empty.component.d.ts +1 -1
- package/alarms/alarm-empty.component.d.ts.map +1 -1
- package/alarms/alarm-info.component.d.ts +1 -1
- package/alarms/alarm-info.component.d.ts.map +1 -1
- package/alarms/alarm-severities-to-title.pipe.d.ts +1 -1
- package/alarms/alarm-severities-to-title.pipe.d.ts.map +1 -1
- package/alarms/alarm-severity-to-label.pipe.d.ts +1 -1
- package/alarms/alarm-severity-to-label.pipe.d.ts.map +1 -1
- package/alarms/alarm-status-to-icon.pipe.d.ts +1 -1
- package/alarms/alarm-status-to-icon.pipe.d.ts.map +1 -1
- package/alarms/alarm-status-to-label.pipe.d.ts +1 -1
- package/alarms/alarm-status-to-label.pipe.d.ts.map +1 -1
- package/alarms/alarms-date-filter.component.d.ts +1 -1
- package/alarms/alarms-date-filter.component.d.ts.map +1 -1
- package/alarms/alarms-filter.component.d.ts +1 -1
- package/alarms/alarms-filter.component.d.ts.map +1 -1
- package/alarms/alarms-icon.component.d.ts +1 -1
- package/alarms/alarms-icon.component.d.ts.map +1 -1
- package/alarms/alarms-interval-refresh.component.d.ts +1 -1
- package/alarms/alarms-interval-refresh.component.d.ts.map +1 -1
- package/alarms/alarms-list.component.d.ts +1 -1
- package/alarms/alarms-list.component.d.ts.map +1 -1
- package/alarms/alarms-type-filter.component.d.ts +1 -1
- package/alarms/alarms-type-filter.component.d.ts.map +1 -1
- package/alarms/alarms.component.d.ts +1 -1
- package/alarms/alarms.component.d.ts.map +1 -1
- package/alarms/alarms.module.d.ts +27 -27
- package/alarms/alarms.module.d.ts.map +1 -1
- package/alarms/audit-changes-message.pipe.d.ts +1 -1
- package/alarms/audit-changes-message.pipe.d.ts.map +1 -1
- package/api/api.service.d.ts +8 -0
- package/api/api.service.d.ts.map +1 -1
- package/app-logs/app-logs-auto-refresh.component.d.ts +1 -1
- package/app-logs/app-logs-auto-refresh.component.d.ts.map +1 -1
- package/app-logs/app-logs-auto-refresh.module.d.ts +4 -4
- package/app-logs/app-logs-auto-refresh.module.d.ts.map +1 -1
- package/assets-navigator/asset-selector/asset-selector-node.component.d.ts +1 -1
- package/assets-navigator/asset-selector/asset-selector-node.component.d.ts.map +1 -1
- package/assets-navigator/asset-selector/asset-selector.component.d.ts +12 -1
- package/assets-navigator/asset-selector/asset-selector.component.d.ts.map +1 -1
- package/assets-navigator/asset-selector/asset-selector.module.d.ts +8 -8
- package/assets-navigator/asset-selector/asset-selector.module.d.ts.map +1 -1
- package/assets-navigator/asset-selector/miller-view.component.d.ts +1 -1
- package/assets-navigator/asset-selector/miller-view.component.d.ts.map +1 -1
- package/auth-configuration/basic-settings/auth-configuration.component.d.ts +1 -1
- package/auth-configuration/basic-settings/auth-configuration.component.d.ts.map +1 -1
- package/auth-configuration/basic-settings/basic-auth-settings.component.d.ts +1 -1
- package/auth-configuration/basic-settings/basic-auth-settings.component.d.ts.map +1 -1
- package/auth-configuration/basic-settings/basic-settings.module.d.ts +8 -8
- package/auth-configuration/basic-settings/basic-settings.module.d.ts.map +1 -1
- package/auth-configuration/basic-settings/login-settings.component.d.ts +2 -2
- package/auth-configuration/basic-settings/login-settings.component.d.ts.map +1 -1
- package/auth-configuration/basic-settings/session-configuration.component.d.ts +1 -1
- package/auth-configuration/basic-settings/session-configuration.component.d.ts.map +1 -1
- package/auth-configuration/basic-settings/tfa-settings.component.d.ts +1 -1
- package/auth-configuration/basic-settings/tfa-settings.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/sso-configuration.component.d.ts +1 -1
- package/auth-configuration/sso-configuration/sso-configuration.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/sso-configuration.module.d.ts +24 -24
- package/auth-configuration/sso-configuration/sso-configuration.module.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.d.ts +1 -1
- package/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/access-mapping/child-predicates.component.d.ts +1 -1
- package/auth-configuration/sso-configuration/template-parts/access-mapping/child-predicates.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/access-mapping/dynamic-access-mapping.component.d.ts +1 -1
- package/auth-configuration/sso-configuration/template-parts/access-mapping/dynamic-access-mapping.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-mapping.component.d.ts +1 -1
- package/auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-mapping.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-modal.component.d.ts +1 -1
- package/auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-modal.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/basic-configuration.component.d.ts +1 -1
- package/auth-configuration/sso-configuration/template-parts/basic-configuration.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/external-token-config.component.d.ts +1 -1
- package/auth-configuration/sso-configuration/template-parts/external-token-config.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/logout-configuration.component.d.ts +1 -1
- package/auth-configuration/sso-configuration/template-parts/logout-configuration.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/request-configuration.component.d.ts +1 -1
- package/auth-configuration/sso-configuration/template-parts/request-configuration.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/signature-configuration.component.d.ts +1 -1
- package/auth-configuration/sso-configuration/template-parts/signature-configuration.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.d.ts +1 -1
- package/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/user-id-configuration.component.d.ts +1 -1
- package/auth-configuration/sso-configuration/template-parts/user-id-configuration.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/templates/aad-template.component.d.ts +1 -1
- package/auth-configuration/sso-configuration/templates/aad-template.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/templates/custom-template.component.d.ts +1 -1
- package/auth-configuration/sso-configuration/templates/custom-template.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/templates/key-cloak-template.component.d.ts +1 -1
- package/auth-configuration/sso-configuration/templates/key-cloak-template.component.d.ts.map +1 -1
- package/bookmarks/bookmarks.component.d.ts +1 -1
- package/bookmarks/bookmarks.component.d.ts.map +1 -1
- package/bookmarks/bookmarks.module.d.ts +7 -7
- package/bookmarks/bookmarks.module.d.ts.map +1 -1
- package/bookmarks/edit-bookmarks/edit-bookmarks.component.d.ts +1 -1
- package/bookmarks/edit-bookmarks/edit-bookmarks.component.d.ts.map +1 -1
- package/child-devices/child-devices.component.d.ts +1 -1
- package/child-devices/child-devices.component.d.ts.map +1 -1
- package/child-devices/child-devices.module.d.ts +5 -5
- package/child-devices/child-devices.module.d.ts.map +1 -1
- package/cockpit-config/cockpit-config.module.d.ts +17 -17
- package/cockpit-config/cockpit-config.module.d.ts.map +1 -1
- package/cockpit-config/cockpit-configuration.component.d.ts +1 -1
- package/cockpit-config/cockpit-configuration.component.d.ts.map +1 -1
- package/cockpit-config/feature-config.component.d.ts +1 -1
- package/cockpit-config/feature-config.component.d.ts.map +1 -1
- package/cockpit-config/home-dashboard-config.component.d.ts +1 -1
- package/cockpit-config/home-dashboard-config.component.d.ts.map +1 -1
- package/cockpit-config/misc-config.component.d.ts +1 -1
- package/cockpit-config/misc-config.component.d.ts.map +1 -1
- package/cockpit-config/root-node-config.component.d.ts +1 -1
- package/cockpit-config/root-node-config.component.d.ts.map +1 -1
- package/cockpit-config/setup/cockpit-setup-step1.component.d.ts +1 -1
- package/cockpit-config/setup/cockpit-setup-step1.component.d.ts.map +1 -1
- package/cockpit-config/setup/cockpit-setup-step2.component.d.ts +1 -1
- package/cockpit-config/setup/cockpit-setup-step2.component.d.ts.map +1 -1
- package/cockpit-config/setup/cockpit-setup-step3.component.d.ts +1 -1
- package/cockpit-config/setup/cockpit-setup-step3.component.d.ts.map +1 -1
- package/cockpit-config/setup/cockpit-setup-step4.component.d.ts +1 -1
- package/cockpit-config/setup/cockpit-setup-step4.component.d.ts.map +1 -1
- package/cockpit-config/setup/cockpit-setup-stepper-buttons.component.d.ts +1 -1
- package/cockpit-config/setup/cockpit-setup-stepper-buttons.component.d.ts.map +1 -1
- package/context-dashboard/add-dashboard.component.d.ts +1 -1
- package/context-dashboard/add-dashboard.component.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.component.d.ts +2 -1
- package/context-dashboard/context-dashboard.component.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.model.d.ts +0 -1
- package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.module.d.ts +26 -19
- package/context-dashboard/context-dashboard.module.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.service.d.ts +6 -1
- package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
- package/context-dashboard/dashboard-detail.component.d.ts +2 -2
- package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
- package/context-dashboard/device-info-dashboard/device-info-dashboard.component.d.ts +1 -1
- package/context-dashboard/device-info-dashboard/device-info-dashboard.component.d.ts.map +1 -1
- package/context-dashboard/device-info-dashboard/device-info-dashboard.module.d.ts +5 -5
- package/context-dashboard/device-info-dashboard/device-info-dashboard.module.d.ts.map +1 -1
- package/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.d.ts +1 -1
- package/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.d.ts.map +1 -1
- package/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.d.ts +5 -5
- package/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.d.ts.map +1 -1
- package/context-dashboard/paste-dashboard-action.component.d.ts +1 -1
- package/context-dashboard/paste-dashboard-action.component.d.ts.map +1 -1
- package/context-dashboard/widget-config.component.d.ts +1 -1
- package/context-dashboard/widget-config.component.d.ts.map +1 -1
- package/context-dashboard/widget-config.service.d.ts +1 -1
- package/core/alert/alert.service.d.ts +14 -5
- package/core/alert/alert.service.d.ts.map +1 -1
- package/core/bottom-drawer/bottom-drawer.component.d.ts +3 -0
- package/core/bottom-drawer/bottom-drawer.component.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb.module.d.ts +3 -3
- package/core/common/ApplicationOptions.d.ts +14 -12
- package/core/common/ApplicationOptions.d.ts.map +1 -1
- package/core/common/date.pipe.d.ts +1 -1
- package/core/common/forOf.directive.d.ts +16 -16
- package/core/common/forOf.directive.d.ts.map +1 -1
- package/core/common/humanize-app-name.pipe.d.ts +7 -0
- package/core/common/humanize-app-name.pipe.d.ts.map +1 -1
- package/core/common/humanize.pipe.d.ts +7 -0
- package/core/common/humanize.pipe.d.ts.map +1 -1
- package/core/common/icon.directive.d.ts +19 -0
- package/core/common/icon.directive.d.ts.map +1 -1
- package/core/common/markdown-to-html.pipe.d.ts +8 -0
- package/core/common/markdown-to-html.pipe.d.ts.map +1 -1
- package/core/common/options.service.d.ts +5 -5
- package/core/common/outlet.directive.d.ts +4 -6
- package/core/common/outlet.directive.d.ts.map +1 -1
- package/core/common/permissions.service.d.ts +12 -12
- package/core/common/service-registry.service.d.ts +2 -1
- package/core/common/service-registry.service.d.ts.map +1 -1
- package/core/common/user-name-initials.pipe.d.ts +7 -0
- package/core/common/user-name-initials.pipe.d.ts.map +1 -1
- package/core/common/user-preferences/user-preferences.service.d.ts +1 -1
- package/core/countdown-interval/countdown-interval.component.d.ts +7 -0
- package/core/countdown-interval/countdown-interval.component.d.ts.map +1 -1
- package/core/date-time-picker/date-time-picker.component.d.ts +20 -0
- package/core/date-time-picker/date-time-picker.component.d.ts.map +1 -1
- package/core/device-status/device-status.component.d.ts +3 -0
- package/core/device-status/device-status.component.d.ts.map +1 -1
- package/core/header/header.model.d.ts +3 -2
- package/core/header/header.model.d.ts.map +1 -1
- package/core/header/title/title.component.d.ts +2 -0
- package/core/header/title/title.component.d.ts.map +1 -1
- package/core/i18n/c8y-translate.directive.d.ts +2 -2
- package/core/list-display-switch/list-display-switch.component.d.ts +9 -0
- package/core/list-display-switch/list-display-switch.component.d.ts.map +1 -1
- package/core/preview-feature/preview-feature.service.d.ts +1 -0
- package/core/preview-feature/preview-feature.service.d.ts.map +1 -1
- package/core/range-display/range-display.component.d.ts +11 -0
- package/core/range-display/range-display.component.d.ts.map +1 -1
- package/core/realtime/realtime.service.d.ts +4 -4
- package/dashboard-manager/dashboard-manager.module.d.ts +8 -8
- package/dashboard-manager/dashboard-manager.module.d.ts.map +1 -1
- package/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.d.ts +1 -1
- package/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.d.ts.map +1 -1
- package/dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.d.ts +1 -1
- package/dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.d.ts.map +1 -1
- package/dashboard-manager/type-dashboards-list/type-dashboards-list.component.d.ts +1 -1
- package/dashboard-manager/type-dashboards-list/type-dashboards-list.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +1 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.d.ts +10 -1
- package/datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.d.ts +1 -1
- package/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-selector-modal/datapoint-selector-modal.component.d.ts +1 -1
- package/datapoint-selector/datapoint-selector-modal/datapoint-selector-modal.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-selector.component.d.ts +1 -1
- package/datapoint-selector/datapoint-selector.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-selector.module.d.ts +18 -18
- package/datapoint-selector/datapoint-selector.module.d.ts.map +1 -1
- package/datapoint-selector/datapoint-template-popover/datapoint-template-popover.component.d.ts +1 -1
- package/datapoint-selector/datapoint-template-popover/datapoint-template-popover.component.d.ts.map +1 -1
- package/datapoint-selector/pipes/datapoint-label.pipe.d.ts +1 -1
- package/datapoint-selector/pipes/datapoint-label.pipe.d.ts.map +1 -1
- package/datapoint-selector/pipes/filter-datapoints.pipe.d.ts +1 -1
- package/datapoint-selector/pipes/filter-datapoints.pipe.d.ts.map +1 -1
- package/datapoint-selector/pipes/includes-datapoint.pipe.d.ts +1 -1
- package/datapoint-selector/pipes/includes-datapoint.pipe.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector.component.d.ts +7 -0
- package/datapoints-export-selector/datapoints-export-selector.component.d.ts.map +1 -1
- package/default-subscriptions/default-subscriptions.component.d.ts +1 -1
- package/default-subscriptions/default-subscriptions.component.d.ts.map +1 -1
- package/default-subscriptions/default-subscriptions.module.d.ts +4 -4
- package/default-subscriptions/default-subscriptions.module.d.ts.map +1 -1
- package/device-grid/columns/alarms.cell-renderer.component.d.ts +1 -1
- package/device-grid/columns/alarms.cell-renderer.component.d.ts.map +1 -1
- package/device-grid/columns/alarms.header-cell-renderer.component.d.ts +1 -1
- package/device-grid/columns/alarms.header-cell-renderer.component.d.ts.map +1 -1
- package/device-grid/columns/group.cell-renderer.component.d.ts +1 -1
- package/device-grid/columns/group.cell-renderer.component.d.ts.map +1 -1
- package/device-grid/columns/group.filtering-form-renderer.component.d.ts +1 -1
- package/device-grid/columns/group.filtering-form-renderer.component.d.ts.map +1 -1
- package/device-grid/columns/model.cell-renderer.component.d.ts +1 -1
- package/device-grid/columns/model.cell-renderer.component.d.ts.map +1 -1
- package/device-grid/columns/name.cell-renderer.component.d.ts +1 -1
- package/device-grid/columns/name.cell-renderer.component.d.ts.map +1 -1
- package/device-grid/columns/registration-date.cell-renderer.component.d.ts +1 -1
- package/device-grid/columns/registration-date.cell-renderer.component.d.ts.map +1 -1
- package/device-grid/columns/serial-number.cell-renderer.component.d.ts +1 -1
- package/device-grid/columns/serial-number.cell-renderer.component.d.ts.map +1 -1
- package/device-grid/columns/status.cell-renderer.component.d.ts +1 -1
- package/device-grid/columns/status.cell-renderer.component.d.ts.map +1 -1
- package/device-grid/device-grid.component.d.ts +1 -1
- package/device-grid/device-grid.component.d.ts.map +1 -1
- package/device-grid/device-grid.module.d.ts +15 -15
- package/device-grid/device-grid.module.d.ts.map +1 -1
- package/device-list/add-smart-group.component.d.ts +1 -1
- package/device-list/add-smart-group.component.d.ts.map +1 -1
- package/device-list/device-list.component.d.ts +1 -1
- package/device-list/device-list.component.d.ts.map +1 -1
- package/device-list/device-list.module.d.ts +8 -8
- package/device-list/device-list.module.d.ts.map +1 -1
- package/device-protocols/device-protocols.module.d.ts +1 -1
- package/device-protocols/device-type-detail.component.d.ts +1 -1
- package/device-protocols/device-type-detail.component.d.ts.map +1 -1
- package/device-protocols/device-type-detail.directive.d.ts +1 -1
- package/device-protocols/device-type-detail.directive.d.ts.map +1 -1
- package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts +7 -7
- package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts.map +1 -1
- package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts +1 -1
- package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts.map +1 -1
- package/ecosystem/activity-log/activity-log.component.d.ts +1 -1
- package/ecosystem/activity-log/activity-log.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/appState.pipe.d.ts +1 -1
- package/ecosystem/application-plugins/appState.pipe.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugin-readme.component.d.ts +1 -1
- package/ecosystem/application-plugins/application-plugin-readme.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugins.component.d.ts +1 -1
- package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugins.module.d.ts +14 -14
- package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
- package/ecosystem/application-plugins/apps-to-update-remotes-select.component.d.ts +2 -2
- package/ecosystem/application-plugins/apps-to-update-remotes-select.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/install-plugin.component.d.ts +1 -1
- package/ecosystem/application-plugins/install-plugin.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/label-cell-renderer.component.d.ts +1 -1
- package/ecosystem/application-plugins/label-cell-renderer.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts +1 -1
- package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/orphaned-status-cell-renderer.component.d.ts +1 -1
- package/ecosystem/application-plugins/orphaned-status-cell-renderer.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/plugin-list-item.component.d.ts +1 -1
- package/ecosystem/application-plugins/plugin-list-item.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/plugin-list.component.d.ts +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 +1 -1
- package/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.d.ts.map +1 -1
- package/ecosystem/application-properties/application-properties.component.d.ts +1 -1
- package/ecosystem/application-properties/application-properties.component.d.ts.map +1 -1
- package/ecosystem/application-properties/subscription-modal/subscription-modal.component.d.ts +1 -1
- package/ecosystem/application-properties/subscription-modal/subscription-modal.component.d.ts.map +1 -1
- package/ecosystem/application-properties/update-application-modal/update-application-modal.component.d.ts +1 -1
- package/ecosystem/application-properties/update-application-modal/update-application-modal.component.d.ts.map +1 -1
- package/ecosystem/applications/add-external-applicaiton/add-external-application.component.d.ts +1 -1
- package/ecosystem/applications/add-external-applicaiton/add-external-application.component.d.ts.map +1 -1
- package/ecosystem/applications/add-web-application/add-web-application.component.d.ts +1 -1
- package/ecosystem/applications/add-web-application/add-web-application.component.d.ts.map +1 -1
- package/ecosystem/applications/application-list/application-list.component.d.ts +1 -1
- 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 +2 -3
- 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 +1 -1
- package/ecosystem/archived-confirm/archived-confirm-modal.component.d.ts.map +1 -1
- package/ecosystem/archived-confirm/archived-confirm.module.d.ts +4 -4
- package/ecosystem/archived-confirm/archived-confirm.module.d.ts.map +1 -1
- package/ecosystem/ecosystem.module.d.ts +34 -34
- package/ecosystem/ecosystem.module.d.ts.map +1 -1
- package/ecosystem/features/feature-list.component.d.ts +1 -1
- package/ecosystem/features/feature-list.component.d.ts.map +1 -1
- package/ecosystem/license-confirm/license-confirm-modal.component.d.ts +1 -1
- package/ecosystem/license-confirm/license-confirm-modal.component.d.ts.map +1 -1
- package/ecosystem/license-confirm/license-confirm.module.d.ts +5 -5
- package/ecosystem/license-confirm/license-confirm.module.d.ts.map +1 -1
- package/ecosystem/license-confirm/license-view.component.d.ts +1 -1
- package/ecosystem/license-confirm/license-view.component.d.ts.map +1 -1
- package/ecosystem/microservices/add-microservice.component.d.ts +1 -1
- package/ecosystem/microservices/add-microservice.component.d.ts.map +1 -1
- package/ecosystem/microservices/microservice-list.component.d.ts +1 -1
- package/ecosystem/microservices/microservice-list.component.d.ts.map +1 -1
- package/ecosystem/packages/add-package.component.d.ts +1 -1
- package/ecosystem/packages/add-package.component.d.ts.map +1 -1
- package/ecosystem/packages/deploy-application/deploy-application.component.d.ts +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 +1 -1
- package/ecosystem/packages/package-details/package-details.component.d.ts.map +1 -1
- package/ecosystem/packages/package-list/packages-list.component.d.ts +1 -1
- package/ecosystem/packages/package-list/packages-list.component.d.ts.map +1 -1
- package/ecosystem/packages/package-versions/package-contents/contents-apps/contents-apps.component.d.ts +1 -1
- package/ecosystem/packages/package-versions/package-contents/contents-apps/contents-apps.component.d.ts.map +1 -1
- package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts +1 -1
- package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts.map +1 -1
- package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts +1 -1
- package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts.map +1 -1
- package/ecosystem/packages/package-versions/package-versions-list/package-versions-list.component.d.ts +1 -1
- package/ecosystem/packages/package-versions/package-versions-list/package-versions-list.component.d.ts.map +1 -1
- package/ecosystem/packages/package-versions/packages-versions.component.d.ts +1 -1
- package/ecosystem/packages/package-versions/packages-versions.component.d.ts.map +1 -1
- package/ecosystem/shared/add-application.component.d.ts +1 -1
- package/ecosystem/shared/add-application.component.d.ts.map +1 -1
- package/ecosystem/shared/application-card.component.d.ts +1 -1
- package/ecosystem/shared/application-card.component.d.ts.map +1 -1
- package/ecosystem/shared/application-properties-form.component.d.ts +1 -1
- package/ecosystem/shared/application-properties-form.component.d.ts.map +1 -1
- package/ecosystem/shared/archived-filter/archived-filter.component.d.ts +1 -1
- package/ecosystem/shared/archived-filter/archived-filter.component.d.ts.map +1 -1
- package/ecosystem/shared/duplicate-application/duplicate-application-list/duplicate-application-list.component.d.ts +1 -1
- package/ecosystem/shared/duplicate-application/duplicate-application-list/duplicate-application-list.component.d.ts.map +1 -1
- package/ecosystem/shared/duplicate-application/duplicate-application-properties/duplicate-application-properties.component.d.ts +2 -2
- package/ecosystem/shared/duplicate-application/duplicate-application-properties/duplicate-application-properties.component.d.ts.map +1 -1
- package/ecosystem/shared/duplicate-application/duplicate-application.component.d.ts +1 -1
- package/ecosystem/shared/duplicate-application/duplicate-application.component.d.ts.map +1 -1
- package/ecosystem/shared/list-filters/list-filters.component.d.ts +1 -1
- package/ecosystem/shared/list-filters/list-filters.component.d.ts.map +1 -1
- package/ecosystem/shared/package-version-select/package-version-select.component.d.ts +1 -1
- package/ecosystem/shared/package-version-select/package-version-select.component.d.ts.map +1 -1
- package/ecosystem/shared/shared-ecosystem.module.d.ts +20 -20
- 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/ecosystem/shared/upload-archive.component.d.ts +1 -1
- package/ecosystem/shared/upload-archive.component.d.ts.map +1 -1
- package/fesm2022/c8y-ngx-components-actility-device-registration.mjs +36 -12
- package/fesm2022/c8y-ngx-components-actility-device-registration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +195 -107
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +236 -96
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-api.mjs +8 -0
- package/fesm2022/c8y-ngx-components-api.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-app-logs.mjs +6 -8
- package/fesm2022/c8y-ngx-components-app-logs.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs +74 -26
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +578 -366
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-bookmarks.mjs +36 -17
- package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-child-devices.mjs +7 -9
- package/fesm2022/c8y-ngx-components-child-devices.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-cockpit-config.mjs +138 -67
- package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-B7m2lsIe.mjs → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-C-JLbcn5.mjs} +3 -3
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-B7m2lsIe.mjs.map → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-C-JLbcn5.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-BCG_pjJz.mjs → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-RXvOcs04.mjs} +5 -5
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-BCG_pjJz.mjs.map → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-RXvOcs04.mjs.map} +1 -1
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-DjCdFkJw.mjs → c8y-ngx-components-context-dashboard-dashboard-version-history.component-DmPIJGXO.mjs} +3 -3
- package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-DjCdFkJw.mjs.map → c8y-ngx-components-context-dashboard-dashboard-version-history.component-DmPIJGXO.mjs.map} +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +170 -94
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +44 -31
- package/fesm2022/c8y-ngx-components-dashboard-manager.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +132 -66
- 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-default-subscriptions.mjs +32 -16
- package/fesm2022/c8y-ngx-components-default-subscriptions.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs +50 -45
- package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-list.mjs +50 -25
- package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-protocols.mjs +6 -9
- package/fesm2022/c8y-ngx-components-device-protocols.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +36 -8
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +155 -72
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs +13 -7
- package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs +43 -12
- package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +179 -80
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +353 -1316
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-file-preview.mjs +17 -8
- package/fesm2022/c8y-ngx-components-file-preview.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-files-repository.mjs +55 -22
- package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector.mjs +46 -28
- package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-location.mjs +28 -15
- package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs +36 -12
- package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-map.mjs +260 -28
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-platform-configuration.mjs +24 -13
- package/fesm2022/c8y-ngx-components-platform-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +133 -26
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-register-device.mjs +314 -249
- package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs +41 -17
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-reports.mjs +61 -21
- package/fesm2022/c8y-ngx-components-reports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-search.mjs +34 -21
- package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs +43 -19
- package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs +207 -72
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tenants.mjs +96 -39
- package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +173 -53
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs +19 -10
- package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-user-roles.mjs +19 -14
- package/fesm2022/c8y-ngx-components-user-roles.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +76 -50
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs +15 -8
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +2 -2
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +166 -80
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/file-preview/file-preview.component.d.ts +1 -1
- package/file-preview/file-preview.component.d.ts.map +1 -1
- package/file-preview/file-preview.module.d.ts +3 -3
- package/file-preview/file-preview.module.d.ts.map +1 -1
- package/files-repository/files-repository-upload.component.d.ts +1 -1
- package/files-repository/files-repository-upload.component.d.ts.map +1 -1
- package/files-repository/files-repository.component.d.ts +1 -1
- package/files-repository/files-repository.component.d.ts.map +1 -1
- package/files-repository/files-repository.module.d.ts +6 -6
- package/files-repository/files-repository.module.d.ts.map +1 -1
- package/icon-selector/icon-name.pipe.d.ts +1 -1
- package/icon-selector/icon-name.pipe.d.ts.map +1 -1
- package/icon-selector/icon-selector-modal/icon-selector-modal.component.d.ts +1 -1
- package/icon-selector/icon-selector-modal/icon-selector-modal.component.d.ts.map +1 -1
- package/icon-selector/icon-selector-wrapper/icon-selector-wrapper.component.d.ts +1 -1
- package/icon-selector/icon-selector-wrapper/icon-selector-wrapper.component.d.ts.map +1 -1
- package/icon-selector/icon-selector.component.d.ts +1 -1
- package/icon-selector/icon-selector.component.d.ts.map +1 -1
- package/icon-selector/icon-selector.module.d.ts +8 -8
- package/icon-selector/icon-selector.module.d.ts.map +1 -1
- package/locales/de.po +23 -2
- package/locales/es.po +23 -2
- package/locales/fr.po +23 -2
- package/locales/ja_JP.po +23 -2
- package/locales/ko.po +23 -2
- package/locales/locales.pot +22 -1
- package/locales/nl.po +23 -2
- package/locales/pl.po +23 -2
- package/locales/pt_BR.po +23 -2
- package/locales/zh_CN.po +23 -2
- package/locales/zh_TW.po +23 -2
- package/location/add-location.component.d.ts +1 -1
- package/location/add-location.component.d.ts.map +1 -1
- package/location/location.component.d.ts +1 -1
- package/location/location.component.d.ts.map +1 -1
- package/location/location.module.d.ts +6 -6
- package/location/location.module.d.ts.map +1 -1
- package/loriot-device-registration/loriot-device-registration-button.component.d.ts +1 -1
- package/loriot-device-registration/loriot-device-registration-button.component.d.ts.map +1 -1
- package/loriot-device-registration/loriot-device-registration.component.d.ts +1 -1
- package/loriot-device-registration/loriot-device-registration.component.d.ts.map +1 -1
- package/loriot-device-registration/loriot-device-registration.module.d.ts +4 -4
- package/loriot-device-registration/loriot-device-registration.module.d.ts.map +1 -1
- package/map/cluster-map.component.d.ts +61 -1
- package/map/cluster-map.component.d.ts.map +1 -1
- package/map/map-popup.directive.d.ts +1 -1
- package/map/map-popup.directive.d.ts.map +1 -1
- package/map/map-status.component.d.ts +86 -3
- package/map/map-status.component.d.ts.map +1 -1
- package/map/map.component.d.ts +100 -5
- package/map/map.component.d.ts.map +1 -1
- package/map/map.model.d.ts +98 -4
- package/map/map.model.d.ts.map +1 -1
- package/map/map.module.d.ts +9 -9
- package/map/map.module.d.ts.map +1 -1
- package/package.json +1 -1
- package/platform-configuration/platform-configuration-form.component.d.ts +1 -1
- package/platform-configuration/platform-configuration-form.component.d.ts.map +1 -1
- package/platform-configuration/platform-configuration.module.d.ts +4 -4
- package/platform-configuration/platform-configuration.module.d.ts.map +1 -1
- package/protocol-lpwan/lpwan-protocol.module.d.ts +4 -4
- package/protocol-lpwan/lpwan-protocol.module.d.ts.map +1 -1
- package/protocol-lpwan/lpwan-set-connections.component.d.ts +1 -1
- package/protocol-lpwan/lpwan-set-connections.component.d.ts.map +1 -1
- package/protocol-lpwan/lpwan-set-device-protocol.component.d.ts +1 -1
- package/protocol-lpwan/lpwan-set-device-protocol.component.d.ts.map +1 -1
- package/protocol-lpwan/multiple-lns-connectors/actility-multiple-lns-connector.component.d.ts +1 -1
- package/protocol-lpwan/multiple-lns-connectors/actility-multiple-lns-connector.component.d.ts.map +1 -1
- package/protocol-lpwan/multiple-lns-connectors/connection-info-with-download-csv.component.d.ts +1 -1
- package/protocol-lpwan/multiple-lns-connectors/connection-info-with-download-csv.component.d.ts.map +1 -1
- package/protocol-lpwan/multiple-lns-connectors/loriot/loriot-multiple-lns-connector.component.d.ts +1 -1
- package/protocol-lpwan/multiple-lns-connectors/loriot/loriot-multiple-lns-connector.component.d.ts.map +1 -1
- package/protocol-lpwan/multiple-lns-connectors/multiple-lns-connectors.module.d.ts +8 -8
- package/protocol-lpwan/multiple-lns-connectors/multiple-lns-connectors.module.d.ts.map +1 -1
- package/protocol-lpwan/multiple-lns-connectors/no-connections-found.component.d.ts +1 -1
- package/protocol-lpwan/multiple-lns-connectors/sigfox-multiple-lns-connector.component.d.ts +1 -1
- package/protocol-lpwan/multiple-lns-connectors/sigfox-multiple-lns-connector.component.d.ts.map +1 -1
- package/register-device/bulk/bulk-device-registration-button.component.d.ts +1 -1
- package/register-device/bulk/bulk-device-registration-button.component.d.ts.map +1 -1
- package/register-device/bulk/bulk-device-registration-modal.component.d.ts +1 -1
- package/register-device/bulk/bulk-device-registration-modal.component.d.ts.map +1 -1
- package/register-device/device-registration-view.component.d.ts +1 -1
- package/register-device/device-registration-view.component.d.ts.map +1 -1
- package/register-device/dropdown/register-device-dropdown.component.d.ts +1 -1
- package/register-device/dropdown/register-device-dropdown.component.d.ts.map +1 -1
- package/register-device/extensible/bulk/extensible-bulk-device-registration-button.component.d.ts +1 -1
- package/register-device/extensible/bulk/extensible-bulk-device-registration-button.component.d.ts.map +1 -1
- package/register-device/extensible/bulk/extensible-bulk-device-registration-modal.component.d.ts +1 -1
- package/register-device/extensible/bulk/extensible-bulk-device-registration-modal.component.d.ts.map +1 -1
- package/register-device/extensible/single/extensible-device-registration-button.component.d.ts +1 -1
- package/register-device/extensible/single/extensible-device-registration-button.component.d.ts.map +1 -1
- package/register-device/extensible/single/extensible-device-registration-modal.component.d.ts +1 -1
- package/register-device/extensible/single/extensible-device-registration-modal.component.d.ts.map +1 -1
- package/register-device/extensible/single/extensible-device-registration-stepper.component.d.ts +1 -1
- package/register-device/extensible/single/extensible-device-registration-stepper.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 +3 -6
- package/register-device/general/general-device-registration.component.d.ts.map +1 -1
- package/register-device/register-device.module.d.ts +16 -16
- package/register-device/register-device.module.d.ts.map +1 -1
- package/report-dashboard/report-dashboard-list.component.d.ts +1 -1
- package/report-dashboard/report-dashboard-list.component.d.ts.map +1 -1
- package/report-dashboard/report-dashboard.module.d.ts +7 -7
- package/reports/cron.component.d.ts +1 -1
- package/reports/cron.component.d.ts.map +1 -1
- package/reports/export-schedules.component.d.ts +2 -3
- package/reports/export-schedules.component.d.ts.map +1 -1
- package/reports/reports.module.d.ts +7 -7
- package/reports/reports.module.d.ts.map +1 -1
- package/reports/schedule-modal.component.d.ts +2 -3
- package/reports/schedule-modal.component.d.ts.map +1 -1
- package/search/search-action.component.d.ts +1 -1
- package/search/search-action.component.d.ts.map +1 -1
- package/search/search-custom-filters.component.d.ts +1 -1
- package/search/search-custom-filters.component.d.ts.map +1 -1
- package/search/search-grid.component.d.ts +1 -1
- package/search/search-grid.component.d.ts.map +1 -1
- package/search/search-results.component.d.ts +1 -1
- package/search/search-results.component.d.ts.map +1 -1
- package/search/search.module.d.ts +8 -8
- package/search/search.module.d.ts.map +1 -1
- package/sigfox-device-registration/sigfox-device-registration-button.component.d.ts +1 -1
- package/sigfox-device-registration/sigfox-device-registration-button.component.d.ts.map +1 -1
- package/sigfox-device-registration/sigfox-device-registration.component.d.ts +1 -1
- package/sigfox-device-registration/sigfox-device-registration.component.d.ts.map +1 -1
- package/sigfox-device-registration/sigfox-device-registration.module.d.ts +4 -4
- package/sigfox-device-registration/sigfox-device-registration.module.d.ts.map +1 -1
- package/sub-assets/add-group/add-group.component.d.ts +1 -1
- package/sub-assets/add-group/add-group.component.d.ts.map +1 -1
- package/sub-assets/add-group/add-group.module.d.ts +7 -7
- package/sub-assets/asset-properties-item.component.d.ts +1 -1
- package/sub-assets/asset-properties-item.component.d.ts.map +1 -1
- package/sub-assets/asset-properties.component.d.ts +1 -1
- package/sub-assets/asset-properties.component.d.ts.map +1 -1
- package/sub-assets/assign-devices/assign-child-devices.component.d.ts +2 -3
- package/sub-assets/assign-devices/assign-child-devices.component.d.ts.map +1 -1
- package/sub-assets/assign-devices/assign-devices.component.d.ts +1 -1
- package/sub-assets/assign-devices/assign-devices.component.d.ts.map +1 -1
- package/sub-assets/delete-assets-modal/delete-assets-modal.component.d.ts +1 -1
- package/sub-assets/delete-assets-modal/delete-assets-modal.component.d.ts.map +1 -1
- package/sub-assets/group-info.component.d.ts +1 -1
- package/sub-assets/group-info.component.d.ts.map +1 -1
- package/sub-assets/groups.component.d.ts +1 -1
- package/sub-assets/groups.component.d.ts.map +1 -1
- package/sub-assets/location/asset-location.component.d.ts +1 -1
- package/sub-assets/location/asset-location.component.d.ts.map +1 -1
- package/sub-assets/sub-assets-grid.component.d.ts +1 -1
- package/sub-assets/sub-assets-grid.component.d.ts.map +1 -1
- package/sub-assets/sub-assets-grids.module.d.ts +9 -9
- package/sub-assets/sub-assets-grids.module.d.ts.map +1 -1
- package/sub-assets/sub-assets.component.d.ts +1 -1
- package/sub-assets/sub-assets.component.d.ts.map +1 -1
- package/sub-assets/sub-assets.module.d.ts +18 -18
- package/sub-assets/sub-assets.module.d.ts.map +1 -1
- package/sub-assets/unassign-assets-modal/unassign-modal.component.d.ts +1 -1
- package/sub-assets/unassign-assets-modal/unassign-modal.component.d.ts.map +1 -1
- package/tenants/tenant-form/tenant-form.component.d.ts +1 -1
- package/tenants/tenant-form/tenant-form.component.d.ts.map +1 -1
- package/tenants/tenant-list/creation-time.filtering-form-renderer.component.d.ts +2 -3
- package/tenants/tenant-list/creation-time.filtering-form-renderer.component.d.ts.map +1 -1
- package/tenants/tenant-list/status.filtering-form-renderer.component.d.ts +1 -1
- package/tenants/tenant-list/status.filtering-form-renderer.component.d.ts.map +1 -1
- package/tenants/tenant-list/tenant-list.component.d.ts +1 -1
- package/tenants/tenant-list/tenant-list.component.d.ts.map +1 -1
- package/tenants/tenants.module.d.ts +9 -9
- package/tenants/tenants.module.d.ts.map +1 -1
- package/trusted-certificates/crl/crl-check-settings.component.d.ts +1 -1
- package/trusted-certificates/crl/crl-check-settings.component.d.ts.map +1 -1
- package/trusted-certificates/crl/crl-settings.component.d.ts +1 -1
- package/trusted-certificates/crl/crl-settings.component.d.ts.map +1 -1
- package/trusted-certificates/crl/crl-settings.module.d.ts +8 -8
- package/trusted-certificates/crl/crl-settings.module.d.ts.map +1 -1
- package/trusted-certificates/list/add-trusted-certificate.component.d.ts +4 -3
- package/trusted-certificates/list/add-trusted-certificate.component.d.ts.map +1 -1
- package/trusted-certificates/list/trusted-certificate-list.component.d.ts +11 -2
- package/trusted-certificates/list/trusted-certificate-list.component.d.ts.map +1 -1
- package/trusted-certificates/list/trusted-certificate-list.module.d.ts +10 -10
- package/trusted-certificates/list/trusted-certificate-list.module.d.ts.map +1 -1
- package/trusted-certificates/list/trusted-certificate.model.d.ts +2 -0
- package/trusted-certificates/list/trusted-certificate.model.d.ts.map +1 -1
- package/trusted-certificates/pattern-messages.data.d.ts +6 -0
- package/trusted-certificates/pattern-messages.data.d.ts.map +1 -1
- package/upgrade/dashboard/dashboard-upgrade.module.d.ts +6 -6
- package/upgrade/dashboard/dashboard-upgrade.module.d.ts.map +1 -1
- package/upgrade/dashboard/device-selector.component.d.ts +1 -1
- package/upgrade/dashboard/device-selector.component.d.ts.map +1 -1
- package/upgrade/dashboard/widget.component.d.ts +1 -1
- package/upgrade/dashboard/widget.component.d.ts.map +1 -1
- package/user-roles/inventory-role-selector/inventory-role-selector.component.d.ts +1 -1
- package/user-roles/inventory-role-selector/inventory-role-selector.component.d.ts.map +1 -1
- package/user-roles/roles-asset-tree/roles-asset-tree.component.d.ts +1 -1
- package/user-roles/roles-asset-tree/roles-asset-tree.component.d.ts.map +1 -1
- package/user-roles/user-roles.module.d.ts +4 -4
- package/user-roles/user-roles.module.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +1 -1
- package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarms-widget.module.d.ts +13 -13
- package/widgets/implementations/alarms/alarms-widget.module.d.ts.map +1 -1
- package/widgets/implementations/alarms/severity-icon.pipe.d.ts +1 -1
- package/widgets/implementations/alarms/severity-icon.pipe.d.ts.map +1 -1
- package/widgets/implementations/alarms/sorting-description-popover-message.pipe.d.ts +1 -1
- package/widgets/implementations/alarms/sorting-description-popover-message.pipe.d.ts.map +1 -1
- package/widgets/implementations/device-management-welcome/device-management-welcome-widget.module.d.ts +4 -4
- package/widgets/implementations/device-management-welcome/device-management-welcome-widget.module.d.ts.map +1 -1
- package/widgets/implementations/device-management-welcome/welcome.component.d.ts +1 -1
- package/widgets/implementations/device-management-welcome/welcome.component.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-assets-navigator.mjs","sources":["../../assets-navigator/action.enum.ts","../../assets-navigator/load-more-node.ts","../../assets-navigator/asset-node.ts","../../assets-navigator/dynamic-group-node.ts","../../assets-navigator/asset-node-config.model.ts","../../assets-navigator/group.service.ts","../../assets-navigator/asset-node.service.ts","../../assets-navigator/asset-node.factory.ts","../../assets-navigator/asset-selector/group-node.ts","../../assets-navigator/asset-selector/group-node.service.ts","../../assets-navigator/asset-selector/asset-selector.service.ts","../../assets-navigator/asset-selector/asset-selector-node.component.ts","../../assets-navigator/asset-selector/asset-selector-node.component.html","../../assets-navigator/asset-selector/asset-selector-base.ts","../../assets-navigator/asset-selector/asset-selector.model.ts","../../assets-navigator/asset-selector/unassigned-devices-node.ts","../../assets-navigator/asset-selector/asset-selector.component.ts","../../assets-navigator/asset-selector/asset-selector.component.html","../../assets-navigator/asset-selector/miller-view.component.ts","../../assets-navigator/asset-selector/miller-view.component.html","../../assets-navigator/asset-selector/asset-selector.module.ts","../../assets-navigator/assets-navigator.module.ts","../../assets-navigator/c8y-ngx-components-assets-navigator.ts"],"sourcesContent":["export enum AssetsNavigatorAction {\n FETCH,\n NEXT,\n REFRESH,\n LOADING_DONE\n}\n","import { NavigatorNode, gettext } from '@c8y/ngx-components';\n\nexport class LoadMoreNode extends NavigatorNode {\n static NAME = 'LoadMoreNode';\n label = gettext('Load more');\n icon = 'plus';\n droppable = true;\n\n constructor() {\n super();\n this.priority = -Infinity;\n }\n\n toString() {\n return LoadMoreNode.NAME;\n }\n\n isGroup() {\n return false;\n }\n}\n","import { IIdentified, Paging } from '@c8y/client';\nimport {\n ClickOptions,\n DeviceStatusComponent,\n gettext,\n GroupFragment,\n NavigatorNode,\n NavigatorNodeData\n} from '@c8y/ngx-components';\nimport { debounce } from 'lodash-es';\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\nimport { AssetsNavigatorAction } from './action.enum';\nimport { AssetNodeMo, AssetNodeService } from './asset-node.service';\nimport { LoadMoreNode } from './load-more-node';\n\nexport class AssetNode extends NavigatorNode {\n static NAME = 'AssetNode';\n root: boolean;\n mo: any;\n hideDevices = false;\n filterQuery$ = new BehaviorSubject<string>('');\n showChildDevices = false;\n\n /**\n * Asset node children (subentries).\n */\n children: AssetNode[] = [];\n\n get hasChildren() {\n return this.root || this.service.isGroup(this.mo);\n }\n\n get isDevice() {\n return !!this.mo.c8y_IsDevice;\n }\n\n get isDeviceOrProbablyChildDevice() {\n return this.isDevice || this.isNeitherDeviceOrGroup;\n }\n\n get isNeitherDeviceOrGroup() {\n return (\n !this.service.isGroup(this.mo) &&\n !this.service.isDynamicGroup(this.mo) &&\n !this.isDevice &&\n !this.root\n );\n }\n\n events: Subject<AssetsNavigatorAction>;\n nodesFetched: Subject<void> = new Subject();\n protected paging: Paging<AssetNodeMo>;\n protected loadMoreNode: LoadMoreNode;\n private onUpdateSubscription: Subscription;\n\n constructor(\n protected service: AssetNodeService,\n protected config: NavigatorNodeData = {}\n ) {\n super(config);\n\n this.root = this.root || false;\n this.hideDevices = config.hideDevices ?? this.hideDevices;\n this.mo = this.mo || {};\n this.path = this.getPath();\n this.draggable = !this.service?.moduleConfig?.disableDragAndDrop && !this.root;\n this.droppable =\n !this.service?.moduleConfig?.disableDragAndDrop && !this.isDeviceOrProbablyChildDevice;\n this.routerLinkExact = this.root;\n this.updateIcon(false);\n this.onUpdateSubscription = this.service\n .onUpdate(this)\n .subscribe(({ data, method }) => this.refresh(data, method));\n this.setLabel();\n this.iconComponent = this.isDeviceOrProbablyChildDevice ? DeviceStatusComponent : undefined;\n }\n\n getPath() {\n if (this.config.path) {\n return this.config.path;\n }\n\n return this.root\n ? 'group'\n : this.isDeviceOrProbablyChildDevice\n ? `device/${this.mo.id}`\n : `group/${this.mo.id}`;\n }\n\n refresh(mo: any = {}, method = 'GET') {\n if (mo?.id === this.mo.id) {\n this.mo = mo;\n this.setLabel();\n } else if (method === 'DELETE') {\n this.parents.forEach((node: AssetNode) => node.refresh());\n return;\n }\n if (this.events) {\n this.events.next(AssetsNavigatorAction.REFRESH);\n }\n }\n\n setLabel() {\n if (this.config.label || this.root) {\n this.label = this.config.label || gettext('Groups');\n this.translateLabel = true;\n } else {\n this.label = this.service.label(this.mo);\n this.translateLabel = false;\n }\n }\n\n click(options: ClickOptions = {}) {\n if (this.isDeviceOrProbablyChildDevice && !this.showChildDevices) {\n this.service.preferBreadcrumb(this.parents);\n return;\n }\n this.hookEvents();\n this.updateIcon(options.open);\n if (options.open) {\n this.events.next(AssetsNavigatorAction.FETCH);\n }\n }\n\n sort() {\n this.children.sort((a, b) => {\n if (a.priority > b.priority) {\n return -1;\n } else if (a.priority < b.priority) {\n return 1;\n } else {\n return 0;\n }\n });\n }\n\n addManagedObject(mo) {\n const { childAdditions } = this.mo;\n if (!this.isChildAddition(childAdditions, mo)) {\n this.add(this.service.createChildNode(mo, { hideDevices: this.hideDevices }));\n }\n }\n\n isChildAddition(childAdditions, mo) {\n return (\n childAdditions && childAdditions.references.some(({ managedObject: { id } }) => id === mo.id)\n );\n }\n\n destroy() {\n this.onUpdateSubscription.unsubscribe();\n }\n\n get canDrop() {\n const nodeToMove = this.service.draggedData;\n if (nodeToMove) {\n const shouldGetChildOfItsOwn = !!nodeToMove.find(child => child === this);\n const isAlreadyChild = (this.children as AssetNode[]).some(\n child => child.mo && child.mo.id === nodeToMove.mo.id\n );\n const preventMove = this === nodeToMove || shouldGetChildOfItsOwn || isAlreadyChild;\n return this.droppable && !preventMove && this.service.canDropNode(this.root);\n }\n return this.droppable;\n }\n\n dragStart($event) {\n super.dragStart($event);\n this.service.draggedData = this;\n this.service.rootNode.droppable = !this.isDeviceOrProbablyChildDevice;\n }\n\n dragEnd($event) {\n super.dragEnd($event);\n }\n\n async drop($event) {\n const nodeToMove = this.service.draggedData;\n\n // TODO remove when asset type node can be used on the root level.\n if (this.root && this.isAsset(nodeToMove)) {\n this.service.alert.info(gettext('Asset type node cannot become root node.'));\n this.draggedHover = false;\n this.service.draggedData = undefined;\n return;\n }\n\n super.drop($event);\n if (this.canDrop) {\n await this.moveNode(nodeToMove);\n } else {\n this.draggedHover = false;\n this.service.draggedData = undefined;\n }\n }\n\n hookEvents() {\n if (!this.events) {\n this.events = new Subject();\n this.events.subscribe(evt => {\n if (!this.loading) {\n this.handleEvent(evt);\n }\n });\n }\n }\n\n toString() {\n return AssetNode.NAME;\n }\n\n /**\n * Checks if the current node has child devices.\n */\n hasChildDevices() {\n return this.mo && this.mo.c8y_IsDevice && this.mo.childDevices.references.length > 0;\n }\n\n protected fetch() {\n return this.root\n ? this.service.getRootNodes()\n : this.service.getGroupItems(\n this.mo.id,\n this.hideDevices\n ? {\n query: `$filter=(has(${GroupFragment.groupFragmentType}))$orderby=name`\n }\n : {}\n );\n }\n\n protected async updateIcon(open) {\n this.icon = await this.service.icon(\n // if it's root we are going to pass a fake mo to get the same icon as groups\n this.root ? { c8y_IsDeviceGroup: {} } : this.mo,\n open\n );\n }\n\n protected countChildren() {\n return this.children.length;\n }\n\n protected async handleEvent(evt: AssetsNavigatorAction) {\n if (!this.countChildren() && evt === AssetsNavigatorAction.FETCH) {\n this.loading = true;\n this.addNodes(await this.fetch());\n this.loading = false;\n } else if (evt === AssetsNavigatorAction.NEXT) {\n this.loadMoreNode.loading = true;\n this.addNodes(await this.paging.next());\n this.loadMoreNode.loading = false;\n } else if (evt === AssetsNavigatorAction.REFRESH) {\n this.loading = false;\n this.paging = undefined;\n this.loadMoreNode = undefined;\n this.empty();\n this.events.next(AssetsNavigatorAction.FETCH);\n }\n }\n\n protected addNodes(res) {\n if (res.paging) {\n const { currentPage, nextPage, pageSize } = (this.paging = res.paging);\n if (currentPage === 1) {\n this.empty();\n }\n const itemsCount = res.data.length;\n const moreItemsAvailable = !!nextPage && itemsCount === pageSize;\n this.toggleLoadMore(moreItemsAvailable);\n }\n (res.data || res).map(mo => {\n return this.addManagedObject(mo);\n });\n this.events.next(AssetsNavigatorAction.LOADING_DONE);\n this.nodesFetched.next();\n }\n\n protected toggleLoadMore(show: boolean) {\n if (!this.loadMoreNode && show) {\n this.loadMoreNode = new LoadMoreNode();\n this.add(this.loadMoreNode);\n this.loadMoreNode.click = debounce(() => this.events.next(AssetsNavigatorAction.NEXT), 300, {\n leading: true,\n trailing: false\n });\n }\n\n if (this.loadMoreNode) {\n this.loadMoreNode.hidden = !show;\n }\n }\n\n private async moveNode(nodeToMove: AssetNode) {\n try {\n const isCopy = await this.showDropConfirm(nodeToMove);\n await this.verifyNodeAccess(nodeToMove);\n await this.addMovedNode(nodeToMove);\n if (!isCopy) {\n await this.removeMovedNode(nodeToMove);\n }\n this.expand();\n } catch (ex) {\n if (ex) {\n this.service.alert.addServerFailure(ex);\n }\n } finally {\n this.draggedHover = false;\n this.service.draggedData = undefined;\n }\n }\n\n private async showDropConfirm(nodeToMove: AssetNode) {\n this.confirm.title = gettext('Move');\n this.confirm.message = gettext('Do you want to move the group?');\n const buttons: any = [\n {\n label: gettext('Cancel'),\n action: () => Promise.reject()\n },\n {\n label: gettext('Move'),\n status: 'default',\n action: () => Promise.resolve(false)\n }\n ];\n if (nodeToMove.isDeviceOrProbablyChildDevice) {\n this.confirm.title = gettext('Move or add');\n this.confirm.message = gettext('Do you want to move or add the device?');\n buttons.push({\n label: gettext('Add'),\n status: 'primary',\n action: () => Promise.resolve(true)\n });\n }\n return this.confirm.show(buttons);\n }\n\n private async verifyNodeAccess(nodeToMove: AssetNode) {\n return this.service.inventory.update({ id: nodeToMove.mo.id });\n }\n\n private async addMovedNode(nodeToMove: AssetNode) {\n let mo: IIdentified;\n\n if (this.root && !this.isAsset(nodeToMove)) {\n mo = (\n await this.service.inventory.update({\n id: nodeToMove.mo.id,\n type: GroupFragment.groupType\n })\n ).data;\n\n this.addManagedObject(mo);\n return;\n }\n\n mo = (await this.service.inventory.childAssetsAdd(nodeToMove.mo, this.mo)).data;\n this.addManagedObject(mo);\n }\n\n private isAsset(nodeToMove: AssetNode) {\n // TODO use isAsset check when https://github.com/Cumulocity-IoT/cumulocity-ui/pull/690 is merged.\n // Do not override asset type!\n return nodeToMove.mo?.c8y_IsAsset;\n }\n\n private async removeMovedNode(nodeToMove: AssetNode) {\n for (const parent of nodeToMove.parents as AssetNode[]) {\n if (parent.mo && parent.mo.type === GroupFragment.dynamicGroupType) {\n break; // smart groups don't need to be changed\n }\n\n if (parent.root && !this.isAsset(nodeToMove)) {\n await this.service.inventory.update({\n id: nodeToMove.mo.id,\n type: GroupFragment.subGroupType\n });\n }\n\n if (!parent.root) {\n await this.service.inventory.childAssetsRemove(nodeToMove.mo, parent.mo);\n }\n parent.remove(nodeToMove);\n }\n }\n}\n","import { AssetNode } from './asset-node';\nimport { AssetNodeService } from './asset-node.service';\n\nexport class DynamicGroupNode extends AssetNode {\n constructor(protected service: AssetNodeService, config = {}) {\n super(service, config);\n this.draggable = false;\n this.droppable = false;\n }\n\n get hasChildren() {\n return true;\n }\n\n get query() {\n return this.mo.c8y_DeviceQueryString;\n }\n\n protected fetch(): any {\n return this.service.getDynamicGroupItems(this.query);\n }\n}\n","import { InjectionToken } from '@angular/core';\r\nimport { NavigatorNode } from '@c8y/ngx-components';\r\nimport { AssetNode } from './asset-node';\r\nexport const ASSET_NAVIGATOR_CONFIG = new InjectionToken<AssetNavigatorConfig>('AssetNodeConfig');\r\n\r\n/**\r\n * Configuration object of the AssetsNavigatorModule.\r\n */\r\nexport interface AssetNavigatorConfig {\r\n /**\r\n * Allows to enable smart groups in the module.\r\n * Default value: false.\r\n */\r\n smartGroups?: boolean;\r\n /**\r\n * Expands the root navigator node when the navigator is initialized.\r\n * Default value: false\r\n */\r\n openOnStart?: boolean;\r\n /**\r\n * Allows to change the position of the root group in the navigator.\r\n * The higher the value, the higher the position in navigation.\r\n * Default value: 2000.\r\n */\r\n rootNodePriority?: number;\r\n /**\r\n * Allows to drag and drop items in the asset navigator.\r\n * Default value: true.\r\n */\r\n disableDragAndDrop?: boolean;\r\n /**\r\n * Allows to override properies of the root group or hide it.\r\n * Setup examples:\r\n * - `rootNavigatorNode: true` - shows the default navigator node (default),\r\n * - `rootNavigatorNode: false` - hides the navigator node,\r\n * - `rootNavigatorNode: { label: 'New name', ... }` - overrides default navigator node,\r\n * - `rootNavigatorNode: new NavigatorNode({ label: 'New name', ... })` - overrides default navigator node,\r\n */\r\n rootNavigatorNode?: boolean | Partial<NavigatorNode | AssetNode>;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { GroupService as MigratedDeviceGroupService } from '@c8y/ngx-components';\n\n@Injectable({\n providedIn: 'root'\n})\n\n/**\n * @deprecated\n * Original service was moved to core/common.\n * This service is deprecated and serves as a proxy to maintain backward compatibility.\n */\nexport class DeviceGroupService {\n constructor(private migratedDeviceGroupService: MigratedDeviceGroupService) {}\n\n icon(mo: IManagedObject, open = false): Promise<string> {\n return this.migratedDeviceGroupService.getIcon(mo, open);\n }\n\n isGroup(mo: IManagedObject): boolean {\n return this.migratedDeviceGroupService.isGroup(mo);\n }\n\n isDynamicGroup(mo: IManagedObject): boolean {\n return this.migratedDeviceGroupService.isDynamicGroup(mo);\n }\n\n isDataBroker(mo: IManagedObject): boolean {\n return this.migratedDeviceGroupService.isDataBroker(mo);\n }\n\n isDataBrokerActive(mo: IManagedObject) {\n return this.migratedDeviceGroupService.isDataBrokerActive(mo);\n }\n\n isAsset(mo: IManagedObject) {\n return this.migratedDeviceGroupService.isAsset(mo);\n }\n\n isAnyGroup(mo: IManagedObject) {\n return this.migratedDeviceGroupService.isAnyGroup(mo);\n }\n\n isDevice(mo: IManagedObject) {\n return this.migratedDeviceGroupService.isDevice(mo);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, ActivationEnd, Router } from '@angular/router';\nimport { IManagedObject, IResult, InventoryService, QueriesUtil, UserService } from '@c8y/client';\nimport {\n AlertService,\n AppStateService,\n BreadcrumbService,\n GroupFragment,\n ModalService,\n NavigatorNode,\n NavigatorNodeData,\n OptionsService,\n ViewContext,\n Permissions,\n gettext\n} from '@c8y/ngx-components';\nimport { ApiService } from '@c8y/ngx-components/api';\nimport { empty } from 'rxjs';\nimport { filter, first, mergeMap } from 'rxjs/operators';\nimport { AssetsNavigatorAction } from './action.enum';\nimport { AssetNode } from './asset-node';\nimport { ASSET_NAVIGATOR_CONFIG, AssetNavigatorConfig } from './asset-node-config.model';\nimport { DynamicGroupNode } from './dynamic-group-node';\nimport { DeviceGroupService } from './group.service';\nimport { TranslateService } from '@ngx-translate/core';\n\nexport interface AssetNodeMo {\n id: string;\n type: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AssetNodeService {\n rootNode: AssetNode;\n firstUrl = true;\n draggedData: AssetNode;\n queriesUtil: QueriesUtil;\n protected PAGE_SIZE = 20;\n\n inventory = inject(InventoryService);\n apiService = inject(ApiService);\n modal = inject(ModalService);\n alert = inject(AlertService);\n translateService = inject(TranslateService);\n\n protected breadcrumbService = inject(BreadcrumbService);\n protected user = inject(UserService);\n protected appState = inject(AppStateService);\n protected optionsService = inject(OptionsService);\n moduleConfig: AssetNavigatorConfig;\n protected deviceGroupService = inject(DeviceGroupService);\n protected router = inject(Router);\n\n constructor() {\n this.moduleConfig = {\n rootNodePriority: 2000,\n ...(inject(ASSET_NAVIGATOR_CONFIG, { optional: true }) || {})\n };\n this.queriesUtil = new QueriesUtil();\n\n this.router.events\n .pipe(\n filter(\n (event: ActivationEnd) =>\n event instanceof ActivationEnd && event.snapshot.data?.contextData\n ),\n first()\n )\n .subscribe(({ snapshot }) => {\n this.expandNodesOnStart(snapshot);\n });\n }\n\n /**\n * Expands the navigator nodes on first navigation.\n * @param snapshot The current navigation snapshot.\n */\n async expandNodesOnStart(snapshot: ActivatedRouteSnapshot): Promise<void> {\n if (!this.rootNode) {\n return;\n }\n if (\n snapshot.data?.context === ViewContext.Group ||\n snapshot.data?.context === ViewContext.Device\n ) {\n const { data } = await this.inventory.detail(snapshot.data.contextData, {\n withParents: true\n });\n\n const allManagedObjectParentIds = [\n ...data.assetParents.references.map(({ managedObject }) => {\n return managedObject.id;\n }),\n data.id\n ];\n this.expandAll(this.rootNode, allManagedObjectParentIds);\n return;\n }\n\n if (this.moduleConfig.openOnStart) {\n this.expandAll(this.rootNode, []);\n }\n }\n\n /**\n * Expands all the given ids recursively. Stops if it does not find any.\n * @param node The node where the expanding should be started\n * @param ids The ids that should be expanded.\n */\n expandAll(node: AssetNode, ids: string[]) {\n node.open = true;\n node.click({ open: true });\n if (node.events) {\n node.events\n .pipe(\n filter(action => action === AssetsNavigatorAction.LOADING_DONE),\n first()\n )\n .subscribe(() => {\n const nodeToExpand = node.children.find(\n childNode => childNode.mo?.id && ids.includes(childNode.mo.id)\n );\n if (nodeToExpand) {\n this.expandAll(\n nodeToExpand,\n ids.filter(id => id !== nodeToExpand.mo.id)\n );\n }\n });\n }\n }\n\n label(mo: IManagedObject): string {\n return (\n mo.name ||\n (this.isDevice(mo) &&\n this.translateService.instant(gettext('Device {{id}}'), { id: mo.id })) ||\n '--'\n );\n }\n\n icon(mo: IManagedObject, open?: boolean): Promise<string> {\n return this.deviceGroupService.icon(mo, open);\n }\n\n isGroup(mo: IManagedObject) {\n return this.deviceGroupService.isGroup(mo);\n }\n\n isDynamicGroup(mo: IManagedObject) {\n return this.deviceGroupService.isDynamicGroup(mo);\n }\n\n isDataBroker(mo: IManagedObject) {\n return this.deviceGroupService.isDataBroker(mo);\n }\n\n isDataBrokerActive(mo: IManagedObject) {\n return this.deviceGroupService.isDataBrokerActive(mo);\n }\n\n isAsset(mo: IManagedObject) {\n return this.deviceGroupService.isAsset(mo);\n }\n\n isAnyGroup(mo: IManagedObject) {\n return this.deviceGroupService.isAnyGroup(mo);\n }\n\n isDevice(mo: IManagedObject) {\n return this.deviceGroupService.isDevice(mo);\n }\n\n createRootNode(config: NavigatorNodeData = {}) {\n this.rootNode = this.createAssetNode({\n root: true,\n ...config,\n priority: this.moduleConfig.rootNodePriority,\n featureId: 'groups'\n });\n return this.rootNode;\n }\n\n createDynamicGroupNode(config) {\n return new DynamicGroupNode(this, config);\n }\n\n createAssetNode(config: Partial<AssetNode>) {\n return new AssetNode(this, config);\n }\n\n createChildNode(managedObject, config: Partial<AssetNode>) {\n const { type } = managedObject;\n config.mo = managedObject;\n if (type === GroupFragment.dynamicGroupType) {\n return this.createDynamicGroupNode(config);\n }\n return this.createAssetNode(config);\n }\n\n getRootNodes(customFilter?: any): Promise<any> {\n const defaultFilter = {\n pageSize: this.PAGE_SIZE,\n withChildren: false,\n onlyRoots: !this.optionsService.disableOnlyRootsQuery,\n query: this.queriesUtil.buildQuery(this.navRootQueryFilter())\n };\n const groupFilter = { ...defaultFilter, ...customFilter };\n\n // due to BE performance limitations we do not allow filtering and sorting for a user without inventory roles\n if (\n this.appState?.currentUser?.value &&\n !this.user.hasAnyRole(this.appState.currentUser.value, [\n Permissions.ROLE_INVENTORY_READ,\n Permissions.ROLE_MANAGED_OBJECT_READ\n ])\n ) {\n delete groupFilter.query;\n Object.assign(groupFilter, {\n fragmentType: GroupFragment.groupFragmentType,\n onlyRoots: true\n });\n }\n return this.inventory.list(this.createFilter(groupFilter));\n }\n\n getAllInventories(customFilter?: any): Promise<any> {\n const defaultFilter = {\n pageSize: this.PAGE_SIZE,\n withChildren: false\n };\n const groupFilter = { ...defaultFilter, ...customFilter };\n return this.inventory.list(this.createFilter(groupFilter));\n }\n\n getGroupItems(moId: string, extraFilter: object = {}, withChildren = false, filterQuery = '') {\n const queryFilter = {\n withChildren,\n pageSize: this.PAGE_SIZE,\n query: this.groupQueryFilter(moId, filterQuery)\n };\n return this.inventory.childAssetsList(moId, { ...queryFilter, ...extraFilter });\n }\n\n getUnassignedDevices(withChildren = false, filterQuery = '') {\n const queryFilter: any = {\n fragmentType: 'c8y_IsDevice',\n onlyRoots: true,\n withChildren,\n pageSize: this.PAGE_SIZE,\n q: this.getUnassignedDevicesQueryStr(filterQuery)\n };\n return this.inventory.list(this.createFilter(queryFilter));\n }\n\n getDynamicGroupItems(groupQuery: string, filterObj: any = {}) {\n const { query, ...queryParams } = filterObj;\n const orderByQuery = query;\n const queryFilter = {\n q: this.buildCombinedQuery(groupQuery, orderByQuery),\n ...queryParams\n };\n return this.inventory.list(this.createFilter(queryFilter));\n }\n\n getDeviceChildren(\n moId: string,\n extraFilter: object = {},\n filterQuery = '',\n withChildren = false\n ) {\n const queryFilter = {\n withChildren,\n pageSize: this.PAGE_SIZE,\n query: this.groupQueryFilter(moId, filterQuery)\n };\n return this.inventory.childDevicesList(moId, { ...queryFilter, ...extraFilter });\n }\n\n getUnassignedDevicesQueryStr(filterQuery): string {\n const hasGroupId = filterQuery.includes('bygroupid');\n // Fetch all unassigned devices.\n const defaultQueryStr = '$orderby=name';\n\n // filterQuery is a custom query to fetch unassigned devices filtered by name.\n return hasGroupId || !filterQuery ? defaultQueryStr : filterQuery;\n }\n\n groupQueryFilter(moId: string, filterQuery?: string) {\n if (!filterQuery) {\n return `$filter=(bygroupid(${moId}))$orderby=name`;\n }\n return filterQuery;\n }\n\n navRootQueryFilter() {\n const navRootFilter = this.rootQueryFilter();\n navRootFilter.__orderby = [{ name: 1 }];\n return navRootFilter;\n }\n\n rootQueryFilter() {\n const { moduleConfig } = this;\n const rootFilter = this.optionsService.disableOnlyRootsQuery\n ? {\n __filter: {\n type: GroupFragment.groupType\n },\n __orderby: []\n }\n : {\n __filter: {\n __has: GroupFragment.groupFragmentType\n },\n __orderby: []\n };\n if (moduleConfig.smartGroups) {\n const queryFilter = {\n __filter: {\n __and: [\n {\n type: GroupFragment.dynamicGroupType\n },\n {\n __has: GroupFragment.dynamicGroupFragment\n },\n { __not: { __has: `${GroupFragment.dynamicGroupFragment}.invisible` } }\n ]\n }\n };\n this.queriesUtil.addOrFilter(rootFilter, queryFilter);\n }\n return rootFilter;\n }\n\n onUpdate({ mo, root }) {\n if (mo.id) {\n return this.apiService\n .hookResponse(\n ({ url, method }) =>\n ['PUT', 'DELETE', 'POST'].includes(method) &&\n RegExp(`inventory/managedObjects/${mo.id}`).test(url)\n )\n .pipe(\n filter(() => !this.draggedData),\n this.apiService.excludePermissionCall(),\n mergeMap(this.apiService.resolveData<IManagedObject>),\n filter(response => !response?.data?.c8y_Dashboard)\n );\n } else if (root) {\n return this.apiService\n .hookResponse(\n ({ url, method }) => RegExp('inventory/managedObjects/?$').test(url) && method === 'POST'\n )\n .pipe(\n mergeMap(this.apiService.resolveData<IManagedObject>),\n filter(response => this.isNewManagedObjectRoot(response))\n );\n } else {\n return empty();\n }\n }\n\n isNewManagedObjectRoot(response: Partial<IResult<IManagedObject>> = {}) {\n const { data } = response;\n let isRootAsset = false;\n\n if (typeof data === 'object') {\n isRootAsset = !!data[GroupFragment.groupFragmentType];\n if (!isRootAsset && this.moduleConfig.smartGroups) {\n isRootAsset = !!data[GroupFragment.dynamicGroupFragment];\n }\n }\n return isRootAsset;\n }\n\n /**\n * Check if it is possible to drop a node after dragging.\n * @param dropOnRoot Is the drop performed on the root node\n */\n canDropNode(dropOnRoot: boolean): boolean {\n return (\n !dropOnRoot ||\n this.user.hasAnyRole(this.appState.currentUser.value, [\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN\n ])\n );\n }\n\n /**\n * There could be multiple breadcrumbs for devices,\n * so we set a preferred one on click on a device.\n * @param parents The parent nodes of the device to select the prefered one.\n */\n preferBreadcrumb(parents: NavigatorNode[]) {\n if (parents.length === 1) {\n this.breadcrumbService.selectPreferredByPath(parents[0].path);\n }\n }\n\n protected createFilter(extraParams: any = {}) {\n const params = {\n currentPage: 1,\n withTotalPages: true,\n pageSize: 10\n };\n return { ...params, ...extraParams };\n }\n\n private buildCombinedQuery(queryA, queryB) {\n let combinedQuery;\n if (queryA && queryB) {\n const filterQuery = this.queriesUtil.buildQuery([\n {\n __useFilterQueryString: queryA\n },\n {\n __useFilterQueryString: queryB\n }\n ]);\n const orberByQuery = this.queriesUtil.extractAndMergeOrderBys([queryA, queryB]);\n combinedQuery = `${filterQuery} ${orberByQuery}`;\n } else {\n combinedQuery = queryA || queryB || '';\n }\n return combinedQuery;\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { get as getProp } from 'lodash-es';\nimport { AssetNode } from './asset-node';\nimport { AssetNavigatorConfig, ASSET_NAVIGATOR_CONFIG } from './asset-node-config.model';\nimport { AssetNodeService } from './asset-node.service';\n\n@Injectable()\nexport class AssetNodeFactory {\n constructor(\n private service: AssetNodeService,\n @Optional() @Inject(ASSET_NAVIGATOR_CONFIG) public moduleConfig: AssetNavigatorConfig\n ) {}\n\n get(): AssetNode {\n const rootNavigatorNode = getProp(this.moduleConfig, 'rootNavigatorNode') ?? true;\n let { rootNode } = this.service;\n\n if (rootNavigatorNode === false) {\n return;\n }\n\n if (!rootNode) {\n rootNode = this.service.createRootNode(rootNavigatorNode === true ? {} : rootNavigatorNode);\n }\n return rootNode;\n }\n}\n","import { GroupFragment } from '@c8y/ngx-components';\nimport { GroupNodeService } from './group-node.service';\nimport { AssetNode } from '../asset-node';\nimport { GroupNodeConfig } from './asset-selector.model';\n\nexport class GroupNode extends AssetNode {\n static NAME = 'GroupNode';\n\n /**\n * Set this true, if only groups should be shown.\n */\n groupsOnly = false;\n\n /**\n * Set this true, if it groups are also selectable.\n */\n groupsSelectable = false;\n /**\n * Devices with children can be selected to show their child devices.\n */\n showChildDevices = false;\n\n /**\n * Group node children (subentries).\n */\n children: GroupNode[] = [];\n\n /**\n * Creates a new node which shows only groups.\n *\n * @param service The service to use.\n * @param config The default configuration of the node.\n * @param groupsOnly Set this true, if only groups should be shown.\n * @param selectable Set this true, if it is selectable.\n */\n\n constructor(protected service: GroupNodeService, config: GroupNodeConfig = {}) {\n super(service, config);\n this.groupsOnly = config.groupsOnly || false;\n this.groupsSelectable = config.groupsSelectable || false;\n this.showChildDevices = config.showChildDevices || false;\n }\n\n /**\n * Adds the MO as a child node.\n * @param mo ManagedObject\n */\n addManagedObject(mo) {\n const { childAdditions } = this.mo;\n if (!this.isChildAddition(childAdditions, mo)) {\n this.add(\n this.service.createChildNode({\n mo,\n groupsOnly: this.groupsOnly,\n groupsSelectable: this.groupsSelectable,\n showChildDevices: this.showChildDevices\n })\n );\n }\n }\n\n /**\n * Counts the number of children for the current node (with the exception of the UnassignedDevicesNode).\n */\n countChildren(): number {\n return this.children.filter(value => value.toString() !== 'UnassignedDevicesNode').length;\n }\n\n /**\n * Removes all child nodes except the UnassignedDevicesNode.\n */\n empty() {\n this.children = this.children.filter(value => value.toString() === 'UnassignedDevicesNode');\n }\n\n fetch() {\n const isRoot = this.root;\n const isDevice = this.mo.c8y_IsDevice;\n return isRoot\n ? this.service.getRootNodes()\n : isDevice\n ? this.service.getDeviceChildren(\n this.mo.id,\n {},\n this.filterQuery$.value,\n this.showChildDevices\n )\n : this.service.getGroupItems(\n this.mo.id,\n this.groupsOnly\n ? {\n query: `$filter=(has(${GroupFragment.groupFragmentType}))`\n }\n : {},\n this.showChildDevices,\n this.filterQuery$.value\n );\n }\n\n toString() {\n return GroupNode.NAME;\n }\n\n isGroup() {\n return this.mo && this.service.isGroup(this.mo);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AssetNodeService } from '../asset-node.service';\nimport { GroupNodeConfig } from './asset-selector.model';\nimport { GroupNode } from './group-node';\n\n@Injectable({ providedIn: 'root' })\nexport class GroupNodeService extends AssetNodeService {\n protected PAGE_SIZE = 5;\n\n createGroupNode(config: GroupNodeConfig) {\n return new GroupNode(this, config);\n }\n\n createChildNode(config: GroupNodeConfig): GroupNode {\n return this.createGroupNode(config);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { IIdentified, IManagedObject } from '@c8y/client';\nimport { AssetNodeService } from '../asset-node.service';\nimport { isArray, isNumber, isObject, isString } from 'lodash';\nimport { GroupNode } from './group-node';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AssetSelectorService extends AssetNodeService {\n /**\n * Function which will check if the node is selectable.\n */\n private isNodeSelectableFn: boolean | ((node: GroupNode) => boolean) = true;\n\n /**\n * Sets the function that will decide if the node is selectable.\n * @param fn A boolean or a function that will decide if the node is selectable.\n */\n setIsNodeSelectable(fn: boolean | ((node: GroupNode) => boolean)): void {\n this.isNodeSelectableFn = fn;\n }\n\n /**\n * Checks if the node is selectable.\n * @param node The node to check.\n */\n isNodeSelectable(node: GroupNode): boolean {\n if (typeof this.isNodeSelectableFn === 'boolean') {\n return this.isNodeSelectableFn;\n } else if (typeof this.isNodeSelectableFn === 'function') {\n return this.isNodeSelectableFn(node);\n }\n return true;\n }\n /**\n * Simplifies the object model based on the selected mode.\n * @param obj The selected asset.\n * @param mode The mode which will decide what type of model will be returned.\n */\n normalizeValue(\n obj: Partial<IManagedObject>,\n modelMode: 'simple' | 'full'\n ): Partial<IManagedObject> | IIdentified {\n return this.simplifyModel(this.normalizeModelValue(obj), modelMode);\n }\n\n simplifyModel(\n model: Partial<IManagedObject> | IIdentified[],\n mode: 'simple' | 'full'\n ): Partial<IManagedObject> | IIdentified {\n const mapModel = model => {\n const { id, name, c8y_DeviceQueryString } = model as IIdentified;\n return { id, name, ...(c8y_DeviceQueryString ? { c8y_DeviceQueryString } : {}) };\n };\n\n if (mode === 'full') {\n return model;\n }\n if (!isArray(model)) {\n return mapModel(model);\n }\n return model.map(mapModel);\n }\n\n /**\n * Returns the index of the currently selected item.\n * @param selected All selected items\n * @param selectedMo The new selected item-\n * @returns An index, or -1 if not found.\n */\n getIndexOfSelected(\n selected: Array<Partial<IIdentified>> | Partial<IIdentified>,\n selectedMo: IIdentified\n ) {\n return selected.findIndex(mo => mo.id === selectedMo.id);\n }\n\n private normalizeModelValue(value: any): IIdentified[] {\n if (isNumber(value) || isString(value)) {\n return [{ id: value }];\n }\n if (isArray(value)) {\n return value;\n }\n if (isObject(value)) {\n return [value];\n }\n return [];\n }\n}\n","import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IIdentified, IManagedObject } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { AssetsNavigatorAction } from '../action.enum';\nimport { AssetSelectorService } from './asset-selector.service';\nimport { GroupNode } from './group-node';\n\n@Component({\n selector: 'c8y-asset-selector-node',\n templateUrl: './asset-selector-node.component.html',\n standalone: false\n})\nexport class AssetSelectorNodeComponent implements OnInit {\n /**\n * The current node.\n */\n @Input() node: GroupNode;\n /**\n * Root node. Node found at the top of the hierarchy.\n */\n @Input() rootNode: GroupNode;\n /**\n * All preselected items.\n */\n @Input() preselected: IIdentified | IIdentified[] = [];\n /**\n * Should the path be shown.\n */\n @Input() showPath = false;\n /**\n * Can the user select multiple assets.\n */\n @Input() multi = false;\n /**\n * The current path to the node.\n */\n @Input() view: 'tree' | 'miller' = 'tree';\n /**\n * Used only for miller-view, displays the column level for the current node.\n * E.g if the index is one, this will be second column.\n */\n @Input() index;\n /**\n * Sets the active node.\n */\n @Input() active: GroupNode;\n /**\n * A function that should verify the need to add a column when a node is clicked.\n */\n @Input() handleNextMillerViewColumn: (node: GroupNode, index: number) => boolean;\n\n @Input() disabled = false;\n /**\n * Event, which indicates whether the loading of the node has completed.\n */\n @Output() isLoadingState: EventEmitter<boolean> = new EventEmitter();\n /**\n * Event that emits when a node is selected.\n */\n @Output() onSelect: EventEmitter<IManagedObject> = new EventEmitter();\n /**\n * Event that emits when a node is deselected.\n */\n @Output() onDeselect: EventEmitter<{ deselectMode: 'single' | 'all'; mo: IManagedObject }> =\n new EventEmitter();\n\n breadcrumb: string;\n /**\n * @ignore\n */\n level = 0;\n /**\n * @ignore\n */\n unsubscribe$ = new Subject<void>();\n isNodeSelectable = true;\n\n /** sets the `btn-pending` class in the load more button */\n isLoading = false;\n /**\n * @ignore\n */\n get expandTitle() {\n return !this.node.open ? gettext('Expand') : gettext('Collapse');\n }\n\n /**\n * @ignore only di\n */\n constructor(\n private translateService: TranslateService,\n private cd: ChangeDetectorRef,\n public assetSelectorService: AssetSelectorService\n ) {}\n\n /**\n * @ignore\n */\n async ngOnInit() {\n this.isNodeSelectable = this.assetSelectorService.isNodeSelectable(this.node);\n this.breadcrumb = this.node.label;\n this.setupBreadcrumbsAndLevel(this.node);\n\n if (this.node instanceof GroupNode) {\n this.node.hookEvents();\n }\n\n // open on startup\n if (this.node.root) {\n this.click();\n }\n\n // used for loading and to trigger change detection when the node is no longer loading.\n if (this.node.events) {\n this.node.events\n .pipe(\n takeUntil(this.unsubscribe$),\n filter((a: AssetsNavigatorAction) => a === AssetsNavigatorAction.LOADING_DONE)\n )\n .subscribe(() => {\n this.isLoadingState.emit(false);\n this.cd.markForCheck();\n });\n }\n }\n\n /**\n * Opens a node.\n */\n click() {\n this.node.open = !this.node.open;\n this.node.click({ open: this.node.open });\n }\n\n setupBreadcrumbsAndLevel(node: GroupNode) {\n if (node.parents && node.parents.length) {\n const parent = node.parents[0] as GroupNode;\n this.breadcrumb =\n this.translateService.instant(parent.label) +\n ' > ' +\n this.translateService.instant(this.breadcrumb);\n this.level++;\n\n this.setupBreadcrumbsAndLevel(parent);\n }\n }\n\n /**\n * Selects the node and emits a change on the parent component.\n * @param node The node to select.\n */\n selected(node: GroupNode) {\n if (node.mo) {\n this.updateSelection(node.mo);\n return;\n }\n this.click();\n }\n\n /**\n * Handles clicks on a item in Miller View.\n * @param node The node that was clicked.\n */\n millerViewClick(node: GroupNode) {\n node.breadcrumb = this.breadcrumb;\n\n if (!this.handleNextMillerViewColumn) {\n return;\n }\n const shouldHandleDefault = this.handleNextMillerViewColumn(node, this.index);\n if (shouldHandleDefault) {\n this.selected(node);\n }\n }\n\n /**\n * @ignore\n */\n ngOnDestroy(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n isSelected() {\n if (!this.node.mo) {\n return false;\n }\n return this.assetSelectorService.getIndexOfSelected(this.preselected, this.node.mo) > -1;\n }\n\n isActive() {\n if (this.active && this.node.mo) {\n return this.active.mo?.id === this.node.mo.id;\n }\n return false;\n }\n\n private updateSelection(selectedMo: IManagedObject) {\n if (!this.multi) {\n this.onDeselect.emit({ deselectMode: 'all', mo: selectedMo });\n return;\n }\n if (this.isSelected()) {\n this.onDeselect.emit({ deselectMode: 'single', mo: selectedMo });\n return;\n }\n this.onSelect.emit(selectedMo);\n this.cd.markForCheck();\n }\n}\n","<!-- Hierarchy tree -->\n<div\n class=\"c8y-asset-selector__item\"\n [ngStyle]=\"{\n 'margin-left': level > 1 ? 16 + 'px' : '0'\n }\"\n *ngIf=\"view === 'tree'\"\n [attr.role]=\"view === 'tree' ? 'tree' : 'list'\"\n [ngClass]=\"{\n 'c8y-asset-selector__item--more': node?.icon === 'plus',\n 'c8y-asset-selector__item--start': level === 0\n }\"\n>\n <div\n class=\"c8y-asset-selector__node\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n [ngClass]=\"{ 'c8y-asset-selector__node--open': node?.open }\"\n >\n <!-- expand button -->\n <div class=\"c8y-asset-selector__node__btn-spacer\">\n <button\n class=\"collapse-btn btn-dot\"\n [title]=\"expandTitle | translate\"\n [attr.aria-expanded]=\"node.open\"\n (click)=\"click()\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </button>\n </div>\n <div\n class=\"d-flex a-i-center p-t-4 p-b-4\"\n *ngIf=\"node.toString() !== 'LoadMoreNode' && isNodeSelectable\"\n >\n <label [ngClass]=\"{ 'c8y-checkbox': multi, 'c8y-radio': !multi }\">\n <input\n id=\"nodeLabel\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <!-- group button -->\n <button\n class=\"c8y-asset-selector__btn text-truncate\"\n [attr.aria-expanded]=\"!node.open\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n (click)=\"click()\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate\"\n *ngIf=\"showPath\"\n >\n <small\n class=\"text-muted\"\n title=\"{{ breadcrumb }}\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- not a group button -->\n <button\n class=\"flex-grow\"\n title=\"{{ breadcrumb }}\"\n type=\"button\"\n *ngIf=\"!node.isGroup() && !node.hasChildDevices()\"\n [ngClass]=\"{\n 'btn btn-default btn-sm m-b-8 m-r-8 d-flex j-c-center': node.icon === 'plus',\n 'c8y-asset-selector__btn text-truncate': node.icon != 'plus'\n }\"\n (click)=\"selected(node)\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16 ': node.icon != 'plus' }\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate text-muted small\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </p>\n <!-- up to here -->\n </span>\n </button>\n </div>\n <div\n class=\"collapse\"\n *ngIf=\"node.countChildren()\"\n [collapse]=\"!node.open\"\n [isAnimated]=\"true\"\n [attr.role]=\"'group'\"\n >\n <c8y-asset-selector-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [preselected]=\"preselected || []\"\n [disabled]=\"disabled\"\n [multi]=\"multi\"\n [active]=\"active\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n\n<!-- Miller columns -->\n<div *ngIf=\"view === 'miller'\">\n <div\n class=\"miller-column__item bg-inherit\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden && node !== rootNode\"\n [ngClass]=\"{\n active: isActive(),\n 'miller-column__item--more': node.toString() === 'LoadMoreNode'\n }\"\n >\n <div\n class=\"m-l-4 m-r-4 miller-column__item__checkbox\"\n *ngIf=\"node.toString() !== 'LoadMoreNode'\"\n >\n <label [ngClass]=\"{ 'c8y-radio': !multi, 'c8y-checkbox': multi }\">\n <input\n id=\"nodeLabel2\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel2\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <button\n title=\"{{ breadcrumb | translate }}\"\n type=\"button\"\n [ngClass]=\"{\n 'btn btn-default btn-sm d-flex flex-grow j-c-center m-l-16 m-r-16 m-b-4 m-t-4':\n node.toString() === 'LoadMoreNode',\n 'miller-column__item__btn': node.toString() !== 'LoadMoreNode',\n 'btn-pending': node.loading && node.toString() === 'LoadMoreNode'\n }\"\n (click)=\"millerViewClick(node)\"\n >\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16': node.toString() !== 'LoadMoreNode' }\"\n ></i>\n <div class=\"text-left text-truncate\">\n <p\n class=\"text-truncate\"\n title=\"{{ node.translateLabel ? (node.label | translate) : node.label }}\"\n >\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n </p>\n <!-- use just for search results to display the path -->\n <small\n class=\"text-muted text-truncate\"\n title=\"{{ breadcrumb }}\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n <!-- up to here -->\n </div>\n <span\n class=\"p-l-4 m-l-auto\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </span>\n </button>\n </div>\n\n <div\n role=\"list\"\n *ngIf=\"node\"\n [ngClass]=\"{ hidden: node !== rootNode }\"\n >\n <c8y-asset-selector-node\n role=\"listitem\"\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"preselected || []\"\n [multi]=\"multi\"\n [view]=\"view\"\n [index]=\"index\"\n [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n","import { EventEmitter } from '@angular/core';\nimport { IIdentified, IManagedObject, InventoryService } from '@c8y/client';\nimport { GroupNodeService } from './group-node.service';\nimport { AssetSelectorService } from './asset-selector.service';\nimport { AssetSelectionChangeEvent, AssetSelectorOptions } from './asset-selector.model';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nexport class AssetSelectorBase {\n /**\n * Config object containing all options for the asset selector.\n */\n config: AssetSelectorOptions = {};\n /**\n * An array of predefined nodes.\n */\n selected: Array<Partial<IManagedObject>> | IIdentified[] | IIdentified;\n /**\n * The loading state of the current node.\n */\n isLoading = false;\n /**\n * Emit the selected asset or assets.\n */\n onSelected = new EventEmitter<AssetSelectionChangeEvent>();\n /**\n * Emits if the currently selected asset is cleared.\n */\n onClearSelected = new EventEmitter<void>();\n\n private onChange: (mo: IIdentified[] | IIdentified) => void;\n private onTouched: () => void;\n\n constructor(\n protected groupNodeService: GroupNodeService,\n protected inventory: InventoryService,\n protected assetSelectorService: AssetSelectorService\n ) {}\n\n /**\n * @ignore\n */\n validate(control: AbstractControl): ValidationErrors {\n if (this.config.required && (!control.value || control.value.length === 0)) {\n return { required: true };\n }\n return null;\n }\n\n /**\n * @ignore\n */\n writeValue(obj: any): void {\n this.selected = this.assetSelectorService.normalizeValue(obj, this.config.modelMode);\n }\n\n /**\n * @ignore\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * @ignore\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * @ignore\n */\n doBlur() {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n\n /**\n * Deselects all expect the given one.\n * @param selectedMo The selected asset (optional, if empty -> just deselect all).\n */\n deselectAll(selectedMo?: IManagedObject) {\n this.selected = [];\n if (selectedMo) {\n this.selected = [this.assetSelectorService.simplifyModel(selectedMo, this.config.modelMode)];\n }\n this.emitChange(this.selected, selectedMo, !!selectedMo);\n this.doBlur();\n }\n\n /**\n * Adds an managed object to the selected array and emits the change.\n * @param selectedMo The selected asset.\n */\n select(selectedMo: IManagedObject) {\n if (!this.config.multi) {\n this.selected = [];\n }\n const index = this.getIndexOfSelected(this.selected, selectedMo);\n if (index === -1) {\n this.selected.push(\n this.assetSelectorService.simplifyModel(selectedMo, this.config.modelMode)\n );\n }\n this.emitChange(this.selected, selectedMo, true);\n this.doBlur();\n }\n\n /**\n * Removes a managed object from the selected array and emits the change.\n * @param selectedMo The selected asset.\n */\n deselect(selectedMo: IManagedObject) {\n const index = this.getIndexOfSelected(this.selected, selectedMo);\n if (index > -1) {\n this.selected.splice(index, 1);\n }\n this.emitChange(this.selected, selectedMo, false);\n this.doBlur();\n }\n\n /**\n * Returns the index of the currently selected item.\n * @param selected All selected items\n * @param selectedMo The new selected item-\n * @returns An index, or -1 if not found.\n */\n getIndexOfSelected(\n selected: Array<Partial<IIdentified>> | Partial<IIdentified>,\n selectedMo: IIdentified\n ) {\n return selected.findIndex(mo => mo.id === selectedMo.id);\n }\n\n emitChange(selected: IIdentified | IIdentified[], item: IManagedObject, isSelected: boolean) {\n const changes = this.config.multi ? selected : selected[0];\n if (this.onChange) {\n this.onChange(changes);\n }\n this.onSelected.emit({ items: changes, change: { item, isSelected } });\n }\n\n createDefaultRootNode() {\n return this.groupNodeService.createGroupNode({\n root: true,\n groupsSelectable: this.config.groupsSelectable,\n groupsOnly: this.config.groupsOnly,\n showChildDevices: this.config.showChildDevices\n });\n }\n async createManagedObjectRootNode(asset: IIdentified) {\n if ((asset as IIdentified).id) {\n return this.groupNodeService.createGroupNode({\n mo: asset as IManagedObject,\n groupsSelectable: this.config.groupsSelectable,\n groupsOnly: this.config.groupsOnly,\n showChildDevices: this.config.showChildDevices\n });\n }\n const { data: mo } = await this.inventory.detail(asset);\n return this.groupNodeService.createGroupNode({\n mo,\n groupsSelectable: this.config.groupsSelectable,\n groupsOnly: this.config.groupsOnly,\n showChildDevices: this.config.showChildDevices\n });\n }\n}\n","import { IManagedObject } from '@c8y/client';\nimport { IIdentified } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\n\nexport interface AssetSelectionChangeEvent {\n items: IIdentified | IIdentified[];\n change: { item: IManagedObject; isSelected: boolean };\n}\n\nexport interface GroupNodeConfig {\n root?: boolean;\n mo?: IManagedObject;\n groupsOnly?: boolean;\n groupsSelectable?: boolean;\n showChildDevices?: boolean;\n}\n\nexport const CONFIG_OPTIONS_DEFAULT: AssetSelectorOptions = {\n label: gettext('Asset selection'),\n multi: false,\n showFilter: false,\n columnHeaders: false,\n singleColumn: false,\n modelMode: 'simple',\n groupsOnly: false,\n groupsSelectable: false,\n search: false,\n showUnassignedDevices: false,\n view: 'tree',\n showChildDevices: false,\n showSelected: true\n};\n\nexport interface AssetSelectorOptions {\n /**\n * Already selected devices.\n */\n selectedDevices?: IIdentified | IIdentified[];\n /**\n * Defines a label to be shown to the user.\n */\n label?: string;\n /**\n * Can the user select multiple assets.\n */\n multi?: boolean;\n /**\n * displays a filter input on every column when using the miller view.\n */\n showFilter?: boolean;\n /**\n * displays a column header on every column when using the miller view.\n */\n columnHeaders?: boolean;\n /**\n * Displays only the select column.\n */\n singleColumn?: boolean;\n /**\n * Set to true to mark it as required on a form.\n */\n required?: boolean;\n /**\n * In simple model-mode the result will only contain the IDs and name of the selected\n * assets. In full mode, everything is contained.\n */\n modelMode?: 'simple' | 'full';\n /**\n * Set this to true, if the selector should only show groups.\n */\n groupsOnly?;\n /**\n * Set this true, if groups should be selectable.\n */\n groupsSelectable?;\n /**\n * Enable to display global search in the asset-selector (only possible whithout device context).\n */\n search?: boolean;\n /**\n * Displays all unassigned devices in a custom root group.\n */\n showUnassignedDevices?: boolean;\n /**\n * Set the view of the asset selector with tree view as default.\n */\n view?: 'tree' | 'miller';\n /**\n * Used only for miller-view, displays the column level for the current node.\n * E.g if the index is one, this will be second column.\n */\n index?: number;\n /**\n * Used only for single column, the array contains all selected columns.\n */\n selectedColumns?: IIdentified[] | IIdentified;\n /**\n * Devices with children can be selected to show their child devices.\n */\n showChildDevices?: boolean;\n /**\n * Allows to show chips at the top with the currently selected asset for multi select.\n * For single select it shows the currently selected asset.\n */\n showSelected?: boolean;\n /**\n * Prevents automatic asset selection on component initialization.\n */\n preventInitialSelect?: boolean;\n}\n","import { ClickOptions, gettext } from '@c8y/ngx-components';\nimport { AssetsNavigatorAction } from '../action.enum';\nimport { GroupNodeConfig } from './asset-selector.model';\nimport { GroupNode } from './group-node';\nimport { GroupNodeService } from './group-node.service';\n\nexport class UnassignedDevicesNode extends GroupNode {\n static NAME = 'UnassignedDevicesNode';\n label = gettext('Unassigned devices');\n icon = 'delete-folder';\n groupsSelectable = false;\n groupsOnly = false;\n showChildDevices = false;\n mo = {};\n\n constructor(\n protected service: GroupNodeService,\n config: GroupNodeConfig = {}\n ) {\n super(service, config);\n this.priority = Infinity;\n this.showChildDevices = config.showChildDevices || false;\n }\n\n click(options: ClickOptions = {}) {\n this.hookEvents();\n if (options.open) {\n this.events.next(AssetsNavigatorAction.FETCH);\n }\n }\n\n addManagedObject(mo) {\n this.add(this.service.createChildNode({ mo, showChildDevices: this.showChildDevices }));\n }\n\n fetch() {\n return this.service.getUnassignedDevices(this.showChildDevices, this.filterQuery$.value);\n }\n\n isGroup() {\n return true;\n }\n\n toString() {\n return UnassignedDevicesNode.NAME;\n }\n\n setLabel() {\n // do nothing, as this item has a hardcoded label.\n // This is only to overwrite the default inherited method.\n this.label = this.label;\n }\n\n async updateIcon() {\n // do nothing, as this item has a hardcoded label.\n // This is only to overwrite the default inherited method.\n this.icon = this.icon;\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n forwardRef\n} from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { IIdentified, IManagedObject, InventoryService } from '@c8y/client';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { takeUntil, tap } from 'rxjs/operators';\nimport { AssetSelectorBase } from './asset-selector-base';\nimport {\n AssetSelectionChangeEvent,\n AssetSelectorOptions,\n CONFIG_OPTIONS_DEFAULT\n} from './asset-selector.model';\nimport { AssetSelectorService } from './asset-selector.service';\nimport { GroupNode } from './group-node';\nimport { GroupNodeService } from './group-node.service';\nimport { UnassignedDevicesNode } from './unassigned-devices-node';\nimport { gettext } from '@c8y/ngx-components';\n\n/**\n * Displays a hierarchical tree selector for assets.\n */\n@Component({\n selector: 'c8y-asset-selector',\n templateUrl: './asset-selector.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => AssetSelectorComponent)\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => AssetSelectorComponent),\n multi: true\n },\n AssetSelectorService\n ],\n standalone: false\n})\nexport class AssetSelectorComponent extends AssetSelectorBase implements OnInit {\n /**\n * Config object containing all options for the asset selector.\n */\n @Input() config: AssetSelectorOptions = {};\n /**\n * Defines the node, which should be displayed as active.\n */\n @Input() active: GroupNode;\n /**\n * Used only for miller-view, displays the column level for the current node.\n * E.g if the index is one, this will be second column.\n */\n @Input() index = 0;\n /**\n * The asset to use as root.\n */\n @Input() asset: IIdentified = undefined;\n /**\n * The selected device.\n */\n @Input() selectedDevice: IManagedObject = undefined;\n /**\n * An array of predefined nodes.\n */\n @Input() selected: Array<Partial<IManagedObject>> | IIdentified[] | IIdentified = [];\n /**\n * The node to use as root. You can either set this, or the asset to start from.\n */\n @Input() rootNode: GroupNode;\n /**\n * All currently selected assets.\n */\n @Input() selectedItems: IIdentified[] | IIdentified = [];\n @Input() container: '' | 'body' = 'body';\n @Input() isNodeSelectable: boolean | ((node: IIdentified) => boolean) = true;\n @Input() disabled = false;\n /**\n * Emits if one item was selected (all currently selected nodes).\n */\n @Output() onSelected = new EventEmitter<AssetSelectionChangeEvent>();\n /**\n * Emits if the currently selected asset is cleared.\n */\n @Output() onClearSelected = new EventEmitter<void>();\n /**\n * Used only for miller view. Emit the selected node and use it as a 'rootNode' for the new column.\n */\n @Output() onRowSelected = new EventEmitter<any>();\n /**\n * Emits the current loading state of the node.\n */\n @Output() onLoad = new EventEmitter<any>();\n /**\n * The current filter applied.\n */\n filterText = '';\n /**\n * Displays the global search at all times if the miller view is used\n * on root group level.\n */\n root = false;\n /**\n * @ignore\n */\n unsubscribe$ = new Subject<void>();\n /**\n * Returns the current header hight in pixel.\n */\n getHeaderHeight$ = new BehaviorSubject(0);\n readonly ASSET_CONST = gettext('Asset {{ assetId }}');\n\n @ViewChild('header')\n private header: ElementRef;\n\n /**\n * @ignore only DI\n */\n constructor(\n protected groupNodeService: GroupNodeService,\n protected inventory: InventoryService,\n protected assetSelectorService: AssetSelectorService,\n protected cd: ChangeDetectorRef\n ) {\n super(groupNodeService, inventory, assetSelectorService);\n }\n\n /**\n * Checks when a node was selected, if a new column needs to be added.\n * @param node The node that was clicked.\n * @param index The current index of this node.\n * @returns True if the click was handled and a new column was added.\n */\n handleNextMillerViewColumn(node: GroupNode, index: number) {\n const nodeCopy = Object.create(node);\n const isSameAsRoot = this.rootNode === node;\n const isUnassignedDevicesNode = node.toString() === UnassignedDevicesNode.NAME;\n const isNewColumnNeeded =\n !isSameAsRoot && (node.isGroup() || isUnassignedDevicesNode || node.hasChildDevices());\n\n if (isNewColumnNeeded) {\n this.onRowSelected.emit({ nodeCopy, index });\n return false;\n }\n return true;\n }\n\n /**\n * @ignore\n */\n async ngOnInit() {\n this.assetSelectorService.setIsNodeSelectable(this.isNodeSelectable);\n if (this.index === 0) {\n this.config = { ...CONFIG_OPTIONS_DEFAULT, ...this.config };\n }\n const shouldResetNameFilter =\n this.rootNode && this.rootNode.mo && this.config.view === 'miller';\n if (shouldResetNameFilter) {\n await this.applyFilter('');\n }\n\n const isOnlyAssetNodeDefined = this.asset;\n if (isOnlyAssetNodeDefined) {\n this.rootNode = await this.createManagedObjectRootNode(this.asset);\n }\n\n const isAnyNodeDefined =\n !this.rootNode && (!this.asset || Object.keys(this.asset).length === 0);\n if (isAnyNodeDefined) {\n this.rootNode = this.createDefaultRootNode();\n }\n\n if (\n this.config.showUnassignedDevices &&\n (!this.asset || Object.keys(this.asset).length === 0) &&\n this.rootNode.root\n ) {\n this.rootNode.add(\n new UnassignedDevicesNode(this.groupNodeService, {\n showChildDevices: this.config.showChildDevices\n })\n );\n }\n this.root = this.rootNode.root;\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes.isNodeSelectable) {\n this.assetSelectorService.setIsNodeSelectable(this.isNodeSelectable);\n }\n if (\n changes.asset &&\n changes.asset.currentValue &&\n Object.keys(changes.asset.currentValue).length !== 0\n ) {\n this.rootNode = await this.createManagedObjectRootNode(changes.asset.currentValue);\n }\n }\n\n /**\n * @ignore\n */\n ngAfterViewInit(): void {\n this.updateHeaderHeight();\n }\n\n /**\n * Changes the current root to one level back.\n */\n back() {\n const index = this.index - 1;\n const nodeCopy = Object.create(this.rootNode.parents[0]);\n this.onRowSelected.emit({ nodeCopy, index });\n }\n\n /**\n * Clears the current filter.\n */\n clearFilters() {\n this.filterText = '';\n this.applyFilter('');\n }\n\n clearSelectedDevices() {\n this.selectedDevice = undefined;\n this.applyFilter('');\n this.onClearSelected.emit();\n }\n\n isGroupSelected() {\n if (this.selected.some(selectedNode => selectedNode.id === this.rootNode.mo?.id)) {\n return true;\n }\n return false;\n }\n\n groupNameFilter(nameFilter: string, moId, showUnassignedDevices?: boolean) {\n if (nameFilter) {\n const filterByName = showUnassignedDevices\n ? {\n __filter: {\n name: nameFilter\n },\n __orderby: [{ name: 1 }]\n }\n : {\n __filter: {\n name: nameFilter,\n __bygroupid: moId\n }\n };\n return this.assetSelectorService.queriesUtil.buildQuery(filterByName);\n }\n const defaultFilter = {\n __filter: {\n __bygroupid: moId\n },\n __orderby: [{ name: 1 }]\n };\n return this.assetSelectorService.queriesUtil.buildQuery(defaultFilter);\n }\n\n /**\n * Applies a filter.\n * @param filter The filter to apply.\n */\n async applyFilter(filter: string) {\n this.rootNode.filterQuery$.next(\n this.groupNameFilter(\n filter,\n this.rootNode.mo.id,\n this.isUnassignedDevicesNode() ? true : false\n )\n );\n this.rootNode.refresh();\n this.onLoad.emit({\n loading: true,\n filterText: this.filterText,\n index: this.index,\n selectedDevice: this.selectedDevice\n });\n this.cd.detectChanges();\n }\n\n /**\n * Check if the UnassignedDevice node is the rootNode.\n */\n isUnassignedDevicesNode() {\n return this.rootNode.toString() === UnassignedDevicesNode.NAME;\n }\n\n /**\n * Called when the user resets the search result.\n */\n onSearchResultReset(selectedItem) {\n if (selectedItem) {\n this.rootNode = this.createDefaultRootNode();\n if (this.config.showUnassignedDevices) {\n this.rootNode.add(\n new UnassignedDevicesNode(this.groupNodeService, {\n showChildDevices: this.config.showChildDevices\n })\n );\n }\n if (this.config.view === 'miller') {\n this.onRowSelected.emit({ root: true });\n }\n\n this.rootNode.click({ open: true });\n this.rootNode.nodesFetched\n .pipe(\n tap(() => this.cd.detectChanges()),\n takeUntil(this.unsubscribe$)\n )\n .subscribe();\n\n if (this.config.view === 'tree') {\n this.rootNode.open = true;\n }\n }\n }\n\n /**\n * Called if the user clicks on a search result.\n */\n async onSearchResultClick(mo: IManagedObject) {\n const canSelectNode = this.config.groupsSelectable || !this.groupNodeService.isGroup(mo);\n if (this.config.view === 'miller') {\n this.rootNode = await this.createManagedObjectRootNode(mo);\n this.rootNode.click({ open: true });\n const nodeCopy = Object.create(this.rootNode);\n this.onRowSelected.emit({\n nodeCopy,\n index: 0,\n selectedDevices: this.selectedDevice,\n root: true\n });\n }\n if (!this.config.multi) {\n this.deselectAll();\n }\n if (canSelectNode) {\n this.select(mo);\n }\n }\n\n onLoading(isLoading: boolean) {\n this.onLoad.emit({ loading: isLoading, filterText: this.filterText });\n this.cd.markForCheck();\n }\n\n onSelect(mo: IManagedObject) {\n this.select(mo);\n }\n\n onDeselect(config: { deselectMode: 'single' | 'all'; mo: IManagedObject }) {\n switch (config?.deselectMode) {\n case 'single':\n this.deselect(config.mo);\n this.cd.markForCheck();\n break;\n case 'all':\n this.deselectAll(config.mo);\n break;\n }\n }\n\n private updateHeaderHeight() {\n // An observer is used to detect if the header is visible or not.\n // If the header is not visible, the height is 0 and the observer is\n // used to detect when it becomes visible, to recalculate the height.\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.updateHeaderHeight();\n observer.unobserve(entry.target);\n }\n });\n });\n\n requestAnimationFrame(() => {\n if (this.header?.nativeElement) {\n const { clientHeight } = this.header.nativeElement;\n if (clientHeight === 0 && this.isElementOrParentHidden(this.header.nativeElement)) {\n observer.observe(this.header.nativeElement);\n return;\n }\n this.getHeaderHeight$.next(clientHeight);\n } else {\n this.getHeaderHeight$.next(0);\n }\n });\n }\n\n private isElementOrParentHidden(element: HTMLElement): boolean {\n while (element) {\n const style = window.getComputedStyle(element);\n if (style.display === 'none' || style.visibility === 'hidden') {\n return true;\n }\n element = element.parentElement;\n }\n return false;\n }\n}\n","<div\n class=\"bg-inherit p-t-8 p-b-8 separator-bottom p-r-16 p-l-16 sticky-top\"\n [ngStyle]=\"{ 'z-index': config.singleColumn && config.search ? '30' : '20' }\"\n #header\n [ngClass]=\"{\n 'p-absolute miller-column__selection d-flex flex-wrap a-i-center': config.view === 'miller',\n 'miller-column__search': config.search,\n 'miller-column__multi': config.multi\n }\"\n *ngIf=\"\n !selectedDevice &&\n index === 0 &&\n (config.search || config.multi || config.label?.length || config.showSelected)\n \"\n>\n <p\n class=\"text-medium flex-no-shrink a-s-center\"\n [ngClass]=\"{\n 'm-b-4': config.search && root && config.singleColumn,\n 'm-r-8': !config.singleColumn && !config.search,\n 'fit-w': config.singleColumn\n }\"\n *ngIf=\"config.label?.length\"\n >\n {{ config.label | translate }}\n </p>\n <c8y-search-input\n [ngStyle]=\"{ 'min-width': !config.singleColumn && config.label.length ? '50%' : 'inherit' }\"\n *ngIf=\"config.search && root\"\n (onClick)=\"onSearchResultClick($event)\"\n (reset)=\"onSearchResultReset($event)\"\n [mode]=\"'select'\"\n [container]=\"container\"\n [groupsOnly]=\"config.groupsOnly\"\n [ngClass]=\"{\n 'm-l-auto': !config.singleColumn && config.label.length,\n 'fit-w': config.singleColumn || !config.label.length\n }\"\n ></c8y-search-input>\n <div\n class=\"bg-inherit d-flex gap-4 fit-w\"\n *ngIf=\"config.showSelected\"\n [ngClass]=\"{ 'm-t-4': config.search }\"\n >\n <span class=\"text-label-small m-r-4 a-s-center l-h-1\">{{ 'Selected' | translate }}</span>\n <div class=\"flex-grow inner-scroll d-flex gap-4 a-i-center\">\n <ng-container *ngIf=\"!selected.length\">\n <em class=\"text-12 text-muted d-flex a-i-center fit-h-20\">{{ 'None' | translate }}</em>\n </ng-container>\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let selectedItem of selected\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ selectedItem.name }}\"\n [disabled]=\"disabled\"\n type=\"button\"\n (click)=\"config.multi ? deselect(selectedItem) : deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ selectedItem.name || (ASSET_CONST | translate: { assetId: selectedItem.id }) }}\n </span>\n </div>\n </div>\n</div>\n\n<div\n class=\"p-r-16\"\n *ngIf=\"selectedDevice\"\n>\n <div class=\"d-flex p-b-4\">\n <p\n class=\"text-medium p-t-8 m-r-8\"\n *ngIf=\"selectedDevice; else multiAssets\"\n >\n {{ 'Selected asset' | translate }}\n </p>\n <ng-template #multiAssets>\n <p class=\"text-medium m-r-8\">{{ 'Selected assets' | translate }}</p>\n </ng-template>\n <button\n class=\"btn btn-default btn-xs a-s-center m-t-4 m-l-auto\"\n title=\"{{ 'Change' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); clearSelectedDevices()\"\n >\n {{ 'Change' | translate }}\n </button>\n </div>\n <div class=\"d-flex\">\n <i\n class=\"text-success p-l-0 p-r-8\"\n [c8yIcon]=\"'check-circle'\"\n ></i>\n <i\n class=\"m-r-4 icon-20\"\n [c8yIcon]=\"selectedDevice | getGroupIcon | async\"\n ></i>\n <span>{{ selectedDevice.name }}</span>\n </div>\n</div>\n\n<!-- miller columns header -->\n<div\n class=\"miller-column__header sticky-top bg-inherit separator-bottom\"\n *ngIf=\"\n config.view === 'miller' &&\n ((config.showFilter && !rootNode.root) || config.columnHeaders) &&\n !selectedDevice\n \"\n [ngClass]=\"{ 'p-t-8': config.search }\"\n>\n <div class=\"d-flex\" *ngIf=\"config.singleColumn && index !== 0\">\n <i\n class=\"m-r-4\"\n c8yIcon=\"home\"\n ></i>\n <p\n class=\"text-12 text-muted text-truncate text-rtl m-b-4\"\n title=\"{{ rootNode.breadcrumb || rootNode.label | translate }}\"\n >\n {{ rootNode.breadcrumb || rootNode.label | translate }}\n </p>\n </div>\n <div\n class=\"d-flex a-i-center\"\n *ngIf=\"config.columnHeaders || config.singleColumn\"\n >\n <button\n class=\"btn btn-default btn-xs m-r-8 p-t-0 p-b-0 p-l-4 p-r-4 l-h-1\"\n title=\"{{ 'Back' | translate }}\"\n type=\"button\"\n *ngIf=\"config.singleColumn && !rootNode.root && index !== 0\"\n (click)=\"$event.stopPropagation(); back()\"\n >\n <i c8yIcon=\"angle-left\"></i>\n </button>\n <label\n class=\"c8y-radio checkbox-inline m-r-8\"\n *ngIf=\"!rootNode.root && index === 0 && (config.groupsSelectable || !rootNode.isGroup())\"\n >\n <input\n title=\"{{ 'Select group' | translate }}\"\n type=\"radio\"\n (change)=\"select(rootNode.mo)\"\n [checked]=\"isGroupSelected()\"\n />\n <span></span>\n </label>\n\n <i\n class=\"icon-20 c8y-icon-duocolor m-r-4\"\n [c8yIcon]=\"this.rootNode.mo | getGroupIcon: true : this.rootNode.icon | async\"\n *ngIf=\"config.columnHeaders && (config.singleColumn || (!rootNode.root && index === 0))\"\n ></i>\n <p\n class=\"text-truncate\"\n title=\"{{ rootNode.label | translate }}\"\n *ngIf=\"config.columnHeaders\"\n [ngClass]=\"{\n 'text-label-small': !config.singleColumn,\n 'text-medium': config.singleColumn\n }\"\n >\n {{ rootNode.label | translate }}\n </p>\n </div>\n\n <div\n *ngIf=\"!rootNode.root && config.showFilter\"\n [ngClass]=\"{ 'p-t-4': config.columnHeaders }\"\n >\n <div class=\"input-group input-group-sm input-group-search\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Filter this column…' | translate }}\"\n [(ngModel)]=\"filterText\"\n (keyup.enter)=\"applyFilter('*' + filterText + '*')\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot p-r-8 p-l-4\"\n title=\"{{ 'Apply filter' | translate }}\"\n type=\"button\"\n (click)=\"applyFilter('*' + filterText + '*')\"\n >\n <i c8yIcon=\"filter\"></i>\n </button>\n <button\n class=\"btn btn-dot p-r-8 p-l-4\"\n title=\" {{ 'Clear filters' | translate }}\"\n type=\"button\"\n (click)=\"clearFilters()\"\n *ngIf=\"filterText.length\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </span>\n </div>\n </div>\n</div>\n\n<c8y-asset-selector-node\n class=\"d-block bg-inherit p-relative\"\n style=\"z-index: 9\"\n *ngIf=\"rootNode && !selectedDevice\"\n [node]=\"rootNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"selected\"\n [multi]=\"config.multi\"\n [view]=\"config.view\"\n [index]=\"index\"\n [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn.bind(this)\"\n (isLoadingState)=\"onLoading($event)\"\n (onSelect)=\"onSelect($event)\"\n (onDeselect)=\"onDeselect($event)\"\n [ngClass]=\"{ 'collapse show': !rootNode.root && !rootNode.hidden && config.view !== 'miller' }\"\n></c8y-asset-selector-node>\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n forwardRef\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { IIdentified, IManagedObject, InventoryService } from '@c8y/client';\nimport { of } from 'rxjs';\nimport { first, startWith, map, switchMap } from 'rxjs/operators';\nimport { AssetSelectorBase } from './asset-selector-base';\nimport { AssetSelectorComponent } from './asset-selector.component';\nimport { AssetSelectionChangeEvent, AssetSelectorOptions } from './asset-selector.model';\nimport { AssetSelectorService } from './asset-selector.service';\nimport { GroupNode } from './group-node';\nimport { GroupNodeService } from './group-node.service';\nimport { gettext } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-asset-selector-miller',\n templateUrl: './miller-view.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MillerViewComponent),\n multi: true\n }\n ],\n standalone: false\n})\nexport class MillerViewComponent extends AssetSelectorBase implements OnInit {\n /**\n * Config object containing all options for the asset selector.\n */\n @Input() config: AssetSelectorOptions = {};\n /**\n * The asset to use as root.\n */\n @Input() asset: IIdentified = undefined;\n /**\n * The selected devices.\n */\n @Input() selectedDevice: IManagedObject = undefined;\n /**\n * The node to use as root. You can either set this, or the asset to start from.\n */\n @Input() rootNode: GroupNode;\n /**\n * Emits if the selection changes\n */\n @Output() onSelected = new EventEmitter<AssetSelectionChangeEvent>();\n /**\n * Emits if the currently selected asset is cleared.\n */\n @Output() onClearSelected = new EventEmitter<void>();\n /**\n * @ignore\n */\n @ViewChild('millerViewWrapper') millerViewWrapper: ElementRef;\n /**\n * The column array will contain all currently selected nodes\n * which will form the miller view columns (only one per level).\n */\n columns = [];\n /**\n * The current filter applied. Used for the empty state text in the view.\n */\n filterText = '';\n /**\n * Index of the column used to check where to show the loading state.\n */\n columnIndex: number;\n @Input() container: '' | 'body' = 'body';\n\n configOptionsDefault: AssetSelectorOptions = {\n view: 'miller',\n singleColumn: false,\n label: gettext('Asset selection')\n };\n\n /**\n * The height of the first asset selector header.\n */\n assetSelectorHeaderHeight$ = of('0px');\n\n @ViewChildren(AssetSelectorComponent)\n private assetSelectors: QueryList<AssetSelectorComponent>;\n\n constructor(\n protected groupNodeService: GroupNodeService,\n protected inventory: InventoryService,\n protected assetSelectorService: AssetSelectorService,\n protected cd: ChangeDetectorRef\n ) {\n super(groupNodeService, inventory, assetSelectorService);\n }\n\n /**\n * @ignore\n */\n async ngOnInit() {\n this.config = { ...this.configOptionsDefault, ...this.config };\n\n const isAnyNodeDefined =\n !this.rootNode && (!this.asset || Object.keys(this.asset).length === 0);\n if (isAnyNodeDefined) {\n this.rootNode = this.createDefaultRootNode();\n }\n\n const isOnlyAssetNodeDefined = this.asset && Object.keys(this.asset).length !== 0;\n if (isOnlyAssetNodeDefined) {\n this.rootNode = await this.createManagedObjectRootNode(this.asset);\n this.rootNode.click();\n if (!this.config.preventInitialSelect) {\n const selected = this.selectedDevice || this.asset;\n this.selected = [selected];\n this.emitChange(this.selected, selected as IManagedObject, true);\n }\n }\n\n this.columns.push(this.rootNode);\n }\n\n /**\n * @ignore\n */\n async ngOnChanges(changes: SimpleChanges) {\n if (changes.asset && changes.asset.currentValue && !this.asset) {\n this.columns = [];\n this.columns.push(await this.createManagedObjectRootNode(changes.asset.currentValue));\n }\n\n if (changes.selectedDevice && changes.selectedDevice.currentValue) {\n this.selected = [this.selectedDevice];\n this.emitChange(this.selected, this.selectedDevice as IManagedObject, true);\n }\n }\n\n /**\n * @ignore\n */\n ngAfterViewInit(): void {\n requestAnimationFrame(() => {\n this.assetSelectorHeaderHeight$ = this.assetSelectors.changes.pipe(\n startWith(this.assetSelectors.toArray()),\n first(),\n switchMap(assetSelector =>\n assetSelector[0] ? assetSelector[0].getHeaderHeight$ : of('0')\n ),\n map(height => height + 'px')\n );\n });\n }\n\n /**\n * Create a new column with the selected node as root.\n */\n addNewColumn(node): void {\n const level = node.index;\n this.selectedDevice = node.selectedDevices || undefined;\n if (node.root) {\n window.requestAnimationFrame(() => (this.millerViewWrapper.nativeElement.scrollLeft = 0));\n this.columns.length = 1;\n }\n\n const isLevelLowerThanColumnNumber = level < this.columns.length - 1;\n let goBack = false;\n if (isLevelLowerThanColumnNumber) {\n this.columns.length = level + 1;\n goBack = true;\n }\n if (!node.root && !(this.config.singleColumn && goBack)) {\n this.columns.push(node.nodeCopy);\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const col = this;\n window.requestAnimationFrame(() => (col.millerViewWrapper.nativeElement.scrollLeft = 50000));\n /* triggered twice with a small delay as a workaround for dealing with Safari's bug:\n \"Safari doesn’t update the scrollTop / scrollLeft properties of an element its any of its\n ancestors has overflow set to hidden.\"\n This was reported on customer portal with the ticket SI-488573\n */\n setTimeout(function () {\n window.requestAnimationFrame(\n () => (col.millerViewWrapper.nativeElement.scrollLeft = 55000)\n );\n }, 700);\n }\n }\n\n /**\n * Change the loading state of the asset selector.\n */\n onLoad(event) {\n this.isLoading = event.loading;\n this.filterText = event.filterText;\n this.columnIndex = event.index;\n this.selectedDevice = event.selectedDevice;\n this.cd.detectChanges();\n }\n\n /**\n * Add the selected node to the selected array.\n */\n onSelectionChange(event: AssetSelectionChangeEvent): void {\n if (!this.config.multi) {\n this.deselectAll(event.change.item);\n return;\n }\n if (event.change.isSelected) {\n this.select(event.change.item);\n return;\n }\n this.deselect(event.change.item);\n }\n}\n","<div\n class=\"miller-view-wrapper {{ config.label }}\"\n [ngStyle]=\"{\n 'padding-top': selectedDevice ? '0px' : (assetSelectorHeaderHeight$ | async)\n }\"\n #millerViewWrapper\n [ngClass]=\"{\n 'single-column': config.singleColumn,\n }\"\n>\n <div\n class=\"miller-column bg-inherit\"\n *ngFor=\"let column of columns; index as i\"\n >\n <c8y-asset-selector\n class=\"bg-inherit\"\n #assetSelector\n [config]=\"config\"\n [index]=\"i\"\n [active]=\"columns[i + 1]\"\n [rootNode]=\"column\"\n [selected]=\"selected || []\"\n [selectedDevice]=\"selectedDevice\"\n (onSelected)=\"onSelectionChange($event)\"\n (onClearSelected)=\"onClearSelected.emit()\"\n (onRowSelected)=\"addNewColumn($event)\"\n (onLoad)=\"onLoad($event)\"\n [container]=\"container\"\n ></c8y-asset-selector>\n <div\n class=\"p-relative p-b-64\"\n *ngIf=\"isLoading && columnIndex === i && !selectedDevice\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"p-l-8 p-r-8\"\n *ngIf=\"!column.children.length && !isLoading\"\n >\n <c8y-ui-empty-state\n [icon]=\"'folder-open'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'The selected asset has no children.' | translate\"\n *ngIf=\"!filterText; else noSearchResults\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-template #noSearchResults>\n <c8y-ui-empty-state\n [icon]=\"'folder-open'\"\n [title]=\"'No results to display for the current filter.' | translate\"\n [subtitle]=\"'There are no assets matching the filter.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </ng-template>\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CoreModule, CommonModule, CoreSearchModule } from '@c8y/ngx-components';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { GroupNodeService } from './group-node.service';\n\nimport { AssetSelectorNodeComponent } from './asset-selector-node.component';\nimport { AssetSelectorComponent } from './asset-selector.component';\nimport { FormsModule } from '@angular/forms';\nimport { MillerViewComponent } from './miller-view.component';\nimport { AssetSelectorService } from './asset-selector.service';\n\n@NgModule({\n imports: [\n CoreModule,\n CommonModule,\n CollapseModule,\n BsDropdownModule,\n CoreSearchModule,\n FormsModule\n ],\n exports: [AssetSelectorNodeComponent, AssetSelectorComponent, MillerViewComponent],\n providers: [GroupNodeService, AssetSelectorService],\n declarations: [AssetSelectorNodeComponent, AssetSelectorComponent, MillerViewComponent]\n})\nexport class AssetSelectorModule {}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { DeviceStatusModule, hookNavigator, ModalModule, ModalService } from '@c8y/ngx-components';\nimport { AssetNavigatorConfig, ASSET_NAVIGATOR_CONFIG } from './asset-node-config.model';\nimport { AssetNodeFactory } from './asset-node.factory';\nimport { AssetNodeService } from './asset-node.service';\nimport { AssetSelectorModule } from './asset-selector/asset-selector.module';\n\n@NgModule({\n declarations: [],\n imports: [ModalModule, AssetSelectorModule, DeviceStatusModule],\n providers: [ModalService, AssetNodeService, hookNavigator(AssetNodeFactory)]\n})\nexport class AssetsNavigatorModule {\n static config(config: AssetNavigatorConfig = {}): ModuleWithProviders<AssetsNavigatorModule> {\n return {\n ngModule: AssetsNavigatorModule,\n providers: [\n {\n provide: ASSET_NAVIGATOR_CONFIG,\n useValue: config\n }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","getProp","i2.AssetSelectorService","i3","i4","i5","i1.GroupNodeService","i3.AssetSelectorService","i7.AssetSelectorNodeComponent","i6.AssetSelectorComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-assets-navigator.mjs","sources":["../../assets-navigator/action.enum.ts","../../assets-navigator/load-more-node.ts","../../assets-navigator/asset-node.ts","../../assets-navigator/dynamic-group-node.ts","../../assets-navigator/asset-node-config.model.ts","../../assets-navigator/group.service.ts","../../assets-navigator/asset-node.service.ts","../../assets-navigator/asset-node.factory.ts","../../assets-navigator/asset-selector/group-node.ts","../../assets-navigator/asset-selector/group-node.service.ts","../../assets-navigator/asset-selector/asset-selector.service.ts","../../assets-navigator/asset-selector/asset-selector-node.component.ts","../../assets-navigator/asset-selector/asset-selector-node.component.html","../../assets-navigator/asset-selector/asset-selector-base.ts","../../assets-navigator/asset-selector/asset-selector.model.ts","../../assets-navigator/asset-selector/unassigned-devices-node.ts","../../assets-navigator/asset-selector/asset-selector.component.ts","../../assets-navigator/asset-selector/asset-selector.component.html","../../assets-navigator/asset-selector/miller-view.component.ts","../../assets-navigator/asset-selector/miller-view.component.html","../../assets-navigator/asset-selector/asset-selector.module.ts","../../assets-navigator/assets-navigator.module.ts","../../assets-navigator/c8y-ngx-components-assets-navigator.ts"],"sourcesContent":["export enum AssetsNavigatorAction {\n FETCH,\n NEXT,\n REFRESH,\n LOADING_DONE\n}\n","import { NavigatorNode, gettext } from '@c8y/ngx-components';\n\nexport class LoadMoreNode extends NavigatorNode {\n static NAME = 'LoadMoreNode';\n label = gettext('Load more');\n icon = 'plus';\n droppable = true;\n\n constructor() {\n super();\n this.priority = -Infinity;\n }\n\n toString() {\n return LoadMoreNode.NAME;\n }\n\n isGroup() {\n return false;\n }\n}\n","import { IIdentified, Paging } from '@c8y/client';\nimport {\n ClickOptions,\n DeviceStatusComponent,\n gettext,\n GroupFragment,\n NavigatorNode,\n NavigatorNodeData\n} from '@c8y/ngx-components';\nimport { debounce } from 'lodash-es';\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\nimport { AssetsNavigatorAction } from './action.enum';\nimport { AssetNodeMo, AssetNodeService } from './asset-node.service';\nimport { LoadMoreNode } from './load-more-node';\n\nexport class AssetNode extends NavigatorNode {\n static NAME = 'AssetNode';\n root: boolean;\n mo: any;\n hideDevices = false;\n filterQuery$ = new BehaviorSubject<string>('');\n showChildDevices = false;\n\n /**\n * Asset node children (subentries).\n */\n children: AssetNode[] = [];\n\n get hasChildren() {\n return this.root || this.service.isGroup(this.mo);\n }\n\n get isDevice() {\n return !!this.mo.c8y_IsDevice;\n }\n\n get isDeviceOrProbablyChildDevice() {\n return this.isDevice || this.isNeitherDeviceOrGroup;\n }\n\n get isNeitherDeviceOrGroup() {\n return (\n !this.service.isGroup(this.mo) &&\n !this.service.isDynamicGroup(this.mo) &&\n !this.isDevice &&\n !this.root\n );\n }\n\n events: Subject<AssetsNavigatorAction>;\n nodesFetched: Subject<void> = new Subject();\n protected paging: Paging<AssetNodeMo>;\n protected loadMoreNode: LoadMoreNode;\n private onUpdateSubscription: Subscription;\n\n constructor(\n protected service: AssetNodeService,\n protected config: NavigatorNodeData = {}\n ) {\n super(config);\n\n this.root = this.root || false;\n this.hideDevices = config.hideDevices ?? this.hideDevices;\n this.mo = this.mo || {};\n this.path = this.getPath();\n this.draggable = !this.service?.moduleConfig?.disableDragAndDrop && !this.root;\n this.droppable =\n !this.service?.moduleConfig?.disableDragAndDrop && !this.isDeviceOrProbablyChildDevice;\n this.routerLinkExact = this.root;\n this.updateIcon(false);\n this.onUpdateSubscription = this.service\n .onUpdate(this)\n .subscribe(({ data, method }) => this.refresh(data, method));\n this.setLabel();\n this.iconComponent = this.isDeviceOrProbablyChildDevice ? DeviceStatusComponent : undefined;\n }\n\n getPath() {\n if (this.config.path) {\n return this.config.path;\n }\n\n return this.root\n ? 'group'\n : this.isDeviceOrProbablyChildDevice\n ? `device/${this.mo.id}`\n : `group/${this.mo.id}`;\n }\n\n refresh(mo: any = {}, method = 'GET') {\n if (mo?.id === this.mo.id) {\n this.mo = mo;\n this.setLabel();\n } else if (method === 'DELETE') {\n this.parents.forEach((node: AssetNode) => node.refresh());\n return;\n }\n if (this.events) {\n this.events.next(AssetsNavigatorAction.REFRESH);\n }\n }\n\n setLabel() {\n if (this.config.label || this.root) {\n this.label = this.config.label || gettext('Groups');\n this.translateLabel = true;\n } else {\n this.label = this.service.label(this.mo);\n this.translateLabel = false;\n }\n }\n\n click(options: ClickOptions = {}) {\n if (this.isDeviceOrProbablyChildDevice && !this.showChildDevices) {\n this.service.preferBreadcrumb(this.parents);\n return;\n }\n this.hookEvents();\n this.updateIcon(options.open);\n if (options.open) {\n this.events.next(AssetsNavigatorAction.FETCH);\n }\n }\n\n sort() {\n this.children.sort((a, b) => {\n if (a.priority > b.priority) {\n return -1;\n } else if (a.priority < b.priority) {\n return 1;\n } else {\n return 0;\n }\n });\n }\n\n addManagedObject(mo) {\n const { childAdditions } = this.mo;\n if (!this.isChildAddition(childAdditions, mo)) {\n this.add(this.service.createChildNode(mo, { hideDevices: this.hideDevices }));\n }\n }\n\n isChildAddition(childAdditions, mo) {\n return (\n childAdditions && childAdditions.references.some(({ managedObject: { id } }) => id === mo.id)\n );\n }\n\n destroy() {\n this.onUpdateSubscription.unsubscribe();\n }\n\n get canDrop() {\n const nodeToMove = this.service.draggedData;\n if (nodeToMove) {\n const shouldGetChildOfItsOwn = !!nodeToMove.find(child => child === this);\n const isAlreadyChild = (this.children as AssetNode[]).some(\n child => child.mo && child.mo.id === nodeToMove.mo.id\n );\n const preventMove = this === nodeToMove || shouldGetChildOfItsOwn || isAlreadyChild;\n return this.droppable && !preventMove && this.service.canDropNode(this.root);\n }\n return this.droppable;\n }\n\n dragStart($event) {\n super.dragStart($event);\n this.service.draggedData = this;\n this.service.rootNode.droppable = !this.isDeviceOrProbablyChildDevice;\n }\n\n dragEnd($event) {\n super.dragEnd($event);\n }\n\n async drop($event) {\n const nodeToMove = this.service.draggedData;\n\n // TODO remove when asset type node can be used on the root level.\n if (this.root && this.isAsset(nodeToMove)) {\n this.service.alert.info(gettext('Asset type node cannot become root node.'));\n this.draggedHover = false;\n this.service.draggedData = undefined;\n return;\n }\n\n super.drop($event);\n if (this.canDrop) {\n await this.moveNode(nodeToMove);\n } else {\n this.draggedHover = false;\n this.service.draggedData = undefined;\n }\n }\n\n hookEvents() {\n if (!this.events) {\n this.events = new Subject();\n this.events.subscribe(evt => {\n if (!this.loading) {\n this.handleEvent(evt);\n }\n });\n }\n }\n\n toString() {\n return AssetNode.NAME;\n }\n\n /**\n * Checks if the current node has child devices.\n */\n hasChildDevices() {\n return this.mo && this.mo.c8y_IsDevice && this.mo.childDevices.references.length > 0;\n }\n\n protected fetch() {\n return this.root\n ? this.service.getRootNodes()\n : this.service.getGroupItems(\n this.mo.id,\n this.hideDevices\n ? {\n query: `$filter=(has(${GroupFragment.groupFragmentType}))$orderby=name`\n }\n : {}\n );\n }\n\n protected async updateIcon(open) {\n this.icon = await this.service.icon(\n // if it's root we are going to pass a fake mo to get the same icon as groups\n this.root ? { c8y_IsDeviceGroup: {} } : this.mo,\n open\n );\n }\n\n protected countChildren() {\n return this.children.length;\n }\n\n protected async handleEvent(evt: AssetsNavigatorAction) {\n if (!this.countChildren() && evt === AssetsNavigatorAction.FETCH) {\n this.loading = true;\n this.addNodes(await this.fetch());\n this.loading = false;\n } else if (evt === AssetsNavigatorAction.NEXT) {\n this.loadMoreNode.loading = true;\n this.addNodes(await this.paging.next());\n this.loadMoreNode.loading = false;\n } else if (evt === AssetsNavigatorAction.REFRESH) {\n this.loading = false;\n this.paging = undefined;\n this.loadMoreNode = undefined;\n this.empty();\n this.events.next(AssetsNavigatorAction.FETCH);\n }\n }\n\n protected addNodes(res) {\n if (res.paging) {\n const { currentPage, nextPage, pageSize } = (this.paging = res.paging);\n if (currentPage === 1) {\n this.empty();\n }\n const itemsCount = res.data.length;\n const moreItemsAvailable = !!nextPage && itemsCount === pageSize;\n this.toggleLoadMore(moreItemsAvailable);\n }\n (res.data || res).map(mo => {\n return this.addManagedObject(mo);\n });\n this.events.next(AssetsNavigatorAction.LOADING_DONE);\n this.nodesFetched.next();\n }\n\n protected toggleLoadMore(show: boolean) {\n if (!this.loadMoreNode && show) {\n this.loadMoreNode = new LoadMoreNode();\n this.add(this.loadMoreNode);\n this.loadMoreNode.click = debounce(() => this.events.next(AssetsNavigatorAction.NEXT), 300, {\n leading: true,\n trailing: false\n });\n }\n\n if (this.loadMoreNode) {\n this.loadMoreNode.hidden = !show;\n }\n }\n\n private async moveNode(nodeToMove: AssetNode) {\n try {\n const isCopy = await this.showDropConfirm(nodeToMove);\n await this.verifyNodeAccess(nodeToMove);\n await this.addMovedNode(nodeToMove);\n if (!isCopy) {\n await this.removeMovedNode(nodeToMove);\n }\n this.expand();\n } catch (ex) {\n if (ex) {\n this.service.alert.addServerFailure(ex);\n }\n } finally {\n this.draggedHover = false;\n this.service.draggedData = undefined;\n }\n }\n\n private async showDropConfirm(nodeToMove: AssetNode) {\n this.confirm.title = gettext('Move');\n this.confirm.message = gettext('Do you want to move the group?');\n const buttons: any = [\n {\n label: gettext('Cancel'),\n action: () => Promise.reject()\n },\n {\n label: gettext('Move'),\n status: 'default',\n action: () => Promise.resolve(false)\n }\n ];\n if (nodeToMove.isDeviceOrProbablyChildDevice) {\n this.confirm.title = gettext('Move or add');\n this.confirm.message = gettext('Do you want to move or add the device?');\n buttons.push({\n label: gettext('Add'),\n status: 'primary',\n action: () => Promise.resolve(true)\n });\n }\n return this.confirm.show(buttons);\n }\n\n private async verifyNodeAccess(nodeToMove: AssetNode) {\n return this.service.inventory.update({ id: nodeToMove.mo.id });\n }\n\n private async addMovedNode(nodeToMove: AssetNode) {\n let mo: IIdentified;\n\n if (this.root && !this.isAsset(nodeToMove)) {\n mo = (\n await this.service.inventory.update({\n id: nodeToMove.mo.id,\n type: GroupFragment.groupType\n })\n ).data;\n\n this.addManagedObject(mo);\n return;\n }\n\n mo = (await this.service.inventory.childAssetsAdd(nodeToMove.mo, this.mo)).data;\n this.addManagedObject(mo);\n }\n\n private isAsset(nodeToMove: AssetNode) {\n // TODO use isAsset check when https://github.com/Cumulocity-IoT/cumulocity-ui/pull/690 is merged.\n // Do not override asset type!\n return nodeToMove.mo?.c8y_IsAsset;\n }\n\n private async removeMovedNode(nodeToMove: AssetNode) {\n for (const parent of nodeToMove.parents as AssetNode[]) {\n if (parent.mo && parent.mo.type === GroupFragment.dynamicGroupType) {\n break; // smart groups don't need to be changed\n }\n\n if (parent.root && !this.isAsset(nodeToMove)) {\n await this.service.inventory.update({\n id: nodeToMove.mo.id,\n type: GroupFragment.subGroupType\n });\n }\n\n if (!parent.root) {\n await this.service.inventory.childAssetsRemove(nodeToMove.mo, parent.mo);\n }\n parent.remove(nodeToMove);\n }\n }\n}\n","import { AssetNode } from './asset-node';\nimport { AssetNodeService } from './asset-node.service';\n\nexport class DynamicGroupNode extends AssetNode {\n constructor(protected service: AssetNodeService, config = {}) {\n super(service, config);\n this.draggable = false;\n this.droppable = false;\n }\n\n get hasChildren() {\n return true;\n }\n\n get query() {\n return this.mo.c8y_DeviceQueryString;\n }\n\n protected fetch(): any {\n return this.service.getDynamicGroupItems(this.query);\n }\n}\n","import { InjectionToken } from '@angular/core';\r\nimport { NavigatorNode } from '@c8y/ngx-components';\r\nimport { AssetNode } from './asset-node';\r\nexport const ASSET_NAVIGATOR_CONFIG = new InjectionToken<AssetNavigatorConfig>('AssetNodeConfig');\r\n\r\n/**\r\n * Configuration object of the AssetsNavigatorModule.\r\n */\r\nexport interface AssetNavigatorConfig {\r\n /**\r\n * Allows to enable smart groups in the module.\r\n * Default value: false.\r\n */\r\n smartGroups?: boolean;\r\n /**\r\n * Expands the root navigator node when the navigator is initialized.\r\n * Default value: false\r\n */\r\n openOnStart?: boolean;\r\n /**\r\n * Allows to change the position of the root group in the navigator.\r\n * The higher the value, the higher the position in navigation.\r\n * Default value: 2000.\r\n */\r\n rootNodePriority?: number;\r\n /**\r\n * Allows to drag and drop items in the asset navigator.\r\n * Default value: true.\r\n */\r\n disableDragAndDrop?: boolean;\r\n /**\r\n * Allows to override properies of the root group or hide it.\r\n * Setup examples:\r\n * - `rootNavigatorNode: true` - shows the default navigator node (default),\r\n * - `rootNavigatorNode: false` - hides the navigator node,\r\n * - `rootNavigatorNode: { label: 'New name', ... }` - overrides default navigator node,\r\n * - `rootNavigatorNode: new NavigatorNode({ label: 'New name', ... })` - overrides default navigator node,\r\n */\r\n rootNavigatorNode?: boolean | Partial<NavigatorNode | AssetNode>;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { GroupService as MigratedDeviceGroupService } from '@c8y/ngx-components';\n\n@Injectable({\n providedIn: 'root'\n})\n\n/**\n * @deprecated\n * Original service was moved to core/common.\n * This service is deprecated and serves as a proxy to maintain backward compatibility.\n */\nexport class DeviceGroupService {\n constructor(private migratedDeviceGroupService: MigratedDeviceGroupService) {}\n\n icon(mo: IManagedObject, open = false): Promise<string> {\n return this.migratedDeviceGroupService.getIcon(mo, open);\n }\n\n isGroup(mo: IManagedObject): boolean {\n return this.migratedDeviceGroupService.isGroup(mo);\n }\n\n isDynamicGroup(mo: IManagedObject): boolean {\n return this.migratedDeviceGroupService.isDynamicGroup(mo);\n }\n\n isDataBroker(mo: IManagedObject): boolean {\n return this.migratedDeviceGroupService.isDataBroker(mo);\n }\n\n isDataBrokerActive(mo: IManagedObject) {\n return this.migratedDeviceGroupService.isDataBrokerActive(mo);\n }\n\n isAsset(mo: IManagedObject) {\n return this.migratedDeviceGroupService.isAsset(mo);\n }\n\n isAnyGroup(mo: IManagedObject) {\n return this.migratedDeviceGroupService.isAnyGroup(mo);\n }\n\n isDevice(mo: IManagedObject) {\n return this.migratedDeviceGroupService.isDevice(mo);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, ActivationEnd, Router } from '@angular/router';\nimport { IManagedObject, IResult, InventoryService, QueriesUtil, UserService } from '@c8y/client';\nimport {\n AlertService,\n AppStateService,\n BreadcrumbService,\n GroupFragment,\n ModalService,\n NavigatorNode,\n NavigatorNodeData,\n OptionsService,\n ViewContext,\n Permissions,\n gettext\n} from '@c8y/ngx-components';\nimport { ApiService } from '@c8y/ngx-components/api';\nimport { empty } from 'rxjs';\nimport { filter, first, mergeMap } from 'rxjs/operators';\nimport { AssetsNavigatorAction } from './action.enum';\nimport { AssetNode } from './asset-node';\nimport { ASSET_NAVIGATOR_CONFIG, AssetNavigatorConfig } from './asset-node-config.model';\nimport { DynamicGroupNode } from './dynamic-group-node';\nimport { DeviceGroupService } from './group.service';\nimport { TranslateService } from '@ngx-translate/core';\n\nexport interface AssetNodeMo {\n id: string;\n type: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AssetNodeService {\n rootNode: AssetNode;\n firstUrl = true;\n draggedData: AssetNode;\n queriesUtil: QueriesUtil;\n protected PAGE_SIZE = 20;\n\n inventory = inject(InventoryService);\n apiService = inject(ApiService);\n modal = inject(ModalService);\n alert = inject(AlertService);\n translateService = inject(TranslateService);\n\n protected breadcrumbService = inject(BreadcrumbService);\n protected user = inject(UserService);\n protected appState = inject(AppStateService);\n protected optionsService = inject(OptionsService);\n moduleConfig: AssetNavigatorConfig;\n protected deviceGroupService = inject(DeviceGroupService);\n protected router = inject(Router);\n\n constructor() {\n this.moduleConfig = {\n rootNodePriority: 2000,\n ...(inject(ASSET_NAVIGATOR_CONFIG, { optional: true }) || {})\n };\n this.queriesUtil = new QueriesUtil();\n\n this.router.events\n .pipe(\n filter(\n (event: ActivationEnd) =>\n event instanceof ActivationEnd && event.snapshot.data?.contextData\n ),\n first()\n )\n .subscribe(({ snapshot }) => {\n this.expandNodesOnStart(snapshot);\n });\n }\n\n /**\n * Expands the navigator nodes on first navigation.\n * @param snapshot The current navigation snapshot.\n */\n async expandNodesOnStart(snapshot: ActivatedRouteSnapshot): Promise<void> {\n if (!this.rootNode) {\n return;\n }\n if (\n snapshot.data?.context === ViewContext.Group ||\n snapshot.data?.context === ViewContext.Device\n ) {\n const { data } = await this.inventory.detail(snapshot.data.contextData, {\n withParents: true\n });\n\n const allManagedObjectParentIds = [\n ...data.assetParents.references.map(({ managedObject }) => {\n return managedObject.id;\n }),\n data.id\n ];\n this.expandAll(this.rootNode, allManagedObjectParentIds);\n return;\n }\n\n if (this.moduleConfig.openOnStart) {\n this.expandAll(this.rootNode, []);\n }\n }\n\n /**\n * Expands all the given ids recursively. Stops if it does not find any.\n * @param node The node where the expanding should be started\n * @param ids The ids that should be expanded.\n */\n expandAll(node: AssetNode, ids: string[]) {\n node.open = true;\n node.click({ open: true });\n if (node.events) {\n node.events\n .pipe(\n filter(action => action === AssetsNavigatorAction.LOADING_DONE),\n first()\n )\n .subscribe(() => {\n const nodeToExpand = node.children.find(\n childNode => childNode.mo?.id && ids.includes(childNode.mo.id)\n );\n if (nodeToExpand) {\n this.expandAll(\n nodeToExpand,\n ids.filter(id => id !== nodeToExpand.mo.id)\n );\n }\n });\n }\n }\n\n label(mo: IManagedObject): string {\n return (\n mo.name ||\n (this.isDevice(mo) &&\n this.translateService.instant(gettext('Device {{id}}'), { id: mo.id })) ||\n '--'\n );\n }\n\n icon(mo: IManagedObject, open?: boolean): Promise<string> {\n return this.deviceGroupService.icon(mo, open);\n }\n\n isGroup(mo: IManagedObject) {\n return this.deviceGroupService.isGroup(mo);\n }\n\n isDynamicGroup(mo: IManagedObject) {\n return this.deviceGroupService.isDynamicGroup(mo);\n }\n\n isDataBroker(mo: IManagedObject) {\n return this.deviceGroupService.isDataBroker(mo);\n }\n\n isDataBrokerActive(mo: IManagedObject) {\n return this.deviceGroupService.isDataBrokerActive(mo);\n }\n\n isAsset(mo: IManagedObject) {\n return this.deviceGroupService.isAsset(mo);\n }\n\n isAnyGroup(mo: IManagedObject) {\n return this.deviceGroupService.isAnyGroup(mo);\n }\n\n isDevice(mo: IManagedObject) {\n return this.deviceGroupService.isDevice(mo);\n }\n\n createRootNode(config: NavigatorNodeData = {}) {\n this.rootNode = this.createAssetNode({\n root: true,\n ...config,\n priority: this.moduleConfig.rootNodePriority,\n featureId: 'groups'\n });\n return this.rootNode;\n }\n\n createDynamicGroupNode(config) {\n return new DynamicGroupNode(this, config);\n }\n\n createAssetNode(config: Partial<AssetNode>) {\n return new AssetNode(this, config);\n }\n\n createChildNode(managedObject, config: Partial<AssetNode>) {\n const { type } = managedObject;\n config.mo = managedObject;\n if (type === GroupFragment.dynamicGroupType) {\n return this.createDynamicGroupNode(config);\n }\n return this.createAssetNode(config);\n }\n\n getRootNodes(customFilter?: any): Promise<any> {\n const defaultFilter = {\n pageSize: this.PAGE_SIZE,\n withChildren: false,\n onlyRoots: !this.optionsService.disableOnlyRootsQuery,\n query: this.queriesUtil.buildQuery(this.navRootQueryFilter())\n };\n const groupFilter = { ...defaultFilter, ...customFilter };\n\n // due to BE performance limitations we do not allow filtering and sorting for a user without inventory roles\n if (\n this.appState?.currentUser?.value &&\n !this.user.hasAnyRole(this.appState.currentUser.value, [\n Permissions.ROLE_INVENTORY_READ,\n Permissions.ROLE_MANAGED_OBJECT_READ\n ])\n ) {\n delete groupFilter.query;\n Object.assign(groupFilter, {\n fragmentType: GroupFragment.groupFragmentType,\n onlyRoots: true\n });\n }\n return this.inventory.list(this.createFilter(groupFilter));\n }\n\n getAllInventories(customFilter?: any): Promise<any> {\n const defaultFilter = {\n pageSize: this.PAGE_SIZE,\n withChildren: false\n };\n const groupFilter = { ...defaultFilter, ...customFilter };\n return this.inventory.list(this.createFilter(groupFilter));\n }\n\n getGroupItems(moId: string, extraFilter: object = {}, withChildren = false, filterQuery = '') {\n const queryFilter = {\n withChildren,\n pageSize: this.PAGE_SIZE,\n query: this.groupQueryFilter(moId, filterQuery)\n };\n return this.inventory.childAssetsList(moId, { ...queryFilter, ...extraFilter });\n }\n\n getUnassignedDevices(withChildren = false, filterQuery = '') {\n const queryFilter: any = {\n fragmentType: 'c8y_IsDevice',\n onlyRoots: true,\n withChildren,\n pageSize: this.PAGE_SIZE,\n q: this.getUnassignedDevicesQueryStr(filterQuery)\n };\n return this.inventory.list(this.createFilter(queryFilter));\n }\n\n getDynamicGroupItems(groupQuery: string, filterObj: any = {}) {\n const { query, ...queryParams } = filterObj;\n const orderByQuery = query;\n const queryFilter = {\n q: this.buildCombinedQuery(groupQuery, orderByQuery),\n ...queryParams\n };\n return this.inventory.list(this.createFilter(queryFilter));\n }\n\n getDeviceChildren(\n moId: string,\n extraFilter: object = {},\n filterQuery = '',\n withChildren = false\n ) {\n const queryFilter = {\n withChildren,\n pageSize: this.PAGE_SIZE,\n query: this.groupQueryFilter(moId, filterQuery)\n };\n return this.inventory.childDevicesList(moId, { ...queryFilter, ...extraFilter });\n }\n\n getUnassignedDevicesQueryStr(filterQuery): string {\n const hasGroupId = filterQuery.includes('bygroupid');\n // Fetch all unassigned devices.\n const defaultQueryStr = '$orderby=name';\n\n // filterQuery is a custom query to fetch unassigned devices filtered by name.\n return hasGroupId || !filterQuery ? defaultQueryStr : filterQuery;\n }\n\n groupQueryFilter(moId: string, filterQuery?: string) {\n if (!filterQuery) {\n return `$filter=(bygroupid(${moId}))$orderby=name`;\n }\n return filterQuery;\n }\n\n navRootQueryFilter() {\n const navRootFilter = this.rootQueryFilter();\n navRootFilter.__orderby = [{ name: 1 }];\n return navRootFilter;\n }\n\n rootQueryFilter() {\n const { moduleConfig } = this;\n const rootFilter = this.optionsService.disableOnlyRootsQuery\n ? {\n __filter: {\n type: GroupFragment.groupType\n },\n __orderby: []\n }\n : {\n __filter: {\n __has: GroupFragment.groupFragmentType\n },\n __orderby: []\n };\n if (moduleConfig.smartGroups) {\n const queryFilter = {\n __filter: {\n __and: [\n {\n type: GroupFragment.dynamicGroupType\n },\n {\n __has: GroupFragment.dynamicGroupFragment\n },\n { __not: { __has: `${GroupFragment.dynamicGroupFragment}.invisible` } }\n ]\n }\n };\n this.queriesUtil.addOrFilter(rootFilter, queryFilter);\n }\n return rootFilter;\n }\n\n onUpdate({ mo, root }) {\n if (mo.id) {\n return this.apiService\n .hookResponse(\n ({ url, method }) =>\n ['PUT', 'DELETE', 'POST'].includes(method) &&\n RegExp(`inventory/managedObjects/${mo.id}`).test(url)\n )\n .pipe(\n filter(() => !this.draggedData),\n this.apiService.excludePermissionCall(),\n mergeMap(this.apiService.resolveData<IManagedObject>),\n filter(response => !response?.data?.c8y_Dashboard)\n );\n } else if (root) {\n return this.apiService\n .hookResponse(\n ({ url, method }) => RegExp('inventory/managedObjects/?$').test(url) && method === 'POST'\n )\n .pipe(\n mergeMap(this.apiService.resolveData<IManagedObject>),\n filter(response => this.isNewManagedObjectRoot(response))\n );\n } else {\n return empty();\n }\n }\n\n isNewManagedObjectRoot(response: Partial<IResult<IManagedObject>> = {}) {\n const { data } = response;\n let isRootAsset = false;\n\n if (typeof data === 'object') {\n isRootAsset = !!data[GroupFragment.groupFragmentType];\n if (!isRootAsset && this.moduleConfig.smartGroups) {\n isRootAsset = !!data[GroupFragment.dynamicGroupFragment];\n }\n }\n return isRootAsset;\n }\n\n /**\n * Check if it is possible to drop a node after dragging.\n * @param dropOnRoot Is the drop performed on the root node\n */\n canDropNode(dropOnRoot: boolean): boolean {\n return (\n !dropOnRoot ||\n this.user.hasAnyRole(this.appState.currentUser.value, [\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN\n ])\n );\n }\n\n /**\n * There could be multiple breadcrumbs for devices,\n * so we set a preferred one on click on a device.\n * @param parents The parent nodes of the device to select the prefered one.\n */\n preferBreadcrumb(parents: NavigatorNode[]) {\n if (parents.length === 1) {\n this.breadcrumbService.selectPreferredByPath(parents[0].path);\n }\n }\n\n protected createFilter(extraParams: any = {}) {\n const params = {\n currentPage: 1,\n withTotalPages: true,\n pageSize: 10\n };\n return { ...params, ...extraParams };\n }\n\n private buildCombinedQuery(queryA, queryB) {\n let combinedQuery;\n if (queryA && queryB) {\n const filterQuery = this.queriesUtil.buildQuery([\n {\n __useFilterQueryString: queryA\n },\n {\n __useFilterQueryString: queryB\n }\n ]);\n const orberByQuery = this.queriesUtil.extractAndMergeOrderBys([queryA, queryB]);\n combinedQuery = `${filterQuery} ${orberByQuery}`;\n } else {\n combinedQuery = queryA || queryB || '';\n }\n return combinedQuery;\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { get as getProp } from 'lodash-es';\nimport { AssetNode } from './asset-node';\nimport { AssetNavigatorConfig, ASSET_NAVIGATOR_CONFIG } from './asset-node-config.model';\nimport { AssetNodeService } from './asset-node.service';\n\n@Injectable()\nexport class AssetNodeFactory {\n constructor(\n private service: AssetNodeService,\n @Optional() @Inject(ASSET_NAVIGATOR_CONFIG) public moduleConfig: AssetNavigatorConfig\n ) {}\n\n get(): AssetNode {\n const rootNavigatorNode = getProp(this.moduleConfig, 'rootNavigatorNode') ?? true;\n let { rootNode } = this.service;\n\n if (rootNavigatorNode === false) {\n return;\n }\n\n if (!rootNode) {\n rootNode = this.service.createRootNode(rootNavigatorNode === true ? {} : rootNavigatorNode);\n }\n return rootNode;\n }\n}\n","import { GroupFragment } from '@c8y/ngx-components';\nimport { GroupNodeService } from './group-node.service';\nimport { AssetNode } from '../asset-node';\nimport { GroupNodeConfig } from './asset-selector.model';\n\nexport class GroupNode extends AssetNode {\n static NAME = 'GroupNode';\n\n /**\n * Set this true, if only groups should be shown.\n */\n groupsOnly = false;\n\n /**\n * Set this true, if it groups are also selectable.\n */\n groupsSelectable = false;\n /**\n * Devices with children can be selected to show their child devices.\n */\n showChildDevices = false;\n\n /**\n * Group node children (subentries).\n */\n children: GroupNode[] = [];\n\n /**\n * Creates a new node which shows only groups.\n *\n * @param service The service to use.\n * @param config The default configuration of the node.\n * @param groupsOnly Set this true, if only groups should be shown.\n * @param selectable Set this true, if it is selectable.\n */\n\n constructor(protected service: GroupNodeService, config: GroupNodeConfig = {}) {\n super(service, config);\n this.groupsOnly = config.groupsOnly || false;\n this.groupsSelectable = config.groupsSelectable || false;\n this.showChildDevices = config.showChildDevices || false;\n }\n\n /**\n * Adds the MO as a child node.\n * @param mo ManagedObject\n */\n addManagedObject(mo) {\n const { childAdditions } = this.mo;\n if (!this.isChildAddition(childAdditions, mo)) {\n this.add(\n this.service.createChildNode({\n mo,\n groupsOnly: this.groupsOnly,\n groupsSelectable: this.groupsSelectable,\n showChildDevices: this.showChildDevices\n })\n );\n }\n }\n\n /**\n * Counts the number of children for the current node (with the exception of the UnassignedDevicesNode).\n */\n countChildren(): number {\n return this.children.filter(value => value.toString() !== 'UnassignedDevicesNode').length;\n }\n\n /**\n * Removes all child nodes except the UnassignedDevicesNode.\n */\n empty() {\n this.children = this.children.filter(value => value.toString() === 'UnassignedDevicesNode');\n }\n\n fetch() {\n const isRoot = this.root;\n const isDevice = this.mo.c8y_IsDevice;\n return isRoot\n ? this.service.getRootNodes()\n : isDevice\n ? this.service.getDeviceChildren(\n this.mo.id,\n {},\n this.filterQuery$.value,\n this.showChildDevices\n )\n : this.service.getGroupItems(\n this.mo.id,\n this.groupsOnly\n ? {\n query: `$filter=(has(${GroupFragment.groupFragmentType}))`\n }\n : {},\n this.showChildDevices,\n this.filterQuery$.value\n );\n }\n\n toString() {\n return GroupNode.NAME;\n }\n\n isGroup() {\n return this.mo && this.service.isGroup(this.mo);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AssetNodeService } from '../asset-node.service';\nimport { GroupNodeConfig } from './asset-selector.model';\nimport { GroupNode } from './group-node';\n\n@Injectable({ providedIn: 'root' })\nexport class GroupNodeService extends AssetNodeService {\n protected PAGE_SIZE = 5;\n\n createGroupNode(config: GroupNodeConfig) {\n return new GroupNode(this, config);\n }\n\n createChildNode(config: GroupNodeConfig): GroupNode {\n return this.createGroupNode(config);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { IIdentified, IManagedObject } from '@c8y/client';\nimport { AssetNodeService } from '../asset-node.service';\nimport { isArray, isNumber, isObject, isString } from 'lodash';\nimport { GroupNode } from './group-node';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AssetSelectorService extends AssetNodeService {\n /**\n * Function which will check if the node is selectable.\n */\n private isNodeSelectableFn: boolean | ((node: GroupNode) => boolean) = true;\n\n /**\n * Sets the function that will decide if the node is selectable.\n * @param fn A boolean or a function that will decide if the node is selectable.\n */\n setIsNodeSelectable(fn: boolean | ((node: GroupNode) => boolean)): void {\n this.isNodeSelectableFn = fn;\n }\n\n /**\n * Checks if the node is selectable.\n * @param node The node to check.\n */\n isNodeSelectable(node: GroupNode): boolean {\n if (typeof this.isNodeSelectableFn === 'boolean') {\n return this.isNodeSelectableFn;\n } else if (typeof this.isNodeSelectableFn === 'function') {\n return this.isNodeSelectableFn(node);\n }\n return true;\n }\n /**\n * Simplifies the object model based on the selected mode.\n * @param obj The selected asset.\n * @param mode The mode which will decide what type of model will be returned.\n */\n normalizeValue(\n obj: Partial<IManagedObject>,\n modelMode: 'simple' | 'full'\n ): Partial<IManagedObject> | IIdentified {\n return this.simplifyModel(this.normalizeModelValue(obj), modelMode);\n }\n\n simplifyModel(\n model: Partial<IManagedObject> | IIdentified[],\n mode: 'simple' | 'full'\n ): Partial<IManagedObject> | IIdentified {\n const mapModel = model => {\n const { id, name, c8y_DeviceQueryString } = model as IIdentified;\n return { id, name, ...(c8y_DeviceQueryString ? { c8y_DeviceQueryString } : {}) };\n };\n\n if (mode === 'full') {\n return model;\n }\n if (!isArray(model)) {\n return mapModel(model);\n }\n return model.map(mapModel);\n }\n\n /**\n * Returns the index of the currently selected item.\n * @param selected All selected items\n * @param selectedMo The new selected item-\n * @returns An index, or -1 if not found.\n */\n getIndexOfSelected(\n selected: Array<Partial<IIdentified>> | Partial<IIdentified>,\n selectedMo: IIdentified\n ) {\n return selected.findIndex(mo => mo.id === selectedMo.id);\n }\n\n private normalizeModelValue(value: any): IIdentified[] {\n if (isNumber(value) || isString(value)) {\n return [{ id: value }];\n }\n if (isArray(value)) {\n return value;\n }\n if (isObject(value)) {\n return [value];\n }\n return [];\n }\n}\n","import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IIdentified, IManagedObject } from '@c8y/client';\nimport {\n gettext,\n IconDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { AssetsNavigatorAction } from '../action.enum';\nimport { AssetSelectorService } from './asset-selector.service';\nimport { GroupNode } from './group-node';\nimport { NgIf, NgStyle, NgClass, NgFor } from '@angular/common';\nimport { CollapseDirective } from 'ngx-bootstrap/collapse';\n\n@Component({\n selector: 'c8y-asset-selector-node',\n templateUrl: './asset-selector-node.component.html',\n imports: [\n NgIf,\n NgStyle,\n NgClass,\n IconDirective,\n C8yTranslateDirective,\n CollapseDirective,\n NgFor,\n C8yTranslatePipe\n ]\n})\nexport class AssetSelectorNodeComponent implements OnInit {\n /**\n * The current node.\n */\n @Input() node: GroupNode;\n /**\n * Root node. Node found at the top of the hierarchy.\n */\n @Input() rootNode: GroupNode;\n /**\n * All preselected items.\n */\n @Input() preselected: IIdentified | IIdentified[] = [];\n /**\n * Should the path be shown.\n */\n @Input() showPath = false;\n /**\n * Can the user select multiple assets.\n */\n @Input() multi = false;\n /**\n * The current path to the node.\n */\n @Input() view: 'tree' | 'miller' = 'tree';\n /**\n * Used only for miller-view, displays the column level for the current node.\n * E.g if the index is one, this will be second column.\n */\n @Input() index;\n /**\n * Sets the active node.\n */\n @Input() active: GroupNode;\n /**\n * A function that should verify the need to add a column when a node is clicked.\n */\n @Input() handleNextMillerViewColumn: (node: GroupNode, index: number) => boolean;\n\n @Input() disabled = false;\n /**\n * Event, which indicates whether the loading of the node has completed.\n */\n @Output() isLoadingState: EventEmitter<boolean> = new EventEmitter();\n /**\n * Event that emits when a node is selected.\n */\n @Output() onSelect: EventEmitter<IManagedObject> = new EventEmitter();\n /**\n * Event that emits when a node is deselected.\n */\n @Output() onDeselect: EventEmitter<{ deselectMode: 'single' | 'all'; mo: IManagedObject }> =\n new EventEmitter();\n\n breadcrumb: string;\n /**\n * @ignore\n */\n level = 0;\n /**\n * @ignore\n */\n unsubscribe$ = new Subject<void>();\n isNodeSelectable = true;\n\n /** sets the `btn-pending` class in the load more button */\n isLoading = false;\n /**\n * @ignore\n */\n get expandTitle() {\n return !this.node.open ? gettext('Expand') : gettext('Collapse');\n }\n\n /**\n * @ignore only di\n */\n constructor(\n private translateService: TranslateService,\n private cd: ChangeDetectorRef,\n public assetSelectorService: AssetSelectorService\n ) {}\n\n /**\n * @ignore\n */\n async ngOnInit() {\n this.isNodeSelectable = this.assetSelectorService.isNodeSelectable(this.node);\n this.breadcrumb = this.node.label;\n this.setupBreadcrumbsAndLevel(this.node);\n\n if (this.node instanceof GroupNode) {\n this.node.hookEvents();\n }\n\n // open on startup\n if (this.node.root) {\n this.click();\n }\n\n // used for loading and to trigger change detection when the node is no longer loading.\n if (this.node.events) {\n this.node.events\n .pipe(\n takeUntil(this.unsubscribe$),\n filter((a: AssetsNavigatorAction) => a === AssetsNavigatorAction.LOADING_DONE)\n )\n .subscribe(() => {\n this.isLoadingState.emit(false);\n this.cd.markForCheck();\n });\n }\n }\n\n /**\n * Opens a node.\n */\n click() {\n this.node.open = !this.node.open;\n this.node.click({ open: this.node.open });\n }\n\n setupBreadcrumbsAndLevel(node: GroupNode) {\n if (node.parents && node.parents.length) {\n const parent = node.parents[0] as GroupNode;\n this.breadcrumb =\n this.translateService.instant(parent.label) +\n ' > ' +\n this.translateService.instant(this.breadcrumb);\n this.level++;\n\n this.setupBreadcrumbsAndLevel(parent);\n }\n }\n\n /**\n * Selects the node and emits a change on the parent component.\n * @param node The node to select.\n */\n selected(node: GroupNode) {\n if (node.mo) {\n this.updateSelection(node.mo);\n return;\n }\n this.click();\n }\n\n /**\n * Handles clicks on a item in Miller View.\n * @param node The node that was clicked.\n */\n millerViewClick(node: GroupNode) {\n node.breadcrumb = this.breadcrumb;\n\n if (!this.handleNextMillerViewColumn) {\n return;\n }\n const shouldHandleDefault = this.handleNextMillerViewColumn(node, this.index);\n if (shouldHandleDefault) {\n this.selected(node);\n }\n }\n\n /**\n * @ignore\n */\n ngOnDestroy(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n isSelected() {\n if (!this.node.mo) {\n return false;\n }\n return this.assetSelectorService.getIndexOfSelected(this.preselected, this.node.mo) > -1;\n }\n\n isActive() {\n if (this.active && this.node.mo) {\n return this.active.mo?.id === this.node.mo.id;\n }\n return false;\n }\n\n private updateSelection(selectedMo: IManagedObject) {\n if (!this.multi) {\n this.onDeselect.emit({ deselectMode: 'all', mo: selectedMo });\n return;\n }\n if (this.isSelected()) {\n this.onDeselect.emit({ deselectMode: 'single', mo: selectedMo });\n return;\n }\n this.onSelect.emit(selectedMo);\n this.cd.markForCheck();\n }\n}\n","<!-- Hierarchy tree -->\n<div\n class=\"c8y-asset-selector__item\"\n [ngStyle]=\"{\n 'margin-left': level > 1 ? 16 + 'px' : '0'\n }\"\n *ngIf=\"view === 'tree'\"\n [attr.role]=\"view === 'tree' ? 'tree' : 'list'\"\n [ngClass]=\"{\n 'c8y-asset-selector__item--more': node?.icon === 'plus',\n 'c8y-asset-selector__item--start': level === 0\n }\"\n>\n <div\n class=\"c8y-asset-selector__node\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n [ngClass]=\"{ 'c8y-asset-selector__node--open': node?.open }\"\n >\n <!-- expand button -->\n <div class=\"c8y-asset-selector__node__btn-spacer\">\n <button\n class=\"collapse-btn btn-dot\"\n [title]=\"expandTitle | translate\"\n [attr.aria-expanded]=\"node.open\"\n (click)=\"click()\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </button>\n </div>\n <div\n class=\"d-flex a-i-center p-t-4 p-b-4\"\n *ngIf=\"node.toString() !== 'LoadMoreNode' && isNodeSelectable\"\n >\n <label [ngClass]=\"{ 'c8y-checkbox': multi, 'c8y-radio': !multi }\">\n <input\n id=\"nodeLabel\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <!-- group button -->\n <button\n class=\"c8y-asset-selector__btn text-truncate\"\n [attr.aria-expanded]=\"!node.open\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n (click)=\"click()\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate\"\n *ngIf=\"showPath\"\n >\n <small\n class=\"text-muted\"\n title=\"{{ breadcrumb }}\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- not a group button -->\n <button\n class=\"flex-grow\"\n title=\"{{ breadcrumb }}\"\n type=\"button\"\n *ngIf=\"!node.isGroup() && !node.hasChildDevices()\"\n [ngClass]=\"{\n 'btn btn-default btn-sm m-b-8 m-r-8 d-flex j-c-center': node.icon === 'plus',\n 'c8y-asset-selector__btn text-truncate': node.icon != 'plus'\n }\"\n (click)=\"selected(node)\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16 ': node.icon != 'plus' }\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate text-muted small\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </p>\n <!-- up to here -->\n </span>\n </button>\n </div>\n <div\n class=\"collapse\"\n *ngIf=\"node.countChildren()\"\n [collapse]=\"!node.open\"\n [isAnimated]=\"true\"\n [attr.role]=\"'group'\"\n >\n <c8y-asset-selector-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [preselected]=\"preselected || []\"\n [disabled]=\"disabled\"\n [multi]=\"multi\"\n [active]=\"active\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n\n<!-- Miller columns -->\n<div *ngIf=\"view === 'miller'\">\n <div\n class=\"miller-column__item bg-inherit\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden && node !== rootNode\"\n [ngClass]=\"{\n active: isActive(),\n 'miller-column__item--more': node.toString() === 'LoadMoreNode'\n }\"\n >\n <div\n class=\"m-l-4 m-r-4 miller-column__item__checkbox\"\n *ngIf=\"node.toString() !== 'LoadMoreNode'\"\n >\n <label [ngClass]=\"{ 'c8y-radio': !multi, 'c8y-checkbox': multi }\">\n <input\n id=\"nodeLabel2\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel2\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <button\n title=\"{{ breadcrumb | translate }}\"\n type=\"button\"\n [ngClass]=\"{\n 'btn btn-default btn-sm d-flex flex-grow j-c-center m-l-16 m-r-16 m-b-4 m-t-4':\n node.toString() === 'LoadMoreNode',\n 'miller-column__item__btn': node.toString() !== 'LoadMoreNode',\n 'btn-pending': node.loading && node.toString() === 'LoadMoreNode'\n }\"\n (click)=\"millerViewClick(node)\"\n >\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16': node.toString() !== 'LoadMoreNode' }\"\n ></i>\n <div class=\"text-left text-truncate\">\n <p\n class=\"text-truncate\"\n title=\"{{ node.translateLabel ? (node.label | translate) : node.label }}\"\n >\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n </p>\n <!-- use just for search results to display the path -->\n <small\n class=\"text-muted text-truncate\"\n title=\"{{ breadcrumb }}\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n <!-- up to here -->\n </div>\n <span\n class=\"p-l-4 m-l-auto\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </span>\n </button>\n </div>\n\n <div\n role=\"list\"\n *ngIf=\"node\"\n [ngClass]=\"{ hidden: node !== rootNode }\"\n >\n <c8y-asset-selector-node\n role=\"listitem\"\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"preselected || []\"\n [multi]=\"multi\"\n [view]=\"view\"\n [index]=\"index\"\n [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n","import { EventEmitter } from '@angular/core';\nimport { IIdentified, IManagedObject, InventoryService } from '@c8y/client';\nimport { GroupNodeService } from './group-node.service';\nimport { AssetSelectorService } from './asset-selector.service';\nimport { AssetSelectionChangeEvent, AssetSelectorOptions } from './asset-selector.model';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nexport class AssetSelectorBase {\n /**\n * Config object containing all options for the asset selector.\n */\n config: AssetSelectorOptions = {};\n /**\n * An array of predefined nodes.\n */\n selected: Array<Partial<IManagedObject>> | IIdentified[] | IIdentified;\n /**\n * The loading state of the current node.\n */\n isLoading = false;\n /**\n * Emit the selected asset or assets.\n */\n onSelected = new EventEmitter<AssetSelectionChangeEvent>();\n /**\n * Emits if the currently selected asset is cleared.\n */\n onClearSelected = new EventEmitter<void>();\n\n private onChange: (mo: IIdentified[] | IIdentified) => void;\n private onTouched: () => void;\n\n constructor(\n protected groupNodeService: GroupNodeService,\n protected inventory: InventoryService,\n protected assetSelectorService: AssetSelectorService\n ) {}\n\n /**\n * @ignore\n */\n validate(control: AbstractControl): ValidationErrors {\n if (this.config.required && (!control.value || control.value.length === 0)) {\n return { required: true };\n }\n return null;\n }\n\n /**\n * @ignore\n */\n writeValue(obj: any): void {\n this.selected = this.assetSelectorService.normalizeValue(obj, this.config.modelMode);\n }\n\n /**\n * @ignore\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * @ignore\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * @ignore\n */\n doBlur() {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n\n /**\n * Deselects all expect the given one.\n * @param selectedMo The selected asset (optional, if empty -> just deselect all).\n */\n deselectAll(selectedMo?: IManagedObject) {\n this.selected = [];\n if (selectedMo) {\n this.selected = [this.assetSelectorService.simplifyModel(selectedMo, this.config.modelMode)];\n }\n this.emitChange(this.selected, selectedMo, !!selectedMo);\n this.doBlur();\n }\n\n /**\n * Adds an managed object to the selected array and emits the change.\n * @param selectedMo The selected asset.\n */\n select(selectedMo: IManagedObject) {\n if (!this.config.multi) {\n this.selected = [];\n }\n const index = this.getIndexOfSelected(this.selected, selectedMo);\n if (index === -1) {\n this.selected.push(\n this.assetSelectorService.simplifyModel(selectedMo, this.config.modelMode)\n );\n }\n this.emitChange(this.selected, selectedMo, true);\n this.doBlur();\n }\n\n /**\n * Removes a managed object from the selected array and emits the change.\n * @param selectedMo The selected asset.\n */\n deselect(selectedMo: IManagedObject) {\n const index = this.getIndexOfSelected(this.selected, selectedMo);\n if (index > -1) {\n this.selected.splice(index, 1);\n }\n this.emitChange(this.selected, selectedMo, false);\n this.doBlur();\n }\n\n /**\n * Returns the index of the currently selected item.\n * @param selected All selected items\n * @param selectedMo The new selected item-\n * @returns An index, or -1 if not found.\n */\n getIndexOfSelected(\n selected: Array<Partial<IIdentified>> | Partial<IIdentified>,\n selectedMo: IIdentified\n ) {\n return selected.findIndex(mo => mo.id === selectedMo.id);\n }\n\n emitChange(selected: IIdentified | IIdentified[], item: IManagedObject, isSelected: boolean) {\n const changes = this.config.multi ? selected : selected[0];\n if (this.onChange) {\n this.onChange(changes);\n }\n this.onSelected.emit({ items: changes, change: { item, isSelected } });\n }\n\n createDefaultRootNode() {\n return this.groupNodeService.createGroupNode({\n root: true,\n groupsSelectable: this.config.groupsSelectable,\n groupsOnly: this.config.groupsOnly,\n showChildDevices: this.config.showChildDevices\n });\n }\n async createManagedObjectRootNode(asset: IIdentified) {\n if ((asset as IIdentified).id) {\n return this.groupNodeService.createGroupNode({\n mo: asset as IManagedObject,\n groupsSelectable: this.config.groupsSelectable,\n groupsOnly: this.config.groupsOnly,\n showChildDevices: this.config.showChildDevices\n });\n }\n const { data: mo } = await this.inventory.detail(asset);\n return this.groupNodeService.createGroupNode({\n mo,\n groupsSelectable: this.config.groupsSelectable,\n groupsOnly: this.config.groupsOnly,\n showChildDevices: this.config.showChildDevices\n });\n }\n}\n","import { IManagedObject } from '@c8y/client';\nimport { IIdentified } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\n\nexport interface AssetSelectionChangeEvent {\n items: IIdentified | IIdentified[];\n change: { item: IManagedObject; isSelected: boolean };\n}\n\nexport interface GroupNodeConfig {\n root?: boolean;\n mo?: IManagedObject;\n groupsOnly?: boolean;\n groupsSelectable?: boolean;\n showChildDevices?: boolean;\n}\n\nexport const CONFIG_OPTIONS_DEFAULT: AssetSelectorOptions = {\n label: gettext('Asset selection'),\n multi: false,\n showFilter: false,\n columnHeaders: false,\n singleColumn: false,\n modelMode: 'simple',\n groupsOnly: false,\n groupsSelectable: false,\n search: false,\n showUnassignedDevices: false,\n view: 'tree',\n showChildDevices: false,\n showSelected: true\n};\n\nexport interface AssetSelectorOptions {\n /**\n * Already selected devices.\n */\n selectedDevices?: IIdentified | IIdentified[];\n /**\n * Defines a label to be shown to the user.\n */\n label?: string;\n /**\n * Can the user select multiple assets.\n */\n multi?: boolean;\n /**\n * displays a filter input on every column when using the miller view.\n */\n showFilter?: boolean;\n /**\n * displays a column header on every column when using the miller view.\n */\n columnHeaders?: boolean;\n /**\n * Displays only the select column.\n */\n singleColumn?: boolean;\n /**\n * Set to true to mark it as required on a form.\n */\n required?: boolean;\n /**\n * In simple model-mode the result will only contain the IDs and name of the selected\n * assets. In full mode, everything is contained.\n */\n modelMode?: 'simple' | 'full';\n /**\n * Set this to true, if the selector should only show groups.\n */\n groupsOnly?;\n /**\n * Set this true, if groups should be selectable.\n */\n groupsSelectable?;\n /**\n * Enable to display global search in the asset-selector (only possible whithout device context).\n */\n search?: boolean;\n /**\n * Displays all unassigned devices in a custom root group.\n */\n showUnassignedDevices?: boolean;\n /**\n * Set the view of the asset selector with tree view as default.\n */\n view?: 'tree' | 'miller';\n /**\n * Used only for miller-view, displays the column level for the current node.\n * E.g if the index is one, this will be second column.\n */\n index?: number;\n /**\n * Used only for single column, the array contains all selected columns.\n */\n selectedColumns?: IIdentified[] | IIdentified;\n /**\n * Devices with children can be selected to show their child devices.\n */\n showChildDevices?: boolean;\n /**\n * Allows to show chips at the top with the currently selected asset for multi select.\n * For single select it shows the currently selected asset.\n */\n showSelected?: boolean;\n /**\n * Prevents automatic asset selection on component initialization.\n */\n preventInitialSelect?: boolean;\n}\n","import { ClickOptions, gettext } from '@c8y/ngx-components';\nimport { AssetsNavigatorAction } from '../action.enum';\nimport { GroupNodeConfig } from './asset-selector.model';\nimport { GroupNode } from './group-node';\nimport { GroupNodeService } from './group-node.service';\n\nexport class UnassignedDevicesNode extends GroupNode {\n static NAME = 'UnassignedDevicesNode';\n label = gettext('Unassigned devices');\n icon = 'delete-folder';\n groupsSelectable = false;\n groupsOnly = false;\n showChildDevices = false;\n mo = {};\n\n constructor(\n protected service: GroupNodeService,\n config: GroupNodeConfig = {}\n ) {\n super(service, config);\n this.priority = Infinity;\n this.showChildDevices = config.showChildDevices || false;\n }\n\n click(options: ClickOptions = {}) {\n this.hookEvents();\n if (options.open) {\n this.events.next(AssetsNavigatorAction.FETCH);\n }\n }\n\n addManagedObject(mo) {\n this.add(this.service.createChildNode({ mo, showChildDevices: this.showChildDevices }));\n }\n\n fetch() {\n return this.service.getUnassignedDevices(this.showChildDevices, this.filterQuery$.value);\n }\n\n isGroup() {\n return true;\n }\n\n toString() {\n return UnassignedDevicesNode.NAME;\n }\n\n setLabel() {\n // do nothing, as this item has a hardcoded label.\n // This is only to overwrite the default inherited method.\n this.label = this.label;\n }\n\n async updateIcon() {\n // do nothing, as this item has a hardcoded label.\n // This is only to overwrite the default inherited method.\n this.icon = this.icon;\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n forwardRef\n} from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\nimport { IIdentified, IManagedObject, InventoryService } from '@c8y/client';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { takeUntil, tap } from 'rxjs/operators';\nimport { AssetSelectorBase } from './asset-selector-base';\nimport {\n AssetSelectionChangeEvent,\n AssetSelectorOptions,\n CONFIG_OPTIONS_DEFAULT\n} from './asset-selector.model';\nimport { AssetSelectorService } from './asset-selector.service';\nimport { GroupNode } from './group-node';\nimport { GroupNodeService } from './group-node.service';\nimport { UnassignedDevicesNode } from './unassigned-devices-node';\nimport {\n gettext,\n SearchInputComponent,\n IconDirective,\n C8yTranslatePipe,\n GetGroupIconPipe\n} from '@c8y/ngx-components';\nimport { NgIf, NgStyle, NgClass, NgFor, AsyncPipe } from '@angular/common';\nimport { AssetSelectorNodeComponent } from './asset-selector-node.component';\n\n/**\n * Displays a hierarchical tree selector for assets.\n */\n@Component({\n selector: 'c8y-asset-selector',\n templateUrl: './asset-selector.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => AssetSelectorComponent)\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => AssetSelectorComponent),\n multi: true\n },\n AssetSelectorService\n ],\n imports: [\n NgIf,\n NgStyle,\n NgClass,\n SearchInputComponent,\n NgFor,\n IconDirective,\n FormsModule,\n AssetSelectorNodeComponent,\n C8yTranslatePipe,\n AsyncPipe,\n GetGroupIconPipe\n ]\n})\nexport class AssetSelectorComponent extends AssetSelectorBase implements OnInit {\n /**\n * Config object containing all options for the asset selector.\n */\n @Input() config: AssetSelectorOptions = {};\n /**\n * Defines the node, which should be displayed as active.\n */\n @Input() active: GroupNode;\n /**\n * Used only for miller-view, displays the column level for the current node.\n * E.g if the index is one, this will be second column.\n */\n @Input() index = 0;\n /**\n * The asset to use as root.\n */\n @Input() asset: IIdentified = undefined;\n /**\n * The selected device.\n */\n @Input() selectedDevice: IManagedObject = undefined;\n /**\n * An array of predefined nodes.\n */\n @Input() selected: Array<Partial<IManagedObject>> | IIdentified[] | IIdentified = [];\n /**\n * The node to use as root. You can either set this, or the asset to start from.\n */\n @Input() rootNode: GroupNode;\n /**\n * All currently selected assets.\n */\n @Input() selectedItems: IIdentified[] | IIdentified = [];\n @Input() container: '' | 'body' = 'body';\n @Input() isNodeSelectable: boolean | ((node: IIdentified) => boolean) = true;\n @Input() disabled = false;\n /**\n * Emits if one item was selected (all currently selected nodes).\n */\n @Output() onSelected = new EventEmitter<AssetSelectionChangeEvent>();\n /**\n * Emits if the currently selected asset is cleared.\n */\n @Output() onClearSelected = new EventEmitter<void>();\n /**\n * Used only for miller view. Emit the selected node and use it as a 'rootNode' for the new column.\n */\n @Output() onRowSelected = new EventEmitter<any>();\n /**\n * Emits the current loading state of the node.\n */\n @Output() onLoad = new EventEmitter<any>();\n /**\n * The current filter applied.\n */\n filterText = '';\n /**\n * Displays the global search at all times if the miller view is used\n * on root group level.\n */\n root = false;\n /**\n * @ignore\n */\n unsubscribe$ = new Subject<void>();\n /**\n * Returns the current header hight in pixel.\n */\n getHeaderHeight$ = new BehaviorSubject(0);\n readonly ASSET_CONST = gettext('Asset {{ assetId }}');\n\n @ViewChild('header')\n private header: ElementRef;\n\n /**\n * @ignore only DI\n */\n constructor(\n protected groupNodeService: GroupNodeService,\n protected inventory: InventoryService,\n protected assetSelectorService: AssetSelectorService,\n protected cd: ChangeDetectorRef\n ) {\n super(groupNodeService, inventory, assetSelectorService);\n }\n\n /**\n * Checks when a node was selected, if a new column needs to be added.\n * @param node The node that was clicked.\n * @param index The current index of this node.\n * @returns True if the click was handled and a new column was added.\n */\n handleNextMillerViewColumn(node: GroupNode, index: number) {\n const nodeCopy = Object.create(node);\n const isSameAsRoot = this.rootNode === node;\n const isUnassignedDevicesNode = node.toString() === UnassignedDevicesNode.NAME;\n const isNewColumnNeeded =\n !isSameAsRoot && (node.isGroup() || isUnassignedDevicesNode || node.hasChildDevices());\n\n if (isNewColumnNeeded) {\n this.onRowSelected.emit({ nodeCopy, index });\n return false;\n }\n return true;\n }\n\n /**\n * @ignore\n */\n async ngOnInit() {\n this.assetSelectorService.setIsNodeSelectable(this.isNodeSelectable);\n if (this.index === 0) {\n this.config = { ...CONFIG_OPTIONS_DEFAULT, ...this.config };\n }\n const shouldResetNameFilter =\n this.rootNode && this.rootNode.mo && this.config.view === 'miller';\n if (shouldResetNameFilter) {\n await this.applyFilter('');\n }\n\n const isOnlyAssetNodeDefined = this.asset;\n if (isOnlyAssetNodeDefined) {\n this.rootNode = await this.createManagedObjectRootNode(this.asset);\n }\n\n const isAnyNodeDefined =\n !this.rootNode && (!this.asset || Object.keys(this.asset).length === 0);\n if (isAnyNodeDefined) {\n this.rootNode = this.createDefaultRootNode();\n }\n\n if (\n this.config.showUnassignedDevices &&\n (!this.asset || Object.keys(this.asset).length === 0) &&\n this.rootNode.root\n ) {\n this.rootNode.add(\n new UnassignedDevicesNode(this.groupNodeService, {\n showChildDevices: this.config.showChildDevices\n })\n );\n }\n this.root = this.rootNode.root;\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes.isNodeSelectable) {\n this.assetSelectorService.setIsNodeSelectable(this.isNodeSelectable);\n }\n if (\n changes.asset &&\n changes.asset.currentValue &&\n Object.keys(changes.asset.currentValue).length !== 0\n ) {\n this.rootNode = await this.createManagedObjectRootNode(changes.asset.currentValue);\n }\n }\n\n /**\n * @ignore\n */\n ngAfterViewInit(): void {\n this.updateHeaderHeight();\n }\n\n /**\n * Changes the current root to one level back.\n */\n back() {\n const index = this.index - 1;\n const nodeCopy = Object.create(this.rootNode.parents[0]);\n this.onRowSelected.emit({ nodeCopy, index });\n }\n\n /**\n * Clears the current filter.\n */\n clearFilters() {\n this.filterText = '';\n this.applyFilter('');\n }\n\n /**\n * Clears the currently selected device.\n */\n clearSelectedDevices() {\n this.selectedDevice = undefined;\n this.applyFilter('');\n this.onClearSelected.emit();\n }\n\n isGroupSelected() {\n if (this.selected.some(selectedNode => selectedNode.id === this.rootNode.mo?.id)) {\n return true;\n }\n return false;\n }\n\n /**\n * @param nameFilter The name filter to apply.\n * @param moId The managed object ID to filter by.\n * @param showUnassignedDevices If true, it will show unassigned devices.\n * @return The filter query to apply.\n * @description\n * This method builds a filter query based on the provided name filter and managed object ID.\n */\n groupNameFilter(nameFilter: string, moId, showUnassignedDevices?: boolean) {\n if (nameFilter) {\n const filterByName = showUnassignedDevices\n ? {\n __filter: {\n name: nameFilter\n },\n __orderby: [{ name: 1 }]\n }\n : {\n __filter: {\n name: nameFilter,\n __bygroupid: moId\n }\n };\n return this.assetSelectorService.queriesUtil.buildQuery(filterByName);\n }\n const defaultFilter = {\n __filter: {\n __bygroupid: moId\n },\n __orderby: [{ name: 1 }]\n };\n return this.assetSelectorService.queriesUtil.buildQuery(defaultFilter);\n }\n\n /**\n * Applies a filter.\n * @param filter The filter to apply.\n */\n async applyFilter(filter: string) {\n this.rootNode.filterQuery$.next(\n this.groupNameFilter(\n filter,\n this.rootNode.mo.id,\n this.isUnassignedDevicesNode() ? true : false\n )\n );\n this.rootNode.refresh();\n this.onLoad.emit({\n loading: true,\n filterText: this.filterText,\n index: this.index,\n selectedDevice: this.selectedDevice\n });\n this.cd.detectChanges();\n }\n\n /**\n * Check if the UnassignedDevice node is the rootNode.\n */\n isUnassignedDevicesNode() {\n return this.rootNode.toString() === UnassignedDevicesNode.NAME;\n }\n\n /**\n * Called when the user resets the search result.\n */\n onSearchResultReset(selectedItem) {\n if (selectedItem) {\n this.rootNode = this.createDefaultRootNode();\n if (this.config.showUnassignedDevices) {\n this.rootNode.add(\n new UnassignedDevicesNode(this.groupNodeService, {\n showChildDevices: this.config.showChildDevices\n })\n );\n }\n if (this.config.view === 'miller') {\n this.onRowSelected.emit({ root: true });\n }\n\n this.rootNode.click({ open: true });\n this.rootNode.nodesFetched\n .pipe(\n tap(() => this.cd.detectChanges()),\n takeUntil(this.unsubscribe$)\n )\n .subscribe();\n\n if (this.config.view === 'tree') {\n this.rootNode.open = true;\n }\n }\n }\n\n /**\n * Called if the user clicks on a search result.\n */\n async onSearchResultClick(mo: IManagedObject) {\n const canSelectNode = this.config.groupsSelectable || !this.groupNodeService.isGroup(mo);\n if (this.config.view === 'miller') {\n this.rootNode = await this.createManagedObjectRootNode(mo);\n this.rootNode.click({ open: true });\n const nodeCopy = Object.create(this.rootNode);\n this.onRowSelected.emit({\n nodeCopy,\n index: 0,\n selectedDevices: this.selectedDevice,\n root: true\n });\n }\n if (!this.config.multi) {\n this.deselectAll();\n }\n if (canSelectNode) {\n this.select(mo);\n }\n }\n\n onLoading(isLoading: boolean) {\n this.onLoad.emit({ loading: isLoading, filterText: this.filterText });\n this.cd.markForCheck();\n }\n\n onSelect(mo: IManagedObject) {\n this.select(mo);\n }\n\n onDeselect(config: { deselectMode: 'single' | 'all'; mo: IManagedObject }) {\n switch (config?.deselectMode) {\n case 'single':\n this.deselect(config.mo);\n this.cd.markForCheck();\n break;\n case 'all':\n this.deselectAll(config.mo);\n break;\n }\n }\n\n private updateHeaderHeight() {\n // An observer is used to detect if the header is visible or not.\n // If the header is not visible, the height is 0 and the observer is\n // used to detect when it becomes visible, to recalculate the height.\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.updateHeaderHeight();\n observer.unobserve(entry.target);\n }\n });\n });\n\n requestAnimationFrame(() => {\n if (this.header?.nativeElement) {\n const { clientHeight } = this.header.nativeElement;\n if (clientHeight === 0 && this.isElementOrParentHidden(this.header.nativeElement)) {\n observer.observe(this.header.nativeElement);\n return;\n }\n this.getHeaderHeight$.next(clientHeight);\n } else {\n this.getHeaderHeight$.next(0);\n }\n });\n }\n\n private isElementOrParentHidden(element: HTMLElement): boolean {\n while (element) {\n const style = window.getComputedStyle(element);\n if (style.display === 'none' || style.visibility === 'hidden') {\n return true;\n }\n element = element.parentElement;\n }\n return false;\n }\n}\n","<div\n class=\"bg-inherit p-t-8 p-b-8 separator-bottom p-r-16 p-l-16 sticky-top\"\n [ngStyle]=\"{ 'z-index': config.singleColumn && config.search ? '30' : '20' }\"\n #header\n [ngClass]=\"{\n 'p-absolute miller-column__selection d-flex flex-wrap a-i-center': config.view === 'miller',\n 'miller-column__search': config.search,\n 'miller-column__multi': config.multi\n }\"\n *ngIf=\"\n !selectedDevice &&\n index === 0 &&\n (config.search || config.multi || config.label?.length || config.showSelected)\n \"\n>\n <p\n class=\"text-medium flex-no-shrink a-s-center\"\n [ngClass]=\"{\n 'm-b-4': config.search && root && config.singleColumn,\n 'm-r-8': !config.singleColumn && !config.search,\n 'fit-w': config.singleColumn\n }\"\n *ngIf=\"config.label?.length\"\n >\n {{ config.label | translate }}\n </p>\n <c8y-search-input\n [ngStyle]=\"{ 'min-width': !config.singleColumn && config.label.length ? '50%' : 'inherit' }\"\n *ngIf=\"config.search && root\"\n (onClick)=\"onSearchResultClick($event)\"\n (reset)=\"onSearchResultReset($event)\"\n [mode]=\"'select'\"\n [container]=\"container\"\n [groupsOnly]=\"config.groupsOnly\"\n [ngClass]=\"{\n 'm-l-auto': !config.singleColumn && config.label.length,\n 'fit-w': config.singleColumn || !config.label.length\n }\"\n ></c8y-search-input>\n <div\n class=\"bg-inherit d-flex gap-4 fit-w\"\n *ngIf=\"config.showSelected\"\n [ngClass]=\"{ 'm-t-4': config.search }\"\n >\n <span class=\"text-label-small m-r-4 a-s-center l-h-1\">{{ 'Selected' | translate }}</span>\n <div class=\"flex-grow inner-scroll d-flex gap-4 a-i-center\">\n <ng-container *ngIf=\"!selected.length\">\n <em class=\"text-12 text-muted d-flex a-i-center fit-h-20\">{{ 'None' | translate }}</em>\n </ng-container>\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let selectedItem of selected\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ selectedItem.name }}\"\n [disabled]=\"disabled\"\n type=\"button\"\n (click)=\"config.multi ? deselect(selectedItem) : deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ selectedItem.name || (ASSET_CONST | translate: { assetId: selectedItem.id }) }}\n </span>\n </div>\n </div>\n</div>\n\n<div\n class=\"p-r-16\"\n *ngIf=\"selectedDevice\"\n>\n <div class=\"d-flex p-b-4\">\n <p\n class=\"text-medium p-t-8 m-r-8\"\n *ngIf=\"selectedDevice; else multiAssets\"\n >\n {{ 'Selected asset' | translate }}\n </p>\n <ng-template #multiAssets>\n <p class=\"text-medium m-r-8\">{{ 'Selected assets' | translate }}</p>\n </ng-template>\n <button\n class=\"btn btn-default btn-xs a-s-center m-t-4 m-l-auto\"\n title=\"{{ 'Change' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); clearSelectedDevices()\"\n >\n {{ 'Change' | translate }}\n </button>\n </div>\n <div class=\"d-flex\">\n <i\n class=\"text-success p-l-0 p-r-8\"\n [c8yIcon]=\"'check-circle'\"\n ></i>\n <i\n class=\"m-r-4 icon-20\"\n [c8yIcon]=\"selectedDevice | getGroupIcon | async\"\n ></i>\n <span>{{ selectedDevice.name }}</span>\n </div>\n</div>\n\n<!-- miller columns header -->\n<div\n class=\"miller-column__header sticky-top bg-inherit separator-bottom\"\n *ngIf=\"\n config.view === 'miller' &&\n ((config.showFilter && !rootNode.root) || config.columnHeaders) &&\n !selectedDevice\n \"\n [ngClass]=\"{ 'p-t-8': config.search }\"\n>\n <div class=\"d-flex\" *ngIf=\"config.singleColumn && index !== 0\">\n <i\n class=\"m-r-4\"\n c8yIcon=\"home\"\n ></i>\n <p\n class=\"text-12 text-muted text-truncate text-rtl m-b-4\"\n title=\"{{ rootNode.breadcrumb || rootNode.label | translate }}\"\n >\n {{ rootNode.breadcrumb || rootNode.label | translate }}\n </p>\n </div>\n <div\n class=\"d-flex a-i-center\"\n *ngIf=\"config.columnHeaders || config.singleColumn\"\n >\n <button\n class=\"btn btn-default btn-xs m-r-8 p-t-0 p-b-0 p-l-4 p-r-4 l-h-1\"\n title=\"{{ 'Back' | translate }}\"\n type=\"button\"\n *ngIf=\"config.singleColumn && !rootNode.root && index !== 0\"\n (click)=\"$event.stopPropagation(); back()\"\n >\n <i c8yIcon=\"angle-left\"></i>\n </button>\n <label\n class=\"c8y-radio checkbox-inline m-r-8\"\n *ngIf=\"!rootNode.root && index === 0 && (config.groupsSelectable || !rootNode.isGroup())\"\n >\n <input\n title=\"{{ 'Select group' | translate }}\"\n type=\"radio\"\n (change)=\"select(rootNode.mo)\"\n [checked]=\"isGroupSelected()\"\n />\n <span></span>\n </label>\n\n <i\n class=\"icon-20 c8y-icon-duocolor m-r-4\"\n [c8yIcon]=\"this.rootNode.mo | getGroupIcon: true : this.rootNode.icon | async\"\n *ngIf=\"config.columnHeaders && (config.singleColumn || (!rootNode.root && index === 0))\"\n ></i>\n <p\n class=\"text-truncate\"\n title=\"{{ rootNode.label | translate }}\"\n *ngIf=\"config.columnHeaders\"\n [ngClass]=\"{\n 'text-label-small': !config.singleColumn,\n 'text-medium': config.singleColumn\n }\"\n >\n {{ rootNode.label | translate }}\n </p>\n </div>\n\n <div\n *ngIf=\"!rootNode.root && config.showFilter\"\n [ngClass]=\"{ 'p-t-4': config.columnHeaders }\"\n >\n <div class=\"input-group input-group-sm input-group-search\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Filter this column…' | translate }}\"\n [(ngModel)]=\"filterText\"\n (keyup.enter)=\"applyFilter('*' + filterText + '*')\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot p-r-8 p-l-4\"\n title=\"{{ 'Apply filter' | translate }}\"\n type=\"button\"\n (click)=\"applyFilter('*' + filterText + '*')\"\n >\n <i c8yIcon=\"filter\"></i>\n </button>\n <button\n class=\"btn btn-dot p-r-8 p-l-4\"\n title=\" {{ 'Clear filters' | translate }}\"\n type=\"button\"\n (click)=\"clearFilters()\"\n *ngIf=\"filterText.length\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </span>\n </div>\n </div>\n</div>\n\n<c8y-asset-selector-node\n class=\"d-block bg-inherit p-relative\"\n style=\"z-index: 9\"\n *ngIf=\"rootNode && !selectedDevice\"\n [node]=\"rootNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"selected\"\n [multi]=\"config.multi\"\n [view]=\"config.view\"\n [index]=\"index\"\n [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn.bind(this)\"\n (isLoadingState)=\"onLoading($event)\"\n (onSelect)=\"onSelect($event)\"\n (onDeselect)=\"onDeselect($event)\"\n [ngClass]=\"{ 'collapse show': !rootNode.root && !rootNode.hidden && config.view !== 'miller' }\"\n></c8y-asset-selector-node>\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n forwardRef\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { IIdentified, IManagedObject, InventoryService } from '@c8y/client';\nimport { of } from 'rxjs';\nimport { first, startWith, map, switchMap } from 'rxjs/operators';\nimport { AssetSelectorBase } from './asset-selector-base';\nimport { AssetSelectorComponent } from './asset-selector.component';\nimport { AssetSelectionChangeEvent, AssetSelectorOptions } from './asset-selector.model';\nimport { AssetSelectorService } from './asset-selector.service';\nimport { GroupNode } from './group-node';\nimport { GroupNodeService } from './group-node.service';\nimport {\n gettext,\n LoadingComponent,\n EmptyStateComponent,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { NgStyle, NgClass, NgFor, NgIf, AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'c8y-asset-selector-miller',\n templateUrl: './miller-view.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MillerViewComponent),\n multi: true\n }\n ],\n imports: [\n NgStyle,\n NgClass,\n NgFor,\n AssetSelectorComponent,\n NgIf,\n LoadingComponent,\n EmptyStateComponent,\n C8yTranslatePipe,\n AsyncPipe\n ]\n})\nexport class MillerViewComponent extends AssetSelectorBase implements OnInit {\n /**\n * Config object containing all options for the asset selector.\n */\n @Input() config: AssetSelectorOptions = {};\n /**\n * The asset to use as root.\n */\n @Input() asset: IIdentified = undefined;\n /**\n * The selected devices.\n */\n @Input() selectedDevice: IManagedObject = undefined;\n /**\n * The node to use as root. You can either set this, or the asset to start from.\n */\n @Input() rootNode: GroupNode;\n /**\n * Emits if the selection changes\n */\n @Output() onSelected = new EventEmitter<AssetSelectionChangeEvent>();\n /**\n * Emits if the currently selected asset is cleared.\n */\n @Output() onClearSelected = new EventEmitter<void>();\n /**\n * @ignore\n */\n @ViewChild('millerViewWrapper') millerViewWrapper: ElementRef;\n /**\n * The column array will contain all currently selected nodes\n * which will form the miller view columns (only one per level).\n */\n columns = [];\n /**\n * The current filter applied. Used for the empty state text in the view.\n */\n filterText = '';\n /**\n * Index of the column used to check where to show the loading state.\n */\n columnIndex: number;\n @Input() container: '' | 'body' = 'body';\n\n configOptionsDefault: AssetSelectorOptions = {\n view: 'miller',\n singleColumn: false,\n label: gettext('Asset selection')\n };\n\n /**\n * The height of the first asset selector header.\n */\n assetSelectorHeaderHeight$ = of('0px');\n\n @ViewChildren(AssetSelectorComponent)\n private assetSelectors: QueryList<AssetSelectorComponent>;\n\n constructor(\n protected groupNodeService: GroupNodeService,\n protected inventory: InventoryService,\n protected assetSelectorService: AssetSelectorService,\n protected cd: ChangeDetectorRef\n ) {\n super(groupNodeService, inventory, assetSelectorService);\n }\n\n /**\n * @ignore\n */\n async ngOnInit() {\n this.config = { ...this.configOptionsDefault, ...this.config };\n\n const isAnyNodeDefined =\n !this.rootNode && (!this.asset || Object.keys(this.asset).length === 0);\n if (isAnyNodeDefined) {\n this.rootNode = this.createDefaultRootNode();\n }\n\n const isOnlyAssetNodeDefined = this.asset && Object.keys(this.asset).length !== 0;\n if (isOnlyAssetNodeDefined) {\n this.rootNode = await this.createManagedObjectRootNode(this.asset);\n this.rootNode.click();\n if (!this.config.preventInitialSelect) {\n const selected = this.selectedDevice || this.asset;\n this.selected = [selected];\n this.emitChange(this.selected, selected as IManagedObject, true);\n }\n }\n\n this.columns.push(this.rootNode);\n }\n\n /**\n * @ignore\n */\n async ngOnChanges(changes: SimpleChanges) {\n if (changes.asset && changes.asset.currentValue && !this.asset) {\n this.columns = [];\n this.columns.push(await this.createManagedObjectRootNode(changes.asset.currentValue));\n }\n\n if (changes.selectedDevice && changes.selectedDevice.currentValue) {\n this.selected = [this.selectedDevice];\n this.emitChange(this.selected, this.selectedDevice as IManagedObject, true);\n }\n }\n\n /**\n * @ignore\n */\n ngAfterViewInit(): void {\n requestAnimationFrame(() => {\n this.assetSelectorHeaderHeight$ = this.assetSelectors.changes.pipe(\n startWith(this.assetSelectors.toArray()),\n first(),\n switchMap(assetSelector =>\n assetSelector[0] ? assetSelector[0].getHeaderHeight$ : of('0')\n ),\n map(height => height + 'px')\n );\n });\n }\n\n /**\n * Create a new column with the selected node as root.\n */\n addNewColumn(node): void {\n const level = node.index;\n this.selectedDevice = node.selectedDevices || undefined;\n if (node.root) {\n window.requestAnimationFrame(() => (this.millerViewWrapper.nativeElement.scrollLeft = 0));\n this.columns.length = 1;\n }\n\n const isLevelLowerThanColumnNumber = level < this.columns.length - 1;\n let goBack = false;\n if (isLevelLowerThanColumnNumber) {\n this.columns.length = level + 1;\n goBack = true;\n }\n if (!node.root && !(this.config.singleColumn && goBack)) {\n this.columns.push(node.nodeCopy);\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const col = this;\n window.requestAnimationFrame(() => (col.millerViewWrapper.nativeElement.scrollLeft = 50000));\n /* triggered twice with a small delay as a workaround for dealing with Safari's bug:\n \"Safari doesn’t update the scrollTop / scrollLeft properties of an element its any of its\n ancestors has overflow set to hidden.\"\n This was reported on customer portal with the ticket SI-488573\n */\n setTimeout(function () {\n window.requestAnimationFrame(\n () => (col.millerViewWrapper.nativeElement.scrollLeft = 55000)\n );\n }, 700);\n }\n }\n\n /**\n * Change the loading state of the asset selector.\n */\n onLoad(event) {\n this.isLoading = event.loading;\n this.filterText = event.filterText;\n this.columnIndex = event.index;\n this.selectedDevice = event.selectedDevice;\n this.cd.detectChanges();\n }\n\n /**\n * Add the selected node to the selected array.\n */\n onSelectionChange(event: AssetSelectionChangeEvent): void {\n if (!this.config.multi) {\n this.deselectAll(event.change.item);\n return;\n }\n if (event.change.isSelected) {\n this.select(event.change.item);\n return;\n }\n this.deselect(event.change.item);\n }\n}\n","<div\n class=\"miller-view-wrapper {{ config.label }}\"\n [ngStyle]=\"{\n 'padding-top': selectedDevice ? '0px' : (assetSelectorHeaderHeight$ | async)\n }\"\n #millerViewWrapper\n [ngClass]=\"{\n 'single-column': config.singleColumn,\n }\"\n>\n <div\n class=\"miller-column bg-inherit\"\n *ngFor=\"let column of columns; index as i\"\n >\n <c8y-asset-selector\n class=\"bg-inherit\"\n #assetSelector\n [config]=\"config\"\n [index]=\"i\"\n [active]=\"columns[i + 1]\"\n [rootNode]=\"column\"\n [selected]=\"selected || []\"\n [selectedDevice]=\"selectedDevice\"\n (onSelected)=\"onSelectionChange($event)\"\n (onClearSelected)=\"onClearSelected.emit()\"\n (onRowSelected)=\"addNewColumn($event)\"\n (onLoad)=\"onLoad($event)\"\n [container]=\"container\"\n ></c8y-asset-selector>\n <div\n class=\"p-relative p-b-64\"\n *ngIf=\"isLoading && columnIndex === i && !selectedDevice\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"p-l-8 p-r-8\"\n *ngIf=\"!column.children.length && !isLoading\"\n >\n <c8y-ui-empty-state\n [icon]=\"'folder-open'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'The selected asset has no children.' | translate\"\n *ngIf=\"!filterText; else noSearchResults\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-template #noSearchResults>\n <c8y-ui-empty-state\n [icon]=\"'folder-open'\"\n [title]=\"'No results to display for the current filter.' | translate\"\n [subtitle]=\"'There are no assets matching the filter.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </ng-template>\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CoreModule, CommonModule, CoreSearchModule } from '@c8y/ngx-components';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { GroupNodeService } from './group-node.service';\n\nimport { AssetSelectorNodeComponent } from './asset-selector-node.component';\nimport { AssetSelectorComponent } from './asset-selector.component';\nimport { FormsModule } from '@angular/forms';\nimport { MillerViewComponent } from './miller-view.component';\nimport { AssetSelectorService } from './asset-selector.service';\n\n@NgModule({\n imports: [\n CoreModule,\n CommonModule,\n CollapseModule,\n BsDropdownModule,\n CoreSearchModule,\n FormsModule,\n AssetSelectorNodeComponent,\n AssetSelectorComponent,\n MillerViewComponent\n ],\n exports: [AssetSelectorNodeComponent, AssetSelectorComponent, MillerViewComponent],\n providers: [GroupNodeService, AssetSelectorService]\n})\nexport class AssetSelectorModule {}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { DeviceStatusModule, hookNavigator, ModalModule, ModalService } from '@c8y/ngx-components';\nimport { AssetNavigatorConfig, ASSET_NAVIGATOR_CONFIG } from './asset-node-config.model';\nimport { AssetNodeFactory } from './asset-node.factory';\nimport { AssetNodeService } from './asset-node.service';\nimport { AssetSelectorModule } from './asset-selector/asset-selector.module';\n\n@NgModule({\n declarations: [],\n imports: [ModalModule, AssetSelectorModule, DeviceStatusModule],\n providers: [ModalService, AssetNodeService, hookNavigator(AssetNodeFactory)]\n})\nexport class AssetsNavigatorModule {\n static config(config: AssetNavigatorConfig = {}): ModuleWithProviders<AssetsNavigatorModule> {\n return {\n ngModule: AssetsNavigatorModule,\n providers: [\n {\n provide: ASSET_NAVIGATOR_CONFIG,\n useValue: config\n }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["getProp","i1","i2.AssetSelectorService","i1.GroupNodeService","i3.AssetSelectorService"],"mappings":"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"}
|