@c8y/ngx-components 1021.31.4 → 1021.34.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/alarms/alarms-date-filter.component.d.ts +1 -0
- package/alarms/alarms-date-filter.component.d.ts.map +1 -1
- package/core/dynamic-component/dynamic-component.component.d.ts +5 -0
- package/core/dynamic-component/dynamic-component.component.d.ts.map +1 -1
- package/core/plugins/plugins.service.d.ts +3 -0
- package/core/plugins/plugins.service.d.ts.map +1 -1
- package/core/router/router-tabs.resolver.d.ts +2 -2
- package/core/router/router-tabs.resolver.d.ts.map +1 -1
- package/esm2022/alarms/alarms-date-filter.component.mjs +5 -3
- package/esm2022/alarms/alarms-type-filter.component.mjs +3 -3
- package/esm2022/core/dynamic-component/dynamic-component.component.mjs +23 -3
- package/esm2022/core/plugins/plugins.service.mjs +7 -1
- package/esm2022/core/router/router-tabs.resolver.mjs +22 -8
- package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +2 -2
- package/esm2022/protocol-lwm2m/ng1/plugin-checker.service.mjs +5 -1
- package/esm2022/services/services-device-tab/service-command.service.mjs +113 -0
- package/esm2022/services/services-device-tab/service-device-tab.model.mjs +1 -1
- package/esm2022/services/services-device-tab/services-device-tab.component.mjs +13 -7
- package/esm2022/widgets/definitions/asset-notes/c8y-ngx-components-widgets-definitions-asset-notes.mjs +5 -0
- package/esm2022/widgets/definitions/asset-notes/index.mjs +29 -0
- package/esm2022/widgets/definitions/index.mjs +2 -1
- package/esm2022/widgets/implementations/asset-notes/asset-notes-widget.component.mjs +67 -0
- package/esm2022/widgets/implementations/asset-notes/c8y-ngx-components-widgets-implementations-asset-notes.mjs +5 -0
- package/esm2022/widgets/implementations/asset-notes/index.mjs +2 -0
- package/fesm2022/c8y-ngx-components-alarms.mjs +5 -4
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs +4 -0
- package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services.mjs +116 -5
- package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs +36 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +74 -0
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components.mjs +48 -8
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +20 -11
- package/locales/es.po +18 -9
- package/locales/fr.po +18 -9
- package/locales/ja_JP.po +18 -9
- package/locales/ko.po +18 -9
- package/locales/locales.pot +19 -7
- package/locales/nl.po +18 -9
- package/locales/pl.po +21 -12
- package/locales/pt_BR.po +18 -9
- package/locales/zh_CN.po +18 -9
- package/locales/zh_TW.po +18 -9
- package/package.json +1 -1
- package/protocol-lwm2m/ng1/plugin-checker.service.d.ts +4 -0
- package/protocol-lwm2m/ng1/plugin-checker.service.d.ts.map +1 -1
- package/services/services-device-tab/service-command.service.d.ts +59 -0
- package/services/services-device-tab/service-command.service.d.ts.map +1 -0
- package/services/services-device-tab/service-device-tab.model.d.ts +9 -0
- package/services/services-device-tab/service-device-tab.model.d.ts.map +1 -1
- package/services/services-device-tab/services-device-tab.component.d.ts +5 -2
- package/services/services-device-tab/services-device-tab.component.d.ts.map +1 -1
- package/widgets/definitions/asset-notes/c8y-ngx-components-widgets-definitions-asset-notes.d.ts.map +1 -0
- package/widgets/definitions/asset-notes/index.d.ts +16 -0
- package/widgets/definitions/asset-notes/index.d.ts.map +1 -0
- package/widgets/definitions/index.d.ts +1 -0
- package/widgets/definitions/index.d.ts.map +1 -1
- package/widgets/implementations/asset-notes/asset-notes-widget.component.d.ts +33 -0
- package/widgets/implementations/asset-notes/asset-notes-widget.component.d.ts.map +1 -0
- package/widgets/implementations/asset-notes/c8y-ngx-components-widgets-implementations-asset-notes.d.ts.map +1 -0
- package/widgets/implementations/asset-notes/index.d.ts +2 -0
- package/widgets/implementations/asset-notes/index.d.ts.map +1 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import * as i2 from '@angular/common';
|
|
2
|
+
import { CommonModule as CommonModule$1 } from '@angular/common';
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { inject, input, signal, computed, Component } from '@angular/core';
|
|
5
|
+
import * as i3 from '@angular/forms';
|
|
6
|
+
import { FormsModule } from '@angular/forms';
|
|
7
|
+
import { InventoryService } from '@c8y/client';
|
|
8
|
+
import * as i1 from '@c8y/ngx-components';
|
|
9
|
+
import { AppStateService, AlertService, DatePipe, gettext, CommonModule, CoreModule, FormsModule as FormsModule$1 } from '@c8y/ngx-components';
|
|
10
|
+
|
|
11
|
+
class AssetNotesWidgetComponent {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.inventory = inject(InventoryService);
|
|
14
|
+
this.appState = inject(AppStateService);
|
|
15
|
+
this.alertService = inject(AlertService);
|
|
16
|
+
this.datePipe = inject(DatePipe);
|
|
17
|
+
this.config = input();
|
|
18
|
+
this.notes = signal(null);
|
|
19
|
+
this.editable = signal(false);
|
|
20
|
+
this.isLoading = computed(() => this.notes()?.htmlContent === undefined);
|
|
21
|
+
this.FRAGMENT = 'c8y_ComponentConfig!assetNotes';
|
|
22
|
+
this.ngNonBindableTranslate = computed(() => ({
|
|
23
|
+
lastUpdated: this.datePipe.transform(this.notes()?.lastUpdated),
|
|
24
|
+
user: this.notes()?.user
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
async ngOnInit() {
|
|
28
|
+
await this.loadNotes();
|
|
29
|
+
}
|
|
30
|
+
toggleEdit() {
|
|
31
|
+
this.editable.set(!this.editable());
|
|
32
|
+
}
|
|
33
|
+
async save() {
|
|
34
|
+
try {
|
|
35
|
+
const updatedNotes = {
|
|
36
|
+
...this.notes(),
|
|
37
|
+
user: this.appState.currentUser.value.id,
|
|
38
|
+
lastUpdated: new Date().toISOString()
|
|
39
|
+
};
|
|
40
|
+
await this.inventory.update({
|
|
41
|
+
id: this.config().device.id,
|
|
42
|
+
[this.FRAGMENT]: updatedNotes
|
|
43
|
+
});
|
|
44
|
+
this.notes.set(updatedNotes);
|
|
45
|
+
this.editable.set(false);
|
|
46
|
+
this.alertService.success(gettext('Notes saved.'));
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
this.alertService.addServerFailure(error);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async loadNotes() {
|
|
53
|
+
try {
|
|
54
|
+
const device = await this.inventory.detail(this.config().device.id);
|
|
55
|
+
this.notes.set(device.data[this.FRAGMENT] || { htmlContent: '' });
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
this.alertService.addServerFailure(error);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AssetNotesWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
62
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: AssetNotesWidgetComponent, isStandalone: true, selector: "c8y-asset-notes", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"fit-h d-flex flex-wrap a-i-stretch\">\n <i\n class=\"c8y-icon c8y-icon-duocolor asset-notes-icon\"\n [c8yIcon]=\"'c8y-notification'\"\n ></i>\n\n @if (!editable()) {\n <div class=\"asset-notes-content\">\n <c8y-loading *ngIf=\"isLoading()\"></c8y-loading>\n <div class=\"text-break-word asset-notes-body\">\n @if (notes()?.htmlContent && !isLoading()) {\n <span\n class=\"markdown-content d-inline-block\"\n [innerHTML]=\"notes()?.htmlContent | markdownToHtml | async\"\n ></span>\n } @else if (!notes()?.htmlContent) {\n <span>\n {{ 'No notes yet.' | translate }}\n </span>\n }\n\n <button\n class=\"btn btn-link btn-sm\"\n title=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit()\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n </div>\n </div>\n <div class=\"asset-notes-footer m-t-8\">\n <small class=\"text-muted\">\n <em\n *ngIf=\"notes()?.lastUpdated\"\n ngNonBindable\n translate\n [translateParams]=\"ngNonBindableTranslate()\"\n >\n {{ lastUpdated }} by {{ user }}\n </em>\n </small>\n </div>\n } @else {\n <div class=\"fit-h flex-grow\">\n <div class=\"d-flex a-i-stretch fit-h\">\n <textarea\n class=\"form-control fit-h text-monospace\"\n [attr.aria-label]=\"'Notes' | translate\"\n rows=\"5\"\n [(ngModel)]=\"notes().htmlContent\"\n c8y-code-editor\n ></textarea>\n <div class=\"input-group-btn a-s-center\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n (click)=\"save()\"\n >\n <i c8yIcon=\"check\"></i>\n </button>\n </div>\n <div class=\"input-group-btn a-s-center\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "component", type: i1.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "pipe", type: i1.MarkdownToHtmlPipe, name: "markdownToHtml" }, { kind: "ngmodule", type: CommonModule$1 }, { kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: FormsModule$1 }] }); }
|
|
63
|
+
}
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AssetNotesWidgetComponent, decorators: [{
|
|
65
|
+
type: Component,
|
|
66
|
+
args: [{ selector: 'c8y-asset-notes', standalone: true, imports: [CommonModule, CommonModule$1, CoreModule, FormsModule, FormsModule$1, DatePipe], template: "<div class=\"fit-h d-flex flex-wrap a-i-stretch\">\n <i\n class=\"c8y-icon c8y-icon-duocolor asset-notes-icon\"\n [c8yIcon]=\"'c8y-notification'\"\n ></i>\n\n @if (!editable()) {\n <div class=\"asset-notes-content\">\n <c8y-loading *ngIf=\"isLoading()\"></c8y-loading>\n <div class=\"text-break-word asset-notes-body\">\n @if (notes()?.htmlContent && !isLoading()) {\n <span\n class=\"markdown-content d-inline-block\"\n [innerHTML]=\"notes()?.htmlContent | markdownToHtml | async\"\n ></span>\n } @else if (!notes()?.htmlContent) {\n <span>\n {{ 'No notes yet.' | translate }}\n </span>\n }\n\n <button\n class=\"btn btn-link btn-sm\"\n title=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit()\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n </div>\n </div>\n <div class=\"asset-notes-footer m-t-8\">\n <small class=\"text-muted\">\n <em\n *ngIf=\"notes()?.lastUpdated\"\n ngNonBindable\n translate\n [translateParams]=\"ngNonBindableTranslate()\"\n >\n {{ lastUpdated }} by {{ user }}\n </em>\n </small>\n </div>\n } @else {\n <div class=\"fit-h flex-grow\">\n <div class=\"d-flex a-i-stretch fit-h\">\n <textarea\n class=\"form-control fit-h text-monospace\"\n [attr.aria-label]=\"'Notes' | translate\"\n rows=\"5\"\n [(ngModel)]=\"notes().htmlContent\"\n c8y-code-editor\n ></textarea>\n <div class=\"input-group-btn a-s-center\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n (click)=\"save()\"\n >\n <i c8yIcon=\"check\"></i>\n </button>\n </div>\n <div class=\"input-group-btn a-s-center\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n</div>\n" }]
|
|
67
|
+
}] });
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Generated bundle index. Do not edit.
|
|
71
|
+
*/
|
|
72
|
+
|
|
73
|
+
export { AssetNotesWidgetComponent };
|
|
74
|
+
//# sourceMappingURL=c8y-ngx-components-widgets-implementations-asset-notes.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-widgets-implementations-asset-notes.mjs","sources":["../../widgets/implementations/asset-notes/asset-notes-widget.component.ts","../../widgets/implementations/asset-notes/asset-notes-widget.component.html","../../widgets/implementations/asset-notes/c8y-ngx-components-widgets-implementations-asset-notes.ts"],"sourcesContent":["import { CommonModule as NgCommonModule } from '@angular/common';\nimport { Component, computed, inject, input, InputSignal, OnInit, signal } from '@angular/core';\nimport { FormsModule as NgFormsModule } from '@angular/forms';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport {\n AlertService,\n AppStateService,\n CommonModule,\n CoreModule,\n DatePipe,\n FormsModule,\n gettext\n} from '@c8y/ngx-components';\n\ninterface AssetNotes {\n user: string;\n lastUpdated: string;\n htmlContent: string;\n}\n\n@Component({\n selector: 'c8y-asset-notes',\n templateUrl: './asset-notes-widget.component.html',\n standalone: true,\n imports: [CommonModule, NgCommonModule, CoreModule, NgFormsModule, FormsModule, DatePipe]\n})\nexport class AssetNotesWidgetComponent implements OnInit {\n private inventory = inject(InventoryService);\n private appState = inject(AppStateService);\n private alertService = inject(AlertService);\n private datePipe = inject(DatePipe);\n\n config: InputSignal<{ device: Partial<IManagedObject> }> = input();\n\n notes = signal<AssetNotes | null>(null);\n editable = signal(false);\n isLoading = computed(() => this.notes()?.htmlContent === undefined);\n\n private readonly FRAGMENT = 'c8y_ComponentConfig!assetNotes';\n ngNonBindableTranslate = computed(() => ({\n lastUpdated: this.datePipe.transform(this.notes()?.lastUpdated),\n user: this.notes()?.user\n }));\n\n async ngOnInit() {\n await this.loadNotes();\n }\n\n toggleEdit() {\n this.editable.set(!this.editable());\n }\n\n async save() {\n try {\n const updatedNotes = {\n ...this.notes(),\n user: this.appState.currentUser.value.id,\n lastUpdated: new Date().toISOString()\n };\n\n await this.inventory.update({\n id: this.config().device.id,\n [this.FRAGMENT]: updatedNotes\n });\n\n this.notes.set(updatedNotes);\n this.editable.set(false);\n this.alertService.success(gettext('Notes saved.'));\n } catch (error) {\n this.alertService.addServerFailure(error);\n }\n }\n\n private async loadNotes() {\n try {\n const device = await this.inventory.detail(this.config().device.id);\n this.notes.set(device.data[this.FRAGMENT] || { htmlContent: '' });\n } catch (error) {\n this.alertService.addServerFailure(error);\n }\n }\n}\n","<div class=\"fit-h d-flex flex-wrap a-i-stretch\">\n <i\n class=\"c8y-icon c8y-icon-duocolor asset-notes-icon\"\n [c8yIcon]=\"'c8y-notification'\"\n ></i>\n\n @if (!editable()) {\n <div class=\"asset-notes-content\">\n <c8y-loading *ngIf=\"isLoading()\"></c8y-loading>\n <div class=\"text-break-word asset-notes-body\">\n @if (notes()?.htmlContent && !isLoading()) {\n <span\n class=\"markdown-content d-inline-block\"\n [innerHTML]=\"notes()?.htmlContent | markdownToHtml | async\"\n ></span>\n } @else if (!notes()?.htmlContent) {\n <span>\n {{ 'No notes yet.' | translate }}\n </span>\n }\n\n <button\n class=\"btn btn-link btn-sm\"\n title=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit()\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n </div>\n </div>\n <div class=\"asset-notes-footer m-t-8\">\n <small class=\"text-muted\">\n <em\n *ngIf=\"notes()?.lastUpdated\"\n ngNonBindable\n translate\n [translateParams]=\"ngNonBindableTranslate()\"\n >\n {{ lastUpdated }} by {{ user }}\n </em>\n </small>\n </div>\n } @else {\n <div class=\"fit-h flex-grow\">\n <div class=\"d-flex a-i-stretch fit-h\">\n <textarea\n class=\"form-control fit-h text-monospace\"\n [attr.aria-label]=\"'Notes' | translate\"\n rows=\"5\"\n [(ngModel)]=\"notes().htmlContent\"\n c8y-code-editor\n ></textarea>\n <div class=\"input-group-btn a-s-center\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n (click)=\"save()\"\n >\n <i c8yIcon=\"check\"></i>\n </button>\n </div>\n <div class=\"input-group-btn a-s-center\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["NgCommonModule","NgFormsModule","FormsModule"],"mappings":";;;;;;;;;;MA0Ba,yBAAyB,CAAA;AANtC,IAAA,WAAA,GAAA;AAOU,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACrC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AACnC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACpC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEpC,IAAM,CAAA,MAAA,GAAqD,KAAK,EAAE,CAAC;AAEnE,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;AACxC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC;QAEnD,IAAQ,CAAA,QAAA,GAAG,gCAAgC,CAAC;AAC7D,QAAA,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CAAC,OAAO;AACvC,YAAA,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,WAAW,CAAC;AAC/D,YAAA,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI;AACzB,SAAA,CAAC,CAAC,CAAC;AAuCL,KAAA;AArCC,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;KACxB;IAED,UAAU,GAAA;QACR,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;KACrC;AAED,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,IAAI;AACF,YAAA,MAAM,YAAY,GAAG;gBACnB,GAAG,IAAI,CAAC,KAAK,EAAE;gBACf,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;AACxC,gBAAA,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACtC,CAAC;AAEF,YAAA,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC1B,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE;AAC3B,gBAAA,CAAC,IAAI,CAAC,QAAQ,GAAG,YAAY;AAC9B,aAAA,CAAC,CAAC;AAEH,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;SACpD;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;SAC3C;KACF;AAEO,IAAA,MAAM,SAAS,GAAA;AACrB,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACpE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;SACnE;QAAC,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;SAC3C;KACF;8GAtDU,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1BtC,syEA8EA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDtDY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,IAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAEA,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,UAAU,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAEC,WAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAEC,aAAW,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAEnE,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAEf,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAEF,cAAc,EAAE,UAAU,EAAEC,WAAa,EAAEC,aAAW,EAAE,QAAQ,CAAC,EAAA,QAAA,EAAA,syEAAA,EAAA,CAAA;;;AExB3F;;AAEG;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Directive, Input, Injector, InjectionToken, Injectable, Optional, Inject, isDevMode, inject, Pipe, EventEmitter, NgModule, LOCALE_ID, EnvironmentInjector, HostListener, NgModuleRef, createNgModule, Component, Output, HostBinding, forwardRef, SecurityContext, TemplateRef, APP_INITIALIZER, runInInjectionContext, effect, Self, SkipSelf, ViewChild, Attribute, ContentChild, ViewContainerRef, ContentChildren, ElementRef, ViewChildren, createComponent, importProvidersFrom, ChangeDetectionStrategy, SimpleChange, signal, Type, DestroyRef } from '@angular/core';
|
|
2
|
+
import { Directive, Input, Injector, InjectionToken, Injectable, Optional, Inject, isDevMode, inject, Pipe, EventEmitter, NgModule, LOCALE_ID, EnvironmentInjector, HostListener, NgModuleRef, createNgModule, Component, Output, HostBinding, forwardRef, SecurityContext, TemplateRef, APP_INITIALIZER, runInInjectionContext, effect, Self, SkipSelf, ViewChild, Attribute, ContentChild, ViewContainerRef, ContentChildren, ElementRef, ViewChildren, createComponent, importProvidersFrom, ChangeDetectionStrategy, SimpleChange, reflectComponentType, signal, Type, DestroyRef } from '@angular/core';
|
|
3
3
|
import * as i2$2 from 'ngx-bootstrap/dropdown';
|
|
4
4
|
import { BsDropdownModule, BsDropdownDirective } from 'ngx-bootstrap/dropdown';
|
|
5
5
|
import * as i3$1 from '@angular/cdk/a11y';
|
|
@@ -4901,6 +4901,12 @@ class PluginsService {
|
|
|
4901
4901
|
return undefined;
|
|
4902
4902
|
}
|
|
4903
4903
|
}
|
|
4904
|
+
async resetRemotes(application) {
|
|
4905
|
+
return await this.applicationService.updateApplicationConfig(application, {
|
|
4906
|
+
remotes: undefined,
|
|
4907
|
+
excludedRemotes: undefined
|
|
4908
|
+
});
|
|
4909
|
+
}
|
|
4904
4910
|
sortVersions(source, order) {
|
|
4905
4911
|
const sourceCopy = cloneDeep(source);
|
|
4906
4912
|
if (source.list && source.path) {
|
|
@@ -24181,12 +24187,13 @@ class RouterTabsResolver {
|
|
|
24181
24187
|
resolve(currentRoute) {
|
|
24182
24188
|
const routeConfig = currentRoute.routeConfig;
|
|
24183
24189
|
const latestChildren = this.getLatestChildRoutes(routeConfig.rootContext);
|
|
24184
|
-
return from(latestChildren || []).pipe(mergeMap((child) => from(this.getGuards(child)).pipe(map(
|
|
24190
|
+
return from(latestChildren || []).pipe(mergeMap((child) => from(this.getGuards(child)).pipe(map(canActivate => canActivate(currentRoute, this.routerStateSnapshot)), mergeMap((result) => {
|
|
24185
24191
|
if (isObservable(result)) {
|
|
24186
24192
|
return result;
|
|
24187
24193
|
}
|
|
24188
|
-
|
|
24189
|
-
|
|
24194
|
+
const resultAsPromise = result;
|
|
24195
|
+
if (resultAsPromise && typeof resultAsPromise.then === 'function') {
|
|
24196
|
+
return from(resultAsPromise);
|
|
24190
24197
|
}
|
|
24191
24198
|
return of(result);
|
|
24192
24199
|
}), tap(result => {
|
|
@@ -24237,11 +24244,24 @@ class RouterTabsResolver {
|
|
|
24237
24244
|
return null;
|
|
24238
24245
|
}
|
|
24239
24246
|
getGuards(child) {
|
|
24240
|
-
const
|
|
24241
|
-
|
|
24247
|
+
const injector = child._injector || this.injector;
|
|
24248
|
+
const canActivates = child.canActivate || [];
|
|
24249
|
+
const guards = canActivates.map(guard => {
|
|
24250
|
+
return ((route, state) => {
|
|
24251
|
+
// for legacy CanActivate guards
|
|
24252
|
+
const instance = this.injector.get(guard, null);
|
|
24253
|
+
if (instance) {
|
|
24254
|
+
return instance.canActivate(route, state);
|
|
24255
|
+
}
|
|
24256
|
+
// for current CanActivateFn guards
|
|
24257
|
+
const canActivate = guard;
|
|
24258
|
+
return runInInjectionContext(injector, () => {
|
|
24259
|
+
return canActivate(route, state);
|
|
24260
|
+
});
|
|
24261
|
+
});
|
|
24242
24262
|
});
|
|
24243
24263
|
if (child.data && child.data.showIf) {
|
|
24244
|
-
guards.push(
|
|
24264
|
+
guards.push((route, state) => child.data.showIf(route, state));
|
|
24245
24265
|
}
|
|
24246
24266
|
return guards;
|
|
24247
24267
|
}
|
|
@@ -27250,7 +27270,14 @@ class DynamicComponentComponent {
|
|
|
27250
27270
|
environmentInjector: (dynamicComponent.injector || this.injector)
|
|
27251
27271
|
});
|
|
27252
27272
|
this.componentInstance = this.componentRef.instance;
|
|
27253
|
-
|
|
27273
|
+
const componentMetadata = this.safeReflectComponentType(componentType);
|
|
27274
|
+
const hasConfigInput = componentMetadata?.inputs.some(input => input.propName === 'config');
|
|
27275
|
+
if (hasConfigInput) {
|
|
27276
|
+
this.componentRef.setInput('config', this.config);
|
|
27277
|
+
}
|
|
27278
|
+
else {
|
|
27279
|
+
this.componentInstance.config = this.config;
|
|
27280
|
+
}
|
|
27254
27281
|
this.componentInstance.alerts = new DynamicComponentAlertAggregator(errors);
|
|
27255
27282
|
this.subscribeForOverlayChange();
|
|
27256
27283
|
}
|
|
@@ -27259,6 +27286,19 @@ class DynamicComponentComponent {
|
|
|
27259
27286
|
console.warn(ex);
|
|
27260
27287
|
}
|
|
27261
27288
|
}
|
|
27289
|
+
/**
|
|
27290
|
+
* Safely reflects the component metadata.
|
|
27291
|
+
* If reflection fails, it returns a default object with an empty inputs array.
|
|
27292
|
+
*/
|
|
27293
|
+
safeReflectComponentType(componentType) {
|
|
27294
|
+
try {
|
|
27295
|
+
return reflectComponentType(componentType);
|
|
27296
|
+
}
|
|
27297
|
+
catch (error) {
|
|
27298
|
+
console.warn('Failed to reflect component metadata:', error);
|
|
27299
|
+
return { inputs: [] };
|
|
27300
|
+
}
|
|
27301
|
+
}
|
|
27262
27302
|
async getComponentType(dynamicComponent) {
|
|
27263
27303
|
if (isLazyDynamicComponents(dynamicComponent)) {
|
|
27264
27304
|
const componentPromiseFunction = this.mode === 'component'
|