@acorex/platform 21.0.0-next.16 → 21.0.0-next.17
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/common/index.d.ts +10 -1
- package/core/index.d.ts +1 -1
- package/fesm2022/{acorex-platform-common-common-settings.provider-BwBLG0Hl.mjs → acorex-platform-common-common-settings.provider-gyb6ohAE.mjs} +15 -1
- package/fesm2022/acorex-platform-common-common-settings.provider-gyb6ohAE.mjs.map +1 -0
- package/fesm2022/acorex-platform-common.mjs +3 -2
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +10 -6
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-domain.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +292 -33
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +2 -2
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-zkvCqKp9.mjs → acorex-platform-layout-widgets-file-list-popup.component-DmIanCrO.mjs} +12 -3
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-DmIanCrO.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets.mjs +70 -20
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +0 -2
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/layout/entity/index.d.ts +8 -0
- package/layout/widgets/index.d.ts +21 -1
- package/package.json +1 -1
- package/workflow/index.d.ts +33 -30
- package/fesm2022/acorex-platform-common-common-settings.provider-BwBLG0Hl.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-zkvCqKp9.mjs.map +0 -1
|
@@ -26,6 +26,9 @@ class AXPFileListPopupComponent extends AXBasePageComponent {
|
|
|
26
26
|
this.fileEditable = input(true, ...(ngDevMode ? [{ debugName: "fileEditable" }] : []));
|
|
27
27
|
this.accept = input('*', ...(ngDevMode ? [{ debugName: "accept" }] : []));
|
|
28
28
|
this.maxFileSize = input(1024 * 1024 * 100, ...(ngDevMode ? [{ debugName: "maxFileSize" }] : []));
|
|
29
|
+
/** Same as widget plugins (e.g. document) so hooks/actions run in popup too. */
|
|
30
|
+
this.plugins = input([], ...(ngDevMode ? [{ debugName: "plugins" }] : []));
|
|
31
|
+
this.excludePlugins = input([], ...(ngDevMode ? [{ debugName: "excludePlugins" }] : []));
|
|
29
32
|
/** When true, file edit dialog shows name, title and description fields. Default false. */
|
|
30
33
|
this.enableTitleDescription = input(false, ...(ngDevMode ? [{ debugName: "enableTitleDescription" }] : []));
|
|
31
34
|
//#endregion
|
|
@@ -44,6 +47,8 @@ class AXPFileListPopupComponent extends AXBasePageComponent {
|
|
|
44
47
|
accept: this.accept(),
|
|
45
48
|
maxFileSize: this.maxFileSize(),
|
|
46
49
|
fileEditable: this.fileEditable(),
|
|
50
|
+
plugins: this.resolveInput(this.plugins, []),
|
|
51
|
+
excludePlugins: this.resolveInput(this.excludePlugins, []),
|
|
47
52
|
enableTitleDescription: this.enableTitleDescription(),
|
|
48
53
|
},
|
|
49
54
|
}), ...(ngDevMode ? [{ debugName: "node" }] : []));
|
|
@@ -51,6 +56,10 @@ class AXPFileListPopupComponent extends AXBasePageComponent {
|
|
|
51
56
|
onContextChanged(event) {
|
|
52
57
|
this.context.set(event.data);
|
|
53
58
|
}
|
|
59
|
+
/** Resolves input that may be a signal (input()) or a raw value when popup injects data. */
|
|
60
|
+
resolveInput(value, fallback) {
|
|
61
|
+
return typeof value === 'function' ? value() : (value ?? fallback);
|
|
62
|
+
}
|
|
54
63
|
//#endregion
|
|
55
64
|
//#region ---- Lifecycle Methods ----
|
|
56
65
|
async ngOnInit() {
|
|
@@ -113,7 +122,7 @@ class AXPFileListPopupComponent extends AXBasePageComponent {
|
|
|
113
122
|
});
|
|
114
123
|
}
|
|
115
124
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AXPFileListPopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
116
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AXPFileListPopupComponent, isStandalone: true, selector: "ng-component", inputs: { files: { classPropertyName: "files", publicName: "files", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, fileEditable: { classPropertyName: "fileEditable", publicName: "fileEditable", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, maxFileSize: { classPropertyName: "maxFileSize", publicName: "maxFileSize", isSignal: true, isRequired: false, transformFunction: null }, enableTitleDescription: { classPropertyName: "enableTitleDescription", publicName: "enableTitleDescription", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<div class=\"ax-p-2\">\n <axp-widgets-container [context]=\"context()\" (onContextChanged)=\"onContextChanged($event)\">\n <ng-container axp-widget-renderer [node]=\"node()\" [mode]=\"mode()\"></ng-container>\n </axp-widgets-container>\n</div>\n<ax-footer>\n <ax-suffix>\n @if (readOnly()) {\n <ax-button [text]=\"'@general:actions.close.title' | translate | async\" (click)=\"close()\"></ax-button>\n } @else {\n <ax-button [text]=\"'@general:actions.discard.title' | translate | async\" (click)=\"close()\"></ax-button>\n <ax-button\n [text]=\"'@general:actions.apply.title' | translate | async\"\n (click)=\"apply()\"\n [color]=\"'primary'\"\n ></ax-button>\n }\n </ax-suffix>\n</ax-footer>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type:
|
|
125
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AXPFileListPopupComponent, isStandalone: true, selector: "ng-component", inputs: { files: { classPropertyName: "files", publicName: "files", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, fileEditable: { classPropertyName: "fileEditable", publicName: "fileEditable", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, maxFileSize: { classPropertyName: "maxFileSize", publicName: "maxFileSize", isSignal: true, isRequired: false, transformFunction: null }, plugins: { classPropertyName: "plugins", publicName: "plugins", isSignal: true, isRequired: false, transformFunction: null }, excludePlugins: { classPropertyName: "excludePlugins", publicName: "excludePlugins", isSignal: true, isRequired: false, transformFunction: null }, enableTitleDescription: { classPropertyName: "enableTitleDescription", publicName: "enableTitleDescription", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<div class=\"ax-p-2\">\n <axp-widgets-container [context]=\"context()\" (onContextChanged)=\"onContextChanged($event)\">\n <ng-container axp-widget-renderer [node]=\"node()\" [mode]=\"mode()\"></ng-container>\n </axp-widgets-container>\n</div>\n<ax-footer>\n <ax-suffix>\n @if (readOnly()) {\n <ax-button [text]=\"'@general:actions.close.title' | translate | async\" (click)=\"close()\"></ax-button>\n } @else {\n <ax-button [text]=\"'@general:actions.discard.title' | translate | async\" (click)=\"close()\"></ax-button>\n <ax-button\n [text]=\"'@general:actions.apply.title' | translate | async\"\n (click)=\"apply()\"\n [color]=\"'primary'\"\n ></ax-button>\n }\n </ax-suffix>\n</ax-footer>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type:
|
|
117
126
|
//
|
|
118
127
|
AXLabelModule }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type:
|
|
119
128
|
//
|
|
@@ -132,7 +141,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
|
|
|
132
141
|
//
|
|
133
142
|
AXPWidgetCoreModule
|
|
134
143
|
], template: "<div class=\"ax-p-2\">\n <axp-widgets-container [context]=\"context()\" (onContextChanged)=\"onContextChanged($event)\">\n <ng-container axp-widget-renderer [node]=\"node()\" [mode]=\"mode()\"></ng-container>\n </axp-widgets-container>\n</div>\n<ax-footer>\n <ax-suffix>\n @if (readOnly()) {\n <ax-button [text]=\"'@general:actions.close.title' | translate | async\" (click)=\"close()\"></ax-button>\n } @else {\n <ax-button [text]=\"'@general:actions.discard.title' | translate | async\" (click)=\"close()\"></ax-button>\n <ax-button\n [text]=\"'@general:actions.apply.title' | translate | async\"\n (click)=\"apply()\"\n [color]=\"'primary'\"\n ></ax-button>\n }\n </ax-suffix>\n</ax-footer>\n" }]
|
|
135
|
-
}], propDecorators: { files: [{ type: i0.Input, args: [{ isSignal: true, alias: "files", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], fileEditable: [{ type: i0.Input, args: [{ isSignal: true, alias: "fileEditable", required: false }] }], accept: [{ type: i0.Input, args: [{ isSignal: true, alias: "accept", required: false }] }], maxFileSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxFileSize", required: false }] }], enableTitleDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableTitleDescription", required: false }] }] } });
|
|
144
|
+
}], propDecorators: { files: [{ type: i0.Input, args: [{ isSignal: true, alias: "files", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], fileEditable: [{ type: i0.Input, args: [{ isSignal: true, alias: "fileEditable", required: false }] }], accept: [{ type: i0.Input, args: [{ isSignal: true, alias: "accept", required: false }] }], maxFileSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxFileSize", required: false }] }], plugins: [{ type: i0.Input, args: [{ isSignal: true, alias: "plugins", required: false }] }], excludePlugins: [{ type: i0.Input, args: [{ isSignal: true, alias: "excludePlugins", required: false }] }], enableTitleDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableTitleDescription", required: false }] }] } });
|
|
136
145
|
|
|
137
146
|
export { AXPFileListPopupComponent };
|
|
138
|
-
//# sourceMappingURL=acorex-platform-layout-widgets-file-list-popup.component-
|
|
147
|
+
//# sourceMappingURL=acorex-platform-layout-widgets-file-list-popup.component-DmIanCrO.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-layout-widgets-file-list-popup.component-DmIanCrO.mjs","sources":["../tmp-esm2022/layout/widgets/lib/widgets/advance/file-uploader/file-list-popup/file-list-popup.component.js"],"sourcesContent":["import { AXButtonModule } from '@acorex/components/button';\nimport { AXCheckBoxModule } from '@acorex/components/check-box';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input, linkedSignal } from '@angular/core';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/decorators\";\nimport * as i2 from \"@acorex/components/button\";\nimport * as i3 from \"@acorex/platform/layout/widget-core\";\nimport * as i4 from \"@angular/common\";\nimport * as i5 from \"@acorex/core/translation\";\nexport class AXPFileListPopupComponent extends AXBasePageComponent {\n constructor() {\n super(...arguments);\n this.fileService = inject(AXPFileStorageService);\n //#region ---- Component Properties ----\n this.files = input([], ...(ngDevMode ? [{ debugName: \"files\" }] : []));\n this.readOnly = input(false, ...(ngDevMode ? [{ debugName: \"readOnly\" }] : []));\n this.multiple = input(false, ...(ngDevMode ? [{ debugName: \"multiple\" }] : []));\n this.fileEditable = input(true, ...(ngDevMode ? [{ debugName: \"fileEditable\" }] : []));\n this.accept = input('*', ...(ngDevMode ? [{ debugName: \"accept\" }] : []));\n this.maxFileSize = input(1024 * 1024 * 100, ...(ngDevMode ? [{ debugName: \"maxFileSize\" }] : []));\n /** Same as widget plugins (e.g. document) so hooks/actions run in popup too. */\n this.plugins = input([], ...(ngDevMode ? [{ debugName: \"plugins\" }] : []));\n this.excludePlugins = input([], ...(ngDevMode ? [{ debugName: \"excludePlugins\" }] : []));\n /** When true, file edit dialog shows name, title and description fields. Default false. */\n this.enableTitleDescription = input(false, ...(ngDevMode ? [{ debugName: \"enableTitleDescription\" }] : []));\n //#endregion\n //#region ---- Computed Properties ----\n this.mode = computed(() => this.readOnly() ? 'view' : 'edit', ...(ngDevMode ? [{ debugName: \"mode\" }] : []));\n //#endregion\n //#region ---- Context & Node Management ----\n this.context = linkedSignal(() => ({}), ...(ngDevMode ? [{ debugName: \"context\" }] : []));\n this.node = computed(() => ({\n type: 'file-uploader',\n path: 'files',\n defaultValue: Array.isArray(this.files()) && typeof this.files()[0] !== 'string' ? this.files() : [],\n options: {\n readOnly: this.readOnly(),\n multiple: this.multiple(),\n accept: this.accept(),\n maxFileSize: this.maxFileSize(),\n fileEditable: this.fileEditable(),\n plugins: this.resolveInput(this.plugins, []),\n excludePlugins: this.resolveInput(this.excludePlugins, []),\n enableTitleDescription: this.enableTitleDescription(),\n },\n }), ...(ngDevMode ? [{ debugName: \"node\" }] : []));\n }\n onContextChanged(event) {\n this.context.set(event.data);\n }\n /** Resolves input that may be a signal (input()) or a raw value when popup injects data. */\n resolveInput(value, fallback) {\n return typeof value === 'function' ? value() : (value ?? fallback);\n }\n //#endregion\n //#region ---- Lifecycle Methods ----\n async ngOnInit() {\n if (Array.isArray(this.files()) && typeof this.files()[0] === 'string') {\n this.isLoading = true;\n // Convert string file IDs to AXPFileListItem objects using batch API\n const prefixedIds = this.files();\n const actualIds = prefixedIds.map((id) => this.removeFilePrefix(id));\n let fileItems = [];\n try {\n const infos = await this.fileService.findMany(actualIds);\n const infoMap = new Map(infos.map((i) => [i.fileId, i]));\n fileItems = prefixedIds.map((prefixedId) => {\n const actualId = this.removeFilePrefix(prefixedId);\n const info = infoMap.get(actualId);\n if (info) {\n return {\n id: info.fileId,\n name: info.name || '',\n size: info.size,\n status: 'uploaded',\n source: {\n kind: 'fileId',\n value: info.fileId,\n },\n };\n }\n return {\n id: actualId,\n name: 'Unknown File',\n size: 0,\n status: 'deleted',\n source: { kind: 'none', value: '' },\n };\n });\n }\n catch (error) {\n console.error('Failed to get file infos', error);\n fileItems = prefixedIds.map((prefixedId) => ({\n id: this.removeFilePrefix(prefixedId),\n name: 'Unknown File',\n size: 0,\n status: 'deleted',\n source: { kind: 'none', value: '' },\n }));\n }\n this.isLoading = false;\n // Update the context with the converted file items\n this.context.set({ files: fileItems });\n }\n }\n removeFilePrefix(fileId) {\n return fileId.startsWith('file:') ? fileId.substring(5) : fileId;\n }\n //#endregion\n //#region ---- UI Handlers ----\n apply() {\n this.close({\n data: this.context(),\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPFileListPopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", type: AXPFileListPopupComponent, isStandalone: true, selector: \"ng-component\", inputs: { files: { classPropertyName: \"files\", publicName: \"files\", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: \"readOnly\", publicName: \"readOnly\", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: \"multiple\", publicName: \"multiple\", isSignal: true, isRequired: false, transformFunction: null }, fileEditable: { classPropertyName: \"fileEditable\", publicName: \"fileEditable\", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: \"accept\", publicName: \"accept\", isSignal: true, isRequired: false, transformFunction: null }, maxFileSize: { classPropertyName: \"maxFileSize\", publicName: \"maxFileSize\", isSignal: true, isRequired: false, transformFunction: null }, plugins: { classPropertyName: \"plugins\", publicName: \"plugins\", isSignal: true, isRequired: false, transformFunction: null }, excludePlugins: { classPropertyName: \"excludePlugins\", publicName: \"excludePlugins\", isSignal: true, isRequired: false, transformFunction: null }, enableTitleDescription: { classPropertyName: \"enableTitleDescription\", publicName: \"enableTitleDescription\", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-p-2\\\">\\n <axp-widgets-container [context]=\\\"context()\\\" (onContextChanged)=\\\"onContextChanged($event)\\\">\\n <ng-container axp-widget-renderer [node]=\\\"node()\\\" [mode]=\\\"mode()\\\"></ng-container>\\n </axp-widgets-container>\\n</div>\\n<ax-footer>\\n <ax-suffix>\\n @if (readOnly()) {\\n <ax-button [text]=\\\"'@general:actions.close.title' | translate | async\\\" (click)=\\\"close()\\\"></ax-button>\\n } @else {\\n <ax-button [text]=\\\"'@general:actions.discard.title' | translate | async\\\" (click)=\\\"close()\\\"></ax-button>\\n <ax-button\\n [text]=\\\"'@general:actions.apply.title' | translate | async\\\"\\n (click)=\\\"apply()\\\"\\n [color]=\\\"'primary'\\\"\\n ></ax-button>\\n }\\n </ax-suffix>\\n</ax-footer>\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: \n //\n AXLabelModule }, { kind: \"ngmodule\", type: AXCheckBoxModule }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i1.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i2.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"ngmodule\", type: \n //\n AXPWidgetCoreModule }, { kind: \"component\", type: i3.AXPWidgetContainerComponent, selector: \"axp-widgets-container\", inputs: [\"context\", \"functions\"], outputs: [\"onContextChanged\"] }, { kind: \"directive\", type: i3.AXPWidgetRendererDirective, selector: \"[axp-widget-renderer]\", inputs: [\"parentNode\", \"index\", \"mode\", \"node\"], outputs: [\"onOptionsChanged\", \"onValueChanged\", \"onLoad\"], exportAs: [\"widgetRenderer\"] }, { kind: \"pipe\", type: i4.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i5.AXTranslatorPipe, name: \"translate\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: AXPFileListPopupComponent, decorators: [{\n type: Component,\n args: [{ imports: [\n CommonModule,\n //\n AXLabelModule,\n AXCheckBoxModule,\n AXDecoratorModule,\n AXButtonModule,\n AXTranslationModule,\n //\n AXPWidgetCoreModule\n ], template: \"<div class=\\\"ax-p-2\\\">\\n <axp-widgets-container [context]=\\\"context()\\\" (onContextChanged)=\\\"onContextChanged($event)\\\">\\n <ng-container axp-widget-renderer [node]=\\\"node()\\\" [mode]=\\\"mode()\\\"></ng-container>\\n </axp-widgets-container>\\n</div>\\n<ax-footer>\\n <ax-suffix>\\n @if (readOnly()) {\\n <ax-button [text]=\\\"'@general:actions.close.title' | translate | async\\\" (click)=\\\"close()\\\"></ax-button>\\n } @else {\\n <ax-button [text]=\\\"'@general:actions.discard.title' | translate | async\\\" (click)=\\\"close()\\\"></ax-button>\\n <ax-button\\n [text]=\\\"'@general:actions.apply.title' | translate | async\\\"\\n (click)=\\\"apply()\\\"\\n [color]=\\\"'primary'\\\"\\n ></ax-button>\\n }\\n </ax-suffix>\\n</ax-footer>\\n\" }]\n }], propDecorators: { files: [{ type: i0.Input, args: [{ isSignal: true, alias: \"files\", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: \"readOnly\", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: \"multiple\", required: false }] }], fileEditable: [{ type: i0.Input, args: [{ isSignal: true, alias: \"fileEditable\", required: false }] }], accept: [{ type: i0.Input, args: [{ isSignal: true, alias: \"accept\", required: false }] }], maxFileSize: [{ type: i0.Input, args: [{ isSignal: true, alias: \"maxFileSize\", required: false }] }], plugins: [{ type: i0.Input, args: [{ isSignal: true, alias: \"plugins\", required: false }] }], excludePlugins: [{ type: i0.Input, args: [{ isSignal: true, alias: \"excludePlugins\", required: false }] }], enableTitleDescription: [{ type: i0.Input, args: [{ isSignal: true, alias: \"enableTitleDescription\", required: false }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1saXN0LXBvcHVwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L3dpZGdldHMvc3JjL2xpYi93aWRnZXRzL2FkdmFuY2UvZmlsZS11cGxvYWRlci9maWxlLWxpc3QtcG9wdXAvZmlsZS1saXN0LXBvcHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L3dpZGdldHMvc3JjL2xpYi93aWRnZXRzL2FkdmFuY2UvZmlsZS11cGxvYWRlci9maWxlLWxpc3QtcG9wdXAvZmlsZS1saXN0LXBvcHVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBa0QsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7OztBQWdCaEUsTUFBTSxPQUFP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QUMsS0FBSyxDQUFDO1lBQ1QsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUU7U0FDckIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0ExSFUseUJBQXlCO21HQUF6Qix5QkFBeUIsbXpDQzFCdEMsa3ZCQW1CQSwyQ0RMSSxZQUFZO2dCQUNaLEVBQUU7Z0JBQ0YsYUFBYSw4QkFDYixnQkFBZ0IsOEJBQ2hCLGlCQUFpQixxUEFDakIsY0FBYyw2WEFDZCxtQkFBbUI7Z0JBQ25CLEVBQUU7Z0JBQ0YsbUJBQW1COzs0RkFJVix5QkFBeUI7a0JBZHJDLFNBQVM7OEJBQ0M7d0JBQ1AsWUFBWTt3QkFDWixFQUFFO3dCQUNGLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixpQkFBaUI7d0JBQ2pCLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQixFQUFFO3dCQUNGLG1CQUFtQjtxQkFDcEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhDaGVja0JveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jaGVjay1ib3gnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWExhYmVsTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2xhYmVsJztcbmltcG9ydCB7IEFYQmFzZVBhZ2VDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcGFnZSc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYUEZpbGVMaXN0SXRlbSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBpbnB1dCwgbGlua2VkU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBXaWRnZXRDb3JlTW9kdWxlLCBBWFBXaWRnZXRDb3JlQ29udGV4dENoYW5nZUV2ZW50LCBBWFBXaWRnZXROb2RlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuaW1wb3J0IHsgQVhQRmlsZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICAvL1xuICAgIEFYTGFiZWxNb2R1bGUsXG4gICAgQVhDaGVja0JveE1vZHVsZSxcbiAgICBBWERlY29yYXRvck1vZHVsZSxcbiAgICBBWEJ1dHRvbk1vZHVsZSxcbiAgICBBWFRyYW5zbGF0aW9uTW9kdWxlLFxuICAgIC8vXG4gICAgQVhQV2lkZ2V0Q29yZU1vZHVsZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1saXN0LXBvcHVwLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgQVhQRmlsZUxpc3RQb3B1cENvbXBvbmVudCBleHRlbmRzIEFYQmFzZVBhZ2VDb21wb25lbnQge1xuXG4gIHByaXZhdGUgZmlsZVNlcnZpY2UgPSBpbmplY3QoQVhQRmlsZVN0b3JhZ2VTZXJ2aWNlKTtcblxuICAvLyNyZWdpb24gLS0tLSAgIENvbXBvbmVudCBQcm9wZXJ0aWVzICAgLS0tLVxuXG4gIGZpbGVzID0gaW5wdXQ8QVhQRmlsZUxpc3RJdGVtW10gfCBzdHJpbmdbXT4oW10pO1xuICByZWFkT25seSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgbXVsdGlwbGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIGZpbGVFZGl0YWJsZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICBhY2NlcHQgPSBpbnB1dDxzdHJpbmc+KCcqJyk7XG4gIG1heEZpbGVTaXplID0gaW5wdXQ8bnVtYmVyPigxMDI0ICogMTAyNCAqIDEwMCk7XG4gIC8qKiBTYW1lIGFzIHdpZGdldCBwbHVnaW5zIChlLmcuIGRvY3VtZW50KSBzbyBob29rcy9hY3Rpb25zIHJ1biBpbiBwb3B1cCB0b28uICovXG4gIHBsdWdpbnMgPSBpbnB1dDx7IG5hbWU6IHN0cmluZzsgb3B0aW9ucz86IHVua25vd24gfVtdPihbXSk7XG4gIGV4Y2x1ZGVQbHVnaW5zID0gaW5wdXQ8c3RyaW5nW10+KFtdKTtcbiAgLyoqIFdoZW4gdHJ1ZSwgZmlsZSBlZGl0IGRpYWxvZyBzaG93cyBuYW1lLCB0aXRsZSBhbmQgZGVzY3JpcHRpb24gZmllbGRzLiBEZWZhdWx0IGZhbHNlLiAqL1xuICBlbmFibGVUaXRsZURlc2NyaXB0aW9uID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQ29tcHV0ZWQgUHJvcGVydGllcyAgIC0tLS1cblxuICBwcm90ZWN0ZWQgbW9kZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVhZE9ubHkoKSA/ICd2aWV3JyA6ICdlZGl0Jyk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDb250ZXh0ICYgTm9kZSBNYW5hZ2VtZW50ICAgLS0tLVxuXG4gIHByb3RlY3RlZCBjb250ZXh0ID0gbGlua2VkU2lnbmFsPHt9PigoKSA9PiAoe1xuICB9KSk7XG5cbiAgcHJvdGVjdGVkIG9uQ29udGV4dENoYW5nZWQoZXZlbnQ6IEFYUFdpZGdldENvcmVDb250ZXh0Q2hhbmdlRXZlbnQpIHtcbiAgICB0aGlzLmNvbnRleHQuc2V0KGV2ZW50LmRhdGEpO1xuICB9XG5cbiAgLyoqIFJlc29sdmVzIGlucHV0IHRoYXQgbWF5IGJlIGEgc2lnbmFsIChpbnB1dCgpKSBvciBhIHJhdyB2YWx1ZSB3aGVuIHBvcHVwIGluamVjdHMgZGF0YS4gKi9cbiAgcHJpdmF0ZSByZXNvbHZlSW5wdXQ8VD4odmFsdWU6ICgoKSA9PiBUKSB8IFQsIGZhbGxiYWNrOiBUKTogVCB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/ICh2YWx1ZSBhcyAoKSA9PiBUKSgpIDogKHZhbHVlID8/IGZhbGxiYWNrKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBub2RlID0gY29tcHV0ZWQ8QVhQV2lkZ2V0Tm9kZT4oKCkgPT4gKHtcbiAgICB0eXBlOiAnZmlsZS11cGxvYWRlcicsXG4gICAgcGF0aDogJ2ZpbGVzJyxcbiAgICBkZWZhdWx0VmFsdWU6IEFycmF5LmlzQXJyYXkodGhpcy5maWxlcygpKSAmJiB0eXBlb2YgdGhpcy5maWxlcygpWzBdICE9PSAnc3RyaW5nJyA/IHRoaXMuZmlsZXMoKSA6IFtdLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHJlYWRPbmx5OiB0aGlzLnJlYWRPbmx5KCksXG4gICAgICBtdWx0aXBsZTogdGhpcy5tdWx0aXBsZSgpLFxuICAgICAgYWNjZXB0OiB0aGlzLmFjY2VwdCgpLFxuICAgICAgbWF4RmlsZVNpemU6IHRoaXMubWF4RmlsZVNpemUoKSxcbiAgICAgIGZpbGVFZGl0YWJsZTogdGhpcy5maWxlRWRpdGFibGUoKSxcbiAgICAgIHBsdWdpbnM6IHRoaXMucmVzb2x2ZUlucHV0KHRoaXMucGx1Z2lucywgW10pLFxuICAgICAgZXhjbHVkZVBsdWdpbnM6IHRoaXMucmVzb2x2ZUlucHV0KHRoaXMuZXhjbHVkZVBsdWdpbnMsIFtdKSxcbiAgICAgIGVuYWJsZVRpdGxlRGVzY3JpcHRpb246IHRoaXMuZW5hYmxlVGl0bGVEZXNjcmlwdGlvbigpLFxuICAgIH0sXG4gIH0pKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIExpZmVjeWNsZSBNZXRob2RzICAgLS0tLVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZihBcnJheS5pc0FycmF5KHRoaXMuZmlsZXMoKSkgJiYgdHlwZW9mIHRoaXMuZmlsZXMoKVswXSA9PT0gJ3N0cmluZycpe1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgLy8gQ29udmVydCBzdHJpbmcgZmlsZSBJRHMgdG8gQVhQRmlsZUxpc3RJdGVtIG9iamVjdHMgdXNpbmcgYmF0Y2ggQVBJXG4gICAgICBjb25zdCBwcmVmaXhlZElkcyA9IHRoaXMuZmlsZXMoKSBhcyBzdHJpbmdbXTtcbiAgICAgIGNvbnN0IGFjdHVhbElkcyA9IHByZWZpeGVkSWRzLm1hcCgoaWQpID0+IHRoaXMucmVtb3ZlRmlsZVByZWZpeChpZCkpO1xuICAgICAgbGV0IGZpbGVJdGVtczogQVhQRmlsZUxpc3RJdGVtW10gPSBbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGluZm9zID0gYXdhaXQgdGhpcy5maWxlU2VydmljZS5maW5kTWFueShhY3R1YWxJZHMpO1xuICAgICAgICBjb25zdCBpbmZvTWFwID0gbmV3IE1hcChpbmZvcy5tYXAoKGkpID0+IFtpLmZpbGVJZCwgaV0pKTtcbiAgICAgICAgZmlsZUl0ZW1zID0gcHJlZml4ZWRJZHMubWFwKChwcmVmaXhlZElkKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0dWFsSWQgPSB0aGlzLnJlbW92ZUZpbGVQcmVmaXgocHJlZml4ZWRJZCk7XG4gICAgICAgICAgY29uc3QgaW5mbyA9IGluZm9NYXAuZ2V0KGFjdHVhbElkKTtcbiAgICAgICAgICBpZiAoaW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaWQ6IGluZm8uZmlsZUlkLFxuICAgICAgICAgICAgICBuYW1lOiBpbmZvLm5hbWUgfHwgJycsXG4gICAgICAgICAgICAgIHNpemU6IGluZm8uc2l6ZSxcbiAgICAgICAgICAgICAgc3RhdHVzOiAndXBsb2FkZWQnLFxuICAgICAgICAgICAgICBzb3VyY2U6IHtcbiAgICAgICAgICAgICAgICBraW5kOiAnZmlsZUlkJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogaW5mby5maWxlSWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9IGFzIEFYUEZpbGVMaXN0SXRlbTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiBhY3R1YWxJZCxcbiAgICAgICAgICAgIG5hbWU6ICdVbmtub3duIEZpbGUnLFxuICAgICAgICAgICAgc2l6ZTogMCxcbiAgICAgICAgICAgIHN0YXR1czogJ2RlbGV0ZWQnLFxuICAgICAgICAgICAgc291cmNlOiB7IGtpbmQ6ICdub25lJywgdmFsdWU6ICcnIH0sXG4gICAgICAgICAgfSBhcyBBWFBGaWxlTGlzdEl0ZW07XG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGdldCBmaWxlIGluZm9zJywgZXJyb3IpO1xuICAgICAgICBmaWxlSXRlbXMgPSBwcmVmaXhlZElkcy5tYXAoKHByZWZpeGVkSWQpID0+ICh7XG4gICAgICAgICAgaWQ6IHRoaXMucmVtb3ZlRmlsZVByZWZpeChwcmVmaXhlZElkKSxcbiAgICAgICAgICBuYW1lOiAnVW5rbm93biBGaWxlJyxcbiAgICAgICAgICBzaXplOiAwLFxuICAgICAgICAgIHN0YXR1czogJ2RlbGV0ZWQnLFxuICAgICAgICAgIHNvdXJjZTogeyBraW5kOiAnbm9uZScsIHZhbHVlOiAnJyB9LFxuICAgICAgICB9IGFzIEFYUEZpbGVMaXN0SXRlbSkpO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgLy8gVXBkYXRlIHRoZSBjb250ZXh0IHdpdGggdGhlIGNvbnZlcnRlZCBmaWxlIGl0ZW1zXG4gICAgICB0aGlzLmNvbnRleHQuc2V0KHsgZmlsZXM6IGZpbGVJdGVtcyB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVtb3ZlRmlsZVByZWZpeChmaWxlSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZpbGVJZC5zdGFydHNXaXRoKCdmaWxlOicpID8gZmlsZUlkLnN1YnN0cmluZyg1KSA6IGZpbGVJZDtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgVUkgSGFuZGxlcnMgICAtLS0tXG5cbiAgYXBwbHkoKSB7XG4gICAgdGhpcy5jbG9zZSh7XG4gICAgICBkYXRhOiB0aGlzLmNvbnRleHQoKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiYXgtcC0yXCI+XG4gIDxheHAtd2lkZ2V0cy1jb250YWluZXIgW2NvbnRleHRdPVwiY29udGV4dCgpXCIgKG9uQ29udGV4dENoYW5nZWQpPVwib25Db250ZXh0Q2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgPG5nLWNvbnRhaW5lciBheHAtd2lkZ2V0LXJlbmRlcmVyIFtub2RlXT1cIm5vZGUoKVwiIFttb2RlXT1cIm1vZGUoKVwiPjwvbmctY29udGFpbmVyPlxuICA8L2F4cC13aWRnZXRzLWNvbnRhaW5lcj5cbjwvZGl2PlxuPGF4LWZvb3Rlcj5cbiAgPGF4LXN1ZmZpeD5cbiAgICBAaWYgKHJlYWRPbmx5KCkpIHtcbiAgICAgIDxheC1idXR0b24gW3RleHRdPVwiJ0BnZW5lcmFsOmFjdGlvbnMuY2xvc2UudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIiAoY2xpY2spPVwiY2xvc2UoKVwiPjwvYXgtYnV0dG9uPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGF4LWJ1dHRvbiBbdGV4dF09XCInQGdlbmVyYWw6YWN0aW9ucy5kaXNjYXJkLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCIgKGNsaWNrKT1cImNsb3NlKClcIj48L2F4LWJ1dHRvbj5cbiAgICAgIDxheC1idXR0b25cbiAgICAgICAgW3RleHRdPVwiJ0BnZW5lcmFsOmFjdGlvbnMuYXBwbHkudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAoY2xpY2spPVwiYXBwbHkoKVwiXG4gICAgICAgIFtjb2xvcl09XCIncHJpbWFyeSdcIlxuICAgICAgPjwvYXgtYnV0dG9uPlxuICAgIH1cbiAgPC9heC1zdWZmaXg+XG48L2F4LWZvb3Rlcj5cbiJdfQ=="],"names":["i1","i2","i3","i4"],"mappings":"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"}
|
|
@@ -10288,8 +10288,7 @@ class AXPEditFileUploaderCommand {
|
|
|
10288
10288
|
//#region ---- Command Execution ----
|
|
10289
10289
|
async execute(input) {
|
|
10290
10290
|
try {
|
|
10291
|
-
|
|
10292
|
-
const updatedFile = await this.showEditDialog(input.file, input.plugins ?? [], input.excludePlugins ?? [], input.enableTitleDescription ?? false);
|
|
10291
|
+
const updatedFile = await this.showEditDialog(input.file, input.plugins ?? [], input.excludePlugins ?? [], input.enableTitleDescription ?? false, input.isNewFile ?? false);
|
|
10293
10292
|
return {
|
|
10294
10293
|
success: true,
|
|
10295
10294
|
data: updatedFile
|
|
@@ -10306,12 +10305,11 @@ class AXPEditFileUploaderCommand {
|
|
|
10306
10305
|
}
|
|
10307
10306
|
//#endregion
|
|
10308
10307
|
//#region ---- Dialog Logic ----
|
|
10309
|
-
async showEditDialog(file, plugins, excludePlugins, enableTitleDescription) {
|
|
10310
|
-
const
|
|
10311
|
-
const
|
|
10312
|
-
|
|
10313
|
-
|
|
10314
|
-
const namePlaceholder = await this.translationService.translateAsync('@general:actions.rename.title');
|
|
10308
|
+
async showEditDialog(file, plugins, excludePlugins, enableTitleDescription, isNewFile) {
|
|
10309
|
+
const titleKey = isNewFile ? '@general:widgets.file-uploader.edit-dialog.add-title' : '@general:widgets.file-uploader.edit-dialog.title';
|
|
10310
|
+
const title = await this.translationService.translateAsync(titleKey);
|
|
10311
|
+
const nameLabel = await this.translationService.translateAsync('@general:terms.common.name');
|
|
10312
|
+
const namePlaceholder = await this.translationService.translateAsync('@general:terms.common.name');
|
|
10315
10313
|
const titleLabel = await this.translationService.translateAsync('@general:terms.common.title');
|
|
10316
10314
|
const descriptionLabel = await this.translationService.translateAsync('@general:terms.common.description');
|
|
10317
10315
|
const submitLabel = await this.translationService.translateAsync('@general:actions.submit.title');
|
|
@@ -10394,6 +10392,7 @@ class AXPEditFileUploaderCommand {
|
|
|
10394
10392
|
// Add groups after form
|
|
10395
10393
|
this.buildGroups(contentBuilder, groupsAfterPayload?.groups ?? []);
|
|
10396
10394
|
})
|
|
10395
|
+
.setCloseButton(true)
|
|
10397
10396
|
.setActions(actions => {
|
|
10398
10397
|
actions.custom({
|
|
10399
10398
|
title: submitLabel,
|
|
@@ -10978,12 +10977,14 @@ class AXPFileUploaderWidgetService {
|
|
|
10978
10977
|
accept: '*',
|
|
10979
10978
|
fileEditable: true,
|
|
10980
10979
|
maxFileSize: 1024 * 1024 * 10,
|
|
10980
|
+
plugins: [],
|
|
10981
|
+
excludePlugins: [],
|
|
10981
10982
|
enableTitleDescription: false,
|
|
10982
10983
|
};
|
|
10983
10984
|
options = { ...defaultOptions, ...options };
|
|
10984
|
-
const component = await import('./acorex-platform-layout-widgets-file-list-popup.component-
|
|
10985
|
+
const component = await import('./acorex-platform-layout-widgets-file-list-popup.component-DmIanCrO.mjs').then((m) => m.AXPFileListPopupComponent);
|
|
10985
10986
|
const result = await this.popupService.open(component, {
|
|
10986
|
-
title:
|
|
10987
|
+
title: await this.translate.translateAsync('@document-management:terms.common.file'),
|
|
10987
10988
|
data: {
|
|
10988
10989
|
files: signal(options.files),
|
|
10989
10990
|
readOnly: signal(options.readOnly),
|
|
@@ -10991,6 +10992,8 @@ class AXPFileUploaderWidgetService {
|
|
|
10991
10992
|
accept: signal(options.accept),
|
|
10992
10993
|
maxFileSize: signal(options.maxFileSize),
|
|
10993
10994
|
fileEditable: signal(options.fileEditable ?? true),
|
|
10995
|
+
plugins: signal(options.plugins ?? []),
|
|
10996
|
+
excludePlugins: signal(options.excludePlugins ?? []),
|
|
10994
10997
|
enableTitleDescription: signal(options.enableTitleDescription ?? false),
|
|
10995
10998
|
},
|
|
10996
10999
|
});
|
|
@@ -11055,6 +11058,7 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
11055
11058
|
this.fileService = inject(AXFileService);
|
|
11056
11059
|
this.hooks = inject(AXPHookService);
|
|
11057
11060
|
this.fileActionsService = inject(AXPFileActionsService);
|
|
11061
|
+
this.commandExecutor = inject(AXPCommandExecutor);
|
|
11058
11062
|
this.multiple = computed(() => this.options()['multiple'], ...(ngDevMode ? [{ debugName: "multiple" }] : []));
|
|
11059
11063
|
this.acceptOverride = signal(undefined, ...(ngDevMode ? [{ debugName: "acceptOverride" }] : []));
|
|
11060
11064
|
this.accept = computed(() => this.acceptOverride() ?? this.options()['accept'], ...(ngDevMode ? [{ debugName: "accept" }] : []));
|
|
@@ -11068,6 +11072,8 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
11068
11072
|
return this.options()['fileEditable'];
|
|
11069
11073
|
}, ...(ngDevMode ? [{ debugName: "fileEditable" }] : []));
|
|
11070
11074
|
this.enableTitleDescription = computed(() => this.options()['enableTitleDescription'] ?? false, ...(ngDevMode ? [{ debugName: "enableTitleDescription" }] : []));
|
|
11075
|
+
/** When true, show the edit dialog (name/title/description + plugin hooks) after each file select; otherwise add to list and user edits via Edit button. */
|
|
11076
|
+
this.showEditDialogAfterSelect = computed(() => this.options()['showEditDialogAfterSelect'] ?? false, ...(ngDevMode ? [{ debugName: "showEditDialogAfterSelect" }] : []));
|
|
11071
11077
|
this.readonly = computed(() => this.options()['readonly'], ...(ngDevMode ? [{ debugName: "readonly" }] : []));
|
|
11072
11078
|
this.maxFileSize = computed(() => this.options()['maxFileSize'], ...(ngDevMode ? [{ debugName: "maxFileSize" }] : []));
|
|
11073
11079
|
// Drag and drop state
|
|
@@ -11093,7 +11099,14 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
11093
11099
|
this.capabilities = {
|
|
11094
11100
|
getFiles: () => this.files(),
|
|
11095
11101
|
setFiles: (files) => this.setValue(files),
|
|
11096
|
-
addFiles: (files) =>
|
|
11102
|
+
addFiles: (files) => {
|
|
11103
|
+
if (this.showEditDialogAfterSelect()) {
|
|
11104
|
+
this.addFilesWithEditDialogAsync(files);
|
|
11105
|
+
}
|
|
11106
|
+
else {
|
|
11107
|
+
this.setValue([...(this.getValue() ?? []), ...files]);
|
|
11108
|
+
}
|
|
11109
|
+
},
|
|
11097
11110
|
updateFile: (predicate, updater) => {
|
|
11098
11111
|
const current = this.getValue() ?? [];
|
|
11099
11112
|
const next = current.map((f) => (predicate(f) ? updater(f) : f));
|
|
@@ -11147,18 +11160,16 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
11147
11160
|
}
|
|
11148
11161
|
/**
|
|
11149
11162
|
* Process files from various sources (file picker, drag-drop, etc.)
|
|
11163
|
+
* When showEditDialogAfterSelect is true, the edit dialog (with plugin hooks) is shown per file before adding; otherwise files are added and user can edit via Edit button.
|
|
11150
11164
|
*/
|
|
11151
11165
|
async processFiles(files) {
|
|
11152
|
-
// if no files are selected, return
|
|
11153
11166
|
if (files.length === 0) {
|
|
11154
11167
|
return;
|
|
11155
11168
|
}
|
|
11156
|
-
// if the widget is not multiple, clear the files
|
|
11157
11169
|
if (!this.multiple()) {
|
|
11158
11170
|
this.clear();
|
|
11159
11171
|
}
|
|
11160
|
-
|
|
11161
|
-
// create the file upload requests
|
|
11172
|
+
const showDialog = this.showEditDialogAfterSelect();
|
|
11162
11173
|
const fileUploadRequests = files.map((file) => ({
|
|
11163
11174
|
id: AXPDataGenerator.uuid(),
|
|
11164
11175
|
name: file.name,
|
|
@@ -11170,7 +11181,11 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
11170
11181
|
value: file,
|
|
11171
11182
|
},
|
|
11172
11183
|
}));
|
|
11173
|
-
|
|
11184
|
+
if (showDialog) {
|
|
11185
|
+
await this.addFilesWithEditDialogAsync(fileUploadRequests);
|
|
11186
|
+
return;
|
|
11187
|
+
}
|
|
11188
|
+
// Default: run BeforeFilesAdded (plugins may transform), then add all, then AfterFilesAdded
|
|
11174
11189
|
await this.hooks.runAsync(FileUploaderWebhookKeys.BeforeFilesAdded, {
|
|
11175
11190
|
plugins: this.plugins() ?? [],
|
|
11176
11191
|
excludePlugins: this.excludePlugins() ?? [],
|
|
@@ -11185,6 +11200,33 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
11185
11200
|
newFiles: fileUploadRequests,
|
|
11186
11201
|
});
|
|
11187
11202
|
}
|
|
11203
|
+
/**
|
|
11204
|
+
* Show edit dialog per file and add only those submitted. Used when showEditDialogAfterSelect is true (both from zone and from dropdown actions).
|
|
11205
|
+
*/
|
|
11206
|
+
async addFilesWithEditDialogAsync(fileItems) {
|
|
11207
|
+
const added = [];
|
|
11208
|
+
for (const fileItem of fileItems) {
|
|
11209
|
+
const result = await this.commandExecutor.execute('FileUploader:Edit', {
|
|
11210
|
+
file: fileItem,
|
|
11211
|
+
plugins: this.plugins() ?? [],
|
|
11212
|
+
excludePlugins: this.excludePlugins() ?? [],
|
|
11213
|
+
enableTitleDescription: this.enableTitleDescription(),
|
|
11214
|
+
isNewFile: true,
|
|
11215
|
+
});
|
|
11216
|
+
if (result?.success && result.data) {
|
|
11217
|
+
added.push(result.data);
|
|
11218
|
+
}
|
|
11219
|
+
}
|
|
11220
|
+
if (added.length > 0) {
|
|
11221
|
+
this.setValue([...(this.getValue() ?? []), ...added]);
|
|
11222
|
+
await this.hooks.runAsync(FileUploaderWebhookKeys.AfterFilesAdded, {
|
|
11223
|
+
plugins: this.plugins() ?? [],
|
|
11224
|
+
excludePlugins: this.excludePlugins() ?? [],
|
|
11225
|
+
capabilities: this.capabilities,
|
|
11226
|
+
newFiles: added,
|
|
11227
|
+
});
|
|
11228
|
+
}
|
|
11229
|
+
}
|
|
11188
11230
|
handleFileRemove(file) {
|
|
11189
11231
|
this.removeFile(file);
|
|
11190
11232
|
}
|
|
@@ -11211,17 +11253,19 @@ class AXPFileUploaderWidgetEditComponent extends AXPValueWidgetComponent {
|
|
|
11211
11253
|
this.setValue((this.getValue() ?? []).map((f) => (f.id === file.id ? file : f)) ?? []);
|
|
11212
11254
|
}
|
|
11213
11255
|
/**
|
|
11214
|
-
* Handle file rename action
|
|
11256
|
+
* Handle file rename action. Persists name/title/description to file storage immediately when edited
|
|
11257
|
+
* so they are saved even if the entity payload does not carry these fields.
|
|
11215
11258
|
*/
|
|
11216
11259
|
handleFileRename(file) {
|
|
11217
11260
|
const currentFiles = this.getValue() ?? [];
|
|
11218
11261
|
const previousFile = currentFiles.find((f) => f.id === file.id);
|
|
11219
|
-
// Check if name has changed and previous status was 'uploaded' or 'remote'
|
|
11220
11262
|
const nameChanged = previousFile && previousFile.name !== file.name;
|
|
11221
|
-
const
|
|
11263
|
+
const titleChanged = previousFile && previousFile.title !== file.title;
|
|
11264
|
+
const descriptionChanged = previousFile && previousFile.description !== file.description;
|
|
11265
|
+
const anyMetadataChanged = nameChanged || titleChanged || descriptionChanged;
|
|
11266
|
+
const shouldChangeStatus = anyMetadataChanged &&
|
|
11222
11267
|
previousFile &&
|
|
11223
11268
|
(previousFile.status === 'uploaded' || previousFile.status === 'remote');
|
|
11224
|
-
// Update file data and change status to 'editing' if name changed and status was 'uploaded' or 'remote'
|
|
11225
11269
|
const updatedFile = {
|
|
11226
11270
|
...file,
|
|
11227
11271
|
status: shouldChangeStatus ? 'editing' : file.status,
|
|
@@ -11451,6 +11495,12 @@ const AXPFileUploaderWidget = {
|
|
|
11451
11495
|
path: 'options.enableTitleDescription',
|
|
11452
11496
|
group: AXP_BEHAVIOR_PROPERTY_GROUP,
|
|
11453
11497
|
}),
|
|
11498
|
+
createBooleanProperty({
|
|
11499
|
+
name: 'showEditDialogAfterSelect',
|
|
11500
|
+
title: 'Show Edit Dialog After File Select',
|
|
11501
|
+
path: 'options.showEditDialogAfterSelect',
|
|
11502
|
+
group: AXP_BEHAVIOR_PROPERTY_GROUP,
|
|
11503
|
+
}),
|
|
11454
11504
|
createNumberProperty({
|
|
11455
11505
|
name: 'maxFileSize',
|
|
11456
11506
|
title: 'Max File Size (bytes)',
|