UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

118 lines 17.3 kB
import { Injectable } from '@angular/core'; import { isEmpty, isNil, omitBy } from 'lodash-es'; import { combineLatest, of } from 'rxjs'; import { concatMap, map } from 'rxjs/operators'; import { UserPreferencesService } from '../common/user-preferences/user-preferences.service'; import { DataGridService } from './data-grid.service'; import * as i0 from "@angular/core"; import * as i1 from "../common/user-preferences/user-preferences.service"; import * as i2 from "./data-grid.service"; export class LegacyGridConfigMapperService { static { this.deviceGridLegacyKeyToName = { status: 'status', name: 'name', model: 'model', serialNumber: 'serialNumber', group: 'group', registrationDate: 'registrationDate', systemId: 'systemId', imei: 'imei', alarms: 'alarms' }; } constructor(userPreferencesService, dataGridService) { this.userPreferencesService = userPreferencesService; this.dataGridService = dataGridService; } getMappedGridConfig(context) { const legacyAllDevicesGridKey = context.legacyConfigKey; const legacyAllDevicesGridFilterKey = context.legacyFilterKey; return combineLatest([ this.userPreferencesService.get(legacyAllDevicesGridKey), this.userPreferencesService.get(legacyAllDevicesGridFilterKey) ]).pipe(map(([legacyConfig, legacyFilterConfig]) => this.mapLegacyToDeviceGridConfig(legacyConfig, legacyFilterConfig, context.defaultColumns)), concatMap(mappedLegacyConfig => { if (mappedLegacyConfig) { return Promise.all([ this.userPreferencesService.set(legacyAllDevicesGridKey, null), this.userPreferencesService.set(legacyAllDevicesGridFilterKey, null) ]).then(() => mappedLegacyConfig); } else { return of(null); } }), concatMap(mappedLegacyConfig => mappedLegacyConfig ? this.userPreferencesService .set(context?.key, mappedLegacyConfig) .then(() => mappedLegacyConfig) : this.userPreferencesService.get(context?.key)), map(config => config || { columns: [], pagination: { pageSize: this.dataGridService.DEFAULT_PAGE_SIZE, currentPage: 1 } })); } mapLegacyToDeviceGridConfig(legacyConfig, legacyFilterConfig, defaultColumns = []) { if (Array.isArray(legacyConfig) || !isEmpty(legacyFilterConfig)) { return { columns: this.getConfigColumns(legacyConfig, legacyFilterConfig, defaultColumns), pagination: { pageSize: this.dataGridService.DEFAULT_PAGE_SIZE, currentPage: 1 } }; } } getConfigColumns(legacyConfig, legacyFilterConfig, defaultColumns) { const legacyFilterConfigArray = legacyFilterConfig ? Object.keys(legacyFilterConfig).map(key => ({ key, filter: { externalFilterQuery: legacyFilterConfig[key].filtering }, sorting: legacyFilterConfig[key].sorting })) : []; const config = this.mergeLegacyConfigs(legacyConfig || defaultColumns.map(column => ({ key: column.name })), legacyFilterConfigArray); return config .filter(column => column.key !== 'removalColumn') .map(this.mapLegacyColumnConfig.bind(this)); } mergeLegacyConfigs(columnConfig, filterConfig) { return columnConfig.map(column => ({ ...filterConfig.find(item => item.key === column.key), ...column })); } mapLegacyColumnConfig(legacy) { const { active, key, custom, headerName, fragmentPath, filter, sorting } = legacy; const sortOrder = sorting ? this.migrateSortOrder(sorting) : ''; return omitBy({ visible: active ?? true, name: LegacyGridConfigMapperService.deviceGridLegacyKeyToName[key] || key, sortOrder, custom, header: custom ? headerName : null, path: fragmentPath, filter }, isNil); } migrateSortOrder(sorting) { switch (sorting.order) { case 0: return ''; case -1: return 'desc'; case 1: return 'asc'; } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LegacyGridConfigMapperService, deps: [{ token: i1.UserPreferencesService }, { token: i2.DataGridService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LegacyGridConfigMapperService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LegacyGridConfigMapperService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.UserPreferencesService }, { type: i2.DataGridService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVnYWN5LWdyaWQtY29uZmlnLW1hcHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9kYXRhLWdyaWQvbGVnYWN5LWdyaWQtY29uZmlnLW1hcHBlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFHN0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBc0J0RCxNQUFNLE9BQU8sNkJBQTZCO2FBQ2pDLDhCQUF5QixHQUFHO1FBQ2pDLE1BQU0sRUFBRSxRQUFRO1FBQ2hCLElBQUksRUFBRSxNQUFNO1FBQ1osS0FBSyxFQUFFLE9BQU87UUFDZCxZQUFZLEVBQUUsY0FBYztRQUM1QixLQUFLLEVBQUUsT0FBTztRQUNkLGdCQUFnQixFQUFFLGtCQUFrQjtRQUNwQyxRQUFRLEVBQUUsVUFBVTtRQUNwQixJQUFJLEVBQUUsTUFBTTtRQUNaLE1BQU0sRUFBRSxRQUFRO0tBQ2pCLEFBVitCLENBVTlCO0lBRUYsWUFDVSxzQkFBOEMsRUFDOUMsZUFBZ0M7UUFEaEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFDdkMsQ0FBQztJQUVKLG1CQUFtQixDQUFDLE9BQTBCO1FBQzVDLE1BQU0sdUJBQXVCLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztRQUN4RCxNQUFNLDZC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Q0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDbEMsSUFBSSxFQUFFLFlBQVk7WUFDbEIsTUFBTTtTQUNQLEVBQ0QsS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBTztRQUN0QixRQUFRLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN0QixLQUFLLENBQUM7Z0JBQ0osT0FBTyxFQUFFLENBQUM7WUFDWixLQUFLLENBQUMsQ0FBQztnQkFDTCxPQUFPLE1BQU0sQ0FBQztZQUNoQixLQUFLLENBQUM7Z0JBQ0osT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7K0dBcklVLDZCQUE2QjttSEFBN0IsNkJBQTZCLGNBRjVCLE1BQU07OzRGQUVQLDZCQUE2QjtrQkFIekMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc05pbCwgb21pdEJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb25jYXRNYXAsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdXNlci1wcmVmZXJlbmNlcy91c2VyLXByZWZlcmVuY2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JpZENvbmZpZ0NvbnRleHQgfSBmcm9tICcuL2RhdGEtZ3JpZC1jb25maWd1cmF0aW9uLm1vZGVsJztcbmltcG9ydCB7IENvbHVtbiwgQ3VzdG9tQ29sdW1uQ29uZmlnLCBHcmlkQ29uZmlnIH0gZnJvbSAnLi9kYXRhLWdyaWQubW9kZWwnO1xuaW1wb3J0IHsgRGF0YUdyaWRTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhLWdyaWQuc2VydmljZSc7XG5cbmludGVyZmFjZSBMZWdhY3lDb2x1bW5Db25maWcge1xuICBrZXk6IHN0cmluZztcbiAgaGVhZGVyTmFtZTogc3RyaW5nO1xuICBhY3RpdmU6IGJvb2xlYW47XG4gIGN1c3RvbTogYm9vbGVhbjtcbiAgZnJhZ21lbnRQYXRoOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBMZWdhY3lDb2x1bW5GaWx0ZXJDb25maWcge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgZmlsdGVyaW5nOiBvYmplY3Q7XG4gICAgc29ydGluZzoge1xuICAgICAgb3JkZXI6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBMZWdhY3lHcmlkQ29uZmlnTWFwcGVyU2VydmljZSB7XG4gIHN0YXRpYyBkZXZpY2VHcmlkTGVnYWN5S2V5VG9OYW1lID0ge1xuICAgIHN0YXR1czogJ3N0YXR1cycsXG4gICAgbmFtZTogJ25hbWUnLFxuICAgIG1vZGVsOiAnbW9kZWwnLFxuICAgIHNlcmlhbE51bWJlcjogJ3NlcmlhbE51bWJlcicsXG4gICAgZ3JvdXA6ICdncm91cCcsXG4gICAgcmVnaXN0cmF0aW9uRGF0ZTogJ3JlZ2lzdHJhdGlvbkRhdGUnLFxuICAgIHN5c3RlbUlkOiAnc3lzdGVtSWQnLFxuICAgIGltZWk6ICdpbWVpJyxcbiAgICBhbGFybXM6ICdhbGFybXMnXG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB1c2VyUHJlZmVyZW5jZXNTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0YUdyaWRTZXJ2aWNlOiBEYXRhR3JpZFNlcnZpY2VcbiAgKSB7fVxuXG4gIGdldE1hcHBlZEdyaWRDb25maWcoY29udGV4dDogR3JpZENvbmZpZ0NvbnRleHQpOiBPYnNlcnZhYmxlPEdyaWRDb25maWc+IHtcbiAgICBjb25zdCBsZWdhY3lBbGxEZXZpY2VzR3JpZEtleSA9IGNvbnRleHQubGVnYWN5Q29uZmlnS2V5O1xuICAgIGNvbnN0IGxlZ2FjeUFsbERldmljZXNHcmlkRmlsdGVyS2V5ID0gY29udGV4dC5sZWdhY3lGaWx0ZXJLZXk7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlLmdldChsZWdhY3lBbGxEZXZpY2VzR3JpZEtleSksXG4gICAgICB0aGlzLnVzZXJQcmVmZXJlbmNlc1NlcnZpY2UuZ2V0KGxlZ2FjeUFsbERldmljZXNHcmlkRmlsdGVyS2V5KVxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtsZWdhY3lDb25maWcsIGxlZ2FjeUZpbHRlckNvbmZpZ10pID0+XG4gICAgICAgIHRoaXMubWFwTGVnYWN5VG9EZXZpY2VHcmlkQ29uZmlnKGxlZ2FjeUNvbmZpZywgbGVnYWN5RmlsdGVyQ29uZmlnLCBjb250ZXh0LmRlZmF1bHRDb2x1bW5zKVxuICAgICAgKSxcbiAgICAgIGNvbmNhdE1hcChtYXBwZWRMZWdhY3lDb25maWcgPT4ge1xuICAgICAgICBpZiAobWFwcGVkTGVnYWN5Q29uZmlnKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIHRoaXMudXNlclByZWZlcmVuY2VzU2VydmljZS5zZXQobGVnYWN5QWxsRGV2aWNlc0dyaWRLZXksIG51bGwpLFxuICAgICAgICAgICAgdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlLnNldChsZWdhY3lBbGxEZXZpY2VzR3JpZEZpbHRlcktleSwgbnVsbClcbiAgICAgICAgICBdKS50aGVuKCgpID0+IG1hcHBlZExlZ2FjeUNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNvbmNhdE1hcChtYXBwZWRMZWdhY3lDb25maWcgPT5cbiAgICAgICAgbWFwcGVkTGVnYWN5Q29uZmlnXG4gICAgICAgICAgPyB0aGlzLnVzZXJQcmVmZXJlbmNlc1NlcnZpY2VcbiAgICAgICAgICAgICAgLnNldChjb250ZXh0Py5rZXksIG1hcHBlZExlZ2FjeUNvbmZpZylcbiAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gbWFwcGVkTGVnYWN5Q29uZmlnKVxuICAgICAgICAgIDogdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlLmdldChjb250ZXh0Py5rZXkpXG4gICAgICApLFxuICAgICAgbWFwKFxuICAgICAgICBjb25maWcgPT5cbiAgICAgICAgICBjb25maWcgfHwge1xuICAgICAgICAgICAgY29sdW1uczogW10sXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgIHBhZ2VTaXplOiAodGhpcy5kYXRhR3JpZFNlcnZpY2UgYXMgYW55KS5ERUZBVUxUX1BBR0VfU0laRSxcbiAgICAgICAgICAgICAgY3VycmVudFBhZ2U6IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG1hcExlZ2FjeVRvRGV2aWNlR3JpZENvbmZpZyhcbiAgICBsZWdhY3lDb25maWc6IExlZ2FjeUNvbHVtbkNvbmZpZ1tdLFxuICAgIGxlZ2FjeUZpbHRlckNvbmZpZzogTGVnYWN5Q29sdW1uRmlsdGVyQ29uZmlnLFxuICAgIGRlZmF1bHRDb2x1bW5zOiBDb2x1bW5bXSA9IFtdXG4gICk6IEdyaWRDb25maWcge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGxlZ2FjeUNvbmZpZykgfHwgIWlzRW1wdHkobGVnYWN5RmlsdGVyQ29uZmlnKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uczogdGhpcy5nZXRDb25maWdDb2x1bW5zKGxlZ2FjeUNvbmZpZywgbGVnYWN5RmlsdGVyQ29uZmlnLCBkZWZhdWx0Q29sdW1ucyksXG4gICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICBwYWdlU2l6ZTogKHRoaXMuZGF0YUdyaWRTZXJ2aWNlIGFzIGFueSkuREVGQVVMVF9QQUdFX1NJWkUsXG4gICAgICAgICAgY3VycmVudFBhZ2U6IDFcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBnZXRDb25maWdDb2x1bW5zKFxuICAgIGxlZ2FjeUNvbmZpZzogTGVnYWN5Q29sdW1uQ29uZmlnW10sXG4gICAgbGVnYWN5RmlsdGVyQ29uZmlnOiBMZWdhY3lDb2x1bW5GaWx0ZXJDb25maWcsXG4gICAgZGVmYXVsdENvbHVtbnM6IENvbHVtbltdXG4gICkge1xuICAgIGNvbnN0IGxlZ2FjeUZpbHRlckNvbmZpZ0FycmF5ID0gbGVnYWN5RmlsdGVyQ29uZmlnXG4gICAgICA/IE9iamVjdC5rZXlzKGxlZ2FjeUZpbHRlckNvbmZpZykubWFwKGtleSA9PiAoe1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgIGV4dGVybmFsRmlsdGVyUXVlcnk6IGxlZ2FjeUZpbHRlckNvbmZpZ1trZXldLmZpbHRlcmluZ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc29ydGluZzogbGVnYWN5RmlsdGVyQ29uZmlnW2tleV0uc29ydGluZ1xuICAgICAgICB9KSlcbiAgICAgIDogW107XG5cbiAgICBjb25zdCBjb25maWcgPSB0aGlzLm1lcmdlTGVnYWN5Q29uZmlncyhcbiAgICAgIGxlZ2FjeUNvbmZpZyB8fCBkZWZhdWx0Q29sdW1ucy5tYXAoY29sdW1uID0+ICh7IGtleTogY29sdW1uLm5hbWUgfSkpLFxuICAgICAgbGVnYWN5RmlsdGVyQ29uZmlnQXJyYXlcbiAgICApO1xuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmtleSAhPT0gJ3JlbW92YWxDb2x1bW4nKVxuICAgICAgLm1hcCh0aGlzLm1hcExlZ2FjeUNvbHVtbkNvbmZpZy5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIG1lcmdlTGVnYWN5Q29uZmlncyhjb2x1bW5Db25maWcsIGZpbHRlckNvbmZpZykge1xuICAgIHJldHVybiBjb2x1bW5Db25maWcubWFwKGNvbHVtbiA9PiAoe1xuICAgICAgLi4uZmlsdGVyQ29uZmlnLmZpbmQoaXRlbSA9PiBpdGVtLmtleSA9PT0gY29sdW1uLmtleSksXG4gICAgICAuLi5jb2x1bW5cbiAgICB9KSk7XG4gIH1cblxuICBtYXBMZWdhY3lDb2x1bW5Db25maWcobGVnYWN5KTogQ3VzdG9tQ29sdW1uQ29uZmlnIHtcbiAgICBjb25zdCB7IGFjdGl2ZSwga2V5LCBjdXN0b20sIGhlYWRlck5hbWUsIGZyYWdtZW50UGF0aCwgZmlsdGVyLCBzb3J0aW5nIH0gPSBsZWdhY3k7XG4gICAgY29uc3Qgc29ydE9yZGVyID0gc29ydGluZyA/IHRoaXMubWlncmF0ZVNvcnRPcmRlcihzb3J0aW5nKSA6ICcnO1xuXG4gICAgcmV0dXJuIG9taXRCeShcbiAgICAgIHtcbiAgICAgICAgdmlzaWJsZTogYWN0aXZlID8/IHRydWUsXG4gICAgICAgIG5hbWU6IExlZ2FjeUdyaWRDb25maWdNYXBwZXJTZXJ2aWNlLmRldmljZUdyaWRMZWdhY3lLZXlUb05hbWVba2V5XSB8fCBrZXksXG4gICAgICAgIHNvcnRPcmRlcixcbiAgICAgICAgY3VzdG9tLFxuICAgICAgICBoZWFkZXI6IGN1c3RvbSA/IGhlYWRlck5hbWUgOiBudWxsLFxuICAgICAgICBwYXRoOiBmcmFnbWVudFBhdGgsXG4gICAgICAgIGZpbHRlclxuICAgICAgfSxcbiAgICAgIGlzTmlsXG4gICAgKTtcbiAgfVxuXG4gIG1pZ3JhdGVTb3J0T3JkZXIoc29ydGluZykge1xuICAgIHN3aXRjaCAoc29ydGluZy5vcmRlcikge1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICBjYXNlIC0xOlxuICAgICAgICByZXR1cm4gJ2Rlc2MnO1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gJ2FzYyc7XG4gICAgfVxuICB9XG59XG4iXX0=