@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
84 lines • 14.4 kB
JavaScript
import { Component, EventEmitter, forwardRef } from '@angular/core';
import { QueriesUtil } from '@c8y/client';
import { gettext, PRODUCT_EXPERIENCE_EVENT_SOURCE } from '@c8y/ngx-components';
import { PRODUCT_EXPERIENCE_REPOSITORY_SHARED, RepositoryService, RepositoryType } from '@c8y/ngx-components/repository/shared';
import { Subject } from 'rxjs';
import { map, switchMap } from 'rxjs/operators';
import * as i0 from "@angular/core";
import * as i1 from "@c8y/ngx-components/repository/shared";
import * as i2 from "@c8y/ngx-components";
import * as i3 from "@angular/common";
export class SelectConfigurationModalComponent {
constructor(repositoryService) {
this.repositoryService = repositoryService;
this.PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_REPOSITORY_SHARED;
this.title = gettext('Select configuration');
this.load = new Subject();
this.configurations = this.load.pipe(switchMap(() => this.getItems()), map(({ data }) => this.aggregate(data)));
this.resultEmitter = new EventEmitter();
this.deviceTypeQuery = {};
this.searchQuery = {};
this.labels = { ok: gettext('Save') };
this.queriesUtil = new QueriesUtil();
}
search(searchTerm) {
if (!searchTerm) {
this.searchQuery = {};
}
else {
this.searchQuery = this.queriesUtil.addOrFilter({ name: `*${searchTerm}*` }, { configurationType: `*${searchTerm}*` });
}
this.load.next();
}
result(selectedItems) {
this.resultEmitter.emit(selectedItems);
}
getItems() {
return this.repositoryService.listRepositoryEntries(RepositoryType.CONFIGURATION, {
query: this.queriesUtil.addOrFilter(this.deviceTypeQuery, this.searchQuery),
params: { pageSize: 100 }
});
}
aggregate(mos) {
const selectedItems = this.selected;
return mos.reduce((acc, curr) => {
curr.configurationType = curr.configurationType || curr.name;
const selected = selectedItems && selectedItems.filter(val => val.url === curr.url).length > 0;
const selectModalOption = {
body: [{ value: curr.name }],
obj: curr,
selected
};
let selectModalObject = acc.find(val => val.body[0].value === curr.configurationType);
if (selectModalObject) {
selectModalObject.options.push(selectModalOption);
}
else {
selectModalObject = {
groupId: curr.id,
body: [{ value: curr.configurationType }],
options: [selectModalOption]
};
acc.push(selectModalObject);
}
return acc;
}, []);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SelectConfigurationModalComponent, deps: [{ token: i1.RepositoryService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SelectConfigurationModalComponent, selector: "c8y-select-configuration-modal", providers: [
{
provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,
useExisting: forwardRef(() => SelectConfigurationModalComponent)
}
], ngImport: i0, template: "<c8y-select-modal\n [icon]=\"'gears'\"\n [title]=\"title\"\n [items]=\"configurations | async\"\n [mode]=\"'multi'\"\n (result)=\"result($event)\"\n (search)=\"search($event)\"\n [disableSelected]=\"true\"\n [labels]=\"labels\"\n c8yProductExperience\n inherit\n suppressDataOverriding\n [actionData]=\"{ component: PRODUCT_EXPERIENCE.SHARED.COMPONENTS.SELECT_CONFIGURATION_MODAL }\"\n></c8y-select-modal>\n", dependencies: [{ kind: "component", type: i2.SelectModalComponent, selector: "c8y-select-modal", inputs: ["icon", "title", "subTitle", "items", "mode", "disableSelected", "showFilter", "additionalFilterTemplate", "areMoreEntries", "labels", "noItemsMessage", "hideEmptyItems"], outputs: ["result", "search", "onChoiceUpdated"] }, { kind: "directive", type: i2.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SelectConfigurationModalComponent, decorators: [{
type: Component,
args: [{ selector: 'c8y-select-configuration-modal', providers: [
{
provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,
useExisting: forwardRef(() => SelectConfigurationModalComponent)
}
], template: "<c8y-select-modal\n [icon]=\"'gears'\"\n [title]=\"title\"\n [items]=\"configurations | async\"\n [mode]=\"'multi'\"\n (result)=\"result($event)\"\n (search)=\"search($event)\"\n [disableSelected]=\"true\"\n [labels]=\"labels\"\n c8yProductExperience\n inherit\n suppressDataOverriding\n [actionData]=\"{ component: PRODUCT_EXPERIENCE.SHARED.COMPONENTS.SELECT_CONFIGURATION_MODAL }\"\n></c8y-select-modal>\n" }]
}], ctorParameters: () => [{ type: i1.RepositoryService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWNvbmZpZ3VyYXRpb24tbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZGV2aWNlLXByb2ZpbGUvc2VsZWN0LWNvbmZpZ3VyYXRpb24tbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZGV2aWNlLXByb2ZpbGUvc2VsZWN0LWNvbmZpZ3VyYXRpb24tbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFELE9BQU8sRUFDTCxPQUFPLEVBTVAsK0JBQStCLEVBQ2hDLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLG9DQUFvQyxFQUNwQyxpQkFBaUIsRUFDakIsY0FBYyxFQUNmLE1BQU0sdUNBQXVDLENBQUM7QUFDL0MsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQVloRCxNQUFNLE9BQU8saUNBQWlDO0lBZ0I1QyxZQUFvQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWZ4RCx1QkFBa0IsR0FBRyxvQ0FBb0MsQ0FBQztRQUMxRCxVQUFLLEdBQVcsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDaEQsU0FBSSxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3BDLG1CQUFjLEdBQXNCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNoRCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQ2hDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFB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WUFDRCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7K0dBckVVLGlDQUFpQzttR0FBakMsaUNBQWlDLHlEQVBqQztZQUNUO2dCQUNFLE9BQU8sRUFBRSwrQkFBK0I7Z0JBQ3hDLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsaUNBQWlDLENBQUM7YUFDakU7U0FDRiwwQkMzQkgscWFBY0E7OzRGRGVhLGlDQUFpQztrQkFWN0MsU0FBUzsrQkFDRSxnQ0FBZ0MsYUFFL0I7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLCtCQUErQjs0QkFDeEMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0NBQWtDLENBQUM7eUJBQ2pFO3FCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBRdWVyaWVzVXRpbCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIGdldHRleHQsXG4gIElTZWxlY3RNb2RhbE9iamVjdCxcbiAgSVNlbGVjdE1vZGFsT3B0aW9uLFxuICBNb2RhbExhYmVscyxcbiAgUHJvZHVjdEV4cGVyaWVuY2VFdmVudCxcbiAgUHJvZHVjdEV4cGVyaWVuY2VFdmVudFNvdXJjZSxcbiAgUFJPRFVDVF9FWFBFUklFTkNFX0VWRU5UX1NPVVJDRVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIFBST0RVQ1RfRVhQRVJJRU5DRV9SRVBPU0lUT1JZX1NIQVJFRCxcbiAgUmVwb3NpdG9yeVNlcnZpY2UsXG4gIFJlcG9zaXRvcnlUeXBlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvcmVwb3NpdG9yeS9zaGFyZWQnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1zZWxlY3QtY29uZmlndXJhdGlvbi1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtY29uZmlndXJhdGlvbi1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFBST0RVQ1RfRVhQRVJJRU5DRV9FVkVOVF9TT1VSQ0UsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTZWxlY3RDb25maWd1cmF0aW9uTW9kYWxDb21wb25lbnQpXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdENvbmZpZ3VyYXRpb25Nb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIFByb2R1Y3RFeHBlcmllbmNlRXZlbnRTb3VyY2Uge1xuICBQUk9EVUNUX0VYUEVSSUVOQ0UgPSBQUk9EVUNUX0VYUEVSSUVOQ0VfUkVQT1NJVE9SWV9TSEFSRUQ7XG4gIHRpdGxlOiBzdHJpbmcgPSBnZXR0ZXh0KCdTZWxlY3QgY29uZmlndXJhdGlvbicpO1xuICBsb2FkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgY29uZmlndXJhdGlvbnM6IE9ic2VydmFibGU8YW55W10+ID0gdGhpcy5sb2FkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZ2V0SXRlbXMoKSksXG4gICAgbWFwKCh7IGRhdGEgfSkgPT4gdGhpcy5hZ2dyZWdhdGUoZGF0YSkpXG4gICk7XG4gIHJlc3VsdEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgc2VsZWN0ZWQ6IGFueVtdO1xuICBkZXZpY2VUeXBlUXVlcnk6IGFueSA9IHt9O1xuICBzZWFyY2hRdWVyeTogYW55ID0ge307XG4gIGxhYmVsczogTW9kYWxMYWJlbHMgPSB7IG9rOiBnZXR0ZXh0KCdTYXZlJykgfTtcbiAgcHJvZHVjdEV4cGVyaWVuY2VFdmVudDogUHJvZHVjdEV4cGVyaWVuY2VFdmVudDtcbiAgcHJpdmF0ZSBxdWVyaWVzVXRpbDogUXVlcmllc1V0aWw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXBvc2l0b3J5U2VydmljZTogUmVwb3NpdG9yeVNlcnZpY2UpIHtcbiAgICB0aGlzLnF1ZXJpZXNVdGlsID0gbmV3IFF1ZXJpZXNVdGlsKCk7XG4gIH1cblxuICBzZWFyY2goc2VhcmNoVGVybSkge1xuICAgIGlmICghc2VhcmNoVGVybSkge1xuICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gdGhpcy5xdWVyaWVzVXRpbC5hZGRPckZpbHRlcihcbiAgICAgICAgeyBuYW1lOiBgKiR7c2VhcmNoVGVybX0qYCB9LFxuICAgICAgICB7IGNvbmZpZ3VyYXRpb25UeXBlOiBgKiR7c2VhcmNoVGVybX0qYCB9XG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmxvYWQubmV4dCgpO1xuICB9XG5cbiAgcmVzdWx0KHNlbGVjdGVkSXRlbXMpIHtcbiAgICB0aGlzLnJlc3VsdEVtaXR0ZXIuZW1pdChzZWxlY3RlZEl0ZW1zKTtcbiAgfVxuXG4gIGdldEl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLnJlcG9zaXRvcnlTZXJ2aWNlLmxpc3RSZXBvc2l0b3J5RW50cmllcyhSZXBvc2l0b3J5VHlwZS5DT05GSUdVUkFUSU9OLCB7XG4gICAgICBxdWVyeTogdGhpcy5xdWVyaWVzVXRpbC5hZGRPckZpbHRlcih0aGlzLmRldmljZVR5cGVRdWVyeSwgdGhpcy5zZWFyY2hRdWVyeSksXG4gICAgICBwYXJhbXM6IHsgcGFnZVNpemU6IDEwMCB9XG4gICAgfSk7XG4gIH1cblxuICBhZ2dyZWdhdGUobW9zOiBJTWFuYWdlZE9iamVjdFtdKTogSVNlbGVjdE1vZGFsT2JqZWN0W10ge1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXM6IGFueVtdID0gdGhpcy5zZWxlY3RlZDtcbiAgICByZXR1cm4gbW9zLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgICBjdXJyLmNvbmZpZ3VyYXRpb25UeXBlID0gY3Vyci5jb25maWd1cmF0aW9uVHlwZSB8fCBjdXJyLm5hbWU7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9XG4gICAgICAgIHNlbGVjdGVkSXRlbXMgJiYgc2VsZWN0ZWRJdGVtcy5maWx0ZXIodmFsID0+IHZhbC51cmwgPT09IGN1cnIudXJsKS5sZW5ndGggPiAwO1xuICAgICAgY29uc3Qgc2VsZWN0TW9kYWxPcHRpb246IElTZWxlY3RNb2RhbE9wdGlvbiA9IHtcbiAgICAgICAgYm9keTogW3sgdmFsdWU6IGN1cnIubmFtZSB9XSxcbiAgICAgICAgb2JqOiBjdXJyLFxuICAgICAgICBzZWxlY3RlZFxuICAgICAgfTtcbiAgICAgIGxldCBzZWxlY3RNb2RhbE9iamVjdDogSVNlbGVjdE1vZGFsT2JqZWN0ID0gYWNjLmZpbmQoXG4gICAgICAgIHZhbCA9PiB2YWwuYm9keVswXS52YWx1ZSA9PT0gY3Vyci5jb25maWd1cmF0aW9uVHlwZVxuICAgICAgKSBhcyBJU2VsZWN0TW9kYWxPYmplY3Q7XG4gICAgICBpZiAoc2VsZWN0TW9kYWxPYmplY3QpIHtcbiAgICAgICAgc2VsZWN0TW9kYWxPYmplY3Qub3B0aW9ucy5wdXNoKHNlbGVjdE1vZGFsT3B0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGVjdE1vZGFsT2JqZWN0ID0ge1xuICAgICAgICAgIGdyb3VwSWQ6IGN1cnIuaWQsXG4gICAgICAgICAgYm9keTogW3sgdmFsdWU6IGN1cnIuY29uZmlndXJhdGlvblR5cGUgfV0sXG4gICAgICAgICAgb3B0aW9uczogW3NlbGVjdE1vZGFsT3B0aW9uXVxuICAgICAgICB9O1xuICAgICAgICBhY2MucHVzaChzZWxlY3RNb2RhbE9iamVjdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgfVxufVxuIiwiPGM4eS1zZWxlY3QtbW9kYWxcbiAgW2ljb25dPVwiJ2dlYXJzJ1wiXG4gIFt0aXRsZV09XCJ0aXRsZVwiXG4gIFtpdGVtc109XCJjb25maWd1cmF0aW9ucyB8IGFzeW5jXCJcbiAgW21vZGVdPVwiJ211bHRpJ1wiXG4gIChyZXN1bHQpPVwicmVzdWx0KCRldmVudClcIlxuICAoc2VhcmNoKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgW2Rpc2FibGVTZWxlY3RlZF09XCJ0cnVlXCJcbiAgW2xhYmVsc109XCJsYWJlbHNcIlxuICBjOHlQcm9kdWN0RXhwZXJpZW5jZVxuICBpbmhlcml0XG4gIHN1cHByZXNzRGF0YU92ZXJyaWRpbmdcbiAgW2FjdGlvbkRhdGFdPVwieyBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5TSEFSRUQuQ09NUE9ORU5UUy5TRUxFQ1RfQ09ORklHVVJBVElPTl9NT0RBTCB9XCJcbj48L2M4eS1zZWxlY3QtbW9kYWw+XG4iXX0=