@c8y/ngx-components 1022.26.1 → 1022.28.2
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/core/search/inventory-search.service.d.ts +4 -3
- package/core/search/inventory-search.service.d.ts.map +1 -1
- package/core/search/search-input.component.d.ts +5 -2
- package/core/search/search-input.component.d.ts.map +1 -1
- package/core/search/search.model.d.ts +4 -0
- package/core/search/search.model.d.ts.map +1 -1
- package/core/search/search.service.d.ts +2 -1
- package/core/search/search.service.d.ts.map +1 -1
- package/core/select/typeahead.component.d.ts +2 -1
- package/core/select/typeahead.component.d.ts.map +1 -1
- package/device-grid/device-grid.component.d.ts.map +1 -1
- package/device-grid/device-grid.service.d.ts +4 -3
- package/device-grid/device-grid.service.d.ts.map +1 -1
- package/echart/charts.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugins.component.d.ts +3 -0
- package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +2 -2
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs +2 -2
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs +21 -13
- package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs +1 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart.mjs +22 -70
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +41 -21
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-map.mjs +84 -26
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +2 -2
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +2 -2
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +2 -2
- package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-search.mjs +328 -210
- package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs +36 -16
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +7390 -7345
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +27 -0
- package/locales/es.po +27 -0
- package/locales/fr.po +27 -0
- package/locales/ja_JP.po +27 -0
- package/locales/ko.po +27 -0
- package/locales/locales.pot +25 -3
- package/locales/nl.po +27 -0
- package/locales/pl.po +27 -0
- package/locales/pt_BR.po +27 -0
- package/locales/zh_CN.po +27 -0
- package/locales/zh_TW.po +27 -0
- package/map/map.service.d.ts +13 -10
- package/map/map.service.d.ts.map +1 -1
- package/package.json +1 -1
- package/search/columns/asset-type-search-grid-column.d.ts.map +1 -1
- package/search/search-action.component.d.ts +12 -8
- package/search/search-action.component.d.ts.map +1 -1
- package/search/search-custom-filters.component.d.ts +18 -4
- package/search/search-custom-filters.component.d.ts.map +1 -1
- package/search/search-grid.component.d.ts +14 -14
- package/search/search-grid.component.d.ts.map +1 -1
- package/search/search-results.component.d.ts +3 -1
- package/search/search-results.component.d.ts.map +1 -1
- package/search/search.module.d.ts.map +1 -1
- package/search/search.service.d.ts +14 -6
- package/search/search.service.d.ts.map +1 -1
- package/sub-assets/sub-assets.service.d.ts +9 -5
- package/sub-assets/sub-assets.service.d.ts.map +1 -1
- package/echart/services/custom-measurements.service.d.ts +0 -12
- package/echart/services/custom-measurements.service.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-search.mjs","sources":["../../search/search.service.ts","../../search/columns/asset-type-search-grid-column.ts","../../search/search-config.model.ts","../../search/search-grid.component.ts","../../search/search-grid.component.html","../../search/search-results.component.ts","../../search/search-results.component.html","../../search/search-custom-filters.component.ts","../../search/search-custom-filters.component.html","../../search/search-action.component.ts","../../search/search-action.component.html","../../search/search.module.ts","../../search/c8y-ngx-components-search.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { QueriesUtil } from '@c8y/client';\nimport {\n ActionControl,\n BulkActionControl,\n Column,\n Pagination,\n SearchFilters\n} from '@c8y/ngx-components';\nimport { AssetNodeService } from '@c8y/ngx-components/assets-navigator';\nimport {\n AlarmsDeviceGridColumn,\n DeviceGridService,\n ImeiDeviceGridColumn,\n ModelDeviceGridColumn,\n NameDeviceGridColumn,\n RegistrationDateDeviceGridColumn,\n SerialNumberDeviceGridColumn,\n SystemIdDeviceGridColumn\n} from '@c8y/ngx-components/device-grid';\nimport { BehaviorSubject } from 'rxjs';\n@Injectable({\n providedIn: 'root'\n})\nexport class AssetSearchService {\n GRID_CONFIG_STORAGE_KEY = 'search-grid-config';\n DEFAULT_PAGE_SIZE = 50;\n getGlobalSearchData = this.getSearchData.bind(this);\n appliedFilters$: BehaviorSubject<{\n [SearchFilters.ALL_FILTERS]: boolean;\n [SearchFilters.ONLY_GROUPS_AND_ASSETS]: boolean;\n [SearchFilters.ONLY_DEVICES]: boolean;\n }> = new BehaviorSubject({\n allFilters: true,\n onlyDevices: true,\n onlyGroupsAndAssets: true\n });\n private queriesUtil: QueriesUtil;\n constructor(\n private deviceGridService: DeviceGridService,\n private assetNodeService: AssetNodeService\n ) {\n this.queriesUtil = new QueriesUtil();\n }\n\n /**\n * Resets the status of applied filters, used during the search.\n * Applies only to filters: 'All', 'Show only devices', 'Show only groups and assets'.\n */\n resetAppliedFilters() {\n this.appliedFilters$.next({\n allFilters: true,\n onlyDevices: true,\n onlyGroupsAndAssets: true\n });\n }\n\n buildCombinedRootQueryFilter(columns: Column[], pagination: Pagination) {\n const rootQuery = {\n __filter: {\n __and: { __not: { __has: `c8y_IsBinary` } }\n }\n };\n\n const { onlyDevices, onlyGroupsAndAssets } = this.appliedFilters$.value;\n const searchQuery = this.buildSearchQuery({ onlyDevices, onlyGroupsAndAssets });\n\n const userQuery = this.deviceGridService.getQueryObj(columns, pagination);\n const queryPart = this.queriesUtil.addOrderbys(rootQuery, userQuery.__orderby, 'append');\n const fullQuery = this.queriesUtil.addAndFilter(queryPart, userQuery.__filter);\n const queryWithSearch = this.queriesUtil.addAndFilter(fullQuery, searchQuery);\n return this.queriesUtil.buildQuery(queryWithSearch);\n }\n\n async getData(columns: Column[], pagination: Pagination, text?: string) {\n const query = this.buildCombinedRootQueryFilter(columns, pagination);\n return this.assetNodeService.getAllInventories({ ...pagination, query, text });\n }\n\n getDefaultColumns(): Column[] {\n const defaultColumns = [\n new NameDeviceGridColumn({ sortOrder: 'asc' }),\n new ModelDeviceGridColumn(),\n new SerialNumberDeviceGridColumn({ visible: false }),\n new RegistrationDateDeviceGridColumn({ visible: false }),\n new SystemIdDeviceGridColumn({ visible: false }),\n new ImeiDeviceGridColumn({ visible: false }),\n new AlarmsDeviceGridColumn()\n ];\n return defaultColumns;\n }\n\n getDefaultActionControls(): ActionControl[] {\n return [];\n }\n\n getDefaultBulkActionControls(): BulkActionControl[] {\n return [];\n }\n\n getDefaultPagination(): Pagination {\n return {\n pageSize: 25,\n currentPage: 1\n };\n }\n\n private buildSearchQuery(model) {\n const filter: any = {};\n const ors = [];\n if (model.types?.length) {\n ors.push({ type: { __in: model.types } });\n }\n if (model.onlyDevices) {\n ors.push({ __has: 'c8y_IsDevice' });\n }\n if (model.onlyGroupsAndAssets) {\n ors.push({ __has: 'c8y_IsDynamicGroup' });\n ors.push({ __has: 'c8y_IsDeviceGroup' });\n }\n if (ors.length) {\n filter.__or = ors;\n }\n return filter;\n }\n\n private async getSearchData(\n text: string,\n pagination: Pagination = { currentPage: 1, pageSize: this.DEFAULT_PAGE_SIZE }\n ) {\n const { onlyDevices, onlyGroupsAndAssets } = this.appliedFilters$.value;\n const query = this.buildSearchQuery({ onlyDevices, onlyGroupsAndAssets });\n const queryString = this.queriesUtil.buildQuery(query);\n\n return this.assetNodeService.getAllInventories({ ...pagination, query: queryString, text });\n }\n}\n","import {\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext,\n SearchFilters\n} from '@c8y/ngx-components';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { AssetSearchService } from '../search.service';\nimport { AssetTypeGridColumn } from '@c8y/ngx-components/data-grid-columns/asset-type';\n\nexport class AssetTypeSearchGridColumn extends AssetTypeGridColumn {\n constructor(\n hideExtendedFilters: boolean,\n initialColumnConfig?: ColumnConfig,\n assetSearchService?: AssetSearchService,\n customPlaceholder?: string\n ) {\n super(initialColumnConfig);\n\n this.filterable = true;\n this.filteringConfig = this.getFilteringConfig(\n hideExtendedFilters,\n assetSearchService,\n customPlaceholder\n );\n }\n\n private getFilteringConfig(\n hideExtendedFilters: boolean,\n assetSearchService: AssetSearchService,\n customPlaceholder?: string\n ) {\n return {\n fields: [\n ...getBasicInputArrayFormFieldConfig({\n key: 'types',\n label: gettext('Show items with type'),\n addText: gettext('Add next`type`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: customPlaceholder ? customPlaceholder : gettext('building`e.g. house`'),\n optional: !hideExtendedFilters\n }),\n {\n key: SearchFilters.ALL_FILTERS,\n type: 'checkbox',\n hide: hideExtendedFilters,\n props: {\n indeterminate: false,\n disabled: false,\n label: gettext('All'),\n click: (field, clickEvent) => {\n const { checked } = clickEvent.target;\n\n // Handle checked state\n if (checked) {\n field.form.get(SearchFilters.ONLY_DEVICES).setValue(true);\n field.form.get(SearchFilters.ONLY_GROUPS_AND_ASSETS).setValue(true);\n\n // Emit new state\n assetSearchService.appliedFilters$.next({\n [SearchFilters.ALL_FILTERS]: checked,\n [SearchFilters.ONLY_DEVICES]: true,\n [SearchFilters.ONLY_GROUPS_AND_ASSETS]: true\n });\n }\n }\n },\n expressionProperties: {\n 'props.indeterminate': (model: any, formState: any, field: FormlyFieldConfig) => {\n // Do nothing\n if (field.form.get(SearchFilters.ALL_FILTERS).value === true) {\n return;\n }\n // Set indeterminate state\n if (\n !field.form.get(SearchFilters.ONLY_DEVICES).value ||\n !field.form.get(SearchFilters.ONLY_GROUPS_AND_ASSETS).value\n ) {\n field.form.get(SearchFilters.ALL_FILTERS).setValue(null);\n return true;\n }\n return false;\n },\n 'props.disabled': (model: any, formState: any, field: FormlyFieldConfig) => {\n if (field.form.get(SearchFilters.ALL_FILTERS).value === true) {\n return true;\n }\n return false;\n }\n },\n hooks: {\n onInit: field => {\n // Get initial state\n const { allFilters } = assetSearchService?.appliedFilters$?.value;\n field.formControl.setValue(allFilters);\n }\n }\n },\n {\n key: SearchFilters.ONLY_DEVICES,\n type: 'checkbox',\n hide: hideExtendedFilters,\n props: {\n indeterminate: false,\n label: gettext('Show only devices'),\n click: (field, clickEvent) => {\n const oldFilterValue = assetSearchService.appliedFilters$.value;\n const { checked } = clickEvent.target;\n\n // Handle checked state\n if (checked) {\n field.form.get(SearchFilters.ALL_FILTERS).setValue(true);\n // Emit new state\n assetSearchService.appliedFilters$.next({\n ...oldFilterValue,\n [SearchFilters.ALL_FILTERS]: true,\n [SearchFilters.ONLY_DEVICES]: checked\n });\n return;\n }\n // Handle unchecked state\n field.form.get(SearchFilters.ALL_FILTERS).setValue(null); // Trigger indeterminate state\n field.form.get(SearchFilters.ONLY_GROUPS_AND_ASSETS).setValue(true);\n\n // Emit new state\n assetSearchService.appliedFilters$.next({\n [SearchFilters.ALL_FILTERS]: null,\n [SearchFilters.ONLY_GROUPS_AND_ASSETS]: true,\n [SearchFilters.ONLY_DEVICES]: checked\n });\n }\n },\n hooks: {\n onInit: field => {\n // Get initial state\n const { onlyDevices } = assetSearchService?.appliedFilters$?.value;\n field.formControl.setValue(onlyDevices);\n }\n }\n },\n {\n key: SearchFilters.ONLY_GROUPS_AND_ASSETS,\n type: 'checkbox',\n hide: hideExtendedFilters,\n props: {\n indeterminate: false,\n label: gettext('Show only groups and assets'),\n click: (field, clickEvent) => {\n const oldFilterValue = assetSearchService.appliedFilters$.value;\n const { checked } = clickEvent.target;\n\n // Handle checked state\n if (checked) {\n field.form.get(SearchFilters.ALL_FILTERS).setValue(true);\n // Emit new state\n assetSearchService.appliedFilters$.next({\n ...oldFilterValue,\n [SearchFilters.ALL_FILTERS]: true,\n [SearchFilters.ONLY_GROUPS_AND_ASSETS]: checked\n });\n return;\n }\n // Handle unchecked state\n field.form.get(SearchFilters.ALL_FILTERS).setValue(null); // Trigger indeterminate state\n field.form.get(SearchFilters.ONLY_DEVICES).setValue(true);\n\n // Emit new state\n assetSearchService.appliedFilters$.next({\n [SearchFilters.ALL_FILTERS]: null,\n [SearchFilters.ONLY_GROUPS_AND_ASSETS]: checked,\n [SearchFilters.ONLY_DEVICES]: true\n });\n }\n },\n hooks: {\n onInit: field => {\n // Get initial state\n const { onlyGroupsAndAssets } = assetSearchService?.appliedFilters$?.value;\n field.formControl.setValue(onlyGroupsAndAssets);\n }\n }\n }\n ],\n /**\n * Adding devices and groups to a filter is already handled in {@link AssetSearchService#buildSearchQuery}\n * */\n getFilter(model: any): any {\n const filter: any = {};\n const ors = [];\n if (model.types?.length) {\n ors.push({ type: { __in: model.types } });\n }\n if (ors.length) {\n filter.__or = ors;\n }\n return filter;\n }\n };\n }\n}\n","import { InjectionToken } from '@angular/core';\nexport const SEARCH_CONFIG = new InjectionToken<SearchConfig>('SearchConfig');\n\n/**\n * Configuration object of the SearchModule.\n */\nexport interface SearchConfig {\n /**\n * Allows to enable advanced filters.\n * Default value: true.\n */\n showAdvancedFilters?: boolean;\n /**\n * Allows a custom placeholder.\n * Default value: ''\n */\n placeholder?: string;\n}\n","import { Component, EventEmitter, Inject, Input, Optional, Output, ViewChild } from '@angular/core';\nimport { IManagedObject, SmartGroupsService } from '@c8y/client';\nimport {\n ActionControl,\n BuiltInActionType,\n BulkActionControl,\n Column,\n DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER,\n DATA_GRID_CONFIGURATION_STRATEGY,\n DataGridComponent,\n DataSourceModifier,\n FilteringActionType,\n FilteringModifier,\n GridConfigContextProvider,\n Pagination,\n Row,\n SearchFilters,\n ServerSideDataResult,\n UserPreferencesConfigurationStrategy,\n UserPreferencesGridConfigContext,\n gettext,\n ColumnDirective,\n EmptyStateComponent,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport {\n AlarmsDeviceGridColumn,\n ImeiDeviceGridColumn,\n ModelDeviceGridColumn,\n NameDeviceGridColumn,\n RegistrationDateDeviceGridColumn,\n SerialNumberDeviceGridColumn,\n SystemIdDeviceGridColumn\n} from '@c8y/ngx-components/device-grid';\nimport {\n DeleteAssetsModalComponent,\n DeleteModalCheckboxes,\n SubAssetsService\n} from '@c8y/ngx-components/sub-assets';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { AssetTypeSearchGridColumn } from './columns/asset-type-search-grid-column';\nimport { SEARCH_CONFIG, SearchConfig } from './search-config.model';\nimport { AssetSearchService } from './search.service';\n\nimport { NgFor } from '@angular/common';\n\n@Component({\n selector: 'c8y-search-grid',\n templateUrl: './search-grid.component.html',\n providers: [\n {\n provide: DATA_GRID_CONFIGURATION_STRATEGY,\n useClass: UserPreferencesConfigurationStrategy\n },\n {\n provide: DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER,\n useExisting: SearchGridComponent\n }\n ],\n imports: [DataGridComponent, NgFor, ColumnDirective, EmptyStateComponent, C8yTranslatePipe]\n})\nexport class SearchGridComponent implements GridConfigContextProvider {\n @Input('parent-group') parentGroup: IManagedObject;\n @Input() title = '';\n @Input() loadingItemsLabel: string = gettext('Loading results…');\n @Input('columns') set _columns(value: Column[]) {\n if (value) {\n this.columns = value;\n } else {\n this.columns = this.assetSearchService.getDefaultColumns();\n }\n }\n @Input('pagination') set _pagination(value: Pagination) {\n if (value) {\n this.pagination = value;\n }\n }\n @Input('actionControls') set _actionControls(value: ActionControl[]) {\n if (value) {\n this.actionControls = value;\n } else {\n this.actionControls = this.assetSearchService.getDefaultActionControls();\n }\n }\n @Input() selectable = false;\n @Input('bulkActionControls') set _bulkActionControls(value: BulkActionControl[]) {\n if (value) {\n this.bulkActionControls = value;\n } else {\n this.bulkActionControls = this.assetSearchService.getDefaultBulkActionControls();\n }\n }\n @Output() onColumnsChange: EventEmitter<Column[]> = new EventEmitter<Column[]>();\n\n @Input()\n searchText = '';\n\n @Input()\n filteringName: string;\n\n /** The name of the key where columns configuration will be stored. */\n @Input() columnsConfigKey: string;\n\n columns: Column[];\n pagination: Pagination = this.assetSearchService.getDefaultPagination();\n actionControls: ActionControl[];\n bulkActionControls: BulkActionControl[] = this.assetSearchService.getDefaultBulkActionControls();\n showAdvancedFilters: boolean;\n customPlaceholder: string;\n serverSideDataCallback: any;\n refresh: EventEmitter<any> = new EventEmitter();\n\n @ViewChild(DataGridComponent, { static: true })\n dataGrid: DataGridComponent;\n\n private sizeCount = 0;\n\n constructor(\n public assetSearchService: AssetSearchService,\n private bsModalService: BsModalService,\n private smartGroupsService: SmartGroupsService,\n private subAssetsGridService: SubAssetsService,\n @Optional() @Inject(SEARCH_CONFIG) public moduleConfig: SearchConfig\n ) {\n this.showAdvancedFilters = moduleConfig?.showAdvancedFilters ?? false;\n this.customPlaceholder = moduleConfig?.placeholder ?? undefined;\n }\n\n getGridConfigContext(): UserPreferencesGridConfigContext {\n return { key: this.columnsConfigKey || this.assetSearchService.GRID_CONFIG_STORAGE_KEY };\n }\n\n ngOnInit(): void {\n if (!this.filteringName) {\n this.columns = [\n new AssetTypeSearchGridColumn(\n this.showAdvancedFilters,\n { sortOrder: 'desc' },\n this.assetSearchService,\n this.customPlaceholder\n ),\n ...this.assetSearchService.getDefaultColumns()\n ];\n } else {\n this.columns = [\n new AssetTypeSearchGridColumn(\n this.showAdvancedFilters,\n { sortOrder: 'desc' },\n this.assetSearchService\n ),\n new NameDeviceGridColumn({\n sortOrder: 'asc',\n filter: { externalFilterQuery: { names: [this.filteringName] } }\n }),\n new ModelDeviceGridColumn(),\n new SerialNumberDeviceGridColumn({ visible: false }),\n new RegistrationDateDeviceGridColumn({ visible: false }),\n new SystemIdDeviceGridColumn({ visible: false }),\n new ImeiDeviceGridColumn({ visible: false }),\n new AlarmsDeviceGridColumn()\n ];\n }\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n this.setActionControls();\n }\n\n ngAfterViewInit() {\n this.setInitialFilterForTypeColumn();\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const response = await this.assetSearchService.getData(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n dataSourceModifier.searchText\n );\n const { res, data, paging } = response;\n\n if (paging.currentPage === 1) {\n this.sizeCount = 0;\n }\n this.sizeCount += data.length;\n this.onColumnsChange.emit(dataSourceModifier.columns);\n\n return {\n res,\n data,\n paging,\n filteredSize: this.sizeCount,\n size: undefined\n };\n }\n\n setActionControls() {\n const actionControls: ActionControl[] = [];\n const deleteAction: ActionControl = {\n type: BuiltInActionType.Delete,\n callback: (asset: Row) => this.onDeleteAsset(asset as IManagedObject, this.parentGroup)\n };\n actionControls.push(deleteAction);\n if (!this.actionControls) {\n this.actionControls = actionControls;\n }\n }\n\n updateFiltering(\n columnNames: string[],\n action: {\n type: FilteringActionType;\n payload?: { filteringModifier: FilteringModifier };\n }\n ) {\n const { type } = action;\n if (type === FilteringActionType.ResetFilter) {\n this.dataGrid.clearFilters();\n } else {\n /**\n * TODO: find better solution. After new changes from DM team, we're running into race condition where\n * this.dataGrid.updateFiltering is executed before this.configurationStrategy.getConfig$() value is emitted.\n * Columns setter sets columns after this.dataGrid.updateFiltering executes its logic. Value of this.columns in\n * dataGrid.updateFiltering is just not yet set.\n */\n setTimeout(() => {\n this.dataGrid.updateFiltering(columnNames, action, false);\n }, 500);\n }\n }\n\n onColumnFilterReset(column: Column) {\n if (column.name === 'type') {\n this.assetSearchService.resetAppliedFilters();\n }\n }\n\n private onDeleteAsset(asset, parentRef) {\n const initialState = {\n showWithDeviceUserCheckbox: this.subAssetsGridService.shouldShowWithDeviceUserCheckbox(asset),\n asset,\n showWithCascadeCheckbox: !this.smartGroupsService.isSmartGroup(asset)\n };\n\n const modalRef = this.bsModalService.show(DeleteAssetsModalComponent, { initialState });\n\n modalRef.content.closeSubject.subscribe(async (result: DeleteModalCheckboxes) => {\n if (result) {\n await this.subAssetsGridService.deleteAsset(asset, parentRef, result);\n this.refresh.emit();\n }\n });\n }\n\n private setInitialFilterForTypeColumn() {\n const checkboxes = this.assetSearchService.appliedFilters$.value;\n // Set filter only when all checkboxes are not selected\n if (\n checkboxes[SearchFilters.ONLY_DEVICES] !== checkboxes[SearchFilters.ONLY_GROUPS_AND_ASSETS]\n ) {\n const externalFilterQuery = {\n [SearchFilters.ONLY_DEVICES]: checkboxes[SearchFilters.ONLY_DEVICES],\n [SearchFilters.ONLY_GROUPS_AND_ASSETS]: checkboxes[SearchFilters.ONLY_GROUPS_AND_ASSETS]\n };\n this.updateFiltering(['type'], {\n type: FilteringActionType.ApplyFilter,\n payload: {\n filteringModifier: {\n externalFilterQuery\n }\n }\n });\n }\n }\n}\n","<div class=\"card--grid--fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"'Search results' | translate\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [actionControls]=\"actionControls\"\n [selectable]=\"selectable\"\n [bulkActionControls]=\"bulkActionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"'auto'\"\n [showSearch]=\"true\"\n [searchText]=\"searchText\"\n [refresh]=\"refresh\"\n (onColumnFilterReset)=\"onColumnFilterReset($event)\"\n >\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'Refine your search terms or check your spelling.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-data-grid>\n</div>","import { Component, OnDestroy, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SearchGridComponent } from './search-grid.component';\nimport {\n FilteringActionType,\n AlertService,\n Status,\n gettext,\n Alert,\n TitleComponent,\n C8yTranslateDirective\n} from '@c8y/ngx-components';\nimport { NgIf } from '@angular/common';\n\n@Component({\n selector: 'c8y-search-results',\n templateUrl: './search-results.component.html',\n imports: [TitleComponent, C8yTranslateDirective, NgIf, SearchGridComponent]\n})\nexport class SearchResultsComponent implements OnDestroy {\n filter = '';\n searchText = '';\n @ViewChild(SearchGridComponent, { static: true })\n searchGrid: SearchGridComponent;\n filteringName: string;\n\n private readonly WARNING_TIMEOUT_TIME = 3000;\n private unsubscribe$ = new Subject<void>();\n\n constructor(\n private route: ActivatedRoute,\n private alert: AlertService\n ) {}\n\n ngOnInit() {\n this.route.queryParams.pipe(takeUntil(this.unsubscribe$)).subscribe(params => {\n if (params.filter) {\n this.filteringName = params.filter;\n }\n });\n }\n\n ngAfterViewInit(): void {\n this.route.queryParams\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe(({ filter, search }) => this.onQueryParamsChange(filter, search));\n }\n\n resetSearch() {\n if (this.searchGrid.dataGrid.searchText) {\n this.alert.add({\n text: gettext('Search reset. Full text search does not support filtering.'),\n type: Status.WARNING,\n timeout: this.WARNING_TIMEOUT_TIME\n } as Alert);\n this.searchText = '';\n this.searchGrid.dataGrid.searchText = '';\n }\n }\n\n resetFilter() {\n this.filter = '';\n if (this.searchGrid.dataGrid.filteringApplied) {\n this.alert.add({\n text: gettext('Filter reset. Full text search does not support filtering.'),\n type: Status.WARNING,\n timeout: this.WARNING_TIMEOUT_TIME\n } as Alert);\n this.searchGrid.dataGrid.clearFilters(false);\n }\n }\n\n ngOnDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n private onQueryParamsChange(filter: string, searchTerm: string) {\n if (!this.shouldFilter(filter) && searchTerm) {\n this.searchText = searchTerm || '';\n }\n }\n\n private shouldFilter(filter) {\n if (!filter) {\n return false;\n }\n this.resetSearch();\n this.filter = filter || '';\n this.searchGrid.updateFiltering(['name'], {\n type: FilteringActionType.ApplyFilter,\n payload: {\n filteringModifier: {\n externalFilterQuery: {\n names: [this.filter]\n }\n }\n }\n });\n return true;\n }\n}\n","<c8y-title>\n <span translate class=\"p-r-4\">Search</span>\n <small\n ngNonBindable\n translate\n *ngIf=\"searchText\"\n [translateParams]=\"{\n searchHint: searchText\n }\"\n >searching \"{{ searchHint }}\"</small\n >\n <small\n ngNonBindable\n translate\n *ngIf=\"filter\"\n [translateParams]=\"{\n filterHint: filter\n }\"\n >filtered by \"{{ filterHint }}\"</small\n >\n</c8y-title>\n\n<c8y-search-grid [searchText]=\"searchText\" [filteringName]=\"filteringName\"></c8y-search-grid>\n","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { gettext, SearchFilters, C8yTranslatePipe } from '@c8y/ngx-components';\nimport { AssetSearchService } from './search.service';\nimport { NgFor } from '@angular/common';\n\nexport type Checkbox = {\n label: string;\n name: string;\n value: boolean;\n indeterminate?: boolean;\n isDisabled?: boolean;\n};\n\n@Component({\n selector: 'c8y-search-custom-filters',\n templateUrl: 'search-custom-filters.component.html',\n imports: [NgFor, C8yTranslatePipe]\n})\nexport class SearchCustomFiltersComponent implements OnInit {\n @Output() customDataQuery = new EventEmitter();\n @Output() refresh = new EventEmitter();\n\n checkboxesState: Array<Checkbox> = [\n {\n label: gettext('All'),\n name: SearchFilters.ALL_FILTERS,\n value: true,\n indeterminate: false,\n isDisabled: true\n },\n { label: gettext('Show only devices'), name: SearchFilters.ONLY_DEVICES, value: true },\n {\n label: gettext('Show only groups and assets'),\n name: SearchFilters.ONLY_GROUPS_AND_ASSETS,\n value: true\n }\n ];\n constructor(private assetSearchService: AssetSearchService) {}\n\n ngOnInit() {\n this.customDataQuery.next(this.assetSearchService.getGlobalSearchData);\n }\n\n onCheckboxChange(event: Event, checkbox: Checkbox): void {\n const { checked } = event.target as HTMLInputElement;\n\n if (checked == undefined) {\n return;\n }\n\n switch (checkbox.name) {\n case SearchFilters.ALL_FILTERS:\n this.onSelectAll(checkbox, checked);\n break;\n case SearchFilters.ONLY_DEVICES:\n this.onAllDevices(checkbox, checked);\n break;\n case SearchFilters.ONLY_GROUPS_AND_ASSETS:\n this.onGroupsAndAssets(checkbox, checked);\n break;\n }\n\n // Handle allFilters checkbox when ONLY_GROUPS_AND_ASSETS and ONLY_DEVICES are selected\n if (\n this.getCheckbox(SearchFilters.ONLY_DEVICES).value &&\n this.getCheckbox(SearchFilters.ONLY_GROUPS_AND_ASSETS).value\n ) {\n Object.assign(this.getCheckbox(SearchFilters.ALL_FILTERS), {\n indeterminate: false,\n isDisabled: true,\n value: true\n });\n }\n\n this.assetSearchService.appliedFilters$.next({\n [SearchFilters.ALL_FILTERS]: this.getCheckbox(SearchFilters.ALL_FILTERS).value,\n [SearchFilters.ONLY_DEVICES]: this.getCheckbox(SearchFilters.ONLY_DEVICES).value,\n [SearchFilters.ONLY_GROUPS_AND_ASSETS]: this.getCheckbox(SearchFilters.ONLY_GROUPS_AND_ASSETS)\n .value\n });\n this.refresh.next(null);\n }\n\n private saveCheckboxValue(checkbox, value) {\n checkbox.value = value;\n }\n\n private onSelectAll(currentCheckbox: Checkbox, checked: boolean) {\n // Block unchecked state\n if (checked) {\n this.saveCheckboxValue(currentCheckbox, checked);\n }\n this.getCheckbox(SearchFilters.ALL_FILTERS).isDisabled = true;\n this.getCheckbox(SearchFilters.ONLY_DEVICES).value = true;\n this.getCheckbox(SearchFilters.ONLY_GROUPS_AND_ASSETS).value = true;\n }\n\n private onAllDevices(currentCheckbox: Checkbox, checked: boolean) {\n this.saveCheckboxValue(currentCheckbox, checked);\n\n Object.assign(this.getCheckbox(SearchFilters.ALL_FILTERS), {\n indeterminate: true,\n isDisabled: false,\n value: null\n });\n\n this.getCheckbox(SearchFilters.ONLY_GROUPS_AND_ASSETS).value = true;\n }\n\n private onGroupsAndAssets(currentCheckbox: Checkbox, checked: boolean) {\n this.saveCheckboxValue(currentCheckbox, checked);\n\n Object.assign(this.getCheckbox(SearchFilters.ALL_FILTERS), {\n indeterminate: true,\n isDisabled: false,\n value: null\n });\n\n this.getCheckbox(SearchFilters.ONLY_DEVICES).value = true;\n }\n\n private getCheckbox(checkboxName: SearchFilters): Checkbox {\n return this.checkboxesState.find(checkbox => checkbox.name === checkboxName);\n }\n}\n","<label class=\"c8y-checkbox\" *ngFor=\"let checkbox of checkboxesState\">\n <input\n type=\"checkbox\"\n [checked]=\"checkbox.value\"\n [indeterminate]=\"checkbox.indeterminate\"\n (click)=\"onCheckboxChange($event, checkbox)\"\n [attr.disabled]=\"checkbox.isDisabled ? true : null\"\n />\n <span></span>\n <span>{{ checkbox.label | translate }}</span>\n</label>\n","import { Component, EventEmitter, Inject, Optional } from '@angular/core';\nimport { IManagedObject, IResultList } from '@c8y/client';\nimport { NavigationExtras, Router } from '@angular/router';\nimport { RouterService as C8yRouter, SearchInputComponent } from '@c8y/ngx-components';\nimport { Observable, UnaryFunction } from 'rxjs';\nimport { SearchConfig, SEARCH_CONFIG } from './search-config.model';\nimport { NgIf } from '@angular/common';\nimport { SearchCustomFiltersComponent } from './search-custom-filters.component';\n\n@Component({\n selector: 'c8y-search-action',\n templateUrl: './search-action.component.html',\n imports: [SearchInputComponent, NgIf, SearchCustomFiltersComponent]\n})\nexport class SearchActionComponent {\n showAdvancedFilters: boolean;\n customPlaceholder: string;\n customQuery: UnaryFunction<string, Observable<IResultList<IManagedObject>>>;\n typeaheadReload = new EventEmitter();\n\n constructor(\n private c8yRouter: C8yRouter,\n private router: Router,\n @Optional() @Inject(SEARCH_CONFIG) public moduleConfig: SearchConfig\n ) {\n this.showAdvancedFilters = moduleConfig?.showAdvancedFilters ?? true;\n this.customPlaceholder = moduleConfig?.placeholder;\n }\n\n triggerDataLoad() {\n this.typeaheadReload.next(null);\n }\n\n onSearch(on: string) {\n this.navigate(['/assetsearch'], {\n queryParams: { search: on },\n replaceUrl: true\n });\n }\n\n onFilter(on: string) {\n this.navigate(['/assetsearch'], {\n queryParams: { filter: on },\n replaceUrl: true\n });\n }\n\n onClick(mo: IManagedObject) {\n this.router.navigateByUrl(this.c8yRouter.getHref(mo, '/'));\n }\n\n private navigate(commands: any[], extras?: NavigationExtras) {\n this.router\n .navigateByUrl('/', { skipLocationChange: true })\n .then(() => this.router.navigate(commands, extras));\n }\n}\n","<c8y-search-input\n (filter)=\"onFilter($event)\"\n (search)=\"onSearch($event)\"\n (onClick)=\"onClick($event)\"\n [enableCustomTemplatePlaceholder]=\"true\"\n [customPlaceholder]=\"customPlaceholder\"\n [customDataQuery]=\"customQuery\"\n [externalTerm]=\"typeaheadReload\"\n>\n <c8y-search-custom-filters\n *ngIf=\"showAdvancedFilters\"\n class=\"d-flex gap-16 p-l-4 p-l-24 p-r-24\"\n (refresh)=\"triggerDataLoad()\"\n (customDataQuery)=\"customQuery = $event\"\n ></c8y-search-custom-filters>\n</c8y-search-input>\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CoreModule, hookSearch, hookRoute, CoreSearchModule } from '@c8y/ngx-components';\nimport { DeviceGridModule } from '@c8y/ngx-components/device-grid';\nimport { SearchResultsComponent } from './search-results.component';\nimport { SearchGridComponent } from './search-grid.component';\nimport { SearchActionComponent } from './search-action.component';\nimport { AssetSearchService } from './search.service';\nimport { SearchCustomFiltersComponent } from './search-custom-filters.component';\nimport { SearchConfig, SEARCH_CONFIG } from './search-config.model';\nimport { AssetTypeCellRendererComponent } from '@c8y/ngx-components/data-grid-columns/asset-type';\n\n@NgModule({\n imports: [\n CoreModule,\n DeviceGridModule,\n CoreSearchModule,\n AssetTypeCellRendererComponent,\n SearchResultsComponent,\n SearchGridComponent,\n SearchActionComponent,\n SearchCustomFiltersComponent\n ],\n exports: [SearchResultsComponent, SearchGridComponent],\n providers: [\n AssetSearchService,\n hookRoute({\n path: 'assetsearch',\n component: SearchResultsComponent\n }),\n hookSearch({\n template: SearchActionComponent,\n onSearch: undefined\n })\n ]\n})\nexport class SearchModule {\n static config(config: SearchConfig = {}): ModuleWithProviders<SearchModule> {\n return {\n ngModule: SearchModule,\n providers: [\n {\n provide: SEARCH_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","i2","i1.AssetSearchService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-search.mjs","sources":["../../search/search.service.ts","../../search/search-config.model.ts","../../search/search-custom-filters.component.ts","../../search/search-custom-filters.component.html","../../search/search-action.component.ts","../../search/search-action.component.html","../../search/columns/asset-type-search-grid-column.ts","../../search/search-grid.component.ts","../../search/search-grid.component.html","../../search/search-results.component.ts","../../search/search-results.component.html","../../search/search.module.ts","../../search/c8y-ngx-components-search.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { QueriesUtil } from '@c8y/client';\nimport {\n ActionControl,\n BulkActionControl,\n Column,\n ContextRouteService,\n Pagination,\n PreviewService,\n SearchFilters,\n WILDCARD_SEARCH_FEATURE_KEY\n} from '@c8y/ngx-components';\nimport { AssetNodeService } from '@c8y/ngx-components/assets-navigator';\nimport {\n AlarmsDeviceGridColumn,\n DeviceGridService,\n ImeiDeviceGridColumn,\n ModelDeviceGridColumn,\n NameDeviceGridColumn,\n RegistrationDateDeviceGridColumn,\n SerialNumberDeviceGridColumn,\n SystemIdDeviceGridColumn\n} from '@c8y/ngx-components/device-grid';\nimport { BehaviorSubject, catchError, firstValueFrom, of } from 'rxjs';\n@Injectable({\n providedIn: 'root'\n})\nexport class AssetSearchService {\n GRID_CONFIG_STORAGE_KEY = 'search-grid-config';\n DEFAULT_PAGE_SIZE = 50;\n getGlobalSearchData = this.getSearchData.bind(this);\n appliedFilters$: BehaviorSubject<{\n [SearchFilters.ALL_FILTERS]: boolean;\n [SearchFilters.ONLY_GROUPS_AND_ASSETS]: boolean;\n [SearchFilters.ONLY_DEVICES]: boolean;\n [SearchFilters.CURRENT_HIERARCHY]: boolean;\n }> = new BehaviorSubject({\n allFilters: true,\n onlyDevices: true,\n onlyGroupsAndAssets: true,\n currentHierarchy: false\n });\n private queriesUtil: QueriesUtil;\n private previewService: PreviewService = inject(PreviewService);\n private deviceGridService: DeviceGridService = inject(DeviceGridService);\n private assetNodeService: AssetNodeService = inject(AssetNodeService);\n private contextRouteService: ContextRouteService = inject(ContextRouteService);\n\n constructor() {\n this.queriesUtil = new QueriesUtil();\n }\n\n /**\n * Resets the status of applied filters, used during the search.\n * Applies only to filters: 'All', 'Show only devices', 'Show only groups and assets'.\n */\n resetAppliedFilters() {\n this.appliedFilters$.next({\n allFilters: true,\n onlyDevices: true,\n onlyGroupsAndAssets: true,\n currentHierarchy: false\n });\n }\n\n buildCombinedRootQueryFilter(columns: Column[], pagination: Pagination) {\n const rootQuery = {\n __filter: {\n __and: { __not: { __has: `c8y_IsBinary` } }\n }\n };\n\n const { onlyDevices, onlyGroupsAndAssets } = this.appliedFilters$.value;\n const searchQuery = this.buildSearchQuery({ onlyDevices, onlyGroupsAndAssets });\n\n const userQuery = this.deviceGridService.getQueryObj(columns, pagination);\n const queryPart = this.queriesUtil.addOrderbys(rootQuery, userQuery.__orderby, 'append');\n const fullQuery = this.queriesUtil.addAndFilter(queryPart, userQuery.__filter);\n const queryWithSearch = this.queriesUtil.addAndFilter(fullQuery, searchQuery);\n return queryWithSearch;\n }\n\n async getData(columns: Column[], pagination: Pagination, text?: string) {\n const query = this.buildCombinedRootQueryFilter(columns, pagination);\n if (await this.isWildcardSearchEnabled()) {\n const wildcardQuery = this.queriesUtil.addAndFilter(query, {\n name: `*${text.trim().replace(/\\s+/g, '*')}*`\n });\n return this.assetNodeService.getAllInventories({\n ...pagination,\n query: this.queriesUtil.buildQuery(wildcardQuery)\n });\n }\n return this.assetNodeService.getAllInventories({\n ...pagination,\n query: this.queriesUtil.buildQuery(query),\n text\n });\n }\n\n getDefaultColumns(): Column[] {\n const defaultColumns = [\n new NameDeviceGridColumn({ sortOrder: 'asc' }),\n new ModelDeviceGridColumn(),\n new SerialNumberDeviceGridColumn({ visible: false }),\n new RegistrationDateDeviceGridColumn({ visible: false }),\n new SystemIdDeviceGridColumn({ visible: false }),\n new ImeiDeviceGridColumn({ visible: false }),\n new AlarmsDeviceGridColumn()\n ];\n return defaultColumns;\n }\n\n getDefaultActionControls(): ActionControl[] {\n return [];\n }\n\n getDefaultBulkActionControls(): BulkActionControl[] {\n return [];\n }\n\n getDefaultPagination(): Pagination {\n return {\n pageSize: 25,\n currentPage: 1\n };\n }\n\n async isWildcardSearchEnabled(): Promise<boolean> {\n return firstValueFrom(\n this.previewService.getState$(WILDCARD_SEARCH_FEATURE_KEY).pipe(catchError(() => of(true)))\n );\n }\n\n private buildSearchQuery(model) {\n const filter: any = {};\n const ors = [];\n if (model.types?.length) {\n ors.push({ type: { __in: model.types } });\n }\n if (model.onlyDevices) {\n ors.push({ __has: 'c8y_IsDevice' });\n }\n if (model.onlyGroupsAndAssets) {\n ors.push({ __has: 'c8y_IsDynamicGroup' });\n ors.push({ __has: 'c8y_IsDeviceGroup' });\n }\n if (!model.onlyDevices && !model.onlyGroupsAndAssets) {\n ors.push([\n { __has: 'c8y_IsDeviceGroup' },\n { __has: 'c8y_IsDevice' },\n { __has: 'c8y_IsAsset' }\n ]);\n }\n\n if (ors.length) {\n filter.__or = ors;\n }\n\n if (model.currentHierarchy && this.contextRouteService.activatedContextData?.contextData?.id) {\n filter.__and = [\n { __isinhierarchyof: this.contextRouteService.activatedContextData.contextData.id }\n ];\n }\n return filter;\n }\n\n /**\n * Get search data based on the provided text and pagination.\n * @param text The search text.\n * @param pagination The pagination options.\n * @returns The search results.\n */\n private async getSearchData(\n text: string,\n pagination: Pagination = { currentPage: 1, pageSize: this.DEFAULT_PAGE_SIZE }\n ) {\n const { onlyDevices, onlyGroupsAndAssets, currentHierarchy } = this.appliedFilters$.value;\n const query = this.buildSearchQuery({ onlyDevices, onlyGroupsAndAssets, currentHierarchy });\n const queryString = this.queriesUtil.buildQuery(query);\n if (await this.isWildcardSearchEnabled()) {\n const wildcardQuery = this.queriesUtil.addAndFilter(query, {\n name: `*${text.trim().replace(/\\s+/g, '*')}*`\n });\n return this.assetNodeService.getAllInventories({\n ...pagination,\n query: this.queriesUtil.buildQuery(wildcardQuery)\n });\n }\n return this.assetNodeService.getAllInventories({ ...pagination, query: queryString, text });\n }\n}\n","import { InjectionToken } from '@angular/core';\nexport const SEARCH_CONFIG = new InjectionToken<SearchConfig>('SearchConfig');\n\n/**\n * Configuration object of the SearchModule.\n */\nexport interface SearchConfig {\n /**\n * Allows to enable advanced filters.\n * Default value: true.\n */\n showAdvancedFilters?: boolean;\n /**\n * Allows a custom placeholder.\n * Default value: ''\n */\n placeholder?: string;\n}\n","import { AsyncPipe, NgFor, NgIf } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, OnInit, Output } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { ActivationEnd, Router } from '@angular/router';\nimport {\n C8yTranslatePipe,\n ContextRouteService,\n gettext,\n SearchFilters,\n TabComponent,\n TabsOutletComponent,\n ViewContext\n} from '@c8y/ngx-components';\nimport { filter, map, startWith } from 'rxjs/operators';\nimport { AssetSearchService } from './search.service';\n\nexport type Checkbox = {\n label: string;\n name: string;\n value: boolean;\n indeterminate?: boolean;\n isDisabled?: boolean;\n};\n\n@Component({\n selector: 'c8y-search-custom-filters',\n templateUrl: 'search-custom-filters.component.html',\n imports: [\n NgFor,\n C8yTranslatePipe,\n TabsOutletComponent,\n TabComponent,\n AsyncPipe,\n NgIf,\n FormsModule\n ]\n})\nexport class SearchCustomFiltersComponent implements OnInit {\n @Input() useTabs = false;\n @Output() customDataQuery = new EventEmitter();\n @Output() refresh = new EventEmitter();\n tabNames = {\n all: gettext('All'),\n devices: gettext('Devices'),\n groupsAndAssets: gettext('Groups and assets')\n };\n selectedTab: (typeof this.tabNames)[keyof typeof this.tabNames] = this.tabNames.all;\n\n checkboxesState: Array<Checkbox> = [\n {\n label: gettext('All'),\n name: SearchFilters.ALL_FILTERS,\n value: true,\n indeterminate: false,\n isDisabled: true\n },\n { label: gettext('Show only devices'), name: SearchFilters.ONLY_DEVICES, value: true },\n {\n label: gettext('Show only groups and assets'),\n name: SearchFilters.ONLY_GROUPS_AND_ASSETS,\n value: true\n }\n ];\n\n @Input()\n isOnlyHierarchyQuery = false;\n @Output()\n isOnlyHierarchyQueryChange = new EventEmitter<boolean>();\n\n private assetSearchService = inject(AssetSearchService);\n private contextRouteService = inject(ContextRouteService);\n private router = inject(Router);\n\n contextRouteData$ = this.router.events.pipe(\n filter(event => event instanceof ActivationEnd),\n map((routeData: ActivationEnd) => {\n const data = this.contextRouteService.getContextData(routeData.snapshot);\n if (data?.context === ViewContext.Group) {\n return data;\n }\n return null;\n }),\n takeUntilDestroyed()\n );\n\n context$ = this.contextRouteData$.pipe(\n startWith(this.contextRouteService.activatedContextData),\n takeUntilDestroyed()\n );\n\n ngOnInit() {\n this.customDataQuery.next(this.assetSearchService.getGlobalSearchData);\n }\n\n onCheckboxChange(event: Event, checkbox: Checkbox): void {\n const { checked } = event.target as HTMLInputElement;\n\n if (checked == undefined) {\n return;\n }\n\n switch (checkbox.name) {\n case SearchFilters.ALL_FILTERS:\n this.onSelectAll(checkbox, checked);\n break;\n case SearchFilters.ONLY_DEVICES:\n this.onAllDevices(checkbox, checked);\n break;\n case SearchFilters.ONLY_GROUPS_AND_ASSETS:\n this.onGroupsAndAssets(checkbox, checked);\n break;\n }\n\n // Handle allFilters checkbox when ONLY_GROUPS_AND_ASSETS and ONLY_DEVICES are selected\n if (\n this.getCheckbox(SearchFilters.ONLY_DEVICES).value &&\n this.getCheckbox(SearchFilters.ONLY_GROUPS_AND_ASSETS).value\n ) {\n Object.assign(this.getCheckbox(SearchFilters.ALL_FILTERS), {\n indeterminate: false,\n isDisabled: true,\n value: true\n });\n }\n\n this.onSearchFilterChange(\n this.getCheckbox(SearchFilters.ALL_FILTERS).value,\n this.getCheckbox(SearchFilters.ONLY_DEVICES).value,\n this.getCheckbox(SearchFilters.ONLY_GROUPS_AND_ASSETS).value\n );\n\n this.refresh.next(null);\n }\n\n onTabChange(\n tabName: (typeof this.tabNames)[keyof typeof this.tabNames] = this.tabNames.all\n ): void {\n this.selectedTab = tabName;\n this.onSearchFilterChange(\n tabName === this.tabNames.all,\n tabName === this.tabNames.devices,\n tabName === this.tabNames.groupsAndAssets,\n this.isOnlyHierarchyQuery\n );\n }\n\n onHierarchyQueryChange(checked: boolean): void {\n this.isOnlyHierarchyQuery = checked;\n this.isOnlyHierarchyQueryChange.next(checked);\n this.onSearchFilterChange(\n this.selectedTab === this.tabNames.all,\n this.selectedTab === this.tabNames.devices,\n this.selectedTab === this.tabNames.groupsAndAssets,\n checked\n );\n }\n\n onSearchFilterChange(\n all: boolean,\n devices: boolean,\n groupsAndAssets: boolean,\n currentHierarchy = false\n ) {\n this.assetSearchService.appliedFilters$.next({\n [SearchFilters.ALL_FILTERS]: all,\n [SearchFilters.ONLY_DEVICES]: devices,\n [SearchFilters.ONLY_GROUPS_AND_ASSETS]: groupsAndAssets,\n [SearchFilters.CURRENT_HIERARCHY]: currentHierarchy\n });\n this.refresh.next(null);\n }\n\n private saveCheckboxValue(checkbox, value) {\n checkbox.value = value;\n }\n\n private onSelectAll(currentCheckbox: Checkbox, checked: boolean) {\n // Block unchecked state\n if (checked) {\n this.saveCheckboxValue(currentCheckbox, checked);\n }\n this.getCheckbox(SearchFilters.ALL_FILTERS).isDisabled = true;\n this.getCheckbox(SearchFilters.ONLY_DEVICES).value = true;\n this.getCheckbox(SearchFilters.ONLY_GROUPS_AND_ASSETS).value = true;\n }\n\n private onAllDevices(currentCheckbox: Checkbox, checked: boolean) {\n this.saveCheckboxValue(currentCheckbox, checked);\n\n Object.assign(this.getCheckbox(SearchFilters.ALL_FILTERS), {\n indeterminate: true,\n isDisabled: false,\n value: null\n });\n\n this.getCheckbox(SearchFilters.ONLY_GROUPS_AND_ASSETS).value = true;\n }\n\n private onGroupsAndAssets(currentCheckbox: Checkbox, checked: boolean) {\n this.saveCheckboxValue(currentCheckbox, checked);\n\n Object.assign(this.getCheckbox(SearchFilters.ALL_FILTERS), {\n indeterminate: true,\n isDisabled: false,\n value: null\n });\n\n this.getCheckbox(SearchFilters.ONLY_DEVICES).value = true;\n }\n\n private getCheckbox(checkboxName: SearchFilters): Checkbox {\n return this.checkboxesState.find(checkbox => checkbox.name === checkboxName);\n }\n}\n","<div class=\"d-flex gap-16 p-l-4 p-l-24 p-r-24\">\n <div\n class=\"p-b-8 separator-bottom sticky-top p-t-4\"\n *ngIf=\"!useTabs\"\n >\n <label\n class=\"c8y-checkbox\"\n *ngFor=\"let checkbox of checkboxesState\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"checkbox.value\"\n [indeterminate]=\"checkbox.indeterminate\"\n (click)=\"onCheckboxChange($event, checkbox)\"\n [attr.disabled]=\"checkbox.isDisabled ? true : null\"\n />\n <span></span>\n <span>{{ checkbox.label | translate }}</span>\n </label>\n </div>\n</div>\n\n<c8y-tabs-outlet\n class=\"elevation-none\"\n *ngIf=\"useTabs\"\n outletName=\"searchTabs\"\n orientation=\"horizontal\"\n></c8y-tabs-outlet>\n\n<c8y-tab\n [icon]=\"'asterisk-key'\"\n [title]=\"'All devices, assets and groups' | translate\"\n [isActive]=\"selectedTab === tabNames.all\"\n [tabsOutlet]=\"'searchTabs'\"\n [label]=\"tabNames.all | translate\"\n [priority]=\"1000\"\n (onSelect)=\"onTabChange(tabNames.all)\"\n></c8y-tab>\n<c8y-tab\n [icon]=\"'exchange'\"\n [title]=\"'Devices only' | translate\"\n [isActive]=\"selectedTab === tabNames.devices\"\n [tabsOutlet]=\"'searchTabs'\"\n [label]=\"tabNames.devices | translate\"\n [priority]=\"750\"\n (onSelect)=\"onTabChange(tabNames.devices)\"\n></c8y-tab>\n<c8y-tab\n [icon]=\"'c8y-modules'\"\n [title]=\"'Assets and groups only' | translate\"\n [isActive]=\"selectedTab === tabNames.groupsAndAssets\"\n [tabsOutlet]=\"'searchTabs'\"\n [label]=\"tabNames.groupsAndAssets | translate\"\n [priority]=\"500\"\n (onSelect)=\"onTabChange(tabNames.groupsAndAssets)\"\n></c8y-tab>\n\n<div\n class=\"p-l-48 p-t-8 d-flex a-i-center\"\n *ngIf=\"useTabs && (context$ | async)?.contextData?.name\"\n>\n <span translate>Search only in</span>\n <span class=\"text-bold p-l-4\">{{ (context$ | async)?.contextData?.name }}</span>\n <label\n class=\"m-l-8 c8y-switch c8y-switch--inline\"\n [title]=\"'Search only within the current group or asset hierarchy' | translate\"\n >\n <input\n type=\"checkbox\"\n [ngModel]=\"isOnlyHierarchyQuery\"\n [attr.aria-label]=\"'Search only within the current group or asset hierarchy' | translate\"\n (ngModelChange)=\"onHierarchyQueryChange($event)\"\n />\n <span></span>\n </label>\n</div>\n","import { AsyncPipe, NgIf } from '@angular/common';\nimport { Component, EventEmitter, inject } from '@angular/core';\nimport { NavigationExtras, Router } from '@angular/router';\nimport { IManagedObject, IResultList } from '@c8y/client';\nimport {\n RouterService as C8yRouter,\n PreviewService,\n SearchInputComponent,\n WILDCARD_SEARCH_FEATURE_KEY\n} from '@c8y/ngx-components';\nimport { catchError, lastValueFrom, Observable, of, UnaryFunction } from 'rxjs';\nimport { SEARCH_CONFIG, SearchConfig } from './search-config.model';\nimport { SearchCustomFiltersComponent } from './search-custom-filters.component';\n\n@Component({\n selector: 'c8y-search-action',\n templateUrl: './search-action.component.html',\n imports: [SearchInputComponent, NgIf, SearchCustomFiltersComponent, AsyncPipe]\n})\nexport class SearchActionComponent {\n showAdvancedFilters: boolean;\n customPlaceholder: string;\n customQuery: UnaryFunction<string, Observable<IResultList<IManagedObject>>>;\n typeaheadReload = new EventEmitter();\n\n previewService = inject(PreviewService);\n\n isWildcardSearchEnabled$ = this.previewService\n .getState$(WILDCARD_SEARCH_FEATURE_KEY)\n .pipe(catchError(() => of(true)));\n\n c8yRouter = inject(C8yRouter);\n router = inject(Router);\n moduleConfig: SearchConfig = inject(SEARCH_CONFIG, { optional: true });\n isOnlyHierarchyQuery = false;\n\n constructor() {\n this.showAdvancedFilters = this.moduleConfig?.showAdvancedFilters ?? true;\n this.customPlaceholder = this.moduleConfig?.placeholder;\n }\n\n triggerDataLoad() {\n this.typeaheadReload.next(null);\n }\n\n onOpenChange(isOpen: boolean) {\n if (isOpen) {\n this.triggerDataLoad();\n }\n }\n\n async onSearch(on: string) {\n if (await lastValueFrom(this.isWildcardSearchEnabled$)) {\n return;\n }\n this.navigate(['/assetsearch'], {\n queryParams: { search: on },\n replaceUrl: true\n });\n }\n\n onFilter(on: string) {\n this.navigate(['/assetsearch'], {\n queryParams: { filter: on },\n replaceUrl: true\n });\n }\n\n onClick(mo: IManagedObject) {\n this.router.navigateByUrl(this.c8yRouter.getHref(mo, '/'));\n }\n\n private navigate(commands: any[], extras?: NavigationExtras) {\n this.router\n .navigateByUrl('/', { skipLocationChange: true })\n .then(() => this.router.navigate(commands, extras));\n }\n}\n","<c8y-search-input\n #input\n (filter)=\"onFilter($event)\"\n (search)=\"onSearch($event)\"\n (onClick)=\"onClick($event)\"\n (onOpenToggle)=\"onOpenChange($event)\"\n [enableCustomTemplatePlaceholder]=\"true\"\n [customPlaceholder]=\"customPlaceholder\"\n [customDataQuery]=\"customQuery\"\n [externalTerm]=\"typeaheadReload\"\n [mode]=\"(isWildcardSearchEnabled$ | async) ? 'wildcardsearch' : 'search'\"\n>\n <c8y-search-custom-filters\n *ngIf=\"showAdvancedFilters && input.term.length > 0\"\n (refresh)=\"triggerDataLoad()\"\n [useTabs]=\"isWildcardSearchEnabled$ | async\"\n [(isOnlyHierarchyQuery)]=\"isOnlyHierarchyQuery\"\n (customDataQuery)=\"customQuery = $event\"\n ></c8y-search-custom-filters>\n</c8y-search-input>\n","import {\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext,\n SearchFilters\n} from '@c8y/ngx-components';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { AssetSearchService } from '../search.service';\nimport { AssetTypeGridColumn } from '@c8y/ngx-components/data-grid-columns/asset-type';\n\nexport class AssetTypeSearchGridColumn extends AssetTypeGridColumn {\n constructor(\n hideExtendedFilters: boolean,\n initialColumnConfig?: ColumnConfig,\n assetSearchService?: AssetSearchService,\n customPlaceholder?: string\n ) {\n super(initialColumnConfig);\n\n this.filterable = true;\n this.filteringConfig = this.getFilteringConfig(\n hideExtendedFilters,\n assetSearchService,\n customPlaceholder\n );\n }\n\n private getFilteringConfig(\n hideExtendedFilters: boolean,\n assetSearchService: AssetSearchService,\n customPlaceholder?: string\n ) {\n return {\n fields: [\n ...getBasicInputArrayFormFieldConfig({\n key: 'types',\n label: gettext('Show items with type'),\n addText: gettext('Add next`type`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: customPlaceholder ? customPlaceholder : gettext('building`e.g. house`'),\n optional: !hideExtendedFilters\n }),\n {\n key: SearchFilters.ALL_FILTERS,\n type: 'checkbox',\n hide: hideExtendedFilters,\n props: {\n indeterminate: false,\n disabled: false,\n label: gettext('All'),\n click: (field, clickEvent) => {\n const { checked } = clickEvent.target;\n\n // Handle checked state\n if (checked) {\n field.form.get(SearchFilters.ONLY_DEVICES).setValue(true);\n field.form.get(SearchFilters.ONLY_GROUPS_AND_ASSETS).setValue(true);\n\n // Emit new state\n assetSearchService.appliedFilters$.next({\n [SearchFilters.ALL_FILTERS]: checked,\n [SearchFilters.ONLY_DEVICES]: true,\n [SearchFilters.ONLY_GROUPS_AND_ASSETS]: true,\n [SearchFilters.CURRENT_HIERARCHY]: null\n });\n }\n }\n },\n expressionProperties: {\n 'props.indeterminate': (model: any, formState: any, field: FormlyFieldConfig) => {\n // Do nothing\n if (field.form.get(SearchFilters.ALL_FILTERS).value === true) {\n return;\n }\n // Set indeterminate state\n if (\n !field.form.get(SearchFilters.ONLY_DEVICES).value ||\n !field.form.get(SearchFilters.ONLY_GROUPS_AND_ASSETS).value\n ) {\n field.form.get(SearchFilters.ALL_FILTERS).setValue(null);\n return true;\n }\n return false;\n },\n 'props.disabled': (model: any, formState: any, field: FormlyFieldConfig) => {\n if (field.form.get(SearchFilters.ALL_FILTERS).value === true) {\n return true;\n }\n return false;\n }\n },\n hooks: {\n onInit: field => {\n // Get initial state\n const { allFilters } = assetSearchService?.appliedFilters$?.value;\n field.formControl.setValue(allFilters);\n }\n }\n },\n {\n key: SearchFilters.ONLY_DEVICES,\n type: 'checkbox',\n hide: hideExtendedFilters,\n props: {\n indeterminate: false,\n label: gettext('Show only devices'),\n click: (field, clickEvent) => {\n const oldFilterValue = assetSearchService.appliedFilters$.value;\n const { checked } = clickEvent.target;\n\n // Handle checked state\n if (checked) {\n field.form.get(SearchFilters.ALL_FILTERS).setValue(true);\n // Emit new state\n assetSearchService.appliedFilters$.next({\n ...oldFilterValue,\n [SearchFilters.ALL_FILTERS]: true,\n [SearchFilters.ONLY_DEVICES]: checked\n });\n return;\n }\n // Handle unchecked state\n field.form.get(SearchFilters.ALL_FILTERS).setValue(null); // Trigger indeterminate state\n field.form.get(SearchFilters.ONLY_GROUPS_AND_ASSETS).setValue(true);\n\n // Emit new state\n assetSearchService.appliedFilters$.next({\n [SearchFilters.ALL_FILTERS]: null,\n [SearchFilters.ONLY_GROUPS_AND_ASSETS]: true,\n [SearchFilters.ONLY_DEVICES]: checked,\n [SearchFilters.CURRENT_HIERARCHY]: null\n });\n }\n },\n hooks: {\n onInit: field => {\n // Get initial state\n const { onlyDevices } = assetSearchService?.appliedFilters$?.value;\n field.formControl.setValue(onlyDevices);\n }\n }\n },\n {\n key: SearchFilters.ONLY_GROUPS_AND_ASSETS,\n type: 'checkbox',\n hide: hideExtendedFilters,\n props: {\n indeterminate: false,\n label: gettext('Show only groups and assets'),\n click: (field, clickEvent) => {\n const oldFilterValue = assetSearchService.appliedFilters$.value;\n const { checked } = clickEvent.target;\n\n // Handle checked state\n if (checked) {\n field.form.get(SearchFilters.ALL_FILTERS).setValue(true);\n // Emit new state\n assetSearchService.appliedFilters$.next({\n ...oldFilterValue,\n [SearchFilters.ALL_FILTERS]: true,\n [SearchFilters.ONLY_GROUPS_AND_ASSETS]: checked\n });\n return;\n }\n // Handle unchecked state\n field.form.get(SearchFilters.ALL_FILTERS).setValue(null); // Trigger indeterminate state\n field.form.get(SearchFilters.ONLY_DEVICES).setValue(true);\n\n // Emit new state\n assetSearchService.appliedFilters$.next({\n [SearchFilters.ALL_FILTERS]: null,\n [SearchFilters.ONLY_GROUPS_AND_ASSETS]: checked,\n [SearchFilters.ONLY_DEVICES]: true,\n [SearchFilters.CURRENT_HIERARCHY]: false\n });\n }\n },\n hooks: {\n onInit: field => {\n // Get initial state\n const { onlyGroupsAndAssets } = assetSearchService?.appliedFilters$?.value;\n field.formControl.setValue(onlyGroupsAndAssets);\n }\n }\n }\n ],\n /**\n * Adding devices and groups to a filter is already handled in {@link AssetSearchService#buildSearchQuery}\n * */\n getFilter(model: any): any {\n const filter: any = {};\n const ors = [];\n if (model.types?.length) {\n ors.push({ type: { __in: model.types } });\n }\n if (ors.length) {\n filter.__or = ors;\n }\n return filter;\n }\n };\n }\n}\n","import { Component, EventEmitter, inject, Input, Output, ViewChild } from '@angular/core';\nimport { IManagedObject, SmartGroupsService } from '@c8y/client';\nimport {\n ActionControl,\n BuiltInActionType,\n BulkActionControl,\n C8yTranslatePipe,\n Column,\n ColumnDirective,\n DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER,\n DATA_GRID_CONFIGURATION_STRATEGY,\n DataGridComponent,\n DataSourceModifier,\n EmptyStateComponent,\n FilteringActionType,\n FilteringModifier,\n gettext,\n GridConfigContextProvider,\n Pagination,\n PreviewService,\n Row,\n SearchFilters,\n ServerSideDataResult,\n UserPreferencesConfigurationStrategy,\n UserPreferencesGridConfigContext,\n WILDCARD_SEARCH_FEATURE_KEY\n} from '@c8y/ngx-components';\nimport {\n AlarmsDeviceGridColumn,\n ImeiDeviceGridColumn,\n ModelDeviceGridColumn,\n NameDeviceGridColumn,\n RegistrationDateDeviceGridColumn,\n SerialNumberDeviceGridColumn,\n SystemIdDeviceGridColumn\n} from '@c8y/ngx-components/device-grid';\nimport {\n DeleteAssetsModalComponent,\n DeleteModalCheckboxes,\n SubAssetsService\n} from '@c8y/ngx-components/sub-assets';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { catchError, of } from 'rxjs';\nimport { AssetTypeSearchGridColumn } from './columns/asset-type-search-grid-column';\nimport { SEARCH_CONFIG } from './search-config.model';\nimport { AssetSearchService } from './search.service';\n\nimport { AsyncPipe, NgFor } from '@angular/common';\n\n@Component({\n selector: 'c8y-search-grid',\n templateUrl: './search-grid.component.html',\n providers: [\n {\n provide: DATA_GRID_CONFIGURATION_STRATEGY,\n useClass: UserPreferencesConfigurationStrategy\n },\n {\n provide: DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER,\n useExisting: SearchGridComponent\n }\n ],\n imports: [\n DataGridComponent,\n NgFor,\n ColumnDirective,\n EmptyStateComponent,\n C8yTranslatePipe,\n AsyncPipe\n ]\n})\nexport class SearchGridComponent implements GridConfigContextProvider {\n @Input('parent-group') parentGroup: IManagedObject;\n @Input() title = '';\n @Input() loadingItemsLabel: string = gettext('Loading results…');\n @Input('columns') set _columns(value: Column[]) {\n if (value) {\n this.columns = value;\n } else {\n this.columns = this.assetSearchService.getDefaultColumns();\n }\n }\n @Input('pagination') set _pagination(value: Pagination) {\n if (value) {\n this.pagination = value;\n }\n }\n @Input('actionControls') set _actionControls(value: ActionControl[]) {\n if (value) {\n this.actionControls = value;\n } else {\n this.actionControls = this.assetSearchService.getDefaultActionControls();\n }\n }\n @Input() selectable = false;\n @Input('bulkActionControls') set _bulkActionControls(value: BulkActionControl[]) {\n if (value) {\n this.bulkActionControls = value;\n } else {\n this.bulkActionControls = this.assetSearchService.getDefaultBulkActionControls();\n }\n }\n @Output() onColumnsChange: EventEmitter<Column[]> = new EventEmitter<Column[]>();\n\n @Input()\n searchText = '';\n\n @Input()\n filteringName: string;\n\n /** The name of the key where columns configuration will be stored. */\n @Input() columnsConfigKey: string;\n\n moduleConfig = inject(SEARCH_CONFIG, { optional: true });\n showAdvancedFilters = this.moduleConfig?.showAdvancedFilters ?? false;\n customPlaceholder = this.moduleConfig?.placeholder ?? undefined;\n\n columns: Column[];\n assetSearchService = inject(AssetSearchService);\n pagination: Pagination = this.assetSearchService.getDefaultPagination();\n actionControls: ActionControl[];\n bulkActionControls: BulkActionControl[] = this.assetSearchService.getDefaultBulkActionControls();\n serverSideDataCallback: any;\n refresh: EventEmitter<any> = new EventEmitter();\n\n @ViewChild(DataGridComponent, { static: true })\n dataGrid: DataGridComponent;\n\n previewService = inject(PreviewService);\n isWildcardSearchEnabled$ = this.previewService\n .getState$(WILDCARD_SEARCH_FEATURE_KEY)\n .pipe(catchError(() => of(true)));\n\n wildcardSearchTitle = gettext('Asset data');\n fullTextSearchTitle = gettext('Search results');\n\n private sizeCount = 0;\n private bsModalService = inject(BsModalService);\n private smartGroupsService = inject(SmartGroupsService);\n private subAssetsGridService = inject(SubAssetsService);\n\n getGridConfigContext(): UserPreferencesGridConfigContext {\n return { key: this.columnsConfigKey || this.assetSearchService.GRID_CONFIG_STORAGE_KEY };\n }\n\n ngOnInit(): void {\n if (!this.filteringName) {\n this.columns = [\n new AssetTypeSearchGridColumn(\n this.showAdvancedFilters,\n { sortOrder: 'desc' },\n this.assetSearchService,\n this.customPlaceholder\n ),\n ...this.assetSearchService.getDefaultColumns()\n ];\n } else {\n this.columns = [\n new AssetTypeSearchGridColumn(\n this.showAdvancedFilters,\n { sortOrder: 'desc' },\n this.assetSearchService\n ),\n new NameDeviceGridColumn({\n sortOrder: 'asc',\n filter: { externalFilterQuery: { names: [this.filteringName] } }\n }),\n new ModelDeviceGridColumn(),\n new SerialNumberDeviceGridColumn({ visible: false }),\n new RegistrationDateDeviceGridColumn({ visible: false }),\n new SystemIdDeviceGridColumn({ visible: false }),\n new ImeiDeviceGridColumn({ visible: false }),\n new AlarmsDeviceGridColumn()\n ];\n }\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n this.setActionControls();\n }\n\n ngAfterViewInit() {\n this.setInitialFilterForTypeColumn();\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const response = await this.assetSearchService.getData(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n dataSourceModifier.searchText\n );\n const { res, data, paging } = response;\n\n if (paging.currentPage === 1) {\n this.sizeCount = 0;\n }\n this.sizeCount += data.length;\n this.onColumnsChange.emit(dataSourceModifier.columns);\n\n return {\n res,\n data,\n paging,\n filteredSize: this.sizeCount,\n size: undefined\n };\n }\n\n setActionControls() {\n const actionControls: ActionControl[] = [];\n const deleteAction: ActionControl = {\n type: BuiltInActionType.Delete,\n callback: (asset: Row) => this.onDeleteAsset(asset as IManagedObject, this.parentGroup)\n };\n actionControls.push(deleteAction);\n if (!this.actionControls) {\n this.actionControls = actionControls;\n }\n }\n\n updateFiltering(\n columnNames: string[],\n action: {\n type: FilteringActionType;\n payload?: { filteringModifier: FilteringModifier };\n }\n ) {\n const { type } = action;\n if (type === FilteringActionType.ResetFilter) {\n this.dataGrid.clearFilters();\n } else {\n /**\n * TODO: find better solution. After new changes from DM team, we're running into race condition where\n * this.dataGrid.updateFiltering is executed before this.configurationStrategy.getConfig$() value is emitted.\n * Columns setter sets columns after this.dataGrid.updateFiltering executes its logic. Value of this.columns in\n * dataGrid.updateFiltering is just not yet set.\n */\n setTimeout(() => {\n this.dataGrid.updateFiltering(columnNames, action, false);\n }, 500);\n }\n }\n\n onColumnFilterReset(column: Column) {\n if (column.name === 'type') {\n this.assetSearchService.resetAppliedFilters();\n }\n }\n\n private onDeleteAsset(asset, parentRef) {\n const initialState = {\n showWithDeviceUserCheckbox: this.subAssetsGridService.shouldShowWithDeviceUserCheckbox(asset),\n asset,\n showWithCascadeCheckbox: !this.smartGroupsService.isSmartGroup(asset)\n };\n\n const modalRef = this.bsModalService.show(DeleteAssetsModalComponent, { initialState });\n\n modalRef.content.closeSubject.subscribe(async (result: DeleteModalCheckboxes) => {\n if (result) {\n await this.subAssetsGridService.deleteAsset(asset, parentRef, result);\n this.refresh.emit();\n }\n });\n }\n\n private setInitialFilterForTypeColumn() {\n const checkboxes = this.assetSearchService.appliedFilters$.value;\n // Set filter only when all checkboxes are not selected\n if (\n checkboxes[SearchFilters.ONLY_DEVICES] !== checkboxes[SearchFilters.ONLY_GROUPS_AND_ASSETS]\n ) {\n const externalFilterQuery = {\n [SearchFilters.ONLY_DEVICES]: checkboxes[SearchFilters.ONLY_DEVICES],\n [SearchFilters.ONLY_GROUPS_AND_ASSETS]: checkboxes[SearchFilters.ONLY_GROUPS_AND_ASSETS]\n };\n this.updateFiltering(['type'], {\n type: FilteringActionType.ApplyFilter,\n payload: {\n filteringModifier: {\n externalFilterQuery\n }\n }\n });\n }\n }\n}\n","<div class=\"card--grid--fullpage border-top border-bottom\">\n <c8y-data-grid\n [title]=\"\n ((isWildcardSearchEnabled$ | async) ? wildcardSearchTitle : fullTextSearchTitle) | translate\n \"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [actionControls]=\"actionControls\"\n [selectable]=\"selectable\"\n [bulkActionControls]=\"bulkActionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"'auto'\"\n [showSearch]=\"true\"\n [searchText]=\"searchText\"\n [refresh]=\"refresh\"\n (onColumnFilterReset)=\"onColumnFilterReset($event)\"\n >\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'Refine your search terms or check your spelling.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-data-grid>\n</div>\n","import { Component, inject, OnDestroy, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { of, Subject } from 'rxjs';\nimport { catchError, takeUntil } from 'rxjs/operators';\nimport { SearchGridComponent } from './search-grid.component';\nimport {\n FilteringActionType,\n AlertService,\n Status,\n gettext,\n Alert,\n PreviewService,\n TitleComponent,\n C8yTranslateDirective,\n WILDCARD_SEARCH_FEATURE_KEY\n} from '@c8y/ngx-components';\nimport { AsyncPipe, NgIf } from '@angular/common';\n\n@Component({\n selector: 'c8y-search-results',\n templateUrl: './search-results.component.html',\n imports: [TitleComponent, C8yTranslateDirective, NgIf, SearchGridComponent, AsyncPipe]\n})\nexport class SearchResultsComponent implements OnDestroy {\n filter = '';\n searchText = '';\n @ViewChild(SearchGridComponent, { static: true })\n searchGrid: SearchGridComponent;\n filteringName: string;\n\n previewService = inject(PreviewService);\n isWildcardSearchEnabled$ = this.previewService\n .getState$(WILDCARD_SEARCH_FEATURE_KEY)\n .pipe(catchError(() => of(true)));\n\n private readonly WARNING_TIMEOUT_TIME = 3000;\n private unsubscribe$ = new Subject<void>();\n\n constructor(\n private route: ActivatedRoute,\n private alert: AlertService\n ) {}\n\n ngOnInit() {\n this.route.queryParams.pipe(takeUntil(this.unsubscribe$)).subscribe(params => {\n if (params.filter) {\n this.filteringName = params.filter;\n }\n });\n }\n\n ngAfterViewInit(): void {\n this.route.queryParams\n .pipe(takeUntil(this.unsubscribe$))\n .subscribe(({ filter, search }) => this.onQueryParamsChange(filter, search));\n }\n\n resetSearch() {\n if (this.searchGrid.dataGrid.searchText) {\n this.alert.add({\n text: gettext('Search reset. Full text search does not support filtering.'),\n type: Status.WARNING,\n timeout: this.WARNING_TIMEOUT_TIME\n } as Alert);\n this.searchText = '';\n this.searchGrid.dataGrid.searchText = '';\n }\n }\n\n resetFilter() {\n this.filter = '';\n if (this.searchGrid.dataGrid.filteringApplied) {\n this.alert.add({\n text: gettext('Filter reset. Full text search does not support filtering.'),\n type: Status.WARNING,\n timeout: this.WARNING_TIMEOUT_TIME\n } as Alert);\n this.searchGrid.dataGrid.clearFilters(false);\n }\n }\n\n ngOnDestroy() {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n private onQueryParamsChange(filter: string, searchTerm: string) {\n if (!this.shouldFilter(filter) && searchTerm) {\n this.searchText = searchTerm || '';\n }\n }\n\n private shouldFilter(filter) {\n if (!filter) {\n return false;\n }\n this.resetSearch();\n this.filter = filter || '';\n this.searchGrid.updateFiltering(['name'], {\n type: FilteringActionType.ApplyFilter,\n payload: {\n filteringModifier: {\n externalFilterQuery: {\n names: [this.filter]\n }\n }\n }\n });\n return true;\n }\n}\n","<c8y-title *ngIf=\"isWildcardSearchEnabled$ | async\">\n <span\n class=\"p-r-4\"\n translate\n >\n Search\n </span>\n <small\n ngNonBindable\n translate\n *ngIf=\"searchText\"\n [translateParams]=\"{\n searchHint: searchText\n }\"\n >\n searching \"{{ searchHint }}\"\n </small>\n <small\n ngNonBindable\n translate\n *ngIf=\"filter\"\n [translateParams]=\"{\n filterHint: filter\n }\"\n >\n filtered by \"{{ filterHint }}\"\n </small>\n</c8y-title>\n\n<c8y-title\n *ngIf=\"isWildcardSearchEnabled$ | async\"\n translate\n>\n Asset table\n</c8y-title>\n\n<c8y-search-grid\n [searchText]=\"searchText\"\n [filteringName]=\"filteringName\"\n></c8y-search-grid>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CoreModule, CoreSearchModule, hookRoute, hookSearch } from '@c8y/ngx-components';\nimport { AssetTypeCellRendererComponent } from '@c8y/ngx-components/data-grid-columns/asset-type';\nimport { DeviceGridModule } from '@c8y/ngx-components/device-grid';\nimport { SearchActionComponent } from './search-action.component';\nimport { SEARCH_CONFIG, SearchConfig } from './search-config.model';\nimport { SearchCustomFiltersComponent } from './search-custom-filters.component';\nimport { SearchGridComponent } from './search-grid.component';\nimport { SearchResultsComponent } from './search-results.component';\nimport { AssetSearchService } from './search.service';\n\n@NgModule({\n imports: [\n CoreModule,\n DeviceGridModule,\n CoreSearchModule,\n AssetTypeCellRendererComponent,\n SearchResultsComponent,\n SearchGridComponent,\n SearchActionComponent,\n SearchCustomFiltersComponent\n ],\n exports: [SearchResultsComponent, SearchGridComponent],\n providers: [\n AssetSearchService,\n hookRoute({\n path: 'assetsearch',\n component: SearchResultsComponent\n }),\n hookSearch({\n template: SearchActionComponent,\n onSearch: undefined\n })\n ]\n})\nexport class SearchModule {\n static config(config: SearchConfig = {}): ModuleWithProviders<SearchModule> {\n return {\n ngModule: SearchModule,\n providers: [\n {\n provide: SEARCH_CONFIG,\n useValue: config\n }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["C8yRouter","catchError","i1"],"mappings":"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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Injectable, ViewChild, Input, Component, Inject, Optional, EventEmitter, Output, HostListener, TemplateRef, NgModule, InjectionToken, signal } from '@angular/core';
|
|
3
3
|
import * as i3 from '@c8y/ngx-components';
|
|
4
|
-
import { DataGridService, gettext, Permissions, GroupFragment, Status, ConfirmModalComponent, FormGroupComponent, ProductExperienceDirective, C8yTranslatePipe, AbstractConfigurationStrategy, DATA_GRID_CONFIGURATION_CONTEXT, DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER, BuiltInActionType, DataGridComponent, EmptyStateContextDirective, EmptyStateComponent, ColumnDirective, UserPreferencesConfigurationStrategy, DATA_GRID_CONFIGURATION_STRATEGY, C8yStepper, C8yTranslateDirective, RequiredInputPlaceholderDirective, C8yStepperButtons, CoreModule, DatePipe, IconDirective, LoadingComponent, CustomColumn, TextareaAutoresizeDirective, FilterMapperPipe, GroupedFilterChips, TitleComponent, BreadcrumbComponent, BreadcrumbItemComponent, ActionBarItemComponent, HelpComponent, FilterMapperModule, hookRoute, ViewContext } from '@c8y/ngx-components';
|
|
4
|
+
import { DataGridService, gettext, Permissions, WILDCARD_SEARCH_FEATURE_KEY, GroupFragment, Status, ConfirmModalComponent, FormGroupComponent, ProductExperienceDirective, C8yTranslatePipe, AbstractConfigurationStrategy, DATA_GRID_CONFIGURATION_CONTEXT, DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER, BuiltInActionType, DataGridComponent, EmptyStateContextDirective, EmptyStateComponent, ColumnDirective, UserPreferencesConfigurationStrategy, DATA_GRID_CONFIGURATION_STRATEGY, C8yStepper, C8yTranslateDirective, RequiredInputPlaceholderDirective, C8yStepperButtons, CoreModule, DatePipe, IconDirective, LoadingComponent, CustomColumn, TextareaAutoresizeDirective, FilterMapperPipe, GroupedFilterChips, TitleComponent, BreadcrumbComponent, BreadcrumbItemComponent, ActionBarItemComponent, HelpComponent, FilterMapperModule, hookRoute, ViewContext } from '@c8y/ngx-components';
|
|
5
5
|
import { NameDeviceGridColumn, ModelDeviceGridColumn, SerialNumberDeviceGridColumn, RegistrationDateDeviceGridColumn, SystemIdDeviceGridColumn, ImeiDeviceGridColumn, AlarmsDeviceGridColumn, DeviceGridComponent, DeviceGridModule } from '@c8y/ngx-components/device-grid';
|
|
6
6
|
import * as i1$1 from '@angular/forms';
|
|
7
7
|
import { FormsModule, Validators, ReactiveFormsModule, FormGroup } from '@angular/forms';
|
|
8
8
|
import * as i2 from '@c8y/client';
|
|
9
9
|
import * as i4 from '@c8y/ngx-components/assets-navigator';
|
|
10
|
-
import * as i1 from '@ngx-translate/core';
|
|
11
10
|
import { AssetTypeGridColumn, AssetTypeCellRendererComponent } from '@c8y/ngx-components/data-grid-columns/asset-type';
|
|
12
|
-
import
|
|
11
|
+
import * as i1 from '@ngx-translate/core';
|
|
12
|
+
import { firstValueFrom, catchError, of, Subject, delay, takeUntil as takeUntil$1, tap } from 'rxjs';
|
|
13
13
|
import { NgIf, NgFor, NgClass, NgTemplateOutlet, NgStyle, NgSwitch, NgSwitchCase, NgSwitchDefault, AsyncPipe } from '@angular/common';
|
|
14
14
|
import { CdkStep } from '@angular/cdk/stepper';
|
|
15
15
|
import * as i4$1 from '@c8y/ngx-components/device-list';
|
|
@@ -55,7 +55,7 @@ const PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED = {
|
|
|
55
55
|
};
|
|
56
56
|
|
|
57
57
|
class SubAssetsService extends DataGridService {
|
|
58
|
-
constructor(translateService, inventoryService, appState, user, assetNodeService, smartGroupsService, smartRulesService, alertService, permissionsService, assetTypes, userPreferencesService) {
|
|
58
|
+
constructor(translateService, inventoryService, appState, user, assetNodeService, smartGroupsService, smartRulesService, alertService, permissionsService, assetTypes, userPreferencesService, previewService) {
|
|
59
59
|
super(userPreferencesService);
|
|
60
60
|
this.translateService = translateService;
|
|
61
61
|
this.inventoryService = inventoryService;
|
|
@@ -68,6 +68,7 @@ class SubAssetsService extends DataGridService {
|
|
|
68
68
|
this.permissionsService = permissionsService;
|
|
69
69
|
this.assetTypes = assetTypes;
|
|
70
70
|
this.userPreferencesService = userPreferencesService;
|
|
71
|
+
this.previewService = previewService;
|
|
71
72
|
this.GRID_CONFIG_DEFAULT_STORAGE_KEY = 'sub-assets-grid-config';
|
|
72
73
|
this.IS_DEVICE_GROUP_FRAGMENT = 'c8y_IsDeviceGroup';
|
|
73
74
|
this.IS_DYNAMIC_GROUP_FRAGMENT = 'c8y_IsDynamicGroup';
|
|
@@ -149,12 +150,17 @@ class SubAssetsService extends DataGridService {
|
|
|
149
150
|
}
|
|
150
151
|
async getData(columns, pagination, parentReference, baseQuery = {}, text = null) {
|
|
151
152
|
const isRoot = !parentReference;
|
|
153
|
+
const isWildcardSearchEnabled = await this.isWildcardSearchEnabled();
|
|
152
154
|
if (isRoot) {
|
|
153
|
-
const query = this.buildCombinedRootQueryFilter(columns, pagination, baseQuery);
|
|
154
|
-
return this.assetNodeService.getRootNodes({
|
|
155
|
+
const query = this.buildCombinedRootQueryFilter(columns, pagination, baseQuery, isWildcardSearchEnabled, text);
|
|
156
|
+
return this.assetNodeService.getRootNodes({
|
|
157
|
+
...pagination,
|
|
158
|
+
...(text && !isWildcardSearchEnabled && { text }),
|
|
159
|
+
query
|
|
160
|
+
});
|
|
155
161
|
}
|
|
156
162
|
const filters = {
|
|
157
|
-
...this.getAssetsFilters(columns, pagination, baseQuery, text),
|
|
163
|
+
...this.getAssetsFilters(columns, pagination, baseQuery, text, isWildcardSearchEnabled),
|
|
158
164
|
withParents: false
|
|
159
165
|
};
|
|
160
166
|
if (this.assetNodeService.isGroup(parentReference)) {
|
|
@@ -172,13 +178,14 @@ class SubAssetsService extends DataGridService {
|
|
|
172
178
|
pageSize: 1,
|
|
173
179
|
withChildren: false
|
|
174
180
|
};
|
|
181
|
+
const isWildcardSearchEnabled = await this.isWildcardSearchEnabled();
|
|
175
182
|
const filters = !parentReference
|
|
176
183
|
? {
|
|
177
|
-
query: this.buildCombinedRootQueryFilter(columns, pagination, baseQuery),
|
|
184
|
+
query: this.buildCombinedRootQueryFilter(columns, pagination, baseQuery, isWildcardSearchEnabled, text),
|
|
178
185
|
...defaultFilters
|
|
179
186
|
}
|
|
180
187
|
: {
|
|
181
|
-
...this.getAssetsFilters(columns, pagination, baseQuery, text),
|
|
188
|
+
...this.getAssetsFilters(columns, pagination, baseQuery, text, isWildcardSearchEnabled),
|
|
182
189
|
...defaultFilters
|
|
183
190
|
};
|
|
184
191
|
return this.getAssetsStatistics(parentReference, filters);
|
|
@@ -259,12 +266,17 @@ class SubAssetsService extends DataGridService {
|
|
|
259
266
|
.totalPages;
|
|
260
267
|
}
|
|
261
268
|
}
|
|
262
|
-
buildCombinedRootQueryFilter(columns, pagination, baseQuery = {}) {
|
|
269
|
+
buildCombinedRootQueryFilter(columns, pagination, baseQuery = {}, isWildcardSearchEnabled = true, text) {
|
|
263
270
|
const userQuery = this.getQueryObj(columns, pagination);
|
|
264
271
|
const rootQuery = this.assetNodeService.rootQueryFilter();
|
|
265
272
|
const orderedRootQuery = this.queriesUtil.addOrderbys(rootQuery, userQuery.__orderby, 'append');
|
|
266
273
|
const rootAndUserQuery = this.queriesUtil.addAndFilter(orderedRootQuery, userQuery.__filter);
|
|
267
|
-
|
|
274
|
+
let fullQuery = this.queriesUtil.addAndFilter(rootAndUserQuery, baseQuery);
|
|
275
|
+
if (text && isWildcardSearchEnabled) {
|
|
276
|
+
fullQuery = this.queriesUtil.addAndFilter(fullQuery, {
|
|
277
|
+
name: `*${text.trim().replace(/\s+/g, '*')}*`
|
|
278
|
+
});
|
|
279
|
+
}
|
|
268
280
|
return this.queriesUtil.buildQuery(fullQuery);
|
|
269
281
|
}
|
|
270
282
|
async deleteGroup(group, params = {}) {
|
|
@@ -285,6 +297,9 @@ class SubAssetsService extends DataGridService {
|
|
|
285
297
|
this.alertService.danger(alertMessage, error);
|
|
286
298
|
}
|
|
287
299
|
}
|
|
300
|
+
async isWildcardSearchEnabled() {
|
|
301
|
+
return firstValueFrom(this.previewService.getState$(WILDCARD_SEARCH_FEATURE_KEY).pipe(catchError(() => of(true))));
|
|
302
|
+
}
|
|
288
303
|
async deleteDevice(device, params = {}) {
|
|
289
304
|
const { cascade, withDeviceUser } = params;
|
|
290
305
|
try {
|
|
@@ -326,17 +341,22 @@ class SubAssetsService extends DataGridService {
|
|
|
326
341
|
return await this.inventoryService.delete(device, { cascade });
|
|
327
342
|
}
|
|
328
343
|
}
|
|
329
|
-
getAssetsFilters(columns, pagination, baseQuery, text) {
|
|
330
|
-
|
|
344
|
+
getAssetsFilters(columns, pagination, baseQuery, text, isWildcardSearchEnabled = true) {
|
|
345
|
+
let query = this.queriesUtil.addAndFilter(this.getQueryObj(columns), baseQuery);
|
|
346
|
+
if (text && isWildcardSearchEnabled) {
|
|
347
|
+
query = this.queriesUtil.addAndFilter(query, {
|
|
348
|
+
name: `*${text.trim().replace(/\s+/g, '*')}*`
|
|
349
|
+
});
|
|
350
|
+
}
|
|
331
351
|
return {
|
|
332
|
-
...(text && { text }),
|
|
352
|
+
...(text && !isWildcardSearchEnabled && { text }),
|
|
333
353
|
query: this.queriesUtil.buildQuery(query),
|
|
334
354
|
pageSize: pagination.pageSize || this.DEFAULT_PAGE_SIZE,
|
|
335
355
|
currentPage: pagination.currentPage,
|
|
336
356
|
withTotalPages: true
|
|
337
357
|
};
|
|
338
358
|
}
|
|
339
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SubAssetsService, deps: [{ token: i1.TranslateService }, { token: i2.InventoryService }, { token: i3.AppStateService }, { token: i2.UserService }, { token: i4.AssetNodeService }, { token: i2.SmartGroupsService }, { token: i2.SmartRulesService }, { token: i3.AlertService }, { token: i3.Permissions }, { token: i3.AssetTypesRealtimeService }, { token: i3.UserPreferencesService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
359
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SubAssetsService, deps: [{ token: i1.TranslateService }, { token: i2.InventoryService }, { token: i3.AppStateService }, { token: i2.UserService }, { token: i4.AssetNodeService }, { token: i2.SmartGroupsService }, { token: i2.SmartRulesService }, { token: i3.AlertService }, { token: i3.Permissions }, { token: i3.AssetTypesRealtimeService }, { token: i3.UserPreferencesService }, { token: i3.PreviewService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
340
360
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SubAssetsService, providedIn: 'root' }); }
|
|
341
361
|
}
|
|
342
362
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: SubAssetsService, decorators: [{
|
|
@@ -344,7 +364,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
344
364
|
args: [{
|
|
345
365
|
providedIn: 'root'
|
|
346
366
|
}]
|
|
347
|
-
}], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.InventoryService }, { type: i3.AppStateService }, { type: i2.UserService }, { type: i4.AssetNodeService }, { type: i2.SmartGroupsService }, { type: i2.SmartRulesService }, { type: i3.AlertService }, { type: i3.Permissions }, { type: i3.AssetTypesRealtimeService }, { type: i3.UserPreferencesService }] });
|
|
367
|
+
}], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.InventoryService }, { type: i3.AppStateService }, { type: i2.UserService }, { type: i4.AssetNodeService }, { type: i2.SmartGroupsService }, { type: i2.SmartRulesService }, { type: i3.AlertService }, { type: i3.Permissions }, { type: i3.AssetTypesRealtimeService }, { type: i3.UserPreferencesService }, { type: i3.PreviewService }] });
|
|
348
368
|
|
|
349
369
|
class AddGroupService {
|
|
350
370
|
constructor(inventoryService) {
|