@acorex/platform 20.8.13 → 20.8.14
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/{types/acorex-platform-auth.d.ts → auth/index.d.ts} +2 -14
- package/{types/acorex-platform-common.d.ts → common/index.d.ts} +30 -302
- package/{types/acorex-platform-core.d.ts → core/index.d.ts} +44 -188
- package/{types/acorex-platform-domain.d.ts → domain/index.d.ts} +412 -744
- package/fesm2022/acorex-platform-auth.mjs +27 -125
- package/fesm2022/acorex-platform-auth.mjs.map +1 -1
- package/fesm2022/{acorex-platform-common-common-settings.provider-Bi1RYif5.mjs → acorex-platform-common-common-settings.provider-DVvuLUfF.mjs} +32 -30
- package/fesm2022/acorex-platform-common-common-settings.provider-DVvuLUfF.mjs.map +1 -0
- package/fesm2022/acorex-platform-common.mjs +205 -711
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +127 -420
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-domain.mjs +830 -561
- package/fesm2022/acorex-platform-domain.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +114 -634
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs → acorex-platform-layout-components-binding-expression-editor-popup.component-CSxCnzwU.mjs} +9 -9
- package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CSxCnzwU.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-components.mjs +877 -3362
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +204 -456
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +10062 -14672
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +171 -413
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +441 -507
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs → acorex-platform-layout-widgets-button-widget-designer.component-CPBzE96V.mjs} +10 -10
- package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-CPBzE96V.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs → acorex-platform-layout-widgets-file-list-popup.component-Dtv6U3df.mjs} +76 -21
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-Dtv6U3df.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs → acorex-platform-layout-widgets-image-preview.popup-QxJfswhK.mjs} +7 -6
- package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-QxJfswhK.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs → acorex-platform-layout-widgets-page-widget-designer.component-CVdssZBD.mjs} +12 -12
- package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-CVdssZBD.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BCxE0RTB.mjs +111 -0
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BCxE0RTB.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DVaZN9QN.mjs} +5 -5
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DVaZN9QN.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-DPGHgXa6.mjs} +4 -4
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-DPGHgXa6.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-CdiNW691.mjs} +6 -6
- package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-CdiNW691.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets.mjs +3408 -5611
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-native.mjs +7 -8
- package/fesm2022/acorex-platform-native.mjs.map +1 -1
- package/fesm2022/acorex-platform-runtime.mjs +166 -391
- package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-D4hU2SCE.mjs +160 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-D4hU2SCE.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-D2CtNrSn.mjs +1716 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-D2CtNrSn.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BVTklnzs.mjs +120 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BVTklnzs.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-BfCeUU5F.mjs → acorex-platform-themes-default-entity-master-single-view.component-rGsMVAZj.mjs} +23 -16
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-rGsMVAZj.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs → acorex-platform-themes-default-error-401.component-53VB-PS_.mjs} +4 -4
- package/fesm2022/acorex-platform-themes-default-error-401.component-53VB-PS_.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs → acorex-platform-themes-default-error-404.component-DVF9soT5.mjs} +4 -4
- package/fesm2022/acorex-platform-themes-default-error-404.component-DVF9soT5.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-error-offline.component-CwNNHzZn.mjs +19 -0
- package/fesm2022/acorex-platform-themes-default-error-offline.component-CwNNHzZn.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +61 -1784
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs → acorex-platform-themes-shared-icon-chooser-column.component-TJ9PWHMY.mjs} +6 -6
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-TJ9PWHMY.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BHcKkIx0.mjs} +6 -6
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BHcKkIx0.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-shared-settings.provider-DK6R87Lf.mjs → acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs} +25 -24
- package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-BUPs84MI.mjs +65 -0
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-BUPs84MI.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BotknoHn.mjs +64 -0
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BotknoHn.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared.mjs +305 -408
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +100 -359
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/fesm2022/acorex-platform.mjs.map +1 -1
- package/{types/acorex-platform-layout-builder.d.ts → layout/builder/index.d.ts} +38 -160
- package/{types/acorex-platform-layout-components.d.ts → layout/components/index.d.ts} +125 -854
- package/{types/acorex-platform-layout-designer.d.ts → layout/designer/index.d.ts} +18 -96
- package/{types/acorex-platform-layout-entity.d.ts → layout/entity/index.d.ts} +65 -848
- package/{types/acorex-platform-layout-views.d.ts → layout/views/index.d.ts} +47 -80
- package/{types/acorex-platform-layout-widget-core.d.ts → layout/widget-core/index.d.ts} +197 -274
- package/{types/acorex-platform-layout-widgets.d.ts → layout/widgets/index.d.ts} +124 -608
- package/{types/acorex-platform-native.d.ts → native/index.d.ts} +7 -0
- package/package.json +31 -31
- package/runtime/index.d.ts +307 -0
- package/{types/acorex-platform-themes-default.d.ts → themes/default/index.d.ts} +4 -113
- package/{types/acorex-platform-themes-shared.d.ts → themes/shared/index.d.ts} +4 -5
- package/{types/acorex-platform-workflow.d.ts → workflow/index.d.ts} +81 -162
- package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGO75IMz.mjs +0 -116
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGO75IMz.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cx1lLUaR.mjs +0 -160
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cx1lLUaR.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-AOrcgjDF.mjs +0 -120
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-AOrcgjDF.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BfCeUU5F.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs +0 -19
- package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-settings.provider-DK6R87Lf.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs +0 -94
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs +0 -86
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs.map +0 -1
- package/types/acorex-platform-runtime.d.ts +0 -571
- /package/{types/acorex-platform.d.ts → index.d.ts} +0 -0
|
@@ -3,7 +3,6 @@ import { Injectable, inject, InjectionToken, Optional, Inject, NgModule } from '
|
|
|
3
3
|
import { Subject, filter } from 'rxjs';
|
|
4
4
|
import { cloneDeep, get, set } from 'lodash-es';
|
|
5
5
|
import { setSmart, AXPExpressionEvaluatorService, AXPDataGenerator } from '@acorex/platform/core';
|
|
6
|
-
import { AXTranslationService } from '@acorex/core/translation';
|
|
7
6
|
import { AXPCommandService } from '@acorex/platform/runtime';
|
|
8
7
|
|
|
9
8
|
class AXPWorkflowError extends Error {
|
|
@@ -24,10 +23,10 @@ class AXPWorkflowEventService {
|
|
|
24
23
|
get events$() {
|
|
25
24
|
return this.eventSubject.asObservable();
|
|
26
25
|
}
|
|
27
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
28
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
26
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowEventService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
27
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowEventService, providedIn: 'root' }); }
|
|
29
28
|
}
|
|
30
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowEventService, decorators: [{
|
|
31
30
|
type: Injectable,
|
|
32
31
|
args: [{
|
|
33
32
|
providedIn: 'root',
|
|
@@ -117,10 +116,10 @@ class AXPWorkflowRegistryService {
|
|
|
117
116
|
});
|
|
118
117
|
}
|
|
119
118
|
}
|
|
120
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
121
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
119
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
120
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowRegistryService, providedIn: 'root' }); }
|
|
122
121
|
}
|
|
123
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
122
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowRegistryService, decorators: [{
|
|
124
123
|
type: Injectable,
|
|
125
124
|
args: [{
|
|
126
125
|
providedIn: 'root',
|
|
@@ -159,17 +158,17 @@ class AXPWorkflowAction {
|
|
|
159
158
|
dispatch(event) {
|
|
160
159
|
this.eventService.dispatch(event);
|
|
161
160
|
}
|
|
162
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
163
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
161
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowAction, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
162
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowAction }); }
|
|
164
163
|
}
|
|
165
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
164
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowAction, decorators: [{
|
|
166
165
|
type: Injectable
|
|
167
166
|
}] });
|
|
168
167
|
class AXPWorkflowFunction {
|
|
169
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
170
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
168
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowFunction, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
169
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowFunction }); }
|
|
171
170
|
}
|
|
172
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
171
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowFunction, decorators: [{
|
|
173
172
|
type: Injectable
|
|
174
173
|
}] });
|
|
175
174
|
function createWorkFlowEvent(type) {
|
|
@@ -185,10 +184,10 @@ class AXPWorkflowDecideAction extends AXPWorkflowAction {
|
|
|
185
184
|
async execute(context) {
|
|
186
185
|
// its a fake action
|
|
187
186
|
}
|
|
188
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
189
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
187
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowDecideAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
188
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowDecideAction, providedIn: 'root' }); }
|
|
190
189
|
}
|
|
191
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
190
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowDecideAction, decorators: [{
|
|
192
191
|
type: Injectable,
|
|
193
192
|
args: [{
|
|
194
193
|
providedIn: 'root',
|
|
@@ -374,10 +373,10 @@ class AXPWorkflowService {
|
|
|
374
373
|
}
|
|
375
374
|
return this.injector.get(functionType);
|
|
376
375
|
}
|
|
377
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
378
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
376
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowService, deps: [{ token: AXPWorkflowRegistryService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
377
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowService, providedIn: 'root' }); }
|
|
379
378
|
}
|
|
380
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
379
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowService, decorators: [{
|
|
381
380
|
type: Injectable,
|
|
382
381
|
args: [{
|
|
383
382
|
providedIn: 'root',
|
|
@@ -402,10 +401,10 @@ class AXPStartWorkflowAction extends AXPWorkflowAction {
|
|
|
402
401
|
throw e;
|
|
403
402
|
}
|
|
404
403
|
}
|
|
405
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
406
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
404
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPStartWorkflowAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
405
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPStartWorkflowAction, providedIn: 'root' }); }
|
|
407
406
|
}
|
|
408
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
407
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPStartWorkflowAction, decorators: [{
|
|
409
408
|
type: Injectable,
|
|
410
409
|
args: [{
|
|
411
410
|
providedIn: 'root',
|
|
@@ -418,12 +417,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
418
417
|
// Compatible with Elsa backend while using ACoreX naming conventions
|
|
419
418
|
// ============================================
|
|
420
419
|
|
|
421
|
-
// Note:
|
|
422
|
-
// Previous versions defined dedicated activity result/command types here
|
|
423
|
-
// (AXPActivityResult / AXPActivity) that wrapped output and outcome.
|
|
424
|
-
// Activities are now modeled directly as AXPCommand with outcome stored in
|
|
425
|
-
// AXPExecuteCommandResult.metadata.outcome.
|
|
426
|
-
|
|
427
420
|
const AXP_ACTIVITY_PROVIDER = new InjectionToken('AXP_ACTIVITY_PROVIDER', {
|
|
428
421
|
factory: () => [],
|
|
429
422
|
});
|
|
@@ -599,19 +592,6 @@ class AXPActivityDefinitionService {
|
|
|
599
592
|
this.pendingActivityRequests.set(name, requestPromise);
|
|
600
593
|
return requestPromise;
|
|
601
594
|
}
|
|
602
|
-
/**
|
|
603
|
-
* Get all activity definitions (flat list) by loading root categories and their activities.
|
|
604
|
-
* Used by activity selector UIs (e.g. automation command configurator).
|
|
605
|
-
*/
|
|
606
|
-
async getAllActivities() {
|
|
607
|
-
const categories = await this.getCategories(undefined);
|
|
608
|
-
const all = [];
|
|
609
|
-
for (const cat of categories) {
|
|
610
|
-
const activities = await this.getActivitiesByCategoryId(cat.id);
|
|
611
|
-
all.push(...activities);
|
|
612
|
-
}
|
|
613
|
-
return all;
|
|
614
|
-
}
|
|
615
595
|
/**
|
|
616
596
|
* Get category ID containing a specific activity definition
|
|
617
597
|
*
|
|
@@ -629,7 +609,7 @@ class AXPActivityDefinitionService {
|
|
|
629
609
|
if (definition && definition.category) {
|
|
630
610
|
// Try to find category by name/id
|
|
631
611
|
const categories = await this.getCategories();
|
|
632
|
-
const found = categories.find(
|
|
612
|
+
const found = categories.find(cat => cat.id === definition.category || cat.title === definition.category);
|
|
633
613
|
if (found) {
|
|
634
614
|
return found.id;
|
|
635
615
|
}
|
|
@@ -856,10 +836,10 @@ class AXPActivityDefinitionService {
|
|
|
856
836
|
this.pendingActivitiesRequests.clear();
|
|
857
837
|
this.pendingActivityRequests.clear();
|
|
858
838
|
}
|
|
859
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
860
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
839
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPActivityDefinitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
840
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPActivityDefinitionService, providedIn: 'root' }); }
|
|
861
841
|
}
|
|
862
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
842
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPActivityDefinitionService, decorators: [{
|
|
863
843
|
type: Injectable,
|
|
864
844
|
args: [{
|
|
865
845
|
providedIn: 'root',
|
|
@@ -872,62 +852,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
872
852
|
*/
|
|
873
853
|
const AXP_WORKFLOW_ENGINE = new InjectionToken('AXP_WORKFLOW_ENGINE');
|
|
874
854
|
|
|
875
|
-
//#region ---- Error Codes ----
|
|
876
|
-
/**
|
|
877
|
-
* Stable workflow engine error codes for UI branching (toasts, take-over flow, etc.).
|
|
878
|
-
*/
|
|
879
|
-
const AXP_WORKFLOW_ERROR_CODES = {
|
|
880
|
-
TASK_NOT_ASSIGNEE: 'WORKFLOW_TASK_NOT_ASSIGNEE',
|
|
881
|
-
CLAIM_REQUIRED: 'WORKFLOW_CLAIM_REQUIRED',
|
|
882
|
-
REASSIGN_NOT_ALLOWED: 'WORKFLOW_REASSIGN_NOT_ALLOWED',
|
|
883
|
-
};
|
|
884
|
-
//#endregion
|
|
885
|
-
//#region ---- Engine Error ----
|
|
886
|
-
/**
|
|
887
|
-
* Business-rule failure from {@link AXPWorkflowEngine} (expected, user-facing).
|
|
888
|
-
*/
|
|
889
|
-
class AXPWorkflowEngineError extends Error {
|
|
890
|
-
constructor(message, code, details) {
|
|
891
|
-
super(message);
|
|
892
|
-
this.code = code;
|
|
893
|
-
this.details = details;
|
|
894
|
-
this.name = 'AXPWorkflowEngineError';
|
|
895
|
-
}
|
|
896
|
-
}
|
|
897
|
-
/**
|
|
898
|
-
* Resolves a stable error code from an unknown thrown value.
|
|
899
|
-
*/
|
|
900
|
-
function getWorkflowEngineErrorCode(error) {
|
|
901
|
-
if (error instanceof AXPWorkflowEngineError) {
|
|
902
|
-
return error.code;
|
|
903
|
-
}
|
|
904
|
-
return undefined;
|
|
905
|
-
}
|
|
906
|
-
/**
|
|
907
|
-
* Resolves a user-facing message and optional code from an unknown thrown value.
|
|
908
|
-
*/
|
|
909
|
-
function getWorkflowEngineErrorInfo(error) {
|
|
910
|
-
if (error instanceof AXPWorkflowEngineError) {
|
|
911
|
-
return { message: error.message, code: error.code };
|
|
912
|
-
}
|
|
913
|
-
if (error instanceof Error) {
|
|
914
|
-
return { message: error.message };
|
|
915
|
-
}
|
|
916
|
-
return { message: 'An unexpected workflow error occurred' };
|
|
917
|
-
}
|
|
918
|
-
//#endregion
|
|
919
|
-
|
|
920
|
-
/**
|
|
921
|
-
* Activity types that use the task board (suspend until user acts via inbox), not inline interactive execution.
|
|
922
|
-
*/
|
|
923
|
-
const AXP_WORKFLOW_TASK_BOARD_ACTIVITY_TYPES = [
|
|
924
|
-
'workflow-activity:human-task',
|
|
925
|
-
'workflow-activity:cartable',
|
|
926
|
-
];
|
|
927
|
-
function axpIsWorkflowTaskBoardActivityType(activityType) {
|
|
928
|
-
return !!activityType && AXP_WORKFLOW_TASK_BOARD_ACTIVITY_TYPES.includes(activityType);
|
|
929
|
-
}
|
|
930
|
-
|
|
931
855
|
//#endregion
|
|
932
856
|
/**
|
|
933
857
|
* Workflow Expression Scope Service
|
|
@@ -961,82 +885,6 @@ function axpIsWorkflowTaskBoardActivityType(activityType) {
|
|
|
961
885
|
* ```
|
|
962
886
|
*/
|
|
963
887
|
class WorkflowExpressionScopeService {
|
|
964
|
-
//#region ---- Private Helpers (dot-notation input normalization) ----
|
|
965
|
-
/**
|
|
966
|
-
* Collect dot-notation key-value pairs from nested objects so that e.g.
|
|
967
|
-
* { metadata: { "metadata.questionnaire.id": "x" } } becomes { "metadata.questionnaire.id": "x" } at root.
|
|
968
|
-
* Top-level non-dot keys are kept as-is.
|
|
969
|
-
*/
|
|
970
|
-
flattenDotKeysFromTree(obj) {
|
|
971
|
-
if (obj === null || typeof obj !== 'object')
|
|
972
|
-
return obj;
|
|
973
|
-
const result = {};
|
|
974
|
-
for (const [key, value] of Object.entries(obj)) {
|
|
975
|
-
if (key.includes('.')) {
|
|
976
|
-
result[key] = value;
|
|
977
|
-
}
|
|
978
|
-
else if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
|
|
979
|
-
for (const [k, v] of Object.entries(value)) {
|
|
980
|
-
if (k.includes('.')) {
|
|
981
|
-
result[k] = v;
|
|
982
|
-
}
|
|
983
|
-
else {
|
|
984
|
-
result[key + '.' + k] = v;
|
|
985
|
-
}
|
|
986
|
-
}
|
|
987
|
-
}
|
|
988
|
-
else {
|
|
989
|
-
result[key] = value;
|
|
990
|
-
}
|
|
991
|
-
}
|
|
992
|
-
return result;
|
|
993
|
-
}
|
|
994
|
-
/**
|
|
995
|
-
* Expand flat keys with dots into nested objects.
|
|
996
|
-
* e.g. { "metadata.questionnaire.id": "x" } -> { metadata: { questionnaire: { id: "x" } } }.
|
|
997
|
-
*/
|
|
998
|
-
expandDotKeys(obj) {
|
|
999
|
-
if (obj === null || typeof obj !== 'object')
|
|
1000
|
-
return obj;
|
|
1001
|
-
const result = {};
|
|
1002
|
-
const dotKeys = [];
|
|
1003
|
-
const simpleKeys = [];
|
|
1004
|
-
for (const [key, value] of Object.entries(obj)) {
|
|
1005
|
-
if (key.includes('.')) {
|
|
1006
|
-
dotKeys.push([key, value]);
|
|
1007
|
-
}
|
|
1008
|
-
else {
|
|
1009
|
-
simpleKeys.push([key, value]);
|
|
1010
|
-
}
|
|
1011
|
-
}
|
|
1012
|
-
for (const [key, value] of dotKeys) {
|
|
1013
|
-
const parts = key.split('.');
|
|
1014
|
-
let current = result;
|
|
1015
|
-
for (let i = 0; i < parts.length - 1; i++) {
|
|
1016
|
-
const part = parts[i];
|
|
1017
|
-
if (!(part in current) || typeof current[part] !== 'object' || current[part] === null) {
|
|
1018
|
-
current[part] = {};
|
|
1019
|
-
}
|
|
1020
|
-
current = current[part];
|
|
1021
|
-
}
|
|
1022
|
-
current[parts[parts.length - 1]] = value;
|
|
1023
|
-
}
|
|
1024
|
-
for (const [key, value] of simpleKeys) {
|
|
1025
|
-
result[key] = value;
|
|
1026
|
-
}
|
|
1027
|
-
return result;
|
|
1028
|
-
}
|
|
1029
|
-
/**
|
|
1030
|
-
* Normalize workflow input so that flat dot-notation keys (e.g. from form schema
|
|
1031
|
-
* "metadata.questionnaire.id") become nested for expression access (inputs.metadata.questionnaire.id).
|
|
1032
|
-
*/
|
|
1033
|
-
normalizeInputs(input) {
|
|
1034
|
-
if (!input || typeof input !== 'object')
|
|
1035
|
-
return {};
|
|
1036
|
-
const flattened = this.flattenDotKeysFromTree(input);
|
|
1037
|
-
return this.expandDotKeys(flattened);
|
|
1038
|
-
}
|
|
1039
|
-
//#endregion
|
|
1040
888
|
//#region ---- Public Methods ----
|
|
1041
889
|
/**
|
|
1042
890
|
* Build expression evaluation scope for workflow activities.
|
|
@@ -1066,12 +914,10 @@ class WorkflowExpressionScopeService {
|
|
|
1066
914
|
* @returns Expression evaluator scope with workflow data and context.eval() function
|
|
1067
915
|
*/
|
|
1068
916
|
buildScope(context) {
|
|
1069
|
-
// Normalize inputs so flat dot-notation keys (e.g. metadata.questionnaire.id from forms) become nested for expressions
|
|
1070
|
-
const inputs = this.normalizeInputs(context.inputs || {});
|
|
1071
917
|
// Build merged workflow data object for context.eval()
|
|
1072
918
|
// This allows expressions like: context.eval("inputs.userName") or context.eval("variables.count")
|
|
1073
919
|
const workflowData = {
|
|
1074
|
-
inputs,
|
|
920
|
+
inputs: context.inputs || {},
|
|
1075
921
|
variables: context.variables || {},
|
|
1076
922
|
vars: context.variables || {}, // Alias for convenience
|
|
1077
923
|
outputs: context.outputs || {},
|
|
@@ -1125,32 +971,21 @@ class WorkflowExpressionScopeService {
|
|
|
1125
971
|
outputs['last'] = state.lastActivityOutput;
|
|
1126
972
|
}
|
|
1127
973
|
return this.buildScope({
|
|
1128
|
-
inputs:
|
|
974
|
+
inputs: state.input || {},
|
|
1129
975
|
variables: state.variables || {},
|
|
1130
976
|
outputs: outputs,
|
|
1131
977
|
});
|
|
1132
978
|
}
|
|
1133
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1134
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
979
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WorkflowExpressionScopeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
980
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WorkflowExpressionScopeService, providedIn: 'root' }); }
|
|
1135
981
|
}
|
|
1136
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
982
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WorkflowExpressionScopeService, decorators: [{
|
|
1137
983
|
type: Injectable,
|
|
1138
984
|
args: [{
|
|
1139
985
|
providedIn: 'root'
|
|
1140
986
|
}]
|
|
1141
987
|
}] });
|
|
1142
988
|
|
|
1143
|
-
//#region ---- Constants ----
|
|
1144
|
-
/**
|
|
1145
|
-
* Activity types handled internally by the workflow engine (e.g. mock backend).
|
|
1146
|
-
* When such an activity is not registered as Command on the client, we skip execution
|
|
1147
|
-
* without warning — the engine will run it when executing the workflow.
|
|
1148
|
-
*/
|
|
1149
|
-
const ENGINE_BUILTIN_ACTIVITY_TYPES = new Set([
|
|
1150
|
-
'workflow-activity:set-variable',
|
|
1151
|
-
'workflow-activity:http-request',
|
|
1152
|
-
'workflow-activity:resolve-employee-user-id',
|
|
1153
|
-
]);
|
|
1154
989
|
//#endregion
|
|
1155
990
|
/**
|
|
1156
991
|
* Activity Executor Service
|
|
@@ -1172,7 +1007,6 @@ class ActivityExecutor {
|
|
|
1172
1007
|
this.commandService = inject(AXPCommandService);
|
|
1173
1008
|
this.expressionEvaluator = inject(AXPExpressionEvaluatorService);
|
|
1174
1009
|
this.expressionScopeService = inject(WorkflowExpressionScopeService);
|
|
1175
|
-
this.translateService = inject(AXTranslationService);
|
|
1176
1010
|
}
|
|
1177
1011
|
//#endregion
|
|
1178
1012
|
//#region ---- Public Methods ----
|
|
@@ -1205,23 +1039,21 @@ class ActivityExecutor {
|
|
|
1205
1039
|
// Check if command exists
|
|
1206
1040
|
const commandExists = this.commandService.exists(activityName);
|
|
1207
1041
|
if (!commandExists) {
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
`Skipping execution.`);
|
|
1211
|
-
}
|
|
1042
|
+
console.warn(`[ActivityExecutor] ⚠️ Activity '${activityName}' is not registered as Command. ` +
|
|
1043
|
+
`Skipping execution.`);
|
|
1212
1044
|
return {
|
|
1213
1045
|
output: null,
|
|
1214
1046
|
outcome: 'Done'
|
|
1215
1047
|
};
|
|
1216
1048
|
}
|
|
1217
|
-
// Flatten properties if nested (
|
|
1049
|
+
// Flatten properties if nested (workflow-studio format)
|
|
1218
1050
|
let commandInput = evaluatedInputs;
|
|
1219
1051
|
if (commandInput['properties'] && typeof commandInput['properties'] === 'object') {
|
|
1220
1052
|
// Flatten: {properties: {text: "..."}} -> {text: "..."}
|
|
1221
1053
|
commandInput = { ...commandInput['properties'] };
|
|
1222
1054
|
}
|
|
1223
1055
|
// Execute activity via CommandBus
|
|
1224
|
-
// Activities
|
|
1056
|
+
// Activities registered as AXPCommand return {output, outcomes}
|
|
1225
1057
|
const result = await this.commandService.execute(activityName, commandInput);
|
|
1226
1058
|
if (!result) {
|
|
1227
1059
|
return {
|
|
@@ -1232,33 +1064,21 @@ class ActivityExecutor {
|
|
|
1232
1064
|
if (!result.success) {
|
|
1233
1065
|
return {
|
|
1234
1066
|
output: {
|
|
1235
|
-
error:
|
|
1067
|
+
error: result.message?.text,
|
|
1236
1068
|
},
|
|
1237
1069
|
outcome: 'Failed',
|
|
1238
1070
|
};
|
|
1239
1071
|
}
|
|
1240
1072
|
const commandResult = result.data;
|
|
1241
|
-
|
|
1242
|
-
|
|
1073
|
+
const outcomes = commandResult?.outcomes ?? {};
|
|
1074
|
+
// Determine outcome from command results
|
|
1075
|
+
// Default to 'Done' if no outcomes specified
|
|
1243
1076
|
let outcome = 'Done';
|
|
1244
|
-
if (
|
|
1245
|
-
outcome =
|
|
1246
|
-
}
|
|
1247
|
-
else if (typeof commandResult?.outcome === 'string' && commandResult.outcome.length > 0) {
|
|
1248
|
-
outcome = commandResult.outcome;
|
|
1249
|
-
}
|
|
1250
|
-
else {
|
|
1251
|
-
const outcomes = (commandResult?.outcomes ?? {});
|
|
1252
|
-
if (outcomes && typeof outcomes === 'object' && Object.keys(outcomes).length > 0) {
|
|
1253
|
-
outcome = outcomes['Done'] ? 'Done' : Object.keys(outcomes)[0] || 'Done';
|
|
1254
|
-
}
|
|
1077
|
+
if (Object.keys(outcomes).length > 0) {
|
|
1078
|
+
outcome = outcomes['Done'] ? 'Done' : Object.keys(outcomes)[0] || 'Done';
|
|
1255
1079
|
}
|
|
1256
|
-
// Prefer output wrapper when present; otherwise treat data itself as output.
|
|
1257
|
-
const output = commandResult && typeof commandResult === 'object' && 'output' in commandResult
|
|
1258
|
-
? commandResult.output
|
|
1259
|
-
: commandResult;
|
|
1260
1080
|
return {
|
|
1261
|
-
output: output ?? null,
|
|
1081
|
+
output: commandResult?.output ?? null,
|
|
1262
1082
|
outcome,
|
|
1263
1083
|
};
|
|
1264
1084
|
}
|
|
@@ -1270,22 +1090,10 @@ class ActivityExecutor {
|
|
|
1270
1090
|
};
|
|
1271
1091
|
}
|
|
1272
1092
|
}
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
*/
|
|
1276
|
-
async resolveCommandMessageTextForError(value) {
|
|
1277
|
-
if (value == null) {
|
|
1278
|
-
return '';
|
|
1279
|
-
}
|
|
1280
|
-
if (typeof value === 'string') {
|
|
1281
|
-
return value.startsWith('@') ? await this.translateService.translateAsync(value) : value;
|
|
1282
|
-
}
|
|
1283
|
-
return this.translateService.resolve(value);
|
|
1284
|
-
}
|
|
1285
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ActivityExecutor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1286
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: ActivityExecutor, providedIn: 'root' }); }
|
|
1093
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ActivityExecutor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1094
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ActivityExecutor, providedIn: 'root' }); }
|
|
1287
1095
|
}
|
|
1288
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1096
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ActivityExecutor, decorators: [{
|
|
1289
1097
|
type: Injectable,
|
|
1290
1098
|
args: [{
|
|
1291
1099
|
providedIn: 'root'
|
|
@@ -1333,19 +1141,23 @@ class AXPWorkflowManager {
|
|
|
1333
1141
|
//#endregion
|
|
1334
1142
|
//#region ---- Public Methods ----
|
|
1335
1143
|
/**
|
|
1336
|
-
* Execute frontend activities interactively until reaching
|
|
1144
|
+
* Execute frontend activities interactively until reaching human-task or completion.
|
|
1337
1145
|
*
|
|
1338
|
-
*
|
|
1339
|
-
*
|
|
1340
|
-
*
|
|
1146
|
+
* This method handles the interactive flow between frontend and backend:
|
|
1147
|
+
* 1. Executes frontend activity (ui-activity)
|
|
1148
|
+
* 2. Sends result to backend via frontActivtyComplete
|
|
1149
|
+
* 3. If backend returns nextTask (frontend activity), repeats the process
|
|
1150
|
+
* 4. Continues until workflow completes or reaches human-task
|
|
1341
1151
|
*
|
|
1342
1152
|
* @param instanceId - Workflow instance ID
|
|
1343
1153
|
* @param task - Current task to execute
|
|
1344
1154
|
* @param state - Current workflow state
|
|
1345
1155
|
* @param lastActivityOutput - Last activity output (for expression evaluation)
|
|
1346
|
-
* @returns Final result with nextTask (if
|
|
1156
|
+
* @returns Final result with nextTask (if human-task) or completion status
|
|
1347
1157
|
*/
|
|
1348
1158
|
async executeInteractiveFlow(instanceId, task, state, activityOutputs) {
|
|
1159
|
+
// Backend decides what to execute - frontend only executes ui-activity with frontend/both executionMode
|
|
1160
|
+
// If backend returns a task that's not executable here, return it as-is
|
|
1349
1161
|
let currentTask = task;
|
|
1350
1162
|
let currentState = state;
|
|
1351
1163
|
let currentActivityOutputs = {
|
|
@@ -1356,10 +1168,10 @@ class AXPWorkflowManager {
|
|
|
1356
1168
|
let iterationCount = 0;
|
|
1357
1169
|
while (currentTask && iterationCount < maxIterations) {
|
|
1358
1170
|
iterationCount++;
|
|
1359
|
-
//
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1171
|
+
// Only execute if task is ui-activity with frontend/both executionMode
|
|
1172
|
+
// Backend decides if workflow should continue or suspend
|
|
1173
|
+
if (currentTask.taskType === 'ui-activity' &&
|
|
1174
|
+
(currentTask.executionMode === 'frontend' || currentTask.executionMode === 'both')) {
|
|
1363
1175
|
// Execute frontend activity
|
|
1364
1176
|
const execResult = await this.activityExecutor.execute(currentTask, currentState, currentActivityOutputs);
|
|
1365
1177
|
// Track outputs locally (backend should also persist and return them)
|
|
@@ -1396,20 +1208,20 @@ class AXPWorkflowManager {
|
|
|
1396
1208
|
output: completeResponse.output,
|
|
1397
1209
|
};
|
|
1398
1210
|
}
|
|
1399
|
-
// Backend decides: if nextTask is
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1211
|
+
// Backend decides: if nextTask is not executable here (human-task or other), return it
|
|
1212
|
+
// Backend already set status to 'suspended' if needed
|
|
1213
|
+
if (completeResponse.nextTask.taskType !== 'ui-activity' ||
|
|
1214
|
+
(completeResponse.nextTask.executionMode !== 'frontend' && completeResponse.nextTask.executionMode !== 'both')) {
|
|
1403
1215
|
return {
|
|
1404
1216
|
nextTask: completeResponse.nextTask,
|
|
1405
1217
|
state: currentState,
|
|
1406
1218
|
};
|
|
1407
1219
|
}
|
|
1408
|
-
// Continue with next
|
|
1220
|
+
// Continue with next executable frontend task
|
|
1409
1221
|
currentTask = completeResponse.nextTask;
|
|
1410
1222
|
}
|
|
1411
1223
|
else {
|
|
1412
|
-
// Not
|
|
1224
|
+
// Not a frontend ui-activity - return as-is
|
|
1413
1225
|
return {
|
|
1414
1226
|
nextTask: currentTask,
|
|
1415
1227
|
state: currentState,
|
|
@@ -1460,14 +1272,15 @@ class AXPWorkflowManager {
|
|
|
1460
1272
|
startNormalizedState.lastUpdated = new Date(startNormalizedState.lastUpdated);
|
|
1461
1273
|
}
|
|
1462
1274
|
this.stateCache.set(response.instanceId, startNormalizedState);
|
|
1463
|
-
// 🎯 Interactive flow: Execute frontend activities
|
|
1275
|
+
// 🎯 Interactive flow: Execute frontend activities automatically
|
|
1276
|
+
// Backend decides what to execute - if pendingTask is executable (ui-activity with frontend/both), execute it
|
|
1464
1277
|
let finalNextTask = response.pendingTask || null;
|
|
1465
1278
|
let finalOutput = startNormalizedState.output;
|
|
1466
|
-
|
|
1467
|
-
if (pendingTask &&
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
const interactiveResult = await this.executeInteractiveFlow(response.instanceId, pendingTask, startNormalizedState, response.activityOutputs || response.state.activityOutputs);
|
|
1279
|
+
// If backend returned a task that's executable here (ui-activity with frontend/both), execute it
|
|
1280
|
+
if (response.pendingTask &&
|
|
1281
|
+
response.pendingTask.taskType === 'ui-activity' &&
|
|
1282
|
+
(response.pendingTask.executionMode === 'frontend' || response.pendingTask.executionMode === 'both')) {
|
|
1283
|
+
const interactiveResult = await this.executeInteractiveFlow(response.instanceId, response.pendingTask, startNormalizedState, response.activityOutputs || response.state.activityOutputs);
|
|
1471
1284
|
finalNextTask = interactiveResult.nextTask;
|
|
1472
1285
|
startNormalizedState = interactiveResult.state;
|
|
1473
1286
|
if (interactiveResult.output !== undefined) {
|
|
@@ -1529,14 +1342,15 @@ class AXPWorkflowManager {
|
|
|
1529
1342
|
if (normalizedState) {
|
|
1530
1343
|
this.stateCache.set(instanceId, normalizedState);
|
|
1531
1344
|
}
|
|
1532
|
-
// 🎯 Interactive flow: Execute frontend activities
|
|
1345
|
+
// 🎯 Interactive flow: Execute frontend activities automatically
|
|
1346
|
+
// Backend decides what to execute - if nextTask is executable (ui-activity with frontend/both), execute it
|
|
1533
1347
|
let finalNextTask = response.nextTask || null;
|
|
1534
1348
|
let finalOutput = response.output;
|
|
1535
|
-
|
|
1536
|
-
if (nextTask &&
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
const interactiveResult = await this.executeInteractiveFlow(instanceId, nextTask, normalizedState, normalizedState?.activityOutputs);
|
|
1349
|
+
// If backend returned a task that's executable here (ui-activity with frontend/both), execute it
|
|
1350
|
+
if (response.nextTask &&
|
|
1351
|
+
response.nextTask.taskType === 'ui-activity' &&
|
|
1352
|
+
(response.nextTask.executionMode === 'frontend' || response.nextTask.executionMode === 'both')) {
|
|
1353
|
+
const interactiveResult = await this.executeInteractiveFlow(instanceId, response.nextTask, normalizedState, normalizedState?.activityOutputs);
|
|
1540
1354
|
finalNextTask = interactiveResult.nextTask;
|
|
1541
1355
|
normalizedState = interactiveResult.state;
|
|
1542
1356
|
if (interactiveResult.output !== undefined) {
|
|
@@ -1556,12 +1370,11 @@ class AXPWorkflowManager {
|
|
|
1556
1370
|
};
|
|
1557
1371
|
}
|
|
1558
1372
|
catch (error) {
|
|
1559
|
-
|
|
1373
|
+
console.error('[AXPWorkflowManager] ❌ Error resuming workflow:', error);
|
|
1560
1374
|
return {
|
|
1561
1375
|
success: false,
|
|
1562
1376
|
instanceId,
|
|
1563
|
-
error: message,
|
|
1564
|
-
errorCode: code,
|
|
1377
|
+
error: error.message || 'Failed to resume workflow',
|
|
1565
1378
|
};
|
|
1566
1379
|
}
|
|
1567
1380
|
}
|
|
@@ -1607,74 +1420,10 @@ class AXPWorkflowManager {
|
|
|
1607
1420
|
return null;
|
|
1608
1421
|
}
|
|
1609
1422
|
}
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
* Supported only when the injected workflow engine implements {@link AXPWorkflowEngine.claimTask}.
|
|
1613
|
-
*/
|
|
1614
|
-
async claimTask(instanceId, bookmarkId, stepId) {
|
|
1615
|
-
const claim = this.workflowEngine.claimTask?.bind(this.workflowEngine);
|
|
1616
|
-
if (!claim) {
|
|
1617
|
-
return {
|
|
1618
|
-
success: false,
|
|
1619
|
-
instanceId,
|
|
1620
|
-
error: 'Claim task is not supported by this workflow engine',
|
|
1621
|
-
};
|
|
1622
|
-
}
|
|
1623
|
-
try {
|
|
1624
|
-
const result = await claim({ instanceId, bookmarkId, stepId });
|
|
1625
|
-
return {
|
|
1626
|
-
success: result.success,
|
|
1627
|
-
instanceId,
|
|
1628
|
-
error: result.error,
|
|
1629
|
-
errorCode: result.errorCode,
|
|
1630
|
-
};
|
|
1631
|
-
}
|
|
1632
|
-
catch (error) {
|
|
1633
|
-
const { message, code } = getWorkflowEngineErrorInfo(error);
|
|
1634
|
-
return {
|
|
1635
|
-
success: false,
|
|
1636
|
-
instanceId,
|
|
1637
|
-
error: message,
|
|
1638
|
-
errorCode: code,
|
|
1639
|
-
};
|
|
1640
|
-
}
|
|
1641
|
-
}
|
|
1642
|
-
/**
|
|
1643
|
-
* Reassign a human-task bookmark to the current user without advancing the workflow.
|
|
1644
|
-
* Supported only when the injected workflow engine implements {@link AXPWorkflowEngine.reassignTaskToSelf}.
|
|
1645
|
-
*/
|
|
1646
|
-
async reassignTaskToSelf(instanceId, bookmarkId, stepId) {
|
|
1647
|
-
const reassign = this.workflowEngine.reassignTaskToSelf?.bind(this.workflowEngine);
|
|
1648
|
-
if (!reassign) {
|
|
1649
|
-
return {
|
|
1650
|
-
success: false,
|
|
1651
|
-
instanceId,
|
|
1652
|
-
error: 'Reassign task is not supported by this workflow engine',
|
|
1653
|
-
};
|
|
1654
|
-
}
|
|
1655
|
-
try {
|
|
1656
|
-
const result = await reassign({ instanceId, bookmarkId, stepId });
|
|
1657
|
-
return {
|
|
1658
|
-
success: result.success,
|
|
1659
|
-
instanceId,
|
|
1660
|
-
error: result.error,
|
|
1661
|
-
errorCode: result.errorCode,
|
|
1662
|
-
};
|
|
1663
|
-
}
|
|
1664
|
-
catch (error) {
|
|
1665
|
-
const { message, code } = getWorkflowEngineErrorInfo(error);
|
|
1666
|
-
return {
|
|
1667
|
-
success: false,
|
|
1668
|
-
instanceId,
|
|
1669
|
-
error: message,
|
|
1670
|
-
errorCode: code,
|
|
1671
|
-
};
|
|
1672
|
-
}
|
|
1673
|
-
}
|
|
1674
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWorkflowManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1675
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPWorkflowManager, providedIn: 'root' }); }
|
|
1423
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1424
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowManager, providedIn: 'root' }); }
|
|
1676
1425
|
}
|
|
1677
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1426
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowManager, decorators: [{
|
|
1678
1427
|
type: Injectable,
|
|
1679
1428
|
args: [{
|
|
1680
1429
|
providedIn: 'root',
|
|
@@ -1709,7 +1458,6 @@ class AXPWorkflowLocalEngine {
|
|
|
1709
1458
|
//#region ---- Services & Dependencies ----
|
|
1710
1459
|
this.activityDefinitionService = inject(AXPActivityDefinitionService);
|
|
1711
1460
|
this.workflowProviders = inject(AXP_WORKFLOW_PROVIDER, { optional: true }) || [];
|
|
1712
|
-
this.multiLanguageResolver = inject(AXTranslationService);
|
|
1713
1461
|
//#endregion
|
|
1714
1462
|
//#region ---- Instance Storage ----
|
|
1715
1463
|
/**
|
|
@@ -1811,10 +1559,9 @@ class AXPWorkflowLocalEngine {
|
|
|
1811
1559
|
throw new Error(`Workflow instance not found: ${request.instanceId}`);
|
|
1812
1560
|
}
|
|
1813
1561
|
// Store activity result (from external execution)
|
|
1814
|
-
const outcome = request.outcome ?? 'Done';
|
|
1815
1562
|
localState.activityResults.set(request.stepId, {
|
|
1816
1563
|
output: request.userInput || {},
|
|
1817
|
-
outcome,
|
|
1564
|
+
outcome: request.outcome,
|
|
1818
1565
|
});
|
|
1819
1566
|
localState.completedActivities.add(request.stepId);
|
|
1820
1567
|
// Store activity output for expression evaluation
|
|
@@ -1830,11 +1577,6 @@ class AXPWorkflowLocalEngine {
|
|
|
1830
1577
|
...(request.userInput || {}),
|
|
1831
1578
|
};
|
|
1832
1579
|
}
|
|
1833
|
-
localState.state.variables = {
|
|
1834
|
-
...localState.state.variables,
|
|
1835
|
-
[`${request.stepId}_outcome`]: outcome,
|
|
1836
|
-
[`${request.stepId}_activityOutput`]: request.userInput || {},
|
|
1837
|
-
};
|
|
1838
1580
|
// Mark activity as completed and continue progression
|
|
1839
1581
|
// Continue progressing workflow steps (skipping backend activities)
|
|
1840
1582
|
const nextTask = await this.executeWorkflowSteps(localState);
|
|
@@ -1847,7 +1589,7 @@ class AXPWorkflowLocalEngine {
|
|
|
1847
1589
|
}
|
|
1848
1590
|
return {
|
|
1849
1591
|
output: request.userInput || {},
|
|
1850
|
-
outcomes: { [outcome]: true },
|
|
1592
|
+
outcomes: { [request.outcome]: true },
|
|
1851
1593
|
state: localState.state,
|
|
1852
1594
|
nextTask: nextTask || null,
|
|
1853
1595
|
};
|
|
@@ -1908,13 +1650,13 @@ class AXPWorkflowLocalEngine {
|
|
|
1908
1650
|
const connections = graph.connections || [];
|
|
1909
1651
|
// Build activity map
|
|
1910
1652
|
const activityMap = new Map();
|
|
1911
|
-
activities.forEach(
|
|
1653
|
+
activities.forEach(activity => {
|
|
1912
1654
|
activityMap.set(activity.id, activity);
|
|
1913
1655
|
});
|
|
1914
1656
|
// Build connection graph
|
|
1915
1657
|
const outgoingConnections = new Map();
|
|
1916
1658
|
const incomingConnections = new Map();
|
|
1917
|
-
connections.forEach(
|
|
1659
|
+
connections.forEach(conn => {
|
|
1918
1660
|
const sourceId = conn.source.activtyName;
|
|
1919
1661
|
const targetId = conn.target.activtyName;
|
|
1920
1662
|
if (!outgoingConnections.has(sourceId)) {
|
|
@@ -1971,7 +1713,7 @@ class AXPWorkflowLocalEngine {
|
|
|
1971
1713
|
found: !!activityDefinition,
|
|
1972
1714
|
});
|
|
1973
1715
|
const executionMode = activityDefinition?.executionMode || 'frontend';
|
|
1974
|
-
const activityTitle =
|
|
1716
|
+
const activityTitle = activityDefinition?.title;
|
|
1975
1717
|
// Handle backend activities: skip
|
|
1976
1718
|
if (executionMode === 'backend') {
|
|
1977
1719
|
console.log(`[WorkflowLocalEngine] ⏭️ Skipping backend activity: ${activity.name} (${activity.id})`);
|
|
@@ -2050,10 +1792,9 @@ class AXPWorkflowLocalEngine {
|
|
|
2050
1792
|
throw new Error(`Workflow instance not found: ${request.instanceId}`);
|
|
2051
1793
|
}
|
|
2052
1794
|
// Store activity result
|
|
2053
|
-
const outcome = request.outcome ?? 'Done';
|
|
2054
1795
|
localState.activityResults.set(request.activityNode, {
|
|
2055
1796
|
output: request.output || {},
|
|
2056
|
-
outcome,
|
|
1797
|
+
outcome: request.outcome,
|
|
2057
1798
|
});
|
|
2058
1799
|
localState.completedActivities.add(request.activityNode);
|
|
2059
1800
|
// Store outputs for expression evaluation
|
|
@@ -2078,15 +1819,15 @@ class AXPWorkflowLocalEngine {
|
|
|
2078
1819
|
}
|
|
2079
1820
|
return {
|
|
2080
1821
|
output: request.output || {},
|
|
2081
|
-
outcomes: { [outcome]: true },
|
|
1822
|
+
outcomes: { [request.outcome]: true },
|
|
2082
1823
|
nextTask: nextTask || null,
|
|
2083
1824
|
state: localState.state,
|
|
2084
1825
|
};
|
|
2085
1826
|
}
|
|
2086
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2087
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
1827
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowLocalEngine, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1828
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowLocalEngine }); }
|
|
2088
1829
|
}
|
|
2089
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1830
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowLocalEngine, decorators: [{
|
|
2090
1831
|
type: Injectable
|
|
2091
1832
|
}] });
|
|
2092
1833
|
|
|
@@ -2507,10 +2248,10 @@ class AXPWorkflowDefinitionService {
|
|
|
2507
2248
|
this.pendingWorkflowsRequests.clear();
|
|
2508
2249
|
this.pendingWorkflowRequests.clear();
|
|
2509
2250
|
}
|
|
2510
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2511
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
2251
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowDefinitionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
2252
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowDefinitionService, providedIn: 'root' }); }
|
|
2512
2253
|
}
|
|
2513
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2254
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowDefinitionService, decorators: [{
|
|
2514
2255
|
type: Injectable,
|
|
2515
2256
|
args: [{
|
|
2516
2257
|
providedIn: 'root',
|
|
@@ -2602,9 +2343,9 @@ class AXPWorkflowModule {
|
|
|
2602
2343
|
f();
|
|
2603
2344
|
});
|
|
2604
2345
|
}
|
|
2605
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
2606
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
2607
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
2346
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowModule, deps: [{ token: 'AXPWorkflowModuleFactory', optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
2347
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowModule }); }
|
|
2348
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowModule, providers: [
|
|
2608
2349
|
AXPWorkflowLocalEngine,
|
|
2609
2350
|
{
|
|
2610
2351
|
provide: AXP_WORKFLOW_ENGINE,
|
|
@@ -2613,7 +2354,7 @@ class AXPWorkflowModule {
|
|
|
2613
2354
|
AXPWorkflowManager,
|
|
2614
2355
|
] }); }
|
|
2615
2356
|
}
|
|
2616
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
2357
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AXPWorkflowModule, decorators: [{
|
|
2617
2358
|
type: NgModule,
|
|
2618
2359
|
args: [{
|
|
2619
2360
|
imports: [],
|
|
@@ -2639,5 +2380,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
2639
2380
|
* Generated bundle index. Do not edit.
|
|
2640
2381
|
*/
|
|
2641
2382
|
|
|
2642
|
-
export { AXPActivityDefinitionService, AXPWorkflowAction, AXPWorkflowContext, AXPWorkflowDefinitionService,
|
|
2383
|
+
export { AXPActivityDefinitionService, AXPWorkflowAction, AXPWorkflowContext, AXPWorkflowDefinitionService, AXPWorkflowError, AXPWorkflowEventService, AXPWorkflowFunction, AXPWorkflowLocalEngine, AXPWorkflowManager, AXPWorkflowModule, AXPWorkflowRegistryService, AXPWorkflowService, AXP_ACTIVITY_CATEGORY_PROVIDER, AXP_ACTIVITY_PROVIDER, AXP_WORKFLOW_CATEGORY_PROVIDER, AXP_WORKFLOW_ENGINE, AXP_WORKFLOW_PROVIDER, ActivityExecutor, WorkflowExpressionScopeService, createWorkFlowEvent, ofType };
|
|
2643
2384
|
//# sourceMappingURL=acorex-platform-workflow.mjs.map
|