UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

319 lines (309 loc) 26.8 kB
import * as i0 from '@angular/core'; import { Component, InjectionToken, Injectable, NgModule } from '@angular/core'; import * as i2 from '@c8y/client'; import * as i4 from '@c8y/ngx-components'; import { gettext, IconDirective, C8yTranslateDirective, FormGroupComponent, RequiredInputPlaceholderDirective, GuideDocsComponent, GuideHrefDirective, C8yTranslatePipe, hookGeneric, ExtensionPointWithoutStateForPlugins, fromTriggerOnce, NavigatorNode, TitleComponent, BreadcrumbComponent, BreadcrumbItemComponent, ActionBarItemComponent, HelpComponent, ProductExperienceDirective, UserPreferencesConfigurationStrategy, DATA_GRID_CONFIGURATION_STRATEGY, DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER, BuiltInActionType, ViewContext, CoreModule, CommonModule, hookNavigator, hookBreadcrumb, hookDataGridActionControls } from '@c8y/ngx-components'; import * as i3 from '@c8y/ngx-components/device-grid'; import { DeviceGridComponent, DeviceGridModule } from '@c8y/ngx-components/device-grid'; import * as i5 from '@ngx-translate/core'; import * as i1 from 'ngx-bootstrap/modal'; import { of } from 'rxjs'; import { switchMap, tap, catchError, take, map, startWith, shareReplay } from 'rxjs/operators'; import * as i6 from '@angular/forms'; import { FormsModule } from '@angular/forms'; import { PopoverDirective, PopoverModule } from 'ngx-bootstrap/popover'; import * as i1$1 from '@angular/router'; import { RouterModule } from '@angular/router'; import { flatten, isEmpty } from 'lodash-es'; import { AsyncPipe } from '@angular/common'; import { TooltipModule } from 'ngx-bootstrap/tooltip'; class AddSmartGroupComponent { constructor(modal, smartGroupsService, deviceGridService, alert, translateService) { this.modal = modal; this.smartGroupsService = smartGroupsService; this.deviceGridService = deviceGridService; this.alert = alert; this.translateService = translateService; this.smartGroup = { name: '', type: 'c8y_DynamicGroup', c8y_IsDynamicGroup: {} }; } create() { return this.deviceGridService .getConfig$(this.configKey) .pipe(switchMap(config => { return this.smartGroupsService.create({ smartGroup: this.smartGroup, deviceQueryString: this.deviceQuery, configurableColumns: config }); }), tap(() => { this.alert.success(this.translateService.instant(gettext('Smart group "{{ name }}" added.'), { name: this.smartGroup.name })); this.modal.hide(); }), catchError(ex => { this.alert.addServerFailure(ex); return of([]); }), take(1)) .subscribe(); } close() { this.modal.hide(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AddSmartGroupComponent, deps: [{ token: i1.BsModalRef }, { token: i2.SmartGroupsService }, { token: i3.DeviceGridService }, { token: i4.AlertService }, { token: i5.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: AddSmartGroupComponent, isStandalone: true, selector: "c8y-add-smart-group", ngImport: i0, template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-group-smart'\"></i>\n <h4\n id=\"modal-title\"\n translate\n >\n Add smart group\n </h4>\n </div>\n\n <form\n #createSmartGroup=\"ngForm\"\n (ngSubmit)=\"createSmartGroup.form.valid && create()\"\n >\n <div class=\"modal-inner-scroll\">\n <div\n class=\"modal-body\"\n id=\"modal-body\"\n >\n <c8y-form-group>\n <label\n class=\"d-inline-block\"\n for=\"name\"\n translate\n >\n Group name\n </label>\n <button\n class=\"btn-help btn-help--sm a-s-center\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"customPopoverTemplate\"\n placement=\"right\"\n type=\"button\"\n [outsideClick]=\"true\"\n data-cy=\"add-smart-group-component--Help-button\"\n ></button>\n <input\n class=\"form-control\"\n id=\"name\"\n placeholder=\"{{ 'e.g. My smart group' | translate }}\"\n name=\"name\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"smartGroup.name\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n translate\n >\n Cancel\n </button>\n\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add' | translate }}\"\n type=\"submit\"\n [disabled]=\"createSmartGroup.form.invalid\"\n translate\n >\n Add\n </button>\n </div>\n </form>\n</div>\n\n<ng-template #customPopoverTemplate>\n <div\n class=\"m-b-16\"\n style=\"pointer-events: auto\"\n tabindex=\"0\"\n data-cy=\"add-smart-group-component--popover-Template\"\n translate\n >\n Th\u0435 smart group will be created based on the filters currently applied in the device list.\n </div>\n <br />\n <p\n c8y-guide-docs\n translate\n ngNonBindable\n >\n <small>\n Find out more in the\n <a c8y-guide-href=\"docs/device-management-application/grouping-devices/#using-smart-groups\">\n user documentation\n </a>\n .\n </small>\n </p>\n</ng-template>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "directive", type: GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AddSmartGroupComponent, decorators: [{ type: Component, args: [{ selector: 'c8y-add-smart-group', imports: [ IconDirective, C8yTranslateDirective, FormsModule, FormGroupComponent, PopoverDirective, RequiredInputPlaceholderDirective, GuideDocsComponent, GuideHrefDirective, C8yTranslatePipe ], template: "<div class=\"viewport-modal\">\n <div class=\"modal-header dialog-header\">\n <i [c8yIcon]=\"'c8y-group-smart'\"></i>\n <h4\n id=\"modal-title\"\n translate\n >\n Add smart group\n </h4>\n </div>\n\n <form\n #createSmartGroup=\"ngForm\"\n (ngSubmit)=\"createSmartGroup.form.valid && create()\"\n >\n <div class=\"modal-inner-scroll\">\n <div\n class=\"modal-body\"\n id=\"modal-body\"\n >\n <c8y-form-group>\n <label\n class=\"d-inline-block\"\n for=\"name\"\n translate\n >\n Group name\n </label>\n <button\n class=\"btn-help btn-help--sm a-s-center\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"customPopoverTemplate\"\n placement=\"right\"\n type=\"button\"\n [outsideClick]=\"true\"\n data-cy=\"add-smart-group-component--Help-button\"\n ></button>\n <input\n class=\"form-control\"\n id=\"name\"\n placeholder=\"{{ 'e.g. My smart group' | translate }}\"\n name=\"name\"\n type=\"text\"\n autocomplete=\"off\"\n required\n [(ngModel)]=\"smartGroup.name\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n translate\n >\n Cancel\n </button>\n\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Add' | translate }}\"\n type=\"submit\"\n [disabled]=\"createSmartGroup.form.invalid\"\n translate\n >\n Add\n </button>\n </div>\n </form>\n</div>\n\n<ng-template #customPopoverTemplate>\n <div\n class=\"m-b-16\"\n style=\"pointer-events: auto\"\n tabindex=\"0\"\n data-cy=\"add-smart-group-component--popover-Template\"\n translate\n >\n Th\u0435 smart group will be created based on the filters currently applied in the device list.\n </div>\n <br />\n <p\n c8y-guide-docs\n translate\n ngNonBindable\n >\n <small>\n Find out more in the\n <a c8y-guide-href=\"docs/device-management-application/grouping-devices/#using-smart-groups\">\n user documentation\n </a>\n .\n </small>\n </p>\n</ng-template>\n" }] }], ctorParameters: () => [{ type: i1.BsModalRef }, { type: i2.SmartGroupsService }, { type: i3.DeviceGridService }, { type: i4.AlertService }, { type: i5.TranslateService }] }); const HOOK_DEVICE_LIST_COLUMNS = new InjectionToken('HOOK_ALL_DEVICES_LIST_COLUMNS'); /** * A hook to override the default device grid columns configuration in `c8y-device-list` component. */ function hookDeviceListColumns(columns, options) { return hookGeneric(columns, HOOK_DEVICE_LIST_COLUMNS, options); } /** * A service defining device list column extension options. */ class DeviceListExtensionService extends ExtensionPointWithoutStateForPlugins { constructor(rootInjector, router, plugins, deviceGridService) { super(rootInjector, plugins); this.router = router; this.deviceGridService = deviceGridService; this.items$ = this.setupItemsObservable(); } setupItemsObservable() { return fromTriggerOnce(this.router, this.refresh$, [ () => flatten(this.injectors.map(injector => injector.get(HOOK_DEVICE_LIST_COLUMNS, [], { self: true }))), () => this.factories ]).pipe(map((columns) => isEmpty(columns) ? this.deviceGridService.getDefaultColumns() : columns), startWith(this.deviceGridService.getDefaultColumns()), shareReplay(1)); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DeviceListExtensionService, deps: [{ token: i0.Injector }, { token: i1$1.Router }, { token: i4.PluginsResolveService }, { token: i3.DeviceGridService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DeviceListExtensionService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DeviceListExtensionService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i0.Injector }, { type: i1$1.Router }, { type: i4.PluginsResolveService }, { type: i3.DeviceGridService }] }); class DeviceListNavigationFactory { constructor() { this.nav = new NavigatorNode({ label: gettext('All devices'), path: 'device', icon: 'c8y-device-management', parent: { label: gettext('Devices'), icon: 'exchange' }, priority: 2000 }); } async get() { return this.nav; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DeviceListNavigationFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DeviceListNavigationFactory }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DeviceListNavigationFactory, decorators: [{ type: Injectable }] }); class DeviceListComponent { constructor(deviceGridService, bsModalService, deviceListExtensionService) { this.deviceGridService = deviceGridService; this.bsModalService = bsModalService; this.GRID_CONFIG_KEY = 'device-grid-all'; this.count$ = this.deviceGridService.getTotal({}); this.columns$ = deviceListExtensionService.items$; } getGridConfigContext() { return { key: this.GRID_CONFIG_KEY, defaultColumns: this.deviceGridService.getDefaultColumns(), legacyConfigKey: 'all-devices-columns-meta_', legacyFilterKey: 'all-devices-columns-config' }; } async createSmartGroup() { const initialState = { configKey: this.GRID_CONFIG_KEY, deviceQuery: this.deviceQueryStringOutput }; this.bsModalService.show(AddSmartGroupComponent, { class: 'modal-sm', ariaDescribedby: 'modal-body', ariaLabelledBy: 'modal-title', ignoreBackdropClick: true, keyboard: false, initialState }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DeviceListComponent, deps: [{ token: i3.DeviceGridService }, { token: i1.BsModalService }, { token: DeviceListExtensionService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: DeviceListComponent, isStandalone: true, selector: "c8y-device-list", providers: [ { provide: DATA_GRID_CONFIGURATION_STRATEGY, useClass: UserPreferencesConfigurationStrategy }, { provide: DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER, useExisting: DeviceListComponent } ], ngImport: i0, template: "<c8y-title>\n {{ 'All devices' | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'exchange'\"\n [label]=\"'Devices' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-management'\"\n [label]=\"'All devices' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add smart group' | translate }}\"\n (click)=\"createSmartGroup()\"\n >\n <i c8yIcon=\"c8y-group-smart\"></i>\n {{ 'Add smart group' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/device-management-application/viewing-all-devices/#viewing-all-devices\"\n></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-device-grid\n [columns]=\"columns$ | async\"\n [infiniteScroll]=\"(count$ | async) === undefined ? 'auto' : undefined\"\n (onDeviceQueryStringChange)=\"deviceQueryStringOutput = $event\"\n c8yProductExperience\n [actionName]=\"'allDevices'\"\n ></c8y-device-grid>\n</div>\n", dependencies: [{ kind: "component", type: TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "component", type: DeviceGridComponent, selector: "c8y-device-grid", inputs: ["dataCallback", "refresh", "title", "loadMoreItemsLabel", "loadingItemsLabel", "legacyConfigKey", "legacyFilterKey", "columns", "pagination", "infiniteScroll", "actionControls", "selectable", "singleSelection", "baseQuery", "bulkActionControls", "headerActionControls", "childDeviceGrid", "parentDeviceId", "withChildren", "showSearch", "activeClassName"], outputs: ["onColumnsChange", "onFilterChange", "onDeviceQueryStringChange", "itemsSelect"] }, { kind: "directive", type: ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DeviceListComponent, decorators: [{ type: Component, args: [{ selector: 'c8y-device-list', providers: [ { provide: DATA_GRID_CONFIGURATION_STRATEGY, useClass: UserPreferencesConfigurationStrategy }, { provide: DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER, useExisting: DeviceListComponent } ], imports: [ TitleComponent, BreadcrumbComponent, BreadcrumbItemComponent, ActionBarItemComponent, IconDirective, HelpComponent, DeviceGridComponent, ProductExperienceDirective, C8yTranslatePipe, AsyncPipe ], template: "<c8y-title>\n {{ 'All devices' | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'exchange'\"\n [label]=\"'Devices' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-device-management'\"\n [label]=\"'All devices' | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item [placement]=\"'right'\">\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add smart group' | translate }}\"\n (click)=\"createSmartGroup()\"\n >\n <i c8yIcon=\"c8y-group-smart\"></i>\n {{ 'Add smart group' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/device-management-application/viewing-all-devices/#viewing-all-devices\"\n></c8y-help>\n\n<div class=\"content-fullpage border-top border-bottom\">\n <c8y-device-grid\n [columns]=\"columns$ | async\"\n [infiniteScroll]=\"(count$ | async) === undefined ? 'auto' : undefined\"\n (onDeviceQueryStringChange)=\"deviceQueryStringOutput = $event\"\n c8yProductExperience\n [actionName]=\"'allDevices'\"\n ></c8y-device-grid>\n</div>\n" }] }], ctorParameters: () => [{ type: i3.DeviceGridService }, { type: i1.BsModalService }, { type: DeviceListExtensionService }] }); class ActionControlsFactory { constructor(deviceGridService) { this.deviceGridService = deviceGridService; } get() { return { actionControls: [ { type: BuiltInActionType.Delete, priority: -Infinity, callback: async (item, reload) => { await this.deviceGridService.delete(item); reload(false); } } ], matchesGrid(_, context) { return context?.key === 'device-grid-all'; } }; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ActionControlsFactory, deps: [{ token: i3.DeviceGridService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ActionControlsFactory, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ActionControlsFactory, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i3.DeviceGridService }] }); class DevicesBreadcrumbFactory { async get(route) { const { context, contextData } = route.snapshot?.parent?.data || {}; const { routeConfig } = route.snapshot; if (context === ViewContext.Device || routeConfig?.context === ViewContext.Device) { const breadcrumb = { items: [] }; const breadcrumbItems = []; breadcrumbItems.push({ label: gettext('Devices'), icon: 'exchange' }); breadcrumbItems.push({ label: gettext('All devices'), path: '/device' }); const name = contextData?.name; if (!!name) { breadcrumbItems.push({ label: name }); } const label = routeConfig?.label; if (!!label) { breadcrumbItems.push({ label }); } breadcrumb.items = breadcrumbItems; return breadcrumb; } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DevicesBreadcrumbFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DevicesBreadcrumbFactory }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DevicesBreadcrumbFactory, decorators: [{ type: Injectable }] }); const deviceListRoutes = [ { path: 'device', component: DeviceListComponent } ]; class DeviceListModule { static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DeviceListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); } static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: DeviceListModule, imports: [CoreModule, CommonModule, DeviceGridModule, PopoverModule, TooltipModule, i1$1.RouterModule, DeviceListComponent, AddSmartGroupComponent] }); } static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DeviceListModule, providers: [ hookNavigator(DeviceListNavigationFactory), hookBreadcrumb(DevicesBreadcrumbFactory), hookDataGridActionControls(ActionControlsFactory) ], imports: [CoreModule, CommonModule, DeviceGridModule, PopoverModule, TooltipModule, RouterModule.forChild(deviceListRoutes), DeviceListComponent, AddSmartGroupComponent] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: DeviceListModule, decorators: [{ type: NgModule, args: [{ imports: [ CoreModule, CommonModule, DeviceGridModule, PopoverModule, TooltipModule, RouterModule.forChild(deviceListRoutes), DeviceListComponent, AddSmartGroupComponent ], exports: [], providers: [ hookNavigator(DeviceListNavigationFactory), hookBreadcrumb(DevicesBreadcrumbFactory), hookDataGridActionControls(ActionControlsFactory) ] }] }] }); /** * Generated bundle index. Do not edit. */ export { AddSmartGroupComponent, DeviceListComponent, DeviceListExtensionService, DeviceListModule, DeviceListNavigationFactory, DevicesBreadcrumbFactory, hookDeviceListColumns }; //# sourceMappingURL=c8y-ngx-components-device-list.mjs.map