@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
110 lines • 15.8 kB
JavaScript
import { Injectable } from '@angular/core';
import { QueriesUtil } from '@c8y/client';
import { SearchFilters } from '@c8y/ngx-components';
import { AssetNodeService } from '@c8y/ngx-components/assets-navigator';
import { AlarmsDeviceGridColumn, DeviceGridService, ImeiDeviceGridColumn, ModelDeviceGridColumn, NameDeviceGridColumn, RegistrationDateDeviceGridColumn, SerialNumberDeviceGridColumn, SystemIdDeviceGridColumn } from '@c8y/ngx-components/device-grid';
import { BehaviorSubject } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "@c8y/ngx-components/device-grid";
import * as i2 from "@c8y/ngx-components/assets-navigator";
export class AssetSearchService {
constructor(deviceGridService, assetNodeService) {
this.deviceGridService = deviceGridService;
this.assetNodeService = assetNodeService;
this.GRID_CONFIG_STORAGE_KEY = 'search-grid-config';
this.DEFAULT_PAGE_SIZE = 50;
this.getGlobalSearchData = this.getSearchData.bind(this);
this.appliedFilters$ = new BehaviorSubject({
allFilters: true,
onlyDevices: true,
onlyGroupsAndAssets: true
});
this.queriesUtil = new QueriesUtil();
}
/**
* Resets the status of applied filters, used during the search.
* Applies only to filters: 'All', 'Show only devices', 'Show only groups and assets'.
*/
resetAppliedFilters() {
this.appliedFilters$.next({
allFilters: true,
onlyDevices: true,
onlyGroupsAndAssets: true
});
}
buildCombinedRootQueryFilter(columns, pagination) {
const rootQuery = {
__filter: {
__and: { __not: { __has: `c8y_IsBinary` } }
}
};
const { onlyDevices, onlyGroupsAndAssets } = this.appliedFilters$.value;
const searchQuery = this.buildSearchQuery({ onlyDevices, onlyGroupsAndAssets });
const userQuery = this.deviceGridService.getQueryObj(columns, pagination);
const queryPart = this.queriesUtil.addOrderbys(rootQuery, userQuery.__orderby, 'append');
const fullQuery = this.queriesUtil.addAndFilter(queryPart, userQuery.__filter);
const queryWithSearch = this.queriesUtil.addAndFilter(fullQuery, searchQuery);
return this.queriesUtil.buildQuery(queryWithSearch);
}
async getData(columns, pagination, text) {
const query = this.buildCombinedRootQueryFilter(columns, pagination);
return this.assetNodeService.getAllInventories({ ...pagination, query, text });
}
getDefaultColumns() {
const defaultColumns = [
new NameDeviceGridColumn({ sortOrder: 'asc' }),
new ModelDeviceGridColumn(),
new SerialNumberDeviceGridColumn({ visible: false }),
new RegistrationDateDeviceGridColumn({ visible: false }),
new SystemIdDeviceGridColumn({ visible: false }),
new ImeiDeviceGridColumn({ visible: false }),
new AlarmsDeviceGridColumn()
];
return defaultColumns;
}
getDefaultActionControls() {
return [];
}
getDefaultBulkActionControls() {
return [];
}
getDefaultPagination() {
return {
pageSize: 25,
currentPage: 1
};
}
buildSearchQuery(model) {
const filter = {};
const ors = [];
if (model.types?.length) {
ors.push({ type: { __in: model.types } });
}
if (model.onlyDevices) {
ors.push({ __has: 'c8y_IsDevice' });
}
if (model.onlyGroupsAndAssets) {
ors.push({ __has: 'c8y_IsDynamicGroup' });
ors.push({ __has: 'c8y_IsDeviceGroup' });
}
if (ors.length) {
filter.__or = ors;
}
return filter;
}
async getSearchData(text, pagination = { currentPage: 1, pageSize: this.DEFAULT_PAGE_SIZE }) {
const { onlyDevices, onlyGroupsAndAssets } = this.appliedFilters$.value;
const query = this.buildSearchQuery({ onlyDevices, onlyGroupsAndAssets });
const queryString = this.queriesUtil.buildQuery(query);
return this.assetNodeService.getAllInventories({ ...pagination, query: queryString, text });
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssetSearchService, deps: [{ token: i1.DeviceGridService }, { token: i2.AssetNodeService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssetSearchService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AssetSearchService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.DeviceGridService }, { type: i2.AssetNodeService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zZWFyY2gvc2VhcmNoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFDLE9BQU8sRUFLTCxhQUFhLEVBQ2QsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNwQixnQ0FBZ0MsRUFDaEMsNEJBQTRCLEVBQzVCLHdCQUF3QixFQUN6QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFJdkMsTUFBTSxPQUFPLGtCQUFrQjtJQWM3QixZQUNVLGlCQUFvQyxFQUNwQyxnQkFBa0M7UUFEbEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBZjVDLDRCQUF1QixHQUFHLG9CQUFvQixDQUFDO1FBQy9DLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUN2Qix3QkFBbUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxvQkFBZSxHQUlWLElBQUksZUFBZSxDQUFDO1lBQ3ZCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLG1CQUFtQixFQUFFLElBQUk7U0FDMUIsQ0FBQyxDQUFDO1FBTUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7O09BR0c7SUFD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QUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUXVlcmllc1V0aWwgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBY3Rpb25Db250cm9sLFxuICBCdWxrQWN0aW9uQ29udHJvbCxcbiAgQ29sdW1uLFxuICBQYWdpbmF0aW9uLFxuICBTZWFyY2hGaWx0ZXJzXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXNzZXROb2RlU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXNzZXRzLW5hdmlnYXRvcic7XG5pbXBvcnQge1xuICBBbGFybXNEZXZpY2VHcmlkQ29sdW1uLFxuICBEZXZpY2VHcmlkU2VydmljZSxcbiAgSW1laURldmljZUdyaWRDb2x1bW4sXG4gIE1vZGVsRGV2aWNlR3JpZENvbHVtbixcbiAgTmFtZURldmljZUdyaWRDb2x1bW4sXG4gIFJlZ2lzdHJhdGlvbkRhdGVEZXZpY2VHcmlkQ29sdW1uLFxuICBTZXJpYWxOdW1iZXJEZXZpY2VHcmlkQ29sdW1uLFxuICBTeXN0ZW1JZERldmljZUdyaWRDb2x1bW5cbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kZXZpY2UtZ3JpZCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFzc2V0U2VhcmNoU2VydmljZSB7XG4gIEdSSURfQ09ORklHX1NUT1JBR0VfS0VZID0gJ3NlYXJjaC1ncmlkLWNvbmZpZyc7XG4gIERFRkFVTFRfUEFHRV9TSVpFID0gNTA7XG4gIGdldEdsb2JhbFNlYXJjaERhdGEgPSB0aGlzLmdldFNlYXJjaERhdGEuYmluZCh0aGlzKTtcbiAgYXBwbGllZEZpbHRlcnMkOiBCZWhhdmlvclN1YmplY3Q8e1xuICAgIFtTZWFyY2hGaWx0ZXJzLkFMTF9GSUxURVJTXTogYm9vbGVhbjtcbiAgICBbU2VhcmNoRmlsdGVycy5PTkxZX0dST1VQU19BTkRfQVNTRVRTXTogYm9vbGVhbjtcbiAgICBbU2VhcmNoRmlsdGVycy5PTkxZX0RFVklDRVNdOiBib29sZWFuO1xuICB9PiA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe1xuICAgIGFsbEZpbHRlcnM6IHRydWUsXG4gICAgb25seURldmljZXM6IHRydWUsXG4gICAgb25seUdyb3Vwc0FuZEFzc2V0czogdHJ1ZVxuICB9KTtcbiAgcHJpdmF0ZSBxdWVyaWVzVXRpbDogUXVlcmllc1V0aWw7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZGV2aWNlR3JpZFNlcnZpY2U6IERldmljZUdyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXNzZXROb2RlU2VydmljZTogQXNzZXROb2RlU2VydmljZVxuICApIHtcbiAgICB0aGlzLnF1ZXJpZXNVdGlsID0gbmV3IFF1ZXJpZXNVdGlsKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBzdGF0dXMgb2YgYXBwbGllZCBmaWx0ZXJzLCB1c2VkIGR1cmluZyB0aGUgc2VhcmNoLlxuICAgKiBBcHBsaWVzIG9ubHkgdG8gZmlsdGVyczogJ0FsbCcsICdTaG93IG9ubHkgZGV2aWNlcycsICdTaG93IG9ubHkgZ3JvdXBzIGFuZCBhc3NldHMnLlxuICAgKi9cbiAgcmVzZXRBcHBsaWVkRmlsdGVycygpIHtcbiAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzJC5uZXh0KHtcbiAgICAgIGFsbEZpbHRlcnM6IHRydWUsXG4gICAgICBvbmx5RGV2aWNlczogdHJ1ZSxcbiAgICAgIG9ubHlHcm91cHNBbmRBc3NldHM6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIGJ1aWxkQ29tYmluZWRSb290UXVlcnlGaWx0ZXIoY29sdW1uczogQ29sdW1uW10sIHBhZ2luYXRpb246IFBhZ2luYXRpb24pIHtcbiAgICBjb25zdCByb290UXVlcnkgPSB7XG4gICAgICBfX2ZpbHRlcjoge1xuICAgICAgICBfX2FuZDogeyBfX25vdDogeyBfX2hhczogYGM4eV9Jc0JpbmFyeWAgfSB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHsgb25seURldmljZXMsIG9ubHlHcm91cHNBbmRBc3NldHMgfSA9IHRoaXMuYXBwbGllZEZpbHRlcnMkLnZhbHVlO1xuICAgIGNvbnN0IHNlYXJjaFF1ZXJ5ID0gdGhpcy5idWlsZFNlYXJjaFF1ZXJ5KHsgb25seURldmljZXMsIG9ubHlHcm91cHNBbmRBc3NldHMgfSk7XG5cbiAgICBjb25zdCB1c2VyUXVlcnkgPSB0aGlzLmRldmljZUdyaWRTZXJ2aWNlLmdldFF1ZXJ5T2JqKGNvbHVtbnMsIHBhZ2luYXRpb24pO1xuICAgIGNvbnN0IHF1ZXJ5UGFydCA9IHRoaXMucXVlcmllc1V0aWwuYWRkT3JkZXJieXMocm9vdFF1ZXJ5LCB1c2VyUXVlcnkuX19vcmRlcmJ5LCAnYXBwZW5kJyk7XG4gICAgY29uc3QgZnVsbFF1ZXJ5ID0gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIocXVlcnlQYXJ0LCB1c2VyUXVlcnkuX19maWx0ZXIpO1xuICAgIGNvbnN0IHF1ZXJ5V2l0aFNlYXJjaCA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKGZ1bGxRdWVyeSwgc2VhcmNoUXVlcnkpO1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkocXVlcnlXaXRoU2VhcmNoKTtcbiAgfVxuXG4gIGFzeW5jIGdldERhdGEoY29sdW1uczogQ29sdW1uW10sIHBhZ2luYXRpb246IFBhZ2luYXRpb24sIHRleHQ/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuYnVpbGRDb21iaW5lZFJvb3RRdWVyeUZpbHRlcihjb2x1bW5zLCBwYWdpbmF0aW9uKTtcbiAgICByZXR1cm4gdGhpcy5hc3NldE5vZGVTZXJ2aWNlLmdldEFsbEludmVudG9yaWVzKHsgLi4ucGFnaW5hdGlvbiwgcXVlcnksIHRleHQgfSk7XG4gIH1cblxuICBnZXREZWZhdWx0Q29sdW1ucygpOiBDb2x1bW5bXSB7XG4gICAgY29uc3QgZGVmYXVsdENvbHVtbnMgPSBbXG4gICAgICBuZXcgTmFtZURldmljZUdyaWRDb2x1bW4oeyBzb3J0T3JkZXI6ICdhc2MnIH0pLFxuICAgICAgbmV3IE1vZGVsRGV2aWNlR3JpZENvbHVtbigpLFxuICAgICAgbmV3IFNlcmlhbE51bWJlckRldmljZUdyaWRDb2x1bW4oeyB2aXNpYmxlOiBmYWxzZSB9KSxcbiAgICAgIG5ldyBSZWdpc3RyYXRpb25EYXRlRGV2aWNlR3JpZENvbHVtbih7IHZpc2libGU6IGZhbHNlIH0pLFxuICAgICAgbmV3IFN5c3RlbUlkRGV2aWNlR3JpZENvbHVtbih7IHZpc2libGU6IGZhbHNlIH0pLFxuICAgICAgbmV3IEltZWlEZXZpY2VHcmlkQ29sdW1uKHsgdmlzaWJsZTogZmFsc2UgfSksXG4gICAgICBuZXcgQWxhcm1zRGV2aWNlR3JpZENvbHVtbigpXG4gICAgXTtcbiAgICByZXR1cm4gZGVmYXVsdENvbHVtbnM7XG4gIH1cblxuICBnZXREZWZhdWx0QWN0aW9uQ29udHJvbHMoKTogQWN0aW9uQ29udHJvbFtdIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBnZXREZWZhdWx0QnVsa0FjdGlvbkNvbnRyb2xzKCk6IEJ1bGtBY3Rpb25Db250cm9sW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldERlZmF1bHRQYWdpbmF0aW9uKCk6IFBhZ2luYXRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdlU2l6ZTogMjUsXG4gICAgICBjdXJyZW50UGFnZTogMVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VhcmNoUXVlcnkobW9kZWwpIHtcbiAgICBjb25zdCBmaWx0ZXI6IGFueSA9IHt9O1xuICAgIGNvbnN0IG9ycyA9IFtdO1xuICAgIGlmIChtb2RlbC50eXBlcz8ubGVuZ3RoKSB7XG4gICAgICBvcnMucHVzaCh7IHR5cGU6IHsgX19pbjogbW9kZWwudHlwZXMgfSB9KTtcbiAgICB9XG4gICAgaWYgKG1vZGVsLm9ubHlEZXZpY2VzKSB7XG4gICAgICBvcnMucHVzaCh7IF9faGFzOiAnYzh5X0lzRGV2aWNlJyB9KTtcbiAgICB9XG4gICAgaWYgKG1vZGVsLm9ubHlHcm91cHNBbmRBc3NldHMpIHtcbiAgICAgIG9ycy5wdXNoKHsgX19oYXM6ICdjOHlfSXNEeW5hbWljR3JvdXAnIH0pO1xuICAgICAgb3JzLnB1c2goeyBfX2hhczogJ2M4eV9Jc0RldmljZUdyb3VwJyB9KTtcbiAgICB9XG4gICAgaWYgKG9ycy5sZW5ndGgpIHtcbiAgICAgIGZpbHRlci5fX29yID0gb3JzO1xuICAgIH1cbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRTZWFyY2hEYXRhKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0geyBjdXJyZW50UGFnZTogMSwgcGFnZVNpemU6IHRoaXMuREVGQVVMVF9QQUdFX1NJWkUgfVxuICApIHtcbiAgICBjb25zdCB7IG9ubHlEZXZpY2VzLCBvbmx5R3JvdXBzQW5kQXNzZXRzIH0gPSB0aGlzLmFwcGxpZWRGaWx0ZXJzJC52YWx1ZTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuYnVpbGRTZWFyY2hRdWVyeSh7IG9ubHlEZXZpY2VzLCBvbmx5R3JvdXBzQW5kQXNzZXRzIH0pO1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdGhpcy5xdWVyaWVzVXRpbC5idWlsZFF1ZXJ5KHF1ZXJ5KTtcblxuICAgIHJldHVybiB0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuZ2V0QWxsSW52ZW50b3JpZXMoeyAuLi5wYWdpbmF0aW9uLCBxdWVyeTogcXVlcnlTdHJpbmcsIHRleHQgfSk7XG4gIH1cbn1cbiJdfQ==