UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

92 lines 16.6 kB
import { Component } from '@angular/core'; import { Router } from '@angular/router'; import { NavigatorService, gettext } from '@c8y/ngx-components'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "@c8y/ngx-components"; import * as i3 from "@angular/common"; export class WelcomeToDeviceManagementComponent { constructor(router, navigator) { this.router = router; this.navigator = navigator; this.quickLinks = []; this.isLoading = true; } async ngOnInit() { this.navSubscription = this.navigator.items$.subscribe(nodes => { this.navNodes = nodes; this.createAllDevicesQuickLink(); this.createQuicklinkRegisterDevice(); this.createQuicklinkAddGroup(); this.createAddDeviceProfileQuickLink(); this.createAddSoftwareQuickLink(); this.createAddFirmwareQuickLink(); this.isLoading = false; }); } ngOnDestroy() { if (this.navSubscription && !this.navSubscription.closed) { this.navSubscription.unsubscribe(); } } createAllDevicesQuickLink() { this.createQuickLinkToNavNode(['Devices', 'All devices']); } createQuicklinkRegisterDevice() { this.createQuickLinkToNavNode(['Devices', 'Registration'], { label: gettext('Register device') }); } createQuicklinkAddGroup() { this.createQuickLinkToNavNode(['Groups'], { label: gettext('Add group'), icon: 'c8y-group-add', click: async () => await this.router.navigate(['group'], { queryParams: { showAddGroup: true } }) }); } createAddDeviceProfileQuickLink() { this.createQuickLinkToNavNode(['Management', 'Device profiles'], { label: gettext('Add device profile') }); } createAddSoftwareQuickLink() { this.createQuickLinkToNavNode(['Management', 'Software repository'], { label: gettext('Add software') }); } createAddFirmwareQuickLink() { this.createQuickLinkToNavNode(['Management', 'Firmware repository'], { label: gettext('Add firmware') }); } createQuickLinkToNavNode(navNodePathLabels, quickLinkOverrides = {}) { const navNode = this.findVisibleNavNode(navNodePathLabels); if (!navNode) { return; } const quickLink = { icon: navNode.icon, label: navNode.label, click: async () => { await this.router.navigateByUrl(navNode.path); }, ...quickLinkOverrides }; this.quickLinks.push(quickLink); } findVisibleNavNode(navNodePathLabels, navNodes = this.navNodes) { const currentLabel = navNodePathLabels.shift(); const navNode = navNodes.find(navNode => !navNode.hidden && navNode.label === currentLabel); if (navNode && navNodePathLabels.length > 0) { return this.findVisibleNavNode(navNodePathLabels, navNode.children); } return navNode; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WelcomeToDeviceManagementComponent, deps: [{ token: i1.Router }, { token: i2.NavigatorService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: WelcomeToDeviceManagementComponent, selector: "c8y-welcome-to-devicemanagement", ngImport: i0, template: "<div class=\"welcome-widget\" tabindex=\"0\">\n <div class=\"p-16 text-center\" *ngIf=\"isLoading\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"d-flex fit-h\" *ngIf=\"!isLoading\">\n <div class=\"col-xs-12 a-s-stretch col-md-12\">\n <div class=\"card-group interact-grid fit-h\">\n <div *ngFor=\"let link of quickLinks\" class=\"col-xs-4 no-gutter\">\n <button\n class=\"btn-clean card text-pre-normal\"\n [ngClass]=\"{ 'm-b-0': true }\"\n type=\"button\"\n [title]=\"link.label | translate\"\n (click)=\"link.click ? link.click() : false\"\n c8yProductExperience\n [actionName]=\"'welcomeWidgetClicked'\"\n [actionData]=\"{ link: link.label }\"\n data-cy=\"devicemanagement-welcome--quick-link\"\n >\n <c8y-quick-link [icon]=\"link.icon\" [label]=\"link.label\"></c8y-quick-link>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: i2.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "component", type: i2.QuickLinkComponent, selector: "c8y-quick-link", inputs: ["icon", "label"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WelcomeToDeviceManagementComponent, decorators: [{ type: Component, args: [{ selector: 'c8y-welcome-to-devicemanagement', template: "<div class=\"welcome-widget\" tabindex=\"0\">\n <div class=\"p-16 text-center\" *ngIf=\"isLoading\">\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"d-flex fit-h\" *ngIf=\"!isLoading\">\n <div class=\"col-xs-12 a-s-stretch col-md-12\">\n <div class=\"card-group interact-grid fit-h\">\n <div *ngFor=\"let link of quickLinks\" class=\"col-xs-4 no-gutter\">\n <button\n class=\"btn-clean card text-pre-normal\"\n [ngClass]=\"{ 'm-b-0': true }\"\n type=\"button\"\n [title]=\"link.label | translate\"\n (click)=\"link.click ? link.click() : false\"\n c8yProductExperience\n [actionName]=\"'welcomeWidgetClicked'\"\n [actionData]=\"{ link: link.label }\"\n data-cy=\"devicemanagement-welcome--quick-link\"\n >\n <c8y-quick-link [icon]=\"link.icon\" [label]=\"link.label\"></c8y-quick-link>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }] }], ctorParameters: () => [{ type: i1.Router }, { type: i2.NavigatorService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2VsY29tZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kZXZpY2UtbWFuYWdlbWVudC13ZWxjb21lL3dlbGNvbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvZGV2aWNlLW1hbmFnZW1lbnQtd2VsY29tZS93ZWxjb21lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQTBCLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7OztBQVF4RixNQUFNLE9BQU8sa0NBQWtDO0lBTzdDLFlBQ1UsTUFBYyxFQUNkLFNBQTJCO1FBRDNCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQVJyQyxlQUFVLEdBQWdCLEVBQUUsQ0FBQztRQUM3QixjQUFTLEdBQUcsSUFBSSxDQUFDO0lBUWQsQ0FBQztJQUVKLEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLDBC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QUFPLElBQUksaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzVDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzsrR0FuR1Usa0NBQWtDO21HQUFsQyxrQ0FBa0MsdUVDVi9DLGlnQ0EwQkE7OzRGRGhCYSxrQ0FBa0M7a0JBSjlDLFNBQVM7K0JBQ0UsaUNBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERvY0xpbmssIE5hdmlnYXRvck5vZGUsIE5hdmlnYXRvclNlcnZpY2UsIGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xudHlwZSBRdWlja0xpbmsgPSBQaWNrPERvY0xpbmssICdsYWJlbCcgfCAnY2xpY2snIHwgJ2ljb24nPjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXdlbGNvbWUtdG8tZGV2aWNlbWFuYWdlbWVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93ZWxjb21lLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBXZWxjb21lVG9EZXZpY2VNYW5hZ2VtZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBxdWlja0xpbmtzOiBRdWlja0xpbmtbXSA9IFtdO1xuICBpc0xvYWRpbmcgPSB0cnVlO1xuXG4gIHByaXZhdGUgbmF2Tm9kZXM6IE5hdmlnYXRvck5vZGVbXTtcbiAgcHJpdmF0ZSBuYXZTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgbmF2aWdhdG9yOiBOYXZpZ2F0b3JTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm5hdlN1YnNjcmlwdGlvbiA9IHRoaXMubmF2aWdhdG9yLml0ZW1zJC5zdWJzY3JpYmUobm9kZXMgPT4ge1xuICAgICAgdGhpcy5uYXZOb2RlcyA9IG5vZGVzO1xuICAgICAgdGhpcy5jcmVhdGVBbGxEZXZpY2VzUXVpY2tMaW5rKCk7XG4gICAgICB0aGlzLmNyZWF0ZVF1aWNrbGlua1JlZ2lzdGVyRGV2aWNlKCk7XG4gICAgICB0aGlzLmNyZWF0ZVF1aWNrbGlua0FkZEdyb3VwKCk7XG4gICAgICB0aGlzLmNyZWF0ZUFkZERldmljZVByb2ZpbGVRdWlja0xpbmsoKTtcbiAgICAgIHRoaXMuY3JlYXRlQWRkU29mdHdhcmVRdWlja0xpbmsoKTtcbiAgICAgIHRoaXMuY3JlYXRlQWRkRmlybXdhcmVRdWlja0xpbmsoKTtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5uYXZTdWJzY3JpcHRpb24gJiYgIXRoaXMubmF2U3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgdGhpcy5uYXZTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUFsbERldmljZXNRdWlja0xpbmsoKSB7XG4gICAgdGhpcy5jcmVhdGVRdWlja0xpbmtUb05hdk5vZGUoWydEZXZpY2VzJywgJ0FsbCBkZXZpY2VzJ10pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVRdWlja2xpbmtSZWdpc3RlckRldmljZSgpIHtcbiAgICB0aGlzLmNyZWF0ZVF1aWNrTGlua1RvTmF2Tm9kZShbJ0RldmljZXMnLCAnUmVnaXN0cmF0aW9uJ10sIHtcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdSZWdpc3RlciBkZXZpY2UnKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVRdWlja2xpbmtBZGRHcm91cCgpIHtcbiAgICB0aGlzLmNyZWF0ZVF1aWNrTGlua1RvTmF2Tm9kZShbJ0dyb3VwcyddLCB7XG4gICAgICBsYWJlbDogZ2V0dGV4dCgnQWRkIGdyb3VwJyksXG4gICAgICBpY29uOiAnYzh5LWdyb3VwLWFkZCcsXG4gICAgICBjbGljazogYXN5bmMgKCkgPT5cbiAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydncm91cCddLCB7IHF1ZXJ5UGFyYW1zOiB7IHNob3dBZGRHcm91cDogdHJ1ZSB9IH0pXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUFkZERldmljZVByb2ZpbGVRdWlja0xpbmsoKSB7XG4gICAgdGhpcy5jcmVhdGVRdWlja0xpbmtUb05hdk5vZGUoWydNYW5hZ2VtZW50JywgJ0RldmljZSBwcm9maWxlcyddLCB7XG4gICAgICBsYWJlbDogZ2V0dGV4dCgnQWRkIGRldmljZSBwcm9maWxlJylcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQWRkU29mdHdhcmVRdWlja0xpbmsoKSB7XG4gICAgdGhpcy5jcmVhdGVRdWlja0xpbmtUb05hdk5vZGUoWydNYW5hZ2VtZW50JywgJ1NvZnR3YXJlIHJlcG9zaXRvcnknXSwge1xuICAgICAgbGFiZWw6IGdldHRleHQoJ0FkZCBzb2Z0d2FyZScpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUFkZEZpcm13YXJlUXVpY2tMaW5rKCkge1xuICAgIHRoaXMuY3JlYXRlUXVpY2tMaW5rVG9OYXZOb2RlKFsnTWFuYWdlbWVudCcsICdGaXJtd2FyZSByZXBvc2l0b3J5J10sIHtcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdBZGQgZmlybXdhcmUnKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVRdWlja0xpbmtUb05hdk5vZGUoXG4gICAgbmF2Tm9kZVBhdGhMYWJlbHM6IHN0cmluZ1tdLFxuICAgIHF1aWNrTGlua092ZXJyaWRlczogUGFydGlhbDxEb2NMaW5rPiA9IHt9XG4gICkge1xuICAgIGNvbnN0IG5hdk5vZGUgPSB0aGlzLmZpbmRWaXNpYmxlTmF2Tm9kZShuYXZOb2RlUGF0aExhYmVscyk7XG5cbiAgICBpZiAoIW5hdk5vZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBxdWlja0xpbmsgPSB7XG4gICAgICBpY29uOiBuYXZOb2RlLmljb24sXG4gICAgICBsYWJlbDogbmF2Tm9kZS5sYWJlbCxcbiAgICAgIGNsaWNrOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwobmF2Tm9kZS5wYXRoKTtcbiAgICAgIH0sXG4gICAgICAuLi5xdWlja0xpbmtPdmVycmlkZXNcbiAgICB9O1xuICAgIHRoaXMucXVpY2tMaW5rcy5wdXNoKHF1aWNrTGluayk7XG4gIH1cblxuICBwcml2YXRlIGZpbmRWaXNpYmxlTmF2Tm9kZShcbiAgICBuYXZOb2RlUGF0aExhYmVsczogc3RyaW5nW10sXG4gICAgbmF2Tm9kZXM6IE5hdmlnYXRvck5vZGVbXSA9IHRoaXMubmF2Tm9kZXNcbiAgKTogTmF2aWdhdG9yTm9kZSB7XG4gICAgY29uc3QgY3VycmVudExhYmVsID0gbmF2Tm9kZVBhdGhMYWJlbHMuc2hpZnQoKTtcbiAgICBjb25zdCBuYXZOb2RlID0gbmF2Tm9kZXMuZmluZChuYXZOb2RlID0+ICFuYXZOb2RlLmhpZGRlbiAmJiBuYXZOb2RlLmxhYmVsID09PSBjdXJyZW50TGFiZWwpO1xuICAgIGlmIChuYXZOb2RlICYmIG5hdk5vZGVQYXRoTGFiZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbmRWaXNpYmxlTmF2Tm9kZShuYXZOb2RlUGF0aExhYmVscywgbmF2Tm9kZS5jaGlsZHJlbik7XG4gICAgfVxuICAgIHJldHVybiBuYXZOb2RlO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwid2VsY29tZS13aWRnZXRcIiB0YWJpbmRleD1cIjBcIj5cbiAgPGRpdiBjbGFzcz1cInAtMTYgdGV4dC1jZW50ZXJcIiAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBmaXQtaFwiICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgYS1zLXN0cmV0Y2ggY29sLW1kLTEyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ncm91cCBpbnRlcmFjdC1ncmlkIGZpdC1oXCI+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGxpbmsgb2YgcXVpY2tMaW5rc1wiIGNsYXNzPVwiY29sLXhzLTQgbm8tZ3V0dGVyXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4tY2xlYW4gY2FyZCB0ZXh0LXByZS1ub3JtYWxcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnbS1iLTAnOiB0cnVlIH1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbdGl0bGVdPVwibGluay5sYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwibGluay5jbGljayA/IGxpbmsuY2xpY2soKSA6IGZhbHNlXCJcbiAgICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgICBbYWN0aW9uTmFtZV09XCInd2VsY29tZVdpZGdldENsaWNrZWQnXCJcbiAgICAgICAgICAgIFthY3Rpb25EYXRhXT1cInsgbGluazogbGluay5sYWJlbCB9XCJcbiAgICAgICAgICAgIGRhdGEtY3k9XCJkZXZpY2VtYW5hZ2VtZW50LXdlbGNvbWUtLXF1aWNrLWxpbmtcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxjOHktcXVpY2stbGluayBbaWNvbl09XCJsaW5rLmljb25cIiBbbGFiZWxdPVwibGluay5sYWJlbFwiPjwvYzh5LXF1aWNrLWxpbms+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=