@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
118 lines • 17.3 kB
JavaScript
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=