ngx-histaff-alpha 6.6.1 → 6.6.3
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/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-Dos2i6gC.mjs → ngx-histaff-alpha-ai-hint-for-table.component-BkeWEpBb.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-Dos2i6gC.mjs.map → ngx-histaff-alpha-ai-hint-for-table.component-BkeWEpBb.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-core-form-design.component-FMxo0lyE.mjs → ngx-histaff-alpha-core-form-design.component-BR-bBzfD.mjs} +4 -4
- package/fesm2022/{ngx-histaff-alpha-core-form-design.component-FMxo0lyE.mjs.map → ngx-histaff-alpha-core-form-design.component-BR-bBzfD.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-core-sys-action.component-BmX5evu1.mjs → ngx-histaff-alpha-core-sys-action.component-Bk4NR75G.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-core-sys-action.component-BmX5evu1.mjs.map → ngx-histaff-alpha-core-sys-action.component-Bk4NR75G.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-CWdl2e-2.mjs → ngx-histaff-alpha-core-template-editor.component-HdfNJZ8V.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-CWdl2e-2.mjs.map → ngx-histaff-alpha-core-template-editor.component-HdfNJZ8V.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component---Y5Mf0Q.mjs → ngx-histaff-alpha-core-toast-loading.component-BLmTVuMI.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component---Y5Mf0Q.mjs.map → ngx-histaff-alpha-core-toast-loading.component-BLmTVuMI.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-DO6Z7ne_.mjs → ngx-histaff-alpha-core-workflow-consume.component-BZZTAzzT.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-DO6Z7ne_.mjs.map → ngx-histaff-alpha-core-workflow-consume.component-BZZTAzzT.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-db-settings.component-BDMIloTR.mjs → ngx-histaff-alpha-db-settings.component-DqO4jGaq.mjs} +5 -5
- package/fesm2022/{ngx-histaff-alpha-db-settings.component-BDMIloTR.mjs.map → ngx-histaff-alpha-db-settings.component-DqO4jGaq.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-BaIoewWu.mjs → ngx-histaff-alpha-design-wrapper.component-DciAa4Ac.mjs} +5 -5
- package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-BaIoewWu.mjs.map → ngx-histaff-alpha-design-wrapper.component-DciAa4Ac.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-DXji16SN.mjs → ngx-histaff-alpha-design-wrapper.route-z5NnkZEG.mjs} +5 -5
- package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-DXji16SN.mjs.map → ngx-histaff-alpha-design-wrapper.route-z5NnkZEG.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-CLnfEqAf.mjs → ngx-histaff-alpha-hrm-schema.component-CjtKMys1.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-CLnfEqAf.mjs.map → ngx-histaff-alpha-hrm-schema.component-CjtKMys1.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-live-form.component-Dsi16fWs.mjs → ngx-histaff-alpha-live-form.component-CKurce5Q.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-live-form.component-Dsi16fWs.mjs.map → ngx-histaff-alpha-live-form.component-CKurce5Q.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-ngx-histaff-alpha-C8B8l6nD.mjs → ngx-histaff-alpha-ngx-histaff-alpha-DhuO-m8o.mjs} +31 -28
- package/fesm2022/{ngx-histaff-alpha-ngx-histaff-alpha-C8B8l6nD.mjs.map → ngx-histaff-alpha-ngx-histaff-alpha-DhuO-m8o.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-simple-chat.component-BPnrheT0.mjs → ngx-histaff-alpha-simple-chat.component-CLGEEYxf.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-simple-chat.component-BPnrheT0.mjs.map → ngx-histaff-alpha-simple-chat.component-CLGEEYxf.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-sys-smtp-client-edit.component-mIB-Osk1.mjs → ngx-histaff-alpha-sys-smtp-client-edit.component-DCPYpHfZ.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-sys-smtp-client-edit.component-mIB-Osk1.mjs.map → ngx-histaff-alpha-sys-smtp-client-edit.component-DCPYpHfZ.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-sys-smtp-client.component-CpjLNlDf.mjs → ngx-histaff-alpha-sys-smtp-client.component-zKJIga4y.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-sys-smtp-client.component-CpjLNlDf.mjs.map → ngx-histaff-alpha-sys-smtp-client.component-zKJIga4y.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-template-list.component-DkpwpVtl.mjs → ngx-histaff-alpha-template-list.component-DLIfHA1H.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-template-list.component-DkpwpVtl.mjs.map → ngx-histaff-alpha-template-list.component-DLIfHA1H.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-BuflxM6G.mjs → ngx-histaff-alpha-tracker-studio.component-bR4Pi1OC.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-BuflxM6G.mjs.map → ngx-histaff-alpha-tracker-studio.component-bR4Pi1OC.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-DXX3AiAi.mjs → ngx-histaff-alpha-wf-form-assign.component-B8gCexqB.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-DXX3AiAi.mjs.map → ngx-histaff-alpha-wf-form-assign.component-B8gCexqB.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-wf-global-config.component-Bcw-OGSl.mjs → ngx-histaff-alpha-wf-global-config.component-BXnKQRco.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-wf-global-config.component-Bcw-OGSl.mjs.map → ngx-histaff-alpha-wf-global-config.component-BXnKQRco.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-DbXIl9A3.mjs → ngx-histaff-alpha-wf-instance-status.component-Dtw4jCXX.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-DbXIl9A3.mjs.map → ngx-histaff-alpha-wf-instance-status.component-Dtw4jCXX.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-B0BfjFkc.mjs → ngx-histaff-alpha-wf-instance-step-react.component-B_-eVG-g.mjs} +3 -3
- package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-B0BfjFkc.mjs.map → ngx-histaff-alpha-wf-instance-step-react.component-B_-eVG-g.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-wf-lab.component-DwC3jjAJ.mjs → ngx-histaff-alpha-wf-lab.component-pOZ3t_YF.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-wf-lab.component-DwC3jjAJ.mjs.map → ngx-histaff-alpha-wf-lab.component-pOZ3t_YF.mjs.map} +1 -1
- package/fesm2022/ngx-histaff-alpha.mjs +1 -1
- package/lib/app/libraries/core-org-param-dropdown/core-org-param-dropdown.component.d.ts +4 -5
- package/package.json +2 -2
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { t as CanDeactivateGuard } from './ngx-histaff-alpha-ngx-histaff-alpha-
|
|
1
|
+
import { t as CanDeactivateGuard } from './ngx-histaff-alpha-ngx-histaff-alpha-DhuO-m8o.mjs';
|
|
2
2
|
|
|
3
3
|
const wfDesignWrapperRoutes = [
|
|
4
4
|
{
|
|
5
5
|
path: '',
|
|
6
|
-
loadComponent: () => import('./ngx-histaff-alpha-design-wrapper.component-
|
|
6
|
+
loadComponent: () => import('./ngx-histaff-alpha-design-wrapper.component-DciAa4Ac.mjs').then(m => m.DesignWrapperComponent),
|
|
7
7
|
canDeactivate: [CanDeactivateGuard],
|
|
8
8
|
children: [
|
|
9
9
|
{
|
|
10
10
|
path: ':id',
|
|
11
11
|
outlet: 'preview',
|
|
12
|
-
loadComponent: () => import('./ngx-histaff-alpha-live-form.component-
|
|
12
|
+
loadComponent: () => import('./ngx-histaff-alpha-live-form.component-CKurce5Q.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent)
|
|
13
13
|
},
|
|
14
14
|
]
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
path: ':id',
|
|
18
|
-
loadComponent: () => import('./ngx-histaff-alpha-live-form.component-
|
|
18
|
+
loadComponent: () => import('./ngx-histaff-alpha-live-form.component-CKurce5Q.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent)
|
|
19
19
|
}
|
|
20
20
|
];
|
|
21
21
|
|
|
22
22
|
export { wfDesignWrapperRoutes };
|
|
23
|
-
//# sourceMappingURL=ngx-histaff-alpha-design-wrapper.route-
|
|
23
|
+
//# sourceMappingURL=ngx-histaff-alpha-design-wrapper.route-z5NnkZEG.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-histaff-alpha-design-wrapper.route-
|
|
1
|
+
{"version":3,"file":"ngx-histaff-alpha-design-wrapper.route-z5NnkZEG.mjs","sources":["../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/design-wrapper/design-wrapper.route.ts"],"sourcesContent":["import { Routes } from '@angular/router';\r\nimport { CanDeactivateGuard } from '../../../guards/can-deactivate.guard';\r\n\r\nexport const wfDesignWrapperRoutes: Routes = [\r\n {\r\n path: '',\r\n loadComponent: () => import('./design-wrapper.component').then(m => m.DesignWrapperComponent),\r\n canDeactivate: [CanDeactivateGuard],\r\n children: [\r\n {\r\n path: ':id',\r\n outlet: 'preview',\r\n loadComponent: () => import('../../core-form-design/live-form/live-form.component').then(m => m.LiveFormComponent)\r\n },\r\n ]\r\n },\r\n {\r\n path: ':id',\r\n loadComponent: () => import('../../core-form-design/live-form/live-form.component').then(m => m.LiveFormComponent)\r\n }\r\n]"],"names":[],"mappings":";;AAGa,MAAA,qBAAqB,GAAW;AACzC,IAAA;AACI,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,aAAa,EAAE,MAAM,OAAO,2DAA4B,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,sBAAsB,CAAC;QAC7F,aAAa,EAAE,CAAC,kBAAkB,CAAC;AACnC,QAAA,QAAQ,EAAE;AACN,YAAA;AACI,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,aAAa,EAAE,MAAM,OAAO,sDAAsD,oCAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB;AACpH,aAAA;AACJ;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,aAAa,EAAE,MAAM,OAAO,sDAAsD,oCAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB;AACpH;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { inject, Component } from '@angular/core';
|
|
3
|
-
import { B as BaseComponent, A as AppService } from './ngx-histaff-alpha-ngx-histaff-alpha-
|
|
3
|
+
import { B as BaseComponent, A as AppService } from './ngx-histaff-alpha-ngx-histaff-alpha-DhuO-m8o.mjs';
|
|
4
4
|
import { finalize } from 'rxjs';
|
|
5
5
|
|
|
6
6
|
class HrmSchemaComponent extends BaseComponent {
|
|
@@ -36,4 +36,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
|
|
|
36
36
|
}] });
|
|
37
37
|
|
|
38
38
|
export { HrmSchemaComponent };
|
|
39
|
-
//# sourceMappingURL=ngx-histaff-alpha-hrm-schema.component-
|
|
39
|
+
//# sourceMappingURL=ngx-histaff-alpha-hrm-schema.component-CjtKMys1.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-histaff-alpha-hrm-schema.component-
|
|
1
|
+
{"version":3,"file":"ngx-histaff-alpha-hrm-schema.component-CjtKMys1.mjs","sources":["../../../projects/ngx-histaff-alpha/src/lib/app/root/hrm-schema/hrm-schema.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/root/hrm-schema/hrm-schema.component.html"],"sourcesContent":["import { AfterViewInit, Component, inject } from '@angular/core';\r\nimport { AppService } from '../../services/app.service';\r\nimport { BaseComponent } from '../../libraries/base-component/base/base.component';\r\nimport { finalize } from 'rxjs';\r\n\r\ninterface SchemaReport {\r\n name: string;\r\n success: boolean;\r\n durationMs: number;\r\n logs: string[];\r\n errors: string[];\r\n}\r\n\r\n@Component({\r\n selector: 'hrm-schema',\r\n imports: [],\r\n templateUrl: './hrm-schema.component.html',\r\n styleUrl: './hrm-schema.component.scss'\r\n})\r\nexport class HrmSchemaComponent extends BaseComponent implements AfterViewInit {\r\n reports: SchemaReport[] = [];\r\n loading: boolean = false;\r\n appService = inject(AppService)\r\n\r\n get maxDuration(): number {\r\n return this.reports.length ? Math.max(...this.reports.map(r => r.durationMs)) : 1;\r\n }\r\n\r\n // Scale bar width as percentage\r\n getWidth(report: SchemaReport): string {\r\n return `${(report.durationMs / this.maxDuration) * 100}%`;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n this.loading = true;\r\n this.subscriptions.push(\r\n this.appService.get('/api/HrmSchemaEssential/SchemaCheck').pipe(\r\n finalize(() => this.loading = false)\r\n ).subscribe(x => {\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n this.reports = x.body.innerBody;\r\n }\r\n })\r\n )\r\n })\r\n }\r\n}\r\n","\r\n<div class=\"container-fluid\">\r\n <div class=\"schema-bar-chart\">\r\n @for (r of reports; track $index) {\r\n <div class=\"schema-bar-row\">\r\n <div class=\"schema-label\">{{ r.name }}</div>\r\n <div class=\"schema-bar-wrapper\">\r\n <div class=\"schema-bar\" [class.success]=\"r.success\" [class.fail]=\"!r.success\" [style.width]=\"getWidth(r)\"\r\n [title]=\"r.durationMs + ' ms\\n' + (r.errors.length ? r.errors.join('; ') : 'OK')\">\r\n {{ r.durationMs }} ms\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>"],"names":[],"mappings":";;;;;AAmBM,MAAO,kBAAmB,SAAQ,aAAa,CAAA;AANrD,IAAA,WAAA,GAAA;;QAOE,IAAO,CAAA,OAAA,GAAmB,EAAE;QAC5B,IAAO,CAAA,OAAA,GAAY,KAAK;AACxB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAyBhC;AAvBC,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC;;;AAInF,IAAA,QAAQ,CAAC,MAAoB,EAAA;AAC3B,QAAA,OAAO,CAAG,EAAA,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,IAAI,GAAG,GAAG;;IAG3D,eAAe,GAAA;QACb,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,IAAI,CAC7D,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CACrC,CAAC,SAAS,CAAC,CAAC,IAAG;AACd,gBAAA,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,GAAG,EAAE;oBAC1D,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS;;aAElC,CAAC,CACH;AACH,SAAC,CAAC;;8GA1BO,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,6FCnB/B,4pBAeM,EAAA,MAAA,EAAA,CAAA,sfAAA,CAAA,EAAA,CAAA,CAAA;;2FDIO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,WACb,EAAE,EAAA,QAAA,EAAA,4pBAAA,EAAA,MAAA,EAAA,CAAA,sfAAA,CAAA,EAAA;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { input, signal, computed, isDevMode, inject, HostListener, ChangeDetectionStrategy, Component, output, ChangeDetectorRef, Injector, effect } from '@angular/core';
|
|
3
|
-
import { B as BaseComponent, ab as EnumImageResolverType, n as CoreWorkflowService, p as CoreFormService, b as AlertService, a as AppConfigService, w as alertOptions, M as MultiLanguageService, e as TranslatePipe, I as ImageErrorResolverDirective, ac as NormalizeHumanNamePipe, T as TooltipDirective, ad as CoreIosSwitcherComponent, c as CoreTerminalSpinnerComponent, d as CorePageHeaderComponent, G as DomService, P as CoreParamControlComponent, y as CoreFormDesignService, V as ApplicationHelpService, _ as JsonService, A as AppService, E as EnumFormBaseContolType, X as EnumCorePageEditMode, $ as EnumCoreButtonVNSCode, o as EnumCoreFormControlSeekerSourceType, W as HotKeysDirective, Y as CoreFormComponent, a8 as JsonSafePipe } from './ngx-histaff-alpha-ngx-histaff-alpha-
|
|
3
|
+
import { B as BaseComponent, ab as EnumImageResolverType, n as CoreWorkflowService, p as CoreFormService, b as AlertService, a as AppConfigService, w as alertOptions, M as MultiLanguageService, e as TranslatePipe, I as ImageErrorResolverDirective, ac as NormalizeHumanNamePipe, T as TooltipDirective, ad as CoreIosSwitcherComponent, c as CoreTerminalSpinnerComponent, d as CorePageHeaderComponent, G as DomService, P as CoreParamControlComponent, y as CoreFormDesignService, V as ApplicationHelpService, _ as JsonService, A as AppService, E as EnumFormBaseContolType, X as EnumCorePageEditMode, $ as EnumCoreButtonVNSCode, o as EnumCoreFormControlSeekerSourceType, W as HotKeysDirective, Y as CoreFormComponent, a8 as JsonSafePipe } from './ngx-histaff-alpha-ngx-histaff-alpha-DhuO-m8o.mjs';
|
|
4
4
|
import { catchError, of, finalize, BehaviorSubject, filter, distinctUntilChanged, tap } from 'rxjs';
|
|
5
5
|
import { NgClass, JsonPipe, NgStyle } from '@angular/common';
|
|
6
6
|
import { RouterLink, Router, ActivatedRoute } from '@angular/router';
|
|
@@ -913,4 +913,4 @@ var liveForm_component = /*#__PURE__*/Object.freeze({
|
|
|
913
913
|
});
|
|
914
914
|
|
|
915
915
|
export { LiveFormComponent as L, RoutingPreviewPanelComponent as R, liveForm_component as l };
|
|
916
|
-
//# sourceMappingURL=ngx-histaff-alpha-live-form.component-
|
|
916
|
+
//# sourceMappingURL=ngx-histaff-alpha-live-form.component-CKurce5Q.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-histaff-alpha-live-form.component-Dsi16fWs.mjs","sources":["../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/routing-preview/routing-preview.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/routing-preview/routing-preview.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/routing-preview-panel/routing-preview-panel.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/routing-preview-panel/routing-preview-panel.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/live-form/live-form.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/live-form/live-form.component.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, effect, HostListener, inject, input, isDevMode, signal, WritableSignal } from '@angular/core';\r\nimport { IRoutingResult } from '../interfaces/IRoutingResult';\r\nimport { TranslatePipe } from '../../../app-pipes/translate.pipe';\r\nimport { BaseComponent } from '../../base-component/base/base.component';\r\nimport { EnumImageResolverType, ImageErrorResolverDirective } from '../../../directives/image-error-resolver.directive';\r\nimport { MultiLanguageService } from '../../../services/multi-language.service';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\nimport { AlertService } from '../../alert/alert.service';\r\nimport { IGenerateWorkflowRoutingRequest } from '../interfaces/IGenerateWorkflowRoutingRequest';\r\nimport { catchError, of, tap, finalize } from 'rxjs';\r\nimport { NormalizeHumanNamePipe } from '../../pipes/normalize-human-name.pipe';\r\nimport { TooltipDirective } from '../../tooltip/tooltip.directive';\r\nimport { alertOptions } from '../../../constants/alertOptions';\r\nimport { CoreIosSwitcherComponent } from '../../core-ios-switcher/core-ios-switcher/core-ios-switcher.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { JsonPipe, NgClass } from '@angular/common';\r\nimport { AppConfigService } from '../../../services/app-config.service';\r\nimport {\r\n trigger,\r\n transition,\r\n style,\r\n animate\r\n} from '@angular/animations';\r\nimport { IInitialDebugSubmitRequest } from '../interfaces/IInitialDebugSubmitRequest';\r\nimport { IRenderWorkflowEmailRequest } from '../interfaces/IRenderWorkflowEmailRequest';\r\nimport { IPlannedActor } from '../interfaces/IPlannedActor';\r\nimport { CoreTerminalSpinnerComponent } from '../../core-terminal-spinner/core-terminal-spinner.component';\r\nimport { CorePageHeaderComponent } from '../../core-page-header/core-page-header/core-page-header.component';\r\nimport { RouterLink } from '@angular/router';\r\nimport { ISubmitResult } from '../interfaces/ISubmitResult';\r\nimport { CoreFormService } from '../../core-form/core-form.service';\r\nimport { IRoutingStep } from '../interfaces/IRoutingStep';\r\nimport { IFormatedResponse } from '../../../interfaces/IFormatedResponse';\r\n\r\n@Component({\r\n selector: 'routing-preview',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n RouterLink,\r\n NgClass,\r\n JsonPipe,\r\n TranslatePipe,\r\n ImageErrorResolverDirective,\r\n NormalizeHumanNamePipe,\r\n TooltipDirective,\r\n CoreIosSwitcherComponent,\r\n CoreTerminalSpinnerComponent,\r\n CorePageHeaderComponent\r\n ],\r\n templateUrl: './routing-preview.component.html',\r\n styleUrl: './routing-preview.component.scss',\r\n animations: [\r\n trigger('fadeToggle', [\r\n transition(':enter', [\r\n style({ opacity: 0 }),\r\n animate('200ms ease-out', style({ opacity: 1 }))\r\n ]),\r\n transition(':leave', [\r\n animate('150ms ease-in', style({ opacity: 0 }))\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class RoutingPreviewComponent extends BaseComponent {\r\n\r\n $previewMode = input<boolean>(true);\r\n $loading = signal(false);\r\n $loadingMessage = signal('');\r\n $backendMessage = signal('');\r\n $submitResult = signal<ISubmitResult | null>(null);\r\n\r\n $submitErrors = computed(() => {\r\n const submitResult = this.$submitResult();\r\n return submitResult?.items.map(x => x.error)\r\n })\r\n\r\n $results: WritableSignal<IRoutingResult[]> = signal([]);\r\n $logExpandedStates: WritableSignal<boolean[]> = signal([]);\r\n $logs: WritableSignal<string[]> = signal([]);\r\n imageResolverType = EnumImageResolverType.AVATAR;\r\n\r\n isDevMode = isDevMode();\r\n\r\n $isDebugMode = signal(false);\r\n $showResolvedSteps = signal(false);\r\n $showEmailPreview = signal(false);\r\n $emailSubject = signal('');\r\n $emailBody = signal('');\r\n\r\n //$resolvedStepsJson = computed(() => JSON.stringify(this.$steps(), null, 2));\r\n\r\n wfs = inject(CoreWorkflowService);\r\n cfs = inject(CoreFormService);\r\n as = inject(AlertService);\r\n public appConfigService = inject(AppConfigService);\r\n\r\n liveForm = this.wfs.liveForm;\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n }\r\n\r\n @HostListener('document:keydown', ['$event'])\r\n handleKeyDown(event: KeyboardEvent) {\r\n if (event.key === 'Escape') {\r\n this.wfs.$showLiveRouting.set(false);\r\n }\r\n }\r\n\r\n getGroupSubmitErrors(index: number): string[] {\r\n if (!this.$submitResult()) return [];\r\n return this.$submitResult()!.items.filter(x => !!x.error && !!x.error.length).map(x => x.error!)\r\n }\r\n\r\n generateRouting(): void {\r\n\r\n const steps = this.wfs.$currentSteps();\r\n\r\n const nameMap = new Map<string, number>();\r\n\r\n for (const step of steps) {\r\n const name = step.name?.trim();\r\n if (!name) continue;\r\n\r\n nameMap.set(name, (nameMap.get(name) ?? 0) + 1);\r\n }\r\n\r\n const duplicateNames = [...nameMap.entries()]\r\n .filter(([_, count]) => count > 1)\r\n .map(([name]) => name);\r\n\r\n if (duplicateNames.length > 0) {\r\n this.as.warn(\r\n `Duplicate step name(s) found: ${duplicateNames.join(\", \")}`,\r\n alertOptions\r\n );\r\n this.wfs.$designActiveTab.set(3);\r\n return;\r\n }\r\n\r\n\r\n if (!this.liveForm.valid) {\r\n this.wfs.liveFormCheckError$.next(true);\r\n setTimeout(() => this.wfs.liveFormCheckError$.next(false), 5000);\r\n this.as.info(\"Please fill required fields\", alertOptions);\r\n return;\r\n }\r\n\r\n if (!this.wfs.$currentFlow()) {\r\n this.as.info(\"No flow detected\", alertOptions);\r\n return;\r\n }\r\n\r\n const request: IGenerateWorkflowRoutingRequest = {\r\n workflowId: this.wfs.$currentFlow()?.id!,\r\n attributes: this.cfs.getAttributesWithWys(this.liveForm),\r\n ___targetEmployees: this.liveForm.get('___targetEmployees')?.getRawValue()\r\n };\r\n\r\n this.$backendMessage.set('');\r\n this.$loading.set(true);\r\n this.$loadingMessage.set(\"Generating routes...\")\r\n\r\n this.wfs.generateRouting(request).pipe(\r\n catchError(err => {\r\n const msg =\r\n err?.error?.message || // API-defined message\r\n err?.message || // Native JS or HttpErrorResponse\r\n err?.statusText || // Fallback\r\n 'An unknown error occurred.';\r\n this.$backendMessage.set(msg);\r\n return of({ ok: false, status: 500, body: { messageCode: msg } as IFormatedResponse});\r\n }),\r\n finalize(() => {\r\n this.$loading.set(false);\r\n this.$loadingMessage.set('');\r\n })\r\n ).subscribe(x => {\r\n\r\n if (x.ok && x.status === 200) {\r\n const body = x.body;\r\n\r\n if (body?.statusCode === 200) {\r\n const inner = body.innerBody;\r\n\r\n this.$logs.set(inner.logs ?? []);\r\n\r\n const backendResults = inner.results as IRoutingResult[];\r\n\r\n const validResults: IRoutingResult[] = [];\r\n const allErrors: string[] = [];\r\n\r\n for (const result of backendResults) {\r\n const { targetEmployeeId, targetEmployeeFullName, error, response } = result;\r\n\r\n if (error || !response) {\r\n allErrors.push(`🚫 Employee ${targetEmployeeId} (${targetEmployeeFullName}): ${error || 'Unknown error'}`);\r\n continue;\r\n }\r\n\r\n // Ensure deep cloning or normalization if needed\r\n response.steps = response.steps.map(step => ({\r\n id: step.id,\r\n workflowId: step.workflowId,\r\n name: step.name,\r\n type: step.type,\r\n config: step.config,\r\n resolvedActors: step.resolvedActors\r\n }));\r\n\r\n validResults.push(result);\r\n\r\n // Patch latest attributes (or collect per-employee if needed)\r\n this.liveForm.patchValue(response.attributes);\r\n }\r\n\r\n this.$results.set(validResults);\r\n this.$logExpandedStates.set(new Array(validResults.length).fill(false));\r\n this.$backendMessage.set(allErrors.join('\\n'));\r\n\r\n } else {\r\n this.$backendMessage.set(body?.messageCode || 'UNEXPECTED_ERROR');\r\n }\r\n\r\n } else {\r\n this.$backendMessage.set('API_ERROR');\r\n }\r\n });\r\n\r\n }\r\n\r\n initialDebugSubmit(): void {\r\n const request: IInitialDebugSubmitRequest = {\r\n workflowId: this.wfs.$currentFlow()?.id!,\r\n attributes: this.cfs.getAttributesWithWys(this.liveForm), //this.liveForm.getRawValue(),\r\n results: this.$results()\r\n };\r\n\r\n this.$loading.set(true);\r\n this.subscriptions.push(\r\n this.wfs.initialDebugSubmit(request)\r\n .pipe(\r\n catchError(err => {\r\n this.$loading.set(false);\r\n return of({ ok: false, status: 500, body: { messageCode: \"Error\" } });\r\n }),\r\n finalize(() => this.$loading.set(false))\r\n )\r\n .subscribe(x => {\r\n\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n this.$submitResult.set(x.body.innerBody);\r\n }\r\n })\r\n );\r\n }\r\n\r\n\r\n backToLiveForm(): void {\r\n this.wfs.$showLiveRouting.set(false);\r\n }\r\n\r\n onIsDebugModeChange(value: boolean): void {\r\n this.$isDebugMode.set(value);\r\n }\r\n\r\n toggleResolvedSteps(): void {\r\n this.$showResolvedSteps.set(!this.$showResolvedSteps());\r\n }\r\n\r\n\r\n onEmailChange(actor: IPlannedActor, email: string): void {\r\n this.$results.update(current => {\r\n current.forEach(stepGroup => {\r\n stepGroup.response?.steps.forEach(step => {\r\n step.resolvedActors\r\n .filter(a => a.employeeId === actor.employeeId)\r\n .forEach(a => a.email = email);\r\n });\r\n });\r\n return current;\r\n });\r\n }\r\n\r\n copy(value: string | number | undefined | null): void {\r\n if (!value) return;\r\n navigator.clipboard.writeText(value.toString()).then(() => {\r\n this.as.success('Copied!', alertOptions);\r\n });\r\n }\r\n\r\n toggleLog(index: number): void {\r\n this.$logExpandedStates.update(arr => {\r\n const newArr = [...arr];\r\n newArr[index] = !newArr[index];\r\n return newArr;\r\n });\r\n }\r\n\r\n isLogVisible(index: number): boolean {\r\n return this.$logExpandedStates()?.[index] ?? false;\r\n }\r\n\r\n onActorToolClick(step: IRoutingStep,actor: IPlannedActor): void {\r\n const results = this.$results();\r\n results.forEach(r => {\r\n r.response.steps.forEach(s => {\r\n s.resolvedActors.forEach(a => {\r\n if (!(s.id === step.id && a.employeeId === actor.employeeId)) {\r\n a.debugToolOpen = false;\r\n } else {\r\n a.debugToolOpen = !a.debugToolOpen;\r\n }\r\n })\r\n })\r\n })\r\n this.$results.set(results);\r\n }\r\n\r\n getLogLinesFor(index: number): string[] {\r\n const logs = this.$logs();\r\n const prefix = `on behalf of`;\r\n const match = `#${index}`;\r\n return logs.filter(line => line.includes(prefix) ? line.includes(match) : true);\r\n }\r\n\r\n getCorrelationId(result: IRoutingResult): string | null {\r\n const filter = this.$submitResult()?.items?.filter(i => i.employeeId == result.targetEmployeeId);\r\n if (!!filter && !!filter.length) {\r\n return filter[0].correlationId;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n previewEmail(templateType: 'SUBMIT' | 'REACT' | 'FULLY_APPROVE' | 'REJECT' | 'CANCEL' | 'TERMINATE' | 'REVOKE' | 'CC', correlationId: string, actorFullName: string): void {\r\n if (!this.wfs.$currentFlow()) {\r\n return;\r\n }\r\n const request: IRenderWorkflowEmailRequest = {\r\n workflowId: this.wfs.$currentFlow()!.id,\r\n templateType,\r\n correlationId,\r\n actorFullName\r\n }\r\n\r\n this.$loading.set(true);\r\n this.subscriptions.push(\r\n this.wfs.generatePreviewEmail(request)\r\n .pipe(\r\n finalize(() => this.$loading.set(false))\r\n )\r\n .subscribe(x => {\r\n if (x.ok && x.body?.statusCode === 200) {\r\n this.$emailSubject.set(x.body.innerBody.subject)\r\n this.$emailBody.set(x.body.innerBody.body)\r\n this.$showEmailPreview.set(true);\r\n }\r\n })\r\n )\r\n }\r\n\r\n onCloseEmailPreview(): void {\r\n this.$showEmailPreview.set(false);\r\n }\r\n\r\n}","<div class=\"routing-preview-container inter-font p-relative\">\r\n\r\n <div class=\"correlation-id\">\r\n </div>\r\n\r\n <div class=\"routing-preview-header\">\r\n\r\n <div class=\"button-group\">\r\n <button type=\"button\" class=\"btn btn-primary h35\" (click)=\"backToLiveForm()\">Back to Form (ESC)</button>\r\n <button type=\"button\" class=\"btn btn-secondary h35\" (click)=\"generateRouting()\">Generate</button>\r\n <button @fadeToggle type=\"button\" class=\"btn btn-primary h35\" (click)=\"initialDebugSubmit()\">Submit</button>\r\n </div>\r\n\r\n @if (!!appConfigService.WORKFLOW_ENABLE_DEBUG_MODE) {\r\n <div class=\"debug-group\">\r\n <label>Debug mode</label>\r\n <core-ios-switcher [width]=\"45\" [showOnOffText]=\"false\" [ngModel]=\"$isDebugMode()\"\r\n (ngModelChange)=\"onIsDebugModeChange($event)\"></core-ios-switcher>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"workflows-wrapper\">\r\n @if ($loading()) {\r\n <core-terminal-spinner /><span>Generating...</span>\r\n } @else {\r\n\r\n\r\n @if (!!$results().length) {\r\n\r\n @for (result of $results(); track $index; let resultIndex = $index) {\r\n\r\n <div class=\"result-group mb-8 p-4 rounded bg-white shadow-sm\">\r\n\r\n <div class=\"flex items-center justify-between mb-3\">\r\n <h6 class=\"text-base font-semibold text-sky-700\">Routing for {{ result.targetEmployeeFullName }}</h6>\r\n <div class=\"d-flex d-flex-between\">\r\n <button type=\"button\" class=\"text-xs text-blue-500 underline btn btn-secondary\" (click)=\"toggleLog($index)\">\r\n {{ $logExpandedStates()[ $index ] ? 'Hide log' : 'Show log' }}\r\n </button>\r\n @if ($loading()) {\r\n <core-terminal-spinner />\r\n }\r\n @for (result of $submitResult()?.items || []; track result.employeeId) {\r\n <div class=\"saga-link d-flex d-flex-start\">\r\n <label>{{ result.employeeFullName }}:</label>\r\n\r\n @if (result.correlationId) {\r\n <a class=\"external-link\" [routerLink]=\"['/root/workflow/status', result.correlationId]\">\r\n ✅ Click to see status\r\n </a>\r\n } @else {\r\n <span class=\"text-danger d-flex flex-column\">\r\n @for (line of (result.error?.split('\\n') || []); track line) {\r\n <div>❌ {{ line }}</div>\r\n }\r\n </span>\r\n }\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"workflow-wrapper\">\r\n\r\n @for (step of result.response.steps! ?? []; track step.id) {\r\n <div class=\"step-column\" [attr.data-actor-count]=\"step.resolvedActors?.length || 0\">\r\n\r\n <div class=\"step-column-aux\">\r\n\r\n <div class=\"step-header {{ step.type.toLowerCase() }}\"\r\n [ngClass]=\"(step.actorResolvedStatus ?? 'RESOLVED').toLowerCase()\">\r\n {{ step.name | translate : lang }} {{ step.config?.routingLogic }}\r\n </div>\r\n\r\n @for (actor of step.resolvedActors; track $index) {\r\n <div class=\"actor-card-aux\">\r\n <div class=\"actor-card d-flex d-flex-start {{ step.type.toLowerCase() }}\">\r\n <div class=\"avatar-wrapper\">\r\n <img [src]=\"actor.avatar\" appImageErrorResolver [type]=\"imageResolverType\"\r\n [isFemale]=\"!!actor.isFemale!\" class=\"actor-avatar\" alt=\"{{ actor.fullName }}\" />\r\n @if ($isDebugMode() && !!$submitResult() && !!$submitResult()?.items) {\r\n <div @fadeToggle class=\"actor-tool\" [appTooltip]=\"!actor.debugToolOpen ? 'Dubug tool' : ''\" [position]=\"'right'\" (click)=\"onActorToolClick(step, actor)\">\r\n <i class=\"feather-more-horizontal\"></i>\r\n @if (!!actor.debugToolOpen) {\r\n <ul class=\"actor-tool-list\">\r\n @switch (step.type) {\r\n @case ('Submit') {\r\n <li (click)=\"previewEmail('SUBMIT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Submit email</li>\r\n }\r\n @case ('CC') {\r\n <li (click)=\"previewEmail('CC', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview CC email</li>\r\n }\r\n @case ('Approval') {\r\n <li (click)=\"previewEmail('REACT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview React email</li>\r\n }\r\n @case ('End') {\r\n <li (click)=\"previewEmail('FULLY_APPROVE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview FullyAppoved email</li>\r\n <li (click)=\"previewEmail('REJECT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Rejected email</li>\r\n <li (click)=\"previewEmail('CANCEL', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Cancelled email</li>\r\n <li (click)=\"previewEmail('TERMINATE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Terminated email</li>\r\n <li (click)=\"previewEmail('REVOKE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Revoked email</li>\r\n }\r\n }\r\n </ul>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <div class=\"actor-details\">\r\n <div class=\"actor-line\">\r\n <i class=\"feather-user\"></i>\r\n <span class=\"actor-full-name\" [appTooltip]=\"actor.fullName\">{{ actor.fullName | normalizeHumanName\r\n }}</span>\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-briefcase\"></i>\r\n <span [appTooltip]=\"actor.jobName\">{{ actor.jobName }}</span>\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-mail\"></i>\r\n @if ($isDebugMode()) {\r\n <input @fadeToggle class=\"email-debug-input\" type=\"email\" [(ngModel)]=\"actor.email\"\r\n (ngModelChange)=\"onEmailChange(actor, $event)\" placeholder=\"Enter demo email\" />\r\n } @else {\r\n <span [appTooltip]=\"actor.email\">{{ actor.email }}</span>\r\n }\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-hash\"></i>\r\n <span @fadeToggle [appTooltip]=\"actor.employeeCode\">{{ actor.employeeCode }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (!!$submitErrors() && !!$submitErrors()!.length) {\r\n <pre>\r\n <span>{{ $submitErrors()![$index] }}</span>\r\n </pre>\r\n }\r\n\r\n @if (isLogVisible($index)) {\r\n <pre class=\"employee-log mt-4 bg-gray-50 p-3 rounded text-xs font-mono text-gray-800\">\r\n @for (line of getLogLinesFor($index); track $index) {\r\n {{ line }}\r\n }\r\n </pre>\r\n }\r\n\r\n </div>\r\n\r\n }\r\n\r\n } @else if (!!$backendMessage()) {\r\n\r\n <div class=\"backend-message error-list bg-red-50 rounded p-4 text-sm text-red-800 leading-relaxed\">\r\n @for (line of $backendMessage().split('\\n'); track $index) {\r\n <div class=\"error-item flex items-start gap-2\">\r\n <i class=\"feather-alert-circle text-red-600 mt-0.5\"></i>\r\n <span [innerText]=\"line\"></span>\r\n </div>\r\n }\r\n </div>\r\n\r\n } @else {\r\n No routing steps found.\r\n }\r\n\r\n\r\n }\r\n\r\n </div>\r\n\r\n @if ($showResolvedSteps()) {\r\n <h5>Resolved steps</h5>\r\n <div class=\"resolved-steps\">\r\n <!-- <pre>{{ $resolvedStepsJson() }}</pre> -->\r\n </div>\r\n }\r\n\r\n @if ($showEmailPreview()) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root\">\r\n <div class=\"email-preview\">\r\n <div class=\"email-header\">\r\n PREVIEW\r\n <div class=\"close-wrapper\">\r\n <i class=\"feather-x\" (click)=\"onCloseEmailPreview()\"></i>\r\n </div>\r\n </div>\r\n <div class=\"email-subject\" [innerHtml]=\"$emailSubject()\"></div>\r\n <div class=\"email-body\" [innerHtml]=\"$emailBody()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>","import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';\r\nimport { BaseComponent } from '../../base-component/base/base.component';\r\nimport { CoreParamControlComponent } from '../../core-param-control/core-param-control/core-param-control.component';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\nimport { DomService } from '../../services/dom.service';\r\nimport { NgStyle } from '@angular/common';\r\nimport { MultiLanguageService } from '../../../services/multi-language.service';\r\nimport { AlertService } from '../../alert/alert.service';\r\nimport { RoutingPreviewComponent } from '../routing-preview/routing-preview.component';\r\n\r\n@Component({\r\n selector: 'routing-preview-panel',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n NgStyle,\r\n CoreParamControlComponent,\r\n RoutingPreviewComponent\r\n ],\r\n templateUrl: './routing-preview-panel.component.html',\r\n styleUrl: './routing-preview-panel.component.scss'\r\n})\r\nexport class RoutingPreviewPanelComponent extends BaseComponent {\r\n\r\n $minWidth = input<number | undefined>();\r\n\r\n public wfs = inject(CoreWorkflowService);\r\n ds = inject(DomService);\r\n as = inject(AlertService);\r\n\r\n employeeId: number | undefined = undefined;\r\n\r\n seekerClick$ = new BehaviorSubject<any>(0);\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n this.subscriptions.forEach(x => x?.unsubscribe());\r\n }\r\n\r\n}\r\n","<div class=\"routing-preview-panel-container\" [ngStyle]=\"{\r\n minWidth: $minWidth() ? $minWidth() + 'px' : 'unset'\r\n}\">\r\n \r\n <!-- <div class=\"param-wrapper\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"generateRouting()\">Generate Routing</button>\r\n </div> -->\r\n\r\n <routing-preview />\r\n \r\n\r\n <!-- <div class=\"graph-wrapper\">\r\n <svg id=\"routing-graph\" width=\"100%\"></svg>\r\n </div> -->\r\n\r\n</div>","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, Injector, inject, input, isDevMode, output, signal, effect, WritableSignal } from '@angular/core';\r\nimport { CorePageHeaderComponent } from '../../core-page-header/core-page-header/core-page-header.component';\r\nimport { CoreFormComponent } from '../../core-form/core-form/core-form.component';\r\nimport { BehaviorSubject, catchError, distinctUntilChanged, filter, finalize, of, tap } from 'rxjs';\r\nimport { EnumCorePageEditMode } from '../../core-page-edit/EnumCorePageEditMode';\r\nimport { CoreFormDesignService } from '../core-form-design.service';\r\nimport { TranslatePipe } from '../../../app-pipes/translate.pipe';\r\nimport { NgStyle } from '@angular/common';\r\nimport { BaseComponent } from '../../base-component/base/base.component';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { CoreWorkflowService } from '../../core-workflow-builder/core-workflow.service';\r\nimport { IAfInstance } from '../interfaces';\r\nimport { ICoreFormSection, IFormBaseControl, IValidator } from '../../core-form/core-form/enum-interfaces';\r\nimport { EnumFormBaseContolType } from '../../../enum/EnumFormBaseContolType';\r\nimport { HotKeysDirective } from '../../../directives/hot-keys.directive';\r\nimport { ApplicationHelpService } from '../../../services/application-help.service';\r\nimport { IWfWorkflow } from '../../core-workflow-builder/interfaces/IWfWorkflow';\r\nimport { AlertService } from '../../alert/alert.service';\r\nimport { AppService } from '../../../services/app.service';\r\nimport { MultiLanguageService } from '../../../services/multi-language.service';\r\nimport { RoutingPreviewPanelComponent } from '../../core-workflow-builder/routing-preview-panel/routing-preview-panel.component';\r\nimport { DomService } from '../../services/dom.service';\r\nimport { CoreFormService } from '../../core-form/core-form.service';\r\nimport { alertOptions } from '../../../constants/alertOptions';\r\nimport { AppConfigService } from '../../../services/app-config.service';\r\nimport { JsonService } from '../../../services/json.service';\r\nimport { EnumCoreFormControlSeekerSourceType } from '../../core-form-control-seeker/EnumCoreFormControlSeekerSourceType';\r\nimport { FormGroup, Validators } from '@angular/forms';\r\nimport { EnumCoreButtonVNSCode } from '../../core-button-group-vns/core-button-group-vns/EnumCoreButtonVNSCode';\r\nimport { IWorkflowReactContext } from '../../core-workflow-builder/interfaces/IWorkflowReactContext';\r\nimport { ISubmitResult } from '../../core-workflow-builder/interfaces/ISubmitResult';\r\nimport { IGenerateWorkflowRoutingRequest } from '../../core-workflow-builder/interfaces/IGenerateWorkflowRoutingRequest';\r\nimport { IRoutingResult } from '../../core-workflow-builder/interfaces/IRoutingResult';\r\nimport { ISubmitResponseItem } from '../../core-workflow-builder/interfaces/ISubmitResponseItem';\r\nimport { JsonSafePipe } from '../json-safe.pipe';\r\nimport { IStepFormConfig } from '../../core-workflow-builder/interfaces/IStepConfig';\r\n@Component({\r\n selector: 'live-form',\r\n imports: [\r\n NgStyle,\r\n JsonSafePipe,\r\n HotKeysDirective,\r\n RoutingPreviewPanelComponent,\r\n CorePageHeaderComponent,\r\n CoreFormComponent,\r\n TranslatePipe,\r\n\r\n ],\r\n templateUrl: './live-form.component.html',\r\n styleUrl: './live-form.component.scss'\r\n})\r\nexport class LiveFormComponent extends BaseComponent implements AfterViewInit {\r\n\r\n $designMode = input<boolean>(false);\r\n $forKickOff = input<boolean>();\r\n\r\n $workflowReactContext = input<IWorkflowReactContext | null>(null);\r\n $form = signal<FormGroup | null>(null);\r\n\r\n\r\n $onClose = output();\r\n $loading = signal<boolean>(false);\r\n $showAfInstanceJson = signal<boolean>(false);\r\n $showWfWorkflowJson = signal<boolean>(false);\r\n $logExpandedStates: WritableSignal<boolean[]> = signal([]);\r\n\r\n $backendMessage = signal('');\r\n $loadingMessage = signal('');\r\n $logs = signal<string[]>([]);\r\n $results: WritableSignal<IRoutingResult[]> = signal([]);\r\n\r\n workflowId: string | undefined;\r\n\r\n public coreFormDesignService = inject(CoreFormDesignService);\r\n applicationHelpService = inject(ApplicationHelpService);\r\n ds = inject(DomService);\r\n public wfs = inject(CoreWorkflowService);\r\n fds = inject(CoreFormDesignService);\r\n js = inject(JsonService);\r\n cdr = inject(ChangeDetectorRef);\r\n router = inject(Router);\r\n route = inject(ActivatedRoute);\r\n alertService = inject(AlertService);\r\n appService = inject(AppService);\r\n cfs = inject(CoreFormService);\r\n appConfigService = inject(AppConfigService);\r\n injector = inject(Injector);\r\n\r\n isDevMode = isDevMode();\r\n $previewMode = signal(false);\r\n\r\n $employeeSubmiterId = signal(0);\r\n\r\n simulatedEmployee$ = new BehaviorSubject<any>(null);\r\n\r\n $showLiveRouting = this.wfs.$showLiveRouting;\r\n\r\n\r\n $zIndex = signal(0);\r\n\r\n $reactMode = signal(false);\r\n\r\n $onBehalfMode = computed(() => this.$workflow()?.allowOnBehalf)\r\n\r\n $reactInjectedFieldsAdded = signal(false);\r\n\r\n $effectiveSections = computed<ICoreFormSection[]>(() => {\r\n const raw = this.$inputSections();\r\n\r\n const formUi = this.$workflowReactContext()?.stepFormConfig?.formUi;\r\n if (!formUi) {\r\n console.log(\"[$effectiveSections computed]: formUi was undefined\"); \r\n return raw;\r\n }\r\n\r\n console.log(\"[$effectiveSections computed]: Calling applyFormUi()\", raw, formUi);\r\n return this.applyFormUi(raw, formUi);\r\n\r\n });\r\n\r\n constructor(\r\n public override mls: MultiLanguageService,\r\n private coreFormService: CoreFormService\r\n ) {\r\n super(mls);\r\n\r\n effect(() => {\r\n const context = this.$workflowReactContext();\r\n const form = this.$form();\r\n\r\n if (!context || !form) return;\r\n\r\n try {\r\n\r\n const attributesJson = context.instance.attributesJson;\r\n const formValue = JSON.parse(attributesJson);\r\n\r\n // 🔑 Ensure FormArrays have correct length BEFORE patching\r\n this.cfs.ensureFormArraysMatch(\r\n this.wfs.liveForm,\r\n formValue,\r\n this.cfs.formArrayConfigMap\r\n );\r\n\r\n console.log(\"this.wfs.liveForm.patchValue(formValue)\", formValue);\r\n this.coreFormService.syncAllFormArraysBeforePatch(this.wfs.liveForm, formValue);\r\n this.wfs.liveForm.patchValue(formValue);\r\n\r\n\r\n } catch (err: any) {\r\n if (isDevMode()) {\r\n this.alertService.error(err?.message || \"Error while set value for the context\");\r\n }\r\n }\r\n })\r\n\r\n const navigation = this.router.getCurrentNavigation();\r\n const previewMode = navigation?.extras?.state?.['previewMode'];\r\n this.$previewMode.set(previewMode ?? false);\r\n\r\n this.subscriptions.push(\r\n this.simulatedEmployee$.pipe(\r\n filter(x => !!x)\r\n ).subscribe(x => {\r\n this.wfs.$simulatedEmployee.set(x);\r\n })\r\n )\r\n\r\n this.subscriptions.push(\r\n this.route.params.subscribe(p => {\r\n const rawId = p['id'];\r\n\r\n if (rawId && rawId.includes('___')) {\r\n const parts = rawId.split('___');\r\n\r\n if (parts.length === 4) {\r\n const [workflowId] = parts;\r\n this.workflowId = workflowId;\r\n this.$customButtons.set([\r\n EnumCoreButtonVNSCode.NONE_HEADER_CANCEL,\r\n EnumCoreButtonVNSCode.NONE_HEADER_REJECT,\r\n EnumCoreButtonVNSCode.NONE_HEADER_APPROVE\r\n ])\r\n this.$reactMode.set(true);\r\n this.clearInjectedFields();\r\n // this.makeOriginReadonly();\r\n //this.addReactInjectedFields();\r\n }\r\n } else {\r\n\r\n this.$reactMode.set(false);\r\n\r\n this.$customButtons.set([\r\n EnumCoreButtonVNSCode.NONE_HEADER_CANCEL,\r\n EnumCoreButtonVNSCode.NONE_HEADER_SEND\r\n ])\r\n\r\n const preview = this.route.snapshot.queryParamMap.get('preview');\r\n const isPreviewMode = preview === 'true';\r\n if (isPreviewMode) {\r\n // This route is inside the (preview:) outlet\r\n this.workflowId = this.route.parent?.snapshot.params['id'];\r\n } else {\r\n // Not preview mode → Get workflowId from parent route\r\n const id = this.route.snapshot.params['id'];\r\n this.workflowId = id;\r\n }\r\n }\r\n })\r\n );\r\n\r\n }\r\n\r\n generateSubmitDto(): any {\r\n return {};\r\n }\r\n\r\n toggleShowRouting(): void {\r\n if (!this.$showLiveRouting() && !!this.wfs.liveForm.invalid) {\r\n this.alertService.info(\"The form value is invalid\", alertOptions);\r\n this.wfs.liveFormCheckError$.next(true);\r\n setTimeout(() => this.wfs.liveFormCheckError$.next(false), 5000);\r\n return;\r\n }\r\n this.$showLiveRouting.set(!this.$showLiveRouting())\r\n }\r\n\r\n initialSubmit(): void {\r\n const steps = this.wfs.$currentSteps();\r\n\r\n const nameMap = new Map<string, number>();\r\n\r\n for (const step of steps) {\r\n const name = step.name?.trim();\r\n if (!name) continue;\r\n\r\n nameMap.set(name, (nameMap.get(name) ?? 0) + 1);\r\n }\r\n\r\n const duplicateNames = [...nameMap.entries()]\r\n .filter(([_, count]) => count > 1)\r\n .map(([name]) => name);\r\n\r\n if (duplicateNames.length > 0) {\r\n this.alertService.warn(\r\n `Duplicate step name(s) found: ${duplicateNames.join(\", \")}`,\r\n alertOptions\r\n );\r\n this.wfs.$designActiveTab.set(3);\r\n return;\r\n }\r\n\r\n\r\n const form = this.$form();\r\n if (!form || !form.valid) {\r\n const controls = form?.controls ?? {};\r\n const entries = Object.entries(controls);\r\n\r\n const filteredInvalids = entries.filter(([key, ctrl]) => {\r\n if (key === '___submitterEmployeeId') return false; // skip check\r\n return ctrl.invalid;\r\n });\r\n\r\n if (filteredInvalids.length > 0) {\r\n this.wfs.liveFormCheckError$.next(true);\r\n setTimeout(() => this.wfs.liveFormCheckError$.next(false), 5000);\r\n this.alertService.info(\"Please fill required fields\", alertOptions);\r\n return;\r\n }\r\n }\r\n\r\n if (!this.wfs.$currentFlow()) {\r\n this.alertService.info(\"No flow detected\", alertOptions);\r\n return;\r\n }\r\n\r\n const request: IGenerateWorkflowRoutingRequest = {\r\n workflowId: this.wfs.$currentFlow()?.id!,\r\n attributes: this.cfs.getAttributesWithWys(this.$form()!),\r\n ___targetEmployees: this.$form()?.get('___targetEmployees')?.getRawValue()\r\n };\r\n\r\n this.$backendMessage.set('');\r\n this.$loading.set(true);\r\n this.$loadingMessage.set(\"Generating routes...\")\r\n\r\n this.wfs.initialSubmit(request).pipe(\r\n catchError(err => {\r\n const msg =\r\n err?.error?.message || // API-defined message\r\n err?.message || // Native JS or HttpErrorResponse\r\n err?.statusText || // Fallback\r\n 'An unknown error occurred.';\r\n this.$backendMessage.set(msg);\r\n return of({ ok: false, status: 500, body: { messageCode: msg } });\r\n }),\r\n finalize(() => {\r\n this.$loading.set(false);\r\n this.$loadingMessage.set('');\r\n })\r\n ).subscribe(x => {\r\n\r\n if (x.ok && x.status === 200) {\r\n const body = x.body;\r\n\r\n if (body?.statusCode === 200) {\r\n const inner: ISubmitResult = body.innerBody;\r\n\r\n if (!!inner.violations.length) {\r\n if (this.lang === 'en') {\r\n this.alertService.error(inner.violations[0].messageEnglish);\r\n } else {\r\n this.alertService.error(inner.violations[0].messageDefault);\r\n }\r\n }\r\n\r\n this.$logs.set(inner.logs ?? []);\r\n\r\n const backendResults = inner.items as ISubmitResponseItem[];\r\n\r\n const allErrors: string[] = [];\r\n\r\n for (const result of backendResults) {\r\n\r\n const { employeeId, employeeFullName, correlationId, error } = result;\r\n\r\n if (error || !correlationId) {\r\n allErrors.push(`🚫 Employee ${employeeId} (${employeeFullName}): ${error || 'Unknown error'}`);\r\n continue;\r\n }\r\n\r\n }\r\n\r\n this.$backendMessage.set(allErrors.join('\\n'));\r\n\r\n if (!!allErrors.length) {\r\n this.alertService.error(allErrors[0]);\r\n }\r\n\r\n } else {\r\n this.$backendMessage.set(body?.messageCode || 'UNEXPECTED_ERROR');\r\n }\r\n\r\n } else {\r\n this.$backendMessage.set('API_ERROR');\r\n }\r\n });\r\n }\r\n\r\n\r\n // 🔁 Reactive bindings\r\n $inputSections = signal<ICoreFormSection[]>([\r\n {\r\n rows: [\r\n [\r\n {\r\n field: 'id',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'string',\r\n flexSize: 0,\r\n hidden: true,\r\n label: '',\r\n value: ''\r\n }\r\n ]\r\n ]\r\n }\r\n ]);\r\n $workflow = this.wfs.$currentFlow;\r\n $afInstance = signal<IAfInstance | undefined>(undefined);\r\n $customButtons = signal<string[] | undefined>(undefined);\r\n $normalMode = signal<boolean | undefined>(undefined);\r\n $submitApi = signal<string | undefined>(undefined);\r\n\r\n $inputSectionsJson = computed(() => {\r\n const clean = this.js.safeTransform(this.$inputSections()).obj;\r\n return JSON.stringify(clean, null, 2);\r\n })\r\n\r\n //removeSignalKeysDeep = this.coreFormDesignService.removeSignalKeysDeep;\r\n\r\n $afInstanceJson = computed(() => {\r\n const instance = this.$afInstance();\r\n //const cleanedInstance = this.removeSignalKeysDeep(instance).obj; // Remove signals or $ fields\r\n const cleanedInstance = this.js.safeTransform(instance).obj; // Remove signals or $ fields\r\n return JSON.stringify(cleanedInstance, null, 2);\r\n\r\n });\r\n\r\n $wfWorkflowJson = computed(() => {\r\n const workflow = this.$workflow();\r\n //const cleanedInstance = this.removeSignalKeysDeep(workflow).obj; // Remove signals or $ fields\r\n const cleanedInstance = this.js.safeTransform(workflow).obj; // Remove signals or $ fields\r\n return JSON.stringify(cleanedInstance, null, 2);\r\n\r\n });\r\n\r\n mode$: BehaviorSubject<EnumCorePageEditMode> = new BehaviorSubject<EnumCorePageEditMode>(EnumCorePageEditMode.CREATE);\r\n\r\n checkError$ = this.wfs.liveFormCheckError$;\r\n\r\n override ngOnInit(): void {\r\n this.subscriptions.push(\r\n this.mls.lang$.subscribe(x => this.lang = x)\r\n )\r\n\r\n // Get query param ?preview=true\r\n const preview = this.route.snapshot.queryParamMap.get('preview');\r\n const isPreviewMode = preview === 'true';\r\n this.$previewMode.set(isPreviewMode);\r\n\r\n if (isDevMode()) {\r\n this.applicationHelpService.activeKey$.pipe(\r\n distinctUntilChanged()\r\n ).subscribe(x => {\r\n switch (x) {\r\n case 'F3':\r\n this.$showAfInstanceJson.set(true);\r\n break;\r\n case 'F6':\r\n this.$showWfWorkflowJson.set(true);\r\n break\r\n case 'Escape':\r\n this.$showAfInstanceJson.set(false);\r\n this.$showWfWorkflowJson.set(false);\r\n break;\r\n }\r\n })\r\n }\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n\r\n if (!this.$designMode() && !this.$previewMode()) {\r\n\r\n if (!!this.workflowId) {\r\n setTimeout(() => {\r\n\r\n this.subscriptions.push(\r\n this.wfs.loadWorkflowWithAfInstance(this.workflowId!).pipe(\r\n tap(_ => this.$loading.set(true)),\r\n catchError(err => {\r\n return of(err)\r\n }),\r\n finalize(() => this.$loading.set(false))\r\n\r\n ).subscribe(x => {\r\n this.$loading.set(false);\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n const workflow: IWfWorkflow = x.body.innerBody;\r\n\r\n this.$workflow.set(workflow);\r\n\r\n if (workflow.afInstanceDTO) {\r\n const afInstanceDto = workflow.afInstanceDTO;\r\n const instance = this.coreFormDesignService.mapFromAfInstanceDTO(afInstanceDto);\r\n\r\n instance.sections = this.coreFormDesignService.toCoreFormSections(instance.formDesignSections)\r\n\r\n this.$afInstance.set(instance);\r\n\r\n console.log(\"this.$inputSections being merged wuth:\", instance.sections);\r\n\r\n this.$inputSections.set([...instance.sections, ...this.$inputSections()]);\r\n\r\n this.$normalMode.set(instance.normalMode);\r\n this.$submitApi.set(instance.submitApi);\r\n\r\n this.coreFormDesignService.$afInstance.set(instance);\r\n\r\n this.clearInjectedFields();\r\n\r\n if (!this.$reactMode()) {\r\n this.addKickOffInjectedFields();\r\n }\r\n\r\n }\r\n\r\n }\r\n })\r\n )\r\n\r\n })\r\n }\r\n\r\n } else {\r\n\r\n this.$afInstance.set(this.coreFormDesignService.$afInstance());\r\n console.log(\"sections in ngAfterViewInit when !this.workflowId, being set\", this.coreFormDesignService.$afInstance().sections)\r\n this.$inputSections.set(this.coreFormDesignService.$afInstance().sections ?? []);\r\n this.$customButtons.set(this.coreFormDesignService.$afInstance().customFormButtonItems ?? []);\r\n this.$normalMode.set(this.coreFormDesignService.$afInstance().normalMode);\r\n this.$submitApi.set(this.coreFormDesignService.$afInstance().submitApi);\r\n\r\n this.clearInjectedFields();\r\n if (this.$reactMode()) {\r\n //this.addReactInjectedFields();\r\n } else {\r\n this.addKickOffInjectedFields();\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n onLiveFormCreated(e: any): void {\r\n const form: FormGroup = e.formGroup;\r\n this.$form.set(form);\r\n this.wfs.liveForm = form;\r\n\r\n if (!this.$reactMode()) {\r\n this.wfs.liveForm.get('___submitOnBehalf')?.valueChanges.subscribe(x => {\r\n const inputSections = this.$inputSections();\r\n const targetCtrl = this.coreFormService.getFormBaseControlByName(inputSections, '___targetEmployees');\r\n\r\n if (targetCtrl) {\r\n targetCtrl.hidden = !x;\r\n this.$inputSections.set([...inputSections]);\r\n\r\n // Optional: restore current form values without triggering another valueChanges loop\r\n const currentValue = this.cfs.getAttributesWithWys(this.wfs.liveForm);\r\n console.log(\"onLiveFormCreated\", currentValue)\r\n setTimeout(() => {\r\n this.wfs.liveForm.patchValue({\r\n ___submitOnBehalf: x // ensure value stays intact\r\n }, { emitEvent: false });\r\n if (!x && targetCtrl) {\r\n this.wfs.liveForm.patchValue({ ___targetEmployees: null }, { emitEvent: false });\r\n }\r\n });\r\n }\r\n });\r\n\r\n }\r\n\r\n }\r\n\r\n onLiveSubmit(e: any): void {\r\n\r\n if (!this.wfs.liveForm.valid) {\r\n this.checkError$.next(true);\r\n return;\r\n }\r\n\r\n if (!!this.$submitApi()) {\r\n const payload = this.generateSubmitDto();\r\n\r\n this.$loading.set(true);\r\n this.subscriptions.push(\r\n this.appService.postFullUrl(this.$submitApi()!, payload).pipe(\r\n catchError(err => {\r\n this.$loading.set(false);\r\n return of(err);\r\n })\r\n ).subscribe(x => {\r\n this.$loading.set(false);\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n // MILESTONE!\r\n }\r\n })\r\n )\r\n\r\n }\r\n }\r\n\r\n onClose(): void {\r\n if (this.$designMode()) {\r\n this.$onClose.emit();\r\n } else {\r\n if (!!this.$afInstance()?.normalMode) {\r\n\r\n } else {\r\n if (this.$previewMode()) {\r\n this.router.navigate(\r\n [\r\n {\r\n outlets: { preview: null }\r\n }\r\n ],\r\n { relativeTo: this.route.parent }\r\n );\r\n } else {\r\n this.router.navigate([\r\n '/root/workflow/workflow-consume',\r\n { outlets: { workflowConsume: null } }\r\n ]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n addKickOffInjectedFields(): void {\r\n\r\n const workflow = this.$workflow();\r\n const current = this.$inputSections();\r\n const sections = [...current];\r\n\r\n sections.push({\r\n rows: [\r\n [\r\n {\r\n field: '___submitterEmployeeId',\r\n flexSize: 12,\r\n type: 'number',\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n getByIdApi: '',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n label: 'Simulated Requester',\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n value: null,\r\n validators: [\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: 'Simulated ___submitterEmployeeId required'\r\n }\r\n ]\r\n },]\r\n ]\r\n })\r\n\r\n if (!!workflow && !!workflow.allowCustomCc) {\r\n sections.push({\r\n rows:\r\n [\r\n [\r\n {\r\n field: \"___customCcs\",\r\n type: \"text\",\r\n value: '',\r\n label: \"UI_FORM_CONTROL_LABEL.CUSTOM_CCS\",\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n textareaRows: 3,\r\n validators: [\r\n {\r\n name: 'pattern',\r\n validator: Validators.pattern(\r\n /^(\\s*[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}\\s*;)*\\s*[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}\\s*$/\r\n ),\r\n errorMessage: \"Please enter a list of email addresses separated by semicolons (;)\"\r\n }\r\n ]\r\n }\r\n ]\r\n\r\n ]\r\n })\r\n }\r\n\r\n if (!!this.$onBehalfMode()) {\r\n\r\n sections.push({\r\n rows:\r\n [\r\n [\r\n {\r\n field: \"___submitOnBehalf\",\r\n type: \"boolean\",\r\n hint: 'If enabled, users can submit this workflow request on behalf of other employees.',\r\n value: '',\r\n label: \"UI_FORM_CONTROL_LABEL.SUBMIT_ON_BEHALF\",\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CHECKBOX,\r\n }\r\n ],\r\n [\r\n {\r\n field: \"___targetEmployees\",\r\n type: \"object\",\r\n value: null,\r\n label: \"UI_FORM_CONTROL_LABEL.TARGET_EMPLOYEES\",\r\n hidden: true,\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n multiMode: true,\r\n }\r\n ],\r\n ]\r\n })\r\n\r\n }\r\n\r\n this.$inputSections.set(sections);\r\n\r\n }\r\n\r\n clearInjectedFields(): void {\r\n const original = this.$inputSections();\r\n if (!original || !original.length) return;\r\n\r\n // Tạo bản sao deep để tránh mutate sai\r\n const cleaned = original\r\n .map(section => {\r\n\r\n // deep clone rows\r\n const newRows = (section.rows || [])\r\n .map(row =>\r\n row.filter(ctrl => !ctrl.field.startsWith('___')) // remove injected\r\n )\r\n .filter(row => row.length > 0); // remove empty rows\r\n\r\n // Nếu rows rỗng → bỏ luôn section\r\n if (!newRows.length) return null;\r\n\r\n return {\r\n ...section,\r\n rows: newRows\r\n };\r\n })\r\n .filter(x => x !== null) as any[];\r\n\r\n this.$inputSections.set(cleaned);\r\n }\r\n\r\n react(reactType: string): void {\r\n const context = this.$workflowReactContext();\r\n if (!context) {\r\n this.alertService.error(\"NO_CONTEXT_FOUND\");\r\n return;\r\n }\r\n const { workflow, instance, step, actor } = context;\r\n const unitedCorrelationIds = `${workflow.id}___${instance.correlationId}___${step.id}___${actor.id}`;\r\n const updatedAttributes = this.cfs.getAttributesWithWys(this.$form()!);\r\n\r\n this.$loading.set(true);\r\n this.subscriptions.push(\r\n this.wfs.react(unitedCorrelationIds, reactType, \"\", updatedAttributes).pipe(\r\n catchError(err => {\r\n this.$loading.set(false);\r\n return of(err);\r\n })\r\n ).subscribe(x => {\r\n this.$loading.set(false);\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n\r\n }\r\n })\r\n )\r\n }\r\n\r\n applyFormUi(\r\n sections: ICoreFormSection[],\r\n formUi: IStepFormConfig[\"formUi\"]\r\n ): ICoreFormSection[] {\r\n if (!sections || !formUi) return sections;\r\n\r\n const hidden = formUi.hidden ?? {};\r\n const readonly = formUi.readonly ?? {};\r\n const required = formUi.required ?? {};\r\n\r\n console.log(\"[applyFormUi] hidden\", hidden);\r\n console.log(\"[applyFormUi] readonly\", readonly);\r\n console.log(\"[applyFormUi] required\", required);\r\n\r\n const sectionsTransformed = sections.map(sec => ({\r\n ...sec,\r\n rows: sec.rows.map(row =>\r\n row.map(ctrl => {\r\n const c = { ...ctrl };\r\n const key = c.field;\r\n\r\n // 1) Hidden\r\n if (hidden[key]) {\r\n c.hidden = true;\r\n return c;\r\n }\r\n\r\n // 2) Readonly\r\n if (readonly[key]) {\r\n c.readonly = true;\r\n c.disabled = true;\r\n }\r\n\r\n // 3) Required\r\n if (required[key]) {\r\n c.validators = [\r\n ...(c.validators ?? []),\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: `${c.label ?? c.field} is required`\r\n }\r\n ];\r\n } else {\r\n // remove required if exists (optional)\r\n c.validators = (c.validators ?? []).filter(v => v.name !== 'required');\r\n }\r\n\r\n return c;\r\n })\r\n )\r\n }));\r\n\r\n console.log(\"[applyFormUi] sectionsTransformed\", sectionsTransformed);\r\n\r\n return sectionsTransformed;\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n this.subscriptions.forEach(x => x?.unsubscribe());\r\n this.clearInjectedFields()\r\n }\r\n\r\n\r\n}\r\n","<div class=\"live-form-container\" [hotKeys]=\"['F3', 'F6', 'Escape']\">\r\n\r\n @if ($normalMode()) {\r\n <div class=\"form-wrapper live-form\" [ngStyle]=\"{\r\n width: !!coreFormDesignService.$afInstance().width ? coreFormDesignService.$afInstance().width + 'px' : 'unset'\r\n }\">\r\n <div class=\"live-form-header\">\r\n <core-page-header [title]=\"coreFormDesignService.$afInstance().captionCode | translate : lang\" [hideButtonGroup]=\"true\"></core-page-header>\r\n </div>\r\n\r\n <core-form\r\n [inputSections]=\"$effectiveSections()\"\r\n [customFormButtonItems]=\"$customButtons()!\"\r\n [forceCreateNewForm]=\"true\"\r\n [mode$]=\"mode$\"\r\n [hideButtons]=\"$previewMode()\"\r\n [hideCalculatedSection]=\"true\"\r\n [hideDevSector]=\"true\"\r\n [bottomTemplateRef]=\"bottomTemplateRef\"\r\n [buttonGroupTemplateRef]=\"buttonGroupTemplateRef\"\r\n [checkError$]=\"checkError$\"\r\n (onSubmit)=\"onLiveSubmit($event)\"\r\n (onFormCreated)=\"onLiveFormCreated($event)\"\r\n (onCancal)=\"onClose()\"\r\n />\r\n\r\n @if ($previewMode()) {\r\n <div class=\"show-routing-wrapper\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"toggleShowRouting()\">\r\n {{ $showLiveRouting() ? 'Hide Routing' : 'Show Routing' }}\r\n </button>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"routing-preview-wrapper\" [class.visible]=\"$showLiveRouting()\">\r\n @if ($showLiveRouting()) {\r\n <routing-preview-panel />\r\n }\r\n </div>\r\n\r\n\r\n } @else {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root no-padding\">\r\n\r\n <div class=\"form-wrapper live-form\" [class.d-none]=\"$showLiveRouting()\" [ngStyle]=\"{\r\n width: !!coreFormDesignService.$afInstance().width ? coreFormDesignService.$afInstance().width + 'px' : 'unset'\r\n }\">\r\n\r\n <div class=\"live-form-header\">\r\n <core-page-header [title]=\"coreFormDesignService.$afInstance().captionCode | translate : lang\" [hideButtonGroup]=\"true\" />\r\n <div class=\"preview-close-icon\" (click)=\"onClose()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n\r\n <core-form\r\n [inputSections]=\"$effectiveSections()\"\r\n [customFormButtonItems]=\"$customButtons()!\"\r\n [forceCreateNewForm]=\"true\"\r\n [hideCalculatedSection]=\"true\"\r\n [mode$]=\"mode$\"\r\n [hideButtons]=\"$previewMode()\"\r\n [bottomTemplateRef]=\"bottomTemplateRef\"\r\n [buttonGroupTemplateRef]=\"buttonGroupTemplateRef\"\r\n [hideDevSector]=\"false\"\r\n [checkError$]=\"checkError$\"\r\n (onSubmit)=\"onLiveSubmit($event)\"\r\n (onFormCreated)=\"onLiveFormCreated($event)\"\r\n (onCancal)=\"onClose()\"\r\n />\r\n\r\n <div class=\"submition-wrapper\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"toggleShowRouting()\">\r\n {{ $showLiveRouting() ? 'Hide Routing' : 'Show Routing' }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"initialSubmit()\">\r\n Submit \r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"routing-preview-wrapper\" [class.visible]=\"$showLiveRouting()\">\r\n @if ($showLiveRouting()) {\r\n <div class=\"h50\"></div>\r\n <routing-preview-panel [$minWidth]=\"coreFormDesignService.$afInstance().width\"/>\r\n <div class=\"h50\"></div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <ng-template #bottomTemplateRef>\r\n <!-- <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $inputSectionsJson() }}</pre> -->\r\n <!-- @if (isDevMode) {\r\n <p class=\"dev-hint\">F3/ESC: Show/Hide afInstance | F6/ESC: Show/Hide Workflow</p>\r\n } -->\r\n @if ($showAfInstanceJson()) {\r\n <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $afInstanceJson() }}</pre>\r\n }\r\n @if ($showWfWorkflowJson()) {\r\n <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $wfWorkflowJson() }}</pre>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #buttonGroupTemplateRef>\r\n <div class=\"button-group\">\r\n <div class=\"button-group-left\"></div>\r\n <div class=\"button-group-right\">\r\n @if ($reactMode()) {\r\n @if (true) {\r\n <button type=\"button\" class=\"btn btn-secondary\">Cancel</button> \r\n }\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"react('REJECTED')\">Reject</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"react('APPROVED')\">Approve</button>\r\n } @else {\r\n <button type=\"button\" class=\"btn btn-secondary\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\">Send Request</button>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n</div>"],"names":["i1.MultiLanguageService","i2.CoreFormService"],"mappings":";;;;;;;;;;AAgEM,MAAO,uBAAwB,SAAQ,aAAa,CAAA;AAmCxD,IAAA,WAAA,CAA4B,GAAyB,EAAA;QACnD,KAAK,CAAC,GAAG,CAAC;QADgB,IAAG,CAAA,GAAA,GAAH,GAAG;AAjC/B,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAU,IAAI,CAAC;AACnC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;AACxB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC;AAC5B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC;AAC5B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAuB,IAAI,CAAC;AAElD,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,YAAA,OAAO,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;AAC9C,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,QAAQ,GAAqC,MAAM,CAAC,EAAE,CAAC;AACvD,QAAA,IAAA,CAAA,kBAAkB,GAA8B,MAAM,CAAC,EAAE,CAAC;AAC1D,QAAA,IAAA,CAAA,KAAK,GAA6B,MAAM,CAAC,EAAE,CAAC;AAC5C,QAAA,IAAA,CAAA,iBAAiB,GAAG,qBAAqB,CAAC,MAAM;QAEhD,IAAS,CAAA,SAAA,GAAG,SAAS,EAAE;AAEvB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC;AAClC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC;AACjC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC;;AAIvB,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC;AAC7B,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC;AAClB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAElD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;;AAO5B,IAAA,aAAa,CAAC,KAAoB,EAAA;AAChC,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC1B,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;;;AAIxC,IAAA,oBAAoB,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AAAE,YAAA,OAAO,EAAE;AACpC,QAAA,OAAO,IAAI,CAAC,aAAa,EAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAM,CAAC;;IAGlG,eAAe,GAAA;QAEb,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAEtC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB;AAEzC,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;AAC9B,YAAA,IAAI,CAAC,IAAI;gBAAE;AAEX,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;QAGjD,MAAM,cAAc,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE;AACzC,aAAA,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,KAAK,GAAG,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAExB,QAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,EAAE,CAAC,IAAI,CACV,iCAAiC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,EAC5D,YAAY,CACb;YACD,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YAChC;;AAIF,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;YACxB,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;AACvC,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;YAChE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,6BAA6B,EAAE,YAAY,CAAC;YACzD;;QAGF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE;YAC5B,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,YAAY,CAAC;YAC9C;;AAGF,QAAA,MAAM,OAAO,GAAoC;YAC/C,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,EAAG;YACxC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACxD,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,WAAW;SACzE;AAED,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,sBAAsB,CAAC;AAEhD,QAAA,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CACpC,UAAU,CAAC,GAAG,IAAG;YACf,MAAM,GAAG,GACP,GAAG,EAAE,KAAK,EAAE,OAAO;gBACnB,GAAG,EAAE,OAAO;gBACZ,GAAG,EAAE,UAAU;AACf,gBAAA,4BAA4B;AAC9B,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YAC7B,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,GAAG,EAAuB,EAAC,CAAC;AACvF,SAAC,CAAC,EACF,QAAQ,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,SAAC,CAAC,CACH,CAAC,SAAS,CAAC,CAAC,IAAG;YAEd,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,EAAE;AAC5B,gBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI;AAEnB,gBAAA,IAAI,IAAI,EAAE,UAAU,KAAK,GAAG,EAAE;AAC5B,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS;oBAE5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;AAEhC,oBAAA,MAAM,cAAc,GAAG,KAAK,CAAC,OAA2B;oBAExD,MAAM,YAAY,GAAqB,EAAE;oBACzC,MAAM,SAAS,GAAa,EAAE;AAE9B,oBAAA,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE;wBACnC,MAAM,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM;AAE5E,wBAAA,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE;AACtB,4BAAA,SAAS,CAAC,IAAI,CAAC,CAAA,YAAA,EAAe,gBAAgB,CAAA,EAAA,EAAK,sBAAsB,CAAA,GAAA,EAAM,KAAK,IAAI,eAAe,CAAA,CAAE,CAAC;4BAC1G;;;AAIF,wBAAA,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK;4BAC3C,EAAE,EAAE,IAAI,CAAC,EAAE;4BACX,UAAU,EAAE,IAAI,CAAC,UAAU;4BAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,MAAM,EAAE,IAAI,CAAC,MAAM;4BACnB,cAAc,EAAE,IAAI,CAAC;AACtB,yBAAA,CAAC,CAAC;AAEH,wBAAA,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;;wBAGzB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;;AAG/C,oBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC;AAC/B,oBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvE,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;qBAEzC;oBACL,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,kBAAkB,CAAC;;;iBAG9D;AACL,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC;;AAEzC,SAAC,CAAC;;IAIJ,kBAAkB,GAAA;AAChB,QAAA,MAAM,OAAO,GAA+B;YAC1C,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,EAAG;AACxC,YAAA,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxD,YAAA,OAAO,EAAE,IAAI,CAAC,QAAQ;SACvB;AAED,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO;AAChC,aAAA,IAAI,CACH,UAAU,CAAC,GAAG,IAAG;AACf,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YACxB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;AACvE,SAAC,CAAC,EACF,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aAEzC,SAAS,CAAC,CAAC,IAAG;AAEb,YAAA,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,GAAG,EAAE;gBAC1D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;;SAE3C,CAAC,CACL;;IAIH,cAAc,GAAA;QACZ,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGtC,IAAA,mBAAmB,CAAC,KAAc,EAAA;AAChC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;;IAG9B,mBAAmB,GAAA;QACjB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;;IAIzD,aAAa,CAAC,KAAoB,EAAE,KAAa,EAAA;AAC/C,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAG;AAC7B,YAAA,OAAO,CAAC,OAAO,CAAC,SAAS,IAAG;gBAC1B,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACvC,oBAAA,IAAI,CAAC;AACF,yBAAA,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;yBAC7C,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;AAClC,iBAAC,CAAC;AACJ,aAAC,CAAC;AACF,YAAA,OAAO,OAAO;AAChB,SAAC,CAAC;;AAGJ,IAAA,IAAI,CAAC,KAAyC,EAAA;AAC5C,QAAA,IAAI,CAAC,KAAK;YAAE;AACZ,QAAA,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,MAAK;YACxD,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC;AAC1C,SAAC,CAAC;;AAGJ,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,IAAG;AACnC,YAAA,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AAC9B,YAAA,OAAO,MAAM;AACf,SAAC,CAAC;;AAGJ,IAAA,YAAY,CAAC,KAAa,EAAA;QACxB,OAAO,IAAI,CAAC,kBAAkB,EAAE,GAAG,KAAK,CAAC,IAAI,KAAK;;IAGpD,gBAAgB,CAAC,IAAkB,EAAC,KAAoB,EAAA;AACtD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC/B,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAG;YAClB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AAC3B,gBAAA,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,IAAG;AAC3B,oBAAA,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,CAAC,EAAE;AAC5D,wBAAA,CAAC,CAAC,aAAa,GAAG,KAAK;;yBAClB;AACL,wBAAA,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,aAAa;;AAEtC,iBAAC,CAAC;AACJ,aAAC,CAAC;AACJ,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;;AAG5B,IAAA,cAAc,CAAC,KAAa,EAAA;AAC1B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;QACzB,MAAM,MAAM,GAAG,CAAA,YAAA,CAAc;AAC7B,QAAA,MAAM,KAAK,GAAG,CAAI,CAAA,EAAA,KAAK,EAAE;AACzB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;;AAGjF,IAAA,gBAAgB,CAAC,MAAsB,EAAA;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,gBAAgB,CAAC;QAChG,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AAC/B,YAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa;;aACzB;AACL,YAAA,OAAO,IAAI;;;AAIf,IAAA,YAAY,CAAC,YAAwG,EAAE,aAAqB,EAAE,aAAqB,EAAA;QACjK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE;YAC5B;;AAEF,QAAA,MAAM,OAAO,GAAgC;YAC3C,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAG,CAAC,EAAE;YACvC,YAAY;YACZ,aAAa;YACb;SACD;AAED,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,OAAO;AACpC,aAAA,IAAI,CACH,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aAEzC,SAAS,CAAC,CAAC,IAAG;AACb,YAAA,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,GAAG,EAAE;AACtC,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AAChD,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC1C,gBAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;;SAEnC,CAAC,CACH;;IAGH,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;;8GA5SxB,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,kBAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChEpC,0nSA8MM,EDxKF,MAAA,EAAA,CAAA,qpQAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,WAAW,+mBACX,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,OAAO,EAEP,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,aAAa,kDACb,2BAA2B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAC3B,sBAAsB,EACtB,IAAA,EAAA,oBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,uIAChB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,eAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,4BAA4B,EAKlB,QAAA,EAAA,uBAAA,EAAA,CAAA,EAAA,UAAA,EAAA;YACV,OAAO,CAAC,YAAY,EAAE;gBACpB,UAAU,CAAC,QAAQ,EAAE;AACnB,oBAAA,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;oBACrB,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;iBAChD,CAAC;gBACF,UAAU,CAAC,QAAQ,EAAE;oBACnB,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;iBAC/C;aACF;AACF,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEU,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA9BnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EACV,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACP,WAAW;wBACX,UAAU;wBACV,OAAO;wBACP,QAAQ;wBACR,aAAa;wBACb,2BAA2B;wBAC3B,sBAAsB;wBACtB,gBAAgB;wBAChB,wBAAwB;wBACxB,4BAA4B;wBAC5B;qBACD,EAGW,UAAA,EAAA;wBACV,OAAO,CAAC,YAAY,EAAE;4BACpB,UAAU,CAAC,QAAQ,EAAE;AACnB,gCAAA,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gCACrB,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;6BAChD,CAAC;4BACF,UAAU,CAAC,QAAQ,EAAE;gCACnB,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;6BAC/C;yBACF;AACF,qBAAA,EAAA,QAAA,EAAA,0nSAAA,EAAA,MAAA,EAAA,CAAA,qpQAAA,CAAA,EAAA;sFA0CD,aAAa,EAAA,CAAA;sBADZ,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;;AEjFxC,MAAO,4BAA6B,SAAQ,aAAa,CAAA;AAY7D,IAAA,WAAA,CAA4B,GAAyB,EAAA;QACnD,KAAK,CAAC,GAAG,CAAC;QADgB,IAAG,CAAA,GAAA,GAAH,GAAG;QAV/B,IAAS,CAAA,SAAA,GAAG,KAAK,EAAsB;AAEhC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACxC,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AACvB,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC;QAEzB,IAAU,CAAA,UAAA,GAAuB,SAAS;AAE1C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAM,CAAC,CAAC;;IAMjC,WAAW,GAAA;AAClB,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;;8GAjBxC,4BAA4B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,ECtBzC,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,6eAeM,EDAF,MAAA,EAAA,CAAA,8/CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,2EAEP,uBAAuB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKd,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAXxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAChB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA;wBACP,OAAO;wBACP,yBAAyB;wBACzB;AACD,qBAAA,EAAA,QAAA,EAAA,6eAAA,EAAA,MAAA,EAAA,CAAA,8/CAAA,CAAA,EAAA;;;AEiCG,MAAO,iBAAkB,SAAQ,aAAa,CAAA;IAqElD,WACkB,CAAA,GAAyB,EACjC,eAAgC,EAAA;QAExC,KAAK,CAAC,GAAG,CAAC;QAHM,IAAG,CAAA,GAAA,GAAH,GAAG;QACX,IAAe,CAAA,eAAA,GAAf,eAAe;AArEzB,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAU,KAAK,CAAC;QACnC,IAAW,CAAA,WAAA,GAAG,KAAK,EAAW;AAE9B,QAAA,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAA+B,IAAI,CAAC;AACjE,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAmB,IAAI,CAAC;QAGtC,IAAQ,CAAA,QAAA,GAAG,MAAM,EAAE;AACnB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAU,KAAK,CAAC;AACjC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAU,KAAK,CAAC;AAC5C,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAU,KAAK,CAAC;AAC5C,QAAA,IAAA,CAAA,kBAAkB,GAA8B,MAAM,CAAC,EAAE,CAAC;AAE1D,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC;AAC5B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC;AAC5B,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAW,EAAE,CAAC;AAC5B,QAAA,IAAA,CAAA,QAAQ,GAAqC,MAAM,CAAC,EAAE,CAAC;AAIhD,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC5D,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACvD,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;AAChB,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACxC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACnC,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC/B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC;AAC7B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAE3B,IAAS,CAAA,SAAA,GAAG,SAAS,EAAE;AACvB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;AAE5B,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,CAAC,CAAC;AAE/B,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,eAAe,CAAM,IAAI,CAAC;AAEnD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB;AAG5C,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC;AAEnB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC;AAE1B,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC;AAE/D,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,KAAK,CAAC;AAEzC,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAqB,MAAK;AACrD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE;YAEjC,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,EAAE,EAAE,cAAc,EAAE,MAAM;YACnE,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC;AAClE,gBAAA,OAAO,GAAG;;YAGZ,OAAO,CAAC,GAAG,CAAC,sDAAsD,EAAE,GAAG,EAAE,MAAM,CAAC;YAChF,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC;AAEtC,SAAC,CAAC;;QAyOF,IAAc,CAAA,cAAA,GAAG,MAAM,CAAqB;AAC1C,YAAA;AACE,gBAAA,IAAI,EAAE;AACJ,oBAAA;AACE,wBAAA;AACE,4BAAA,KAAK,EAAE,IAAI;4BACX,WAAW,EAAE,sBAAsB,CAAC,OAAO;AAC3C,4BAAA,IAAI,EAAE,QAAQ;AACd,4BAAA,QAAQ,EAAE,CAAC;AACX,4BAAA,MAAM,EAAE,IAAI;AACZ,4BAAA,KAAK,EAAE,EAAE;AACT,4BAAA,KAAK,EAAE;AACR;AACF;AACF;AACF;AACF,SAAA,CAAC;AACF,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY;AACjC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAA0B,SAAS,CAAC;AACxD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAuB,SAAS,CAAC;AACxD,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAsB,SAAS,CAAC;AACpD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAqB,SAAS,CAAC;AAElD,QAAA,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AACjC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,GAAG;YAC9D,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACvC,SAAC,CAAC;;AAIF,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE;;AAEnC,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;YAC5D,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;AAEjD,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AAC9B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE;;AAEjC,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;YAC5D,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;AAEjD,SAAC,CAAC;QAEF,IAAK,CAAA,KAAA,GAA0C,IAAI,eAAe,CAAuB,oBAAoB,CAAC,MAAM,CAAC;AAErH,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB;QAjRxC,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAC5C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;AAEzB,YAAA,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI;gBAAE;AAEvB,YAAA,IAAI;AAEF,gBAAA,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc;gBACtD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;;AAG5C,gBAAA,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAC5B,IAAI,CAAC,GAAG,CAAC,QAAQ,EACjB,SAAS,EACT,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAC5B;AAED,gBAAA,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,SAAS,CAAC;AACjE,gBAAA,IAAI,CAAC,eAAe,CAAC,4BAA4B,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC;gBAC/E,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;;YAGvC,OAAO,GAAQ,EAAE;gBACjB,IAAI,SAAS,EAAE,EAAE;oBACf,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,IAAI,uCAAuC,CAAC;;;AAGtF,SAAC,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE;QACrD,MAAM,WAAW,GAAG,UAAU,EAAE,MAAM,EAAE,KAAK,GAAG,aAAa,CAAC;QAC9D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,IAAI,KAAK,CAAC;QAE3C,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAC1B,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CACjB,CAAC,SAAS,CAAC,CAAC,IAAG;YACd,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;SACnC,CAAC,CACH;AAED,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAG;AAC9B,YAAA,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;YAErB,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;AAEhC,gBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,oBAAA,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK;AAC1B,oBAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,oBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,wBAAA,qBAAqB,CAAC,kBAAkB;AACxC,wBAAA,qBAAqB,CAAC,kBAAkB;AACxC,wBAAA,qBAAqB,CAAC;AACvB,qBAAA,CAAC;AACF,oBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;oBACzB,IAAI,CAAC,mBAAmB,EAAE;;;;;iBAIvB;AAEL,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AAE1B,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtB,oBAAA,qBAAqB,CAAC,kBAAkB;AACxC,oBAAA,qBAAqB,CAAC;AACvB,iBAAA,CAAC;AAEF,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;AAChE,gBAAA,MAAM,aAAa,GAAG,OAAO,KAAK,MAAM;gBACxC,IAAI,aAAa,EAAE;;AAEjB,oBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;;qBACrD;;AAEL,oBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AAC3C,oBAAA,IAAI,CAAC,UAAU,GAAG,EAAE;;;SAGzB,CAAC,CACH;;IAIH,iBAAiB,GAAA;AACf,QAAA,OAAO,EAAE;;IAGX,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE;YAC3D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,2BAA2B,EAAE,YAAY,CAAC;YACjE,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;AACvC,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;YAChE;;QAEF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;;IAGrD,aAAa,GAAA;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAEtC,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB;AAEzC,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;AAC9B,YAAA,IAAI,CAAC,IAAI;gBAAE;AAEX,YAAA,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;QAGjD,MAAM,cAAc,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE;AACzC,aAAA,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,KAAK,GAAG,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAExB,QAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CACpB,iCAAiC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE,EAC5D,YAAY,CACb;YACD,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YAChC;;AAIF,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;QACzB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACxB,YAAA,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,EAAE;YACrC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;AAExC,YAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,KAAI;gBACtD,IAAI,GAAG,KAAK,wBAAwB;oBAAE,OAAO,KAAK,CAAC;gBACnD,OAAO,IAAI,CAAC,OAAO;AACrB,aAAC,CAAC;AAEF,YAAA,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/B,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;AACvC,gBAAA,UAAU,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;gBAChE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,6BAA6B,EAAE,YAAY,CAAC;gBACnE;;;QAIJ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE;YAC5B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,YAAY,CAAC;YACxD;;AAGF,QAAA,MAAM,OAAO,GAAoC;YAC/C,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,EAAG;YACxC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAG,CAAC;AACxD,YAAA,kBAAkB,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,oBAAoB,CAAC,EAAE,WAAW;SACzE;AAED,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,sBAAsB,CAAC;AAEhD,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAClC,UAAU,CAAC,GAAG,IAAG;YACf,MAAM,GAAG,GACP,GAAG,EAAE,KAAK,EAAE,OAAO;gBACnB,GAAG,EAAE,OAAO;gBACZ,GAAG,EAAE,UAAU;AACf,gBAAA,4BAA4B;AAC9B,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YAC7B,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,CAAC;AACnE,SAAC,CAAC,EACF,QAAQ,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,SAAC,CAAC,CACH,CAAC,SAAS,CAAC,CAAC,IAAG;YAEd,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,EAAE;AAC5B,gBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI;AAEnB,gBAAA,IAAI,IAAI,EAAE,UAAU,KAAK,GAAG,EAAE;AAC5B,oBAAA,MAAM,KAAK,GAAkB,IAAI,CAAC,SAAS;oBAE3C,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;AAC7B,wBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE;AACtB,4BAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;;6BACtD;AACL,4BAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;;;oBAI/D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;AAEhC,oBAAA,MAAM,cAAc,GAAG,KAAK,CAAC,KAA8B;oBAE3D,MAAM,SAAS,GAAa,EAAE;AAE9B,oBAAA,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE;wBAEnC,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,MAAM;AAErE,wBAAA,IAAI,KAAK,IAAI,CAAC,aAAa,EAAE;AAC3B,4BAAA,SAAS,CAAC,IAAI,CAAC,CAAA,YAAA,EAAe,UAAU,CAAA,EAAA,EAAK,gBAAgB,CAAA,GAAA,EAAM,KAAK,IAAI,eAAe,CAAA,CAAE,CAAC;4BAC9F;;;AAKJ,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE9C,oBAAA,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE;wBACtB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;;;qBAGlC;oBACL,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,kBAAkB,CAAC;;;iBAG9D;AACL,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC;;AAEzC,SAAC,CAAC;;IAuDK,QAAQ,GAAA;QACf,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAC7C;;AAGD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;AAChE,QAAA,MAAM,aAAa,GAAG,OAAO,KAAK,MAAM;AACxC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC;QAEpC,IAAI,SAAS,EAAE,EAAE;AACf,YAAA,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,IAAI,CACzC,oBAAoB,EAAE,CACvB,CAAC,SAAS,CAAC,CAAC,IAAG;gBACd,QAAQ,CAAC;AACP,oBAAA,KAAK,IAAI;AACP,wBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;wBAClC;AACF,oBAAA,KAAK,IAAI;AACP,wBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;wBAClC;AACF,oBAAA,KAAK,QAAQ;AACX,wBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;AACnC,wBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC;wBACnC;;AAEN,aAAC,CAAC;;;IAKN,eAAe,GAAA;AAEb,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AAE/C,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE;gBACrB,UAAU,CAAC,MAAK;AAEd,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,CAAC,UAAW,CAAC,CAAC,IAAI,CACxD,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EACjC,UAAU,CAAC,GAAG,IAAG;AACf,wBAAA,OAAO,EAAE,CAAC,GAAG,CAAC;qBACf,CAAC,EACF,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAEzC,CAAC,SAAS,CAAC,CAAC,IAAG;AACd,wBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,wBAAA,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,GAAG,EAAE;AAC1D,4BAAA,MAAM,QAAQ,GAAgB,CAAC,CAAC,IAAI,CAAC,SAAS;AAE9C,4BAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AAE5B,4BAAA,IAAI,QAAQ,CAAC,aAAa,EAAE;AAC1B,gCAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa;gCAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,aAAa,CAAC;AAE/E,gCAAA,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,kBAAkB,CAAC;AAE9F,gCAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;gCAE9B,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,QAAQ,CAAC,QAAQ,CAAC;AAExE,gCAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;gCAEzE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;gCACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;gCAEvC,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;gCAEpD,IAAI,CAAC,mBAAmB,EAAE;AAE1B,gCAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;oCACtB,IAAI,CAAC,wBAAwB,EAAE;;;;qBAMtC,CAAC,CACH;AAEH,iBAAC,CAAC;;;aAGC;AAEL,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC;AAC9D,YAAA,OAAO,CAAC,GAAG,CAAC,8DAA8D,EAAE,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;AAC9H,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC;AAChF,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC,qBAAqB,IAAI,EAAE,CAAC;AAC7F,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC;AACzE,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC;YAEvE,IAAI,CAAC,mBAAmB,EAAE;AAC1B,YAAA,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;;;iBAEhB;gBACL,IAAI,CAAC,wBAAwB,EAAE;;;;AAOrC,IAAA,iBAAiB,CAAC,CAAM,EAAA;AACtB,QAAA,MAAM,IAAI,GAAc,CAAC,CAAC,SAAS;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI;AAExB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;AACtB,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC,IAAG;AACrE,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE;AAC3C,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,aAAa,EAAE,oBAAoB,CAAC;gBAErG,IAAI,UAAU,EAAE;AACd,oBAAA,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;oBACtB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC;;AAG3C,oBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACrE,oBAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,YAAY,CAAC;oBAC9C,UAAU,CAAC,MAAK;AACd,wBAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC;4BAC3B,iBAAiB,EAAE,CAAC;AACrB,yBAAA,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACxB,wBAAA,IAAI,CAAC,CAAC,IAAI,UAAU,EAAE;AACpB,4BAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;AAEpF,qBAAC,CAAC;;AAEN,aAAC,CAAC;;;AAMN,IAAA,YAAY,CAAC,CAAM,EAAA;QAEjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3B;;AAGF,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;AACvB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAExC,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAC3D,UAAU,CAAC,GAAG,IAAG;AACf,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,gBAAA,OAAO,EAAE,CAAC,GAAG,CAAC;AAChB,aAAC,CAAC,CACH,CAAC,SAAS,CAAC,CAAC,IAAG;AACd,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,gBAAA,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,GAAG,EAAE;;;aAG7D,CAAC,CACH;;;IAKL,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACtB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;;aACf;YACL,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE;;iBAE/B;AACL,gBAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAClB;AACE,wBAAA;AACE,4BAAA,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI;AACzB;qBACF,EACD,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAClC;;qBACI;AACL,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;wBACnB,iCAAiC;AACjC,wBAAA,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE;AACrC,qBAAA,CAAC;;;;;IAMV,wBAAwB,GAAA;AAEtB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE;AACjC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;AACrC,QAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC;QAE7B,QAAQ,CAAC,IAAI,CAAC;AACZ,YAAA,IAAI,EAAE;AACJ,gBAAA;AACE,oBAAA;AACE,wBAAA,KAAK,EAAE,wBAAwB;AAC/B,wBAAA,QAAQ,EAAE,EAAE;AACZ,wBAAA,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,sBAAsB,CAAC,MAAM;wBAC1C,gBAAgB,EAAE,mCAAmC,CAAC,aAAa;AACnE,wBAAA,UAAU,EAAE,EAAE;AACd,wBAAA,cAAc,EAAE,IAAI,eAAe,CAAM,EAAE,CAAC;AAC5C,wBAAA,KAAK,EAAE,qBAAqB;AAC5B,wBAAA,SAAS,EAAE,IAAI;AACf,wBAAA,SAAS,EAAE,UAAU;AACrB,wBAAA,KAAK,EAAE,IAAI;AACX,wBAAA,UAAU,EAAE;AACV,4BAAA;AACE,gCAAA,IAAI,EAAE,UAAU;gCAChB,SAAS,EAAE,UAAU,CAAC,QAAQ;AAC9B,gCAAA,YAAY,EAAE;AACf;AACF;AACF,qBAAA;AAAE;AACN;AACF,SAAA,CAAC;QAEF,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE;YAC1C,QAAQ,CAAC,IAAI,CAAC;AACZ,gBAAA,IAAI,EACF;AACE,oBAAA;AACE,wBAAA;AACE,4BAAA,KAAK,EAAE,cAAc;AACrB,4BAAA,IAAI,EAAE,MAAM;AACZ,4BAAA,KAAK,EAAE,EAAE;AACT,4BAAA,KAAK,EAAE,kCAAkC;AACzC,4BAAA,QAAQ,EAAE,EAAE;4BACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC5C,4BAAA,YAAY,EAAE,CAAC;AACf,4BAAA,UAAU,EAAE;AACV,gCAAA;AACE,oCAAA,IAAI,EAAE,SAAS;AACf,oCAAA,SAAS,EAAE,UAAU,CAAC,OAAO,CAC3B,gHAAgH,CACjH;AACD,oCAAA,YAAY,EAAE;AACf;AACF;AACF;AACF;AAEF;AACJ,aAAA,CAAC;;AAGJ,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;YAE1B,QAAQ,CAAC,IAAI,CAAC;AACZ,gBAAA,IAAI,EACF;AACE,oBAAA;AACE,wBAAA;AACE,4BAAA,KAAK,EAAE,mBAAmB;AAC1B,4BAAA,IAAI,EAAE,SAAS;AACf,4BAAA,IAAI,EAAE,kFAAkF;AACxF,4BAAA,KAAK,EAAE,EAAE;AACT,4BAAA,KAAK,EAAE,wCAAwC;AAC/C,4BAAA,QAAQ,EAAE,EAAE;4BACZ,WAAW,EAAE,sBAAsB,CAAC,QAAQ;AAC7C;AACF,qBAAA;AACD,oBAAA;AACE,wBAAA;AACE,4BAAA,KAAK,EAAE,oBAAoB;AAC3B,4BAAA,IAAI,EAAE,QAAQ;AACd,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,KAAK,EAAE,wCAAwC;AAC/C,4BAAA,MAAM,EAAE,IAAI;AACZ,4BAAA,QAAQ,EAAE,EAAE;4BACZ,WAAW,EAAE,sBAAsB,CAAC,MAAM;4BAC1C,gBAAgB,EAAE,mCAAmC,CAAC,aAAa;AACnE,4BAAA,SAAS,EAAE,IAAI;AAChB;AACF,qBAAA;AACF;AACJ,aAAA,CAAC;;AAIJ,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;;IAInC,mBAAmB,GAAA;AACjB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE;AACtC,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE;;QAGnC,MAAM,OAAO,GAAG;aACb,GAAG,CAAC,OAAO,IAAG;;YAGb,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE;iBAChC,GAAG,CAAC,GAAG,IACN,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAClD;AACA,iBAAA,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;;YAGjC,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,gBAAA,OAAO,IAAI;YAEhC,OAAO;AACL,gBAAA,GAAG,OAAO;AACV,gBAAA,IAAI,EAAE;aACP;AACH,SAAC;aACA,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAU;AAEnC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC;;AAGlC,IAAA,KAAK,CAAC,SAAiB,EAAA;AACrB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,EAAE;QAC5C,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,kBAAkB,CAAC;YAC3C;;QAEF,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO;AACnD,QAAA,MAAM,oBAAoB,GAAG,CAAA,EAAG,QAAQ,CAAC,EAAE,MAAM,QAAQ,CAAC,aAAa,CAAM,GAAA,EAAA,IAAI,CAAC,EAAE,CAAA,GAAA,EAAM,KAAK,CAAC,EAAE,EAAE;AACpG,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAG,CAAC;AAEtE,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,SAAS,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACzE,UAAU,CAAC,GAAG,IAAG;AACf,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,YAAA,OAAO,EAAE,CAAC,GAAG,CAAC;AAChB,SAAC,CAAC,CACH,CAAC,SAAS,CAAC,CAAC,IAAG;AACd,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,GAAG,EAAE;;SAG7D,CAAC,CACH;;IAGH,WAAW,CACT,QAA4B,EAC5B,MAAiC,EAAA;AAEjC,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,QAAQ;AAEzC,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE;AAClC,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE;AACtC,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE;AAEtC,QAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,MAAM,CAAC;AAC3C,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,QAAQ,CAAC;AAC/C,QAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,QAAQ,CAAC;QAE/C,MAAM,mBAAmB,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK;AAC/C,YAAA,GAAG,GAAG;AACN,YAAA,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IACpB,GAAG,CAAC,GAAG,CAAC,IAAI,IAAG;AACb,gBAAA,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE;AACrB,gBAAA,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK;;AAGnB,gBAAA,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE;AACf,oBAAA,CAAC,CAAC,MAAM,GAAG,IAAI;AACf,oBAAA,OAAO,CAAC;;;AAIV,gBAAA,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;AACjB,oBAAA,CAAC,CAAC,QAAQ,GAAG,IAAI;AACjB,oBAAA,CAAC,CAAC,QAAQ,GAAG,IAAI;;;AAInB,gBAAA,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE;oBACjB,CAAC,CAAC,UAAU,GAAG;AACb,wBAAA,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;AACvB,wBAAA;AACE,4BAAA,IAAI,EAAE,UAAU;4BAChB,SAAS,EAAE,UAAU,CAAC,QAAQ;4BAC9B,YAAY,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAc,YAAA;AAClD;qBACF;;qBACI;;oBAEL,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;;AAGxE,gBAAA,OAAO,CAAC;AACV,aAAC,CAAC;AAEL,SAAA,CAAC,CAAC;AAEH,QAAA,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,mBAAmB,CAAC;AAErE,QAAA,OAAO,mBAAmB;;IAGnB,WAAW,GAAA;AAClB,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC;QACjD,IAAI,CAAC,mBAAmB,EAAE;;8GAlvBjB,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,ECnD9B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,wyKA8HM,EDvFF,MAAA,EAAA,CAAA,6hFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,OAAO,EAEP,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,gBAAgB,EAChB,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,4BAA4B,EAC5B,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,uBAAuB,EACvB,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,YAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,ujBACjB,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAMJ,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAf7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EACZ,OAAA,EAAA;wBACP,OAAO;wBACP,YAAY;wBACZ,gBAAgB;wBAChB,4BAA4B;wBAC5B,uBAAuB;wBACvB,iBAAiB;wBACjB,aAAa;AAEd,qBAAA,EAAA,QAAA,EAAA,wyKAAA,EAAA,MAAA,EAAA,CAAA,6hFAAA,CAAA,EAAA;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"ngx-histaff-alpha-live-form.component-CKurce5Q.mjs","sources":["../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/routing-preview/routing-preview.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/routing-preview/routing-preview.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/routing-preview-panel/routing-preview-panel.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/routing-preview-panel/routing-preview-panel.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/live-form/live-form.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/live-form/live-form.component.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, effect, HostListener, inject, input, isDevMode, signal, WritableSignal } from '@angular/core';\r\nimport { IRoutingResult } from '../interfaces/IRoutingResult';\r\nimport { TranslatePipe } from '../../../app-pipes/translate.pipe';\r\nimport { BaseComponent } from '../../base-component/base/base.component';\r\nimport { EnumImageResolverType, ImageErrorResolverDirective } from '../../../directives/image-error-resolver.directive';\r\nimport { MultiLanguageService } from '../../../services/multi-language.service';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\nimport { AlertService } from '../../alert/alert.service';\r\nimport { IGenerateWorkflowRoutingRequest } from '../interfaces/IGenerateWorkflowRoutingRequest';\r\nimport { catchError, of, tap, finalize } from 'rxjs';\r\nimport { NormalizeHumanNamePipe } from '../../pipes/normalize-human-name.pipe';\r\nimport { TooltipDirective } from '../../tooltip/tooltip.directive';\r\nimport { alertOptions } from '../../../constants/alertOptions';\r\nimport { CoreIosSwitcherComponent } from '../../core-ios-switcher/core-ios-switcher/core-ios-switcher.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { JsonPipe, NgClass } from '@angular/common';\r\nimport { AppConfigService } from '../../../services/app-config.service';\r\nimport {\r\n trigger,\r\n transition,\r\n style,\r\n animate\r\n} from '@angular/animations';\r\nimport { IInitialDebugSubmitRequest } from '../interfaces/IInitialDebugSubmitRequest';\r\nimport { IRenderWorkflowEmailRequest } from '../interfaces/IRenderWorkflowEmailRequest';\r\nimport { IPlannedActor } from '../interfaces/IPlannedActor';\r\nimport { CoreTerminalSpinnerComponent } from '../../core-terminal-spinner/core-terminal-spinner.component';\r\nimport { CorePageHeaderComponent } from '../../core-page-header/core-page-header/core-page-header.component';\r\nimport { RouterLink } from '@angular/router';\r\nimport { ISubmitResult } from '../interfaces/ISubmitResult';\r\nimport { CoreFormService } from '../../core-form/core-form.service';\r\nimport { IRoutingStep } from '../interfaces/IRoutingStep';\r\nimport { IFormatedResponse } from '../../../interfaces/IFormatedResponse';\r\n\r\n@Component({\r\n selector: 'routing-preview',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n RouterLink,\r\n NgClass,\r\n JsonPipe,\r\n TranslatePipe,\r\n ImageErrorResolverDirective,\r\n NormalizeHumanNamePipe,\r\n TooltipDirective,\r\n CoreIosSwitcherComponent,\r\n CoreTerminalSpinnerComponent,\r\n CorePageHeaderComponent\r\n ],\r\n templateUrl: './routing-preview.component.html',\r\n styleUrl: './routing-preview.component.scss',\r\n animations: [\r\n trigger('fadeToggle', [\r\n transition(':enter', [\r\n style({ opacity: 0 }),\r\n animate('200ms ease-out', style({ opacity: 1 }))\r\n ]),\r\n transition(':leave', [\r\n animate('150ms ease-in', style({ opacity: 0 }))\r\n ])\r\n ])\r\n ]\r\n})\r\nexport class RoutingPreviewComponent extends BaseComponent {\r\n\r\n $previewMode = input<boolean>(true);\r\n $loading = signal(false);\r\n $loadingMessage = signal('');\r\n $backendMessage = signal('');\r\n $submitResult = signal<ISubmitResult | null>(null);\r\n\r\n $submitErrors = computed(() => {\r\n const submitResult = this.$submitResult();\r\n return submitResult?.items.map(x => x.error)\r\n })\r\n\r\n $results: WritableSignal<IRoutingResult[]> = signal([]);\r\n $logExpandedStates: WritableSignal<boolean[]> = signal([]);\r\n $logs: WritableSignal<string[]> = signal([]);\r\n imageResolverType = EnumImageResolverType.AVATAR;\r\n\r\n isDevMode = isDevMode();\r\n\r\n $isDebugMode = signal(false);\r\n $showResolvedSteps = signal(false);\r\n $showEmailPreview = signal(false);\r\n $emailSubject = signal('');\r\n $emailBody = signal('');\r\n\r\n //$resolvedStepsJson = computed(() => JSON.stringify(this.$steps(), null, 2));\r\n\r\n wfs = inject(CoreWorkflowService);\r\n cfs = inject(CoreFormService);\r\n as = inject(AlertService);\r\n public appConfigService = inject(AppConfigService);\r\n\r\n liveForm = this.wfs.liveForm;\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n }\r\n\r\n @HostListener('document:keydown', ['$event'])\r\n handleKeyDown(event: KeyboardEvent) {\r\n if (event.key === 'Escape') {\r\n this.wfs.$showLiveRouting.set(false);\r\n }\r\n }\r\n\r\n getGroupSubmitErrors(index: number): string[] {\r\n if (!this.$submitResult()) return [];\r\n return this.$submitResult()!.items.filter(x => !!x.error && !!x.error.length).map(x => x.error!)\r\n }\r\n\r\n generateRouting(): void {\r\n\r\n const steps = this.wfs.$currentSteps();\r\n\r\n const nameMap = new Map<string, number>();\r\n\r\n for (const step of steps) {\r\n const name = step.name?.trim();\r\n if (!name) continue;\r\n\r\n nameMap.set(name, (nameMap.get(name) ?? 0) + 1);\r\n }\r\n\r\n const duplicateNames = [...nameMap.entries()]\r\n .filter(([_, count]) => count > 1)\r\n .map(([name]) => name);\r\n\r\n if (duplicateNames.length > 0) {\r\n this.as.warn(\r\n `Duplicate step name(s) found: ${duplicateNames.join(\", \")}`,\r\n alertOptions\r\n );\r\n this.wfs.$designActiveTab.set(3);\r\n return;\r\n }\r\n\r\n\r\n if (!this.liveForm.valid) {\r\n this.wfs.liveFormCheckError$.next(true);\r\n setTimeout(() => this.wfs.liveFormCheckError$.next(false), 5000);\r\n this.as.info(\"Please fill required fields\", alertOptions);\r\n return;\r\n }\r\n\r\n if (!this.wfs.$currentFlow()) {\r\n this.as.info(\"No flow detected\", alertOptions);\r\n return;\r\n }\r\n\r\n const request: IGenerateWorkflowRoutingRequest = {\r\n workflowId: this.wfs.$currentFlow()?.id!,\r\n attributes: this.cfs.getAttributesWithWys(this.liveForm),\r\n ___targetEmployees: this.liveForm.get('___targetEmployees')?.getRawValue()\r\n };\r\n\r\n this.$backendMessage.set('');\r\n this.$loading.set(true);\r\n this.$loadingMessage.set(\"Generating routes...\")\r\n\r\n this.wfs.generateRouting(request).pipe(\r\n catchError(err => {\r\n const msg =\r\n err?.error?.message || // API-defined message\r\n err?.message || // Native JS or HttpErrorResponse\r\n err?.statusText || // Fallback\r\n 'An unknown error occurred.';\r\n this.$backendMessage.set(msg);\r\n return of({ ok: false, status: 500, body: { messageCode: msg } as IFormatedResponse});\r\n }),\r\n finalize(() => {\r\n this.$loading.set(false);\r\n this.$loadingMessage.set('');\r\n })\r\n ).subscribe(x => {\r\n\r\n if (x.ok && x.status === 200) {\r\n const body = x.body;\r\n\r\n if (body?.statusCode === 200) {\r\n const inner = body.innerBody;\r\n\r\n this.$logs.set(inner.logs ?? []);\r\n\r\n const backendResults = inner.results as IRoutingResult[];\r\n\r\n const validResults: IRoutingResult[] = [];\r\n const allErrors: string[] = [];\r\n\r\n for (const result of backendResults) {\r\n const { targetEmployeeId, targetEmployeeFullName, error, response } = result;\r\n\r\n if (error || !response) {\r\n allErrors.push(`🚫 Employee ${targetEmployeeId} (${targetEmployeeFullName}): ${error || 'Unknown error'}`);\r\n continue;\r\n }\r\n\r\n // Ensure deep cloning or normalization if needed\r\n response.steps = response.steps.map(step => ({\r\n id: step.id,\r\n workflowId: step.workflowId,\r\n name: step.name,\r\n type: step.type,\r\n config: step.config,\r\n resolvedActors: step.resolvedActors\r\n }));\r\n\r\n validResults.push(result);\r\n\r\n // Patch latest attributes (or collect per-employee if needed)\r\n this.liveForm.patchValue(response.attributes);\r\n }\r\n\r\n this.$results.set(validResults);\r\n this.$logExpandedStates.set(new Array(validResults.length).fill(false));\r\n this.$backendMessage.set(allErrors.join('\\n'));\r\n\r\n } else {\r\n this.$backendMessage.set(body?.messageCode || 'UNEXPECTED_ERROR');\r\n }\r\n\r\n } else {\r\n this.$backendMessage.set('API_ERROR');\r\n }\r\n });\r\n\r\n }\r\n\r\n initialDebugSubmit(): void {\r\n const request: IInitialDebugSubmitRequest = {\r\n workflowId: this.wfs.$currentFlow()?.id!,\r\n attributes: this.cfs.getAttributesWithWys(this.liveForm), //this.liveForm.getRawValue(),\r\n results: this.$results()\r\n };\r\n\r\n this.$loading.set(true);\r\n this.subscriptions.push(\r\n this.wfs.initialDebugSubmit(request)\r\n .pipe(\r\n catchError(err => {\r\n this.$loading.set(false);\r\n return of({ ok: false, status: 500, body: { messageCode: \"Error\" } });\r\n }),\r\n finalize(() => this.$loading.set(false))\r\n )\r\n .subscribe(x => {\r\n\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n this.$submitResult.set(x.body.innerBody);\r\n }\r\n })\r\n );\r\n }\r\n\r\n\r\n backToLiveForm(): void {\r\n this.wfs.$showLiveRouting.set(false);\r\n }\r\n\r\n onIsDebugModeChange(value: boolean): void {\r\n this.$isDebugMode.set(value);\r\n }\r\n\r\n toggleResolvedSteps(): void {\r\n this.$showResolvedSteps.set(!this.$showResolvedSteps());\r\n }\r\n\r\n\r\n onEmailChange(actor: IPlannedActor, email: string): void {\r\n this.$results.update(current => {\r\n current.forEach(stepGroup => {\r\n stepGroup.response?.steps.forEach(step => {\r\n step.resolvedActors\r\n .filter(a => a.employeeId === actor.employeeId)\r\n .forEach(a => a.email = email);\r\n });\r\n });\r\n return current;\r\n });\r\n }\r\n\r\n copy(value: string | number | undefined | null): void {\r\n if (!value) return;\r\n navigator.clipboard.writeText(value.toString()).then(() => {\r\n this.as.success('Copied!', alertOptions);\r\n });\r\n }\r\n\r\n toggleLog(index: number): void {\r\n this.$logExpandedStates.update(arr => {\r\n const newArr = [...arr];\r\n newArr[index] = !newArr[index];\r\n return newArr;\r\n });\r\n }\r\n\r\n isLogVisible(index: number): boolean {\r\n return this.$logExpandedStates()?.[index] ?? false;\r\n }\r\n\r\n onActorToolClick(step: IRoutingStep,actor: IPlannedActor): void {\r\n const results = this.$results();\r\n results.forEach(r => {\r\n r.response.steps.forEach(s => {\r\n s.resolvedActors.forEach(a => {\r\n if (!(s.id === step.id && a.employeeId === actor.employeeId)) {\r\n a.debugToolOpen = false;\r\n } else {\r\n a.debugToolOpen = !a.debugToolOpen;\r\n }\r\n })\r\n })\r\n })\r\n this.$results.set(results);\r\n }\r\n\r\n getLogLinesFor(index: number): string[] {\r\n const logs = this.$logs();\r\n const prefix = `on behalf of`;\r\n const match = `#${index}`;\r\n return logs.filter(line => line.includes(prefix) ? line.includes(match) : true);\r\n }\r\n\r\n getCorrelationId(result: IRoutingResult): string | null {\r\n const filter = this.$submitResult()?.items?.filter(i => i.employeeId == result.targetEmployeeId);\r\n if (!!filter && !!filter.length) {\r\n return filter[0].correlationId;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n previewEmail(templateType: 'SUBMIT' | 'REACT' | 'FULLY_APPROVE' | 'REJECT' | 'CANCEL' | 'TERMINATE' | 'REVOKE' | 'CC', correlationId: string, actorFullName: string): void {\r\n if (!this.wfs.$currentFlow()) {\r\n return;\r\n }\r\n const request: IRenderWorkflowEmailRequest = {\r\n workflowId: this.wfs.$currentFlow()!.id,\r\n templateType,\r\n correlationId,\r\n actorFullName\r\n }\r\n\r\n this.$loading.set(true);\r\n this.subscriptions.push(\r\n this.wfs.generatePreviewEmail(request)\r\n .pipe(\r\n finalize(() => this.$loading.set(false))\r\n )\r\n .subscribe(x => {\r\n if (x.ok && x.body?.statusCode === 200) {\r\n this.$emailSubject.set(x.body.innerBody.subject)\r\n this.$emailBody.set(x.body.innerBody.body)\r\n this.$showEmailPreview.set(true);\r\n }\r\n })\r\n )\r\n }\r\n\r\n onCloseEmailPreview(): void {\r\n this.$showEmailPreview.set(false);\r\n }\r\n\r\n}","<div class=\"routing-preview-container inter-font p-relative\">\r\n\r\n <div class=\"correlation-id\">\r\n </div>\r\n\r\n <div class=\"routing-preview-header\">\r\n\r\n <div class=\"button-group\">\r\n <button type=\"button\" class=\"btn btn-primary h35\" (click)=\"backToLiveForm()\">Back to Form (ESC)</button>\r\n <button type=\"button\" class=\"btn btn-secondary h35\" (click)=\"generateRouting()\">Generate</button>\r\n <button @fadeToggle type=\"button\" class=\"btn btn-primary h35\" (click)=\"initialDebugSubmit()\">Submit</button>\r\n </div>\r\n\r\n @if (!!appConfigService.WORKFLOW_ENABLE_DEBUG_MODE) {\r\n <div class=\"debug-group\">\r\n <label>Debug mode</label>\r\n <core-ios-switcher [width]=\"45\" [showOnOffText]=\"false\" [ngModel]=\"$isDebugMode()\"\r\n (ngModelChange)=\"onIsDebugModeChange($event)\"></core-ios-switcher>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"workflows-wrapper\">\r\n @if ($loading()) {\r\n <core-terminal-spinner /><span>Generating...</span>\r\n } @else {\r\n\r\n\r\n @if (!!$results().length) {\r\n\r\n @for (result of $results(); track $index; let resultIndex = $index) {\r\n\r\n <div class=\"result-group mb-8 p-4 rounded bg-white shadow-sm\">\r\n\r\n <div class=\"flex items-center justify-between mb-3\">\r\n <h6 class=\"text-base font-semibold text-sky-700\">Routing for {{ result.targetEmployeeFullName }}</h6>\r\n <div class=\"d-flex d-flex-between\">\r\n <button type=\"button\" class=\"text-xs text-blue-500 underline btn btn-secondary\" (click)=\"toggleLog($index)\">\r\n {{ $logExpandedStates()[ $index ] ? 'Hide log' : 'Show log' }}\r\n </button>\r\n @if ($loading()) {\r\n <core-terminal-spinner />\r\n }\r\n @for (result of $submitResult()?.items || []; track result.employeeId) {\r\n <div class=\"saga-link d-flex d-flex-start\">\r\n <label>{{ result.employeeFullName }}:</label>\r\n\r\n @if (result.correlationId) {\r\n <a class=\"external-link\" [routerLink]=\"['/root/workflow/status', result.correlationId]\">\r\n ✅ Click to see status\r\n </a>\r\n } @else {\r\n <span class=\"text-danger d-flex flex-column\">\r\n @for (line of (result.error?.split('\\n') || []); track line) {\r\n <div>❌ {{ line }}</div>\r\n }\r\n </span>\r\n }\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"workflow-wrapper\">\r\n\r\n @for (step of result.response.steps! ?? []; track step.id) {\r\n <div class=\"step-column\" [attr.data-actor-count]=\"step.resolvedActors?.length || 0\">\r\n\r\n <div class=\"step-column-aux\">\r\n\r\n <div class=\"step-header {{ step.type.toLowerCase() }}\"\r\n [ngClass]=\"(step.actorResolvedStatus ?? 'RESOLVED').toLowerCase()\">\r\n {{ step.name | translate : lang }} {{ step.config?.routingLogic }}\r\n </div>\r\n\r\n @for (actor of step.resolvedActors; track $index) {\r\n <div class=\"actor-card-aux\">\r\n <div class=\"actor-card d-flex d-flex-start {{ step.type.toLowerCase() }}\">\r\n <div class=\"avatar-wrapper\">\r\n <img [src]=\"actor.avatar\" appImageErrorResolver [type]=\"imageResolverType\"\r\n [isFemale]=\"!!actor.isFemale!\" class=\"actor-avatar\" alt=\"{{ actor.fullName }}\" />\r\n @if ($isDebugMode() && !!$submitResult() && !!$submitResult()?.items) {\r\n <div @fadeToggle class=\"actor-tool\" [appTooltip]=\"!actor.debugToolOpen ? 'Dubug tool' : ''\" [position]=\"'right'\" (click)=\"onActorToolClick(step, actor)\">\r\n <i class=\"feather-more-horizontal\"></i>\r\n @if (!!actor.debugToolOpen) {\r\n <ul class=\"actor-tool-list\">\r\n @switch (step.type) {\r\n @case ('Submit') {\r\n <li (click)=\"previewEmail('SUBMIT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Submit email</li>\r\n }\r\n @case ('CC') {\r\n <li (click)=\"previewEmail('CC', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview CC email</li>\r\n }\r\n @case ('Approval') {\r\n <li (click)=\"previewEmail('REACT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview React email</li>\r\n }\r\n @case ('End') {\r\n <li (click)=\"previewEmail('FULLY_APPROVE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview FullyAppoved email</li>\r\n <li (click)=\"previewEmail('REJECT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Rejected email</li>\r\n <li (click)=\"previewEmail('CANCEL', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Cancelled email</li>\r\n <li (click)=\"previewEmail('TERMINATE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Terminated email</li>\r\n <li (click)=\"previewEmail('REVOKE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Revoked email</li>\r\n }\r\n }\r\n </ul>\r\n }\r\n </div>\r\n }\r\n </div>\r\n <div class=\"actor-details\">\r\n <div class=\"actor-line\">\r\n <i class=\"feather-user\"></i>\r\n <span class=\"actor-full-name\" [appTooltip]=\"actor.fullName\">{{ actor.fullName | normalizeHumanName\r\n }}</span>\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-briefcase\"></i>\r\n <span [appTooltip]=\"actor.jobName\">{{ actor.jobName }}</span>\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-mail\"></i>\r\n @if ($isDebugMode()) {\r\n <input @fadeToggle class=\"email-debug-input\" type=\"email\" [(ngModel)]=\"actor.email\"\r\n (ngModelChange)=\"onEmailChange(actor, $event)\" placeholder=\"Enter demo email\" />\r\n } @else {\r\n <span [appTooltip]=\"actor.email\">{{ actor.email }}</span>\r\n }\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-hash\"></i>\r\n <span @fadeToggle [appTooltip]=\"actor.employeeCode\">{{ actor.employeeCode }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (!!$submitErrors() && !!$submitErrors()!.length) {\r\n <pre>\r\n <span>{{ $submitErrors()![$index] }}</span>\r\n </pre>\r\n }\r\n\r\n @if (isLogVisible($index)) {\r\n <pre class=\"employee-log mt-4 bg-gray-50 p-3 rounded text-xs font-mono text-gray-800\">\r\n @for (line of getLogLinesFor($index); track $index) {\r\n {{ line }}\r\n }\r\n </pre>\r\n }\r\n\r\n </div>\r\n\r\n }\r\n\r\n } @else if (!!$backendMessage()) {\r\n\r\n <div class=\"backend-message error-list bg-red-50 rounded p-4 text-sm text-red-800 leading-relaxed\">\r\n @for (line of $backendMessage().split('\\n'); track $index) {\r\n <div class=\"error-item flex items-start gap-2\">\r\n <i class=\"feather-alert-circle text-red-600 mt-0.5\"></i>\r\n <span [innerText]=\"line\"></span>\r\n </div>\r\n }\r\n </div>\r\n\r\n } @else {\r\n No routing steps found.\r\n }\r\n\r\n\r\n }\r\n\r\n </div>\r\n\r\n @if ($showResolvedSteps()) {\r\n <h5>Resolved steps</h5>\r\n <div class=\"resolved-steps\">\r\n <!-- <pre>{{ $resolvedStepsJson() }}</pre> -->\r\n </div>\r\n }\r\n\r\n @if ($showEmailPreview()) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root\">\r\n <div class=\"email-preview\">\r\n <div class=\"email-header\">\r\n PREVIEW\r\n <div class=\"close-wrapper\">\r\n <i class=\"feather-x\" (click)=\"onCloseEmailPreview()\"></i>\r\n </div>\r\n </div>\r\n <div class=\"email-subject\" [innerHtml]=\"$emailSubject()\"></div>\r\n <div class=\"email-body\" [innerHtml]=\"$emailBody()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>","import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';\r\nimport { BaseComponent } from '../../base-component/base/base.component';\r\nimport { CoreParamControlComponent } from '../../core-param-control/core-param-control/core-param-control.component';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\nimport { DomService } from '../../services/dom.service';\r\nimport { NgStyle } from '@angular/common';\r\nimport { MultiLanguageService } from '../../../services/multi-language.service';\r\nimport { AlertService } from '../../alert/alert.service';\r\nimport { RoutingPreviewComponent } from '../routing-preview/routing-preview.component';\r\n\r\n@Component({\r\n selector: 'routing-preview-panel',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n NgStyle,\r\n CoreParamControlComponent,\r\n RoutingPreviewComponent\r\n ],\r\n templateUrl: './routing-preview-panel.component.html',\r\n styleUrl: './routing-preview-panel.component.scss'\r\n})\r\nexport class RoutingPreviewPanelComponent extends BaseComponent {\r\n\r\n $minWidth = input<number | undefined>();\r\n\r\n public wfs = inject(CoreWorkflowService);\r\n ds = inject(DomService);\r\n as = inject(AlertService);\r\n\r\n employeeId: number | undefined = undefined;\r\n\r\n seekerClick$ = new BehaviorSubject<any>(0);\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n this.subscriptions.forEach(x => x?.unsubscribe());\r\n }\r\n\r\n}\r\n","<div class=\"routing-preview-panel-container\" [ngStyle]=\"{\r\n minWidth: $minWidth() ? $minWidth() + 'px' : 'unset'\r\n}\">\r\n \r\n <!-- <div class=\"param-wrapper\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"generateRouting()\">Generate Routing</button>\r\n </div> -->\r\n\r\n <routing-preview />\r\n \r\n\r\n <!-- <div class=\"graph-wrapper\">\r\n <svg id=\"routing-graph\" width=\"100%\"></svg>\r\n </div> -->\r\n\r\n</div>","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, Injector, inject, input, isDevMode, output, signal, effect, WritableSignal } from '@angular/core';\r\nimport { CorePageHeaderComponent } from '../../core-page-header/core-page-header/core-page-header.component';\r\nimport { CoreFormComponent } from '../../core-form/core-form/core-form.component';\r\nimport { BehaviorSubject, catchError, distinctUntilChanged, filter, finalize, of, tap } from 'rxjs';\r\nimport { EnumCorePageEditMode } from '../../core-page-edit/EnumCorePageEditMode';\r\nimport { CoreFormDesignService } from '../core-form-design.service';\r\nimport { TranslatePipe } from '../../../app-pipes/translate.pipe';\r\nimport { NgStyle } from '@angular/common';\r\nimport { BaseComponent } from '../../base-component/base/base.component';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { CoreWorkflowService } from '../../core-workflow-builder/core-workflow.service';\r\nimport { IAfInstance } from '../interfaces';\r\nimport { ICoreFormSection, IFormBaseControl, IValidator } from '../../core-form/core-form/enum-interfaces';\r\nimport { EnumFormBaseContolType } from '../../../enum/EnumFormBaseContolType';\r\nimport { HotKeysDirective } from '../../../directives/hot-keys.directive';\r\nimport { ApplicationHelpService } from '../../../services/application-help.service';\r\nimport { IWfWorkflow } from '../../core-workflow-builder/interfaces/IWfWorkflow';\r\nimport { AlertService } from '../../alert/alert.service';\r\nimport { AppService } from '../../../services/app.service';\r\nimport { MultiLanguageService } from '../../../services/multi-language.service';\r\nimport { RoutingPreviewPanelComponent } from '../../core-workflow-builder/routing-preview-panel/routing-preview-panel.component';\r\nimport { DomService } from '../../services/dom.service';\r\nimport { CoreFormService } from '../../core-form/core-form.service';\r\nimport { alertOptions } from '../../../constants/alertOptions';\r\nimport { AppConfigService } from '../../../services/app-config.service';\r\nimport { JsonService } from '../../../services/json.service';\r\nimport { EnumCoreFormControlSeekerSourceType } from '../../core-form-control-seeker/EnumCoreFormControlSeekerSourceType';\r\nimport { FormGroup, Validators } from '@angular/forms';\r\nimport { EnumCoreButtonVNSCode } from '../../core-button-group-vns/core-button-group-vns/EnumCoreButtonVNSCode';\r\nimport { IWorkflowReactContext } from '../../core-workflow-builder/interfaces/IWorkflowReactContext';\r\nimport { ISubmitResult } from '../../core-workflow-builder/interfaces/ISubmitResult';\r\nimport { IGenerateWorkflowRoutingRequest } from '../../core-workflow-builder/interfaces/IGenerateWorkflowRoutingRequest';\r\nimport { IRoutingResult } from '../../core-workflow-builder/interfaces/IRoutingResult';\r\nimport { ISubmitResponseItem } from '../../core-workflow-builder/interfaces/ISubmitResponseItem';\r\nimport { JsonSafePipe } from '../json-safe.pipe';\r\nimport { IStepFormConfig } from '../../core-workflow-builder/interfaces/IStepConfig';\r\n@Component({\r\n selector: 'live-form',\r\n imports: [\r\n NgStyle,\r\n JsonSafePipe,\r\n HotKeysDirective,\r\n RoutingPreviewPanelComponent,\r\n CorePageHeaderComponent,\r\n CoreFormComponent,\r\n TranslatePipe,\r\n\r\n ],\r\n templateUrl: './live-form.component.html',\r\n styleUrl: './live-form.component.scss'\r\n})\r\nexport class LiveFormComponent extends BaseComponent implements AfterViewInit {\r\n\r\n $designMode = input<boolean>(false);\r\n $forKickOff = input<boolean>();\r\n\r\n $workflowReactContext = input<IWorkflowReactContext | null>(null);\r\n $form = signal<FormGroup | null>(null);\r\n\r\n\r\n $onClose = output();\r\n $loading = signal<boolean>(false);\r\n $showAfInstanceJson = signal<boolean>(false);\r\n $showWfWorkflowJson = signal<boolean>(false);\r\n $logExpandedStates: WritableSignal<boolean[]> = signal([]);\r\n\r\n $backendMessage = signal('');\r\n $loadingMessage = signal('');\r\n $logs = signal<string[]>([]);\r\n $results: WritableSignal<IRoutingResult[]> = signal([]);\r\n\r\n workflowId: string | undefined;\r\n\r\n public coreFormDesignService = inject(CoreFormDesignService);\r\n applicationHelpService = inject(ApplicationHelpService);\r\n ds = inject(DomService);\r\n public wfs = inject(CoreWorkflowService);\r\n fds = inject(CoreFormDesignService);\r\n js = inject(JsonService);\r\n cdr = inject(ChangeDetectorRef);\r\n router = inject(Router);\r\n route = inject(ActivatedRoute);\r\n alertService = inject(AlertService);\r\n appService = inject(AppService);\r\n cfs = inject(CoreFormService);\r\n appConfigService = inject(AppConfigService);\r\n injector = inject(Injector);\r\n\r\n isDevMode = isDevMode();\r\n $previewMode = signal(false);\r\n\r\n $employeeSubmiterId = signal(0);\r\n\r\n simulatedEmployee$ = new BehaviorSubject<any>(null);\r\n\r\n $showLiveRouting = this.wfs.$showLiveRouting;\r\n\r\n\r\n $zIndex = signal(0);\r\n\r\n $reactMode = signal(false);\r\n\r\n $onBehalfMode = computed(() => this.$workflow()?.allowOnBehalf)\r\n\r\n $reactInjectedFieldsAdded = signal(false);\r\n\r\n $effectiveSections = computed<ICoreFormSection[]>(() => {\r\n const raw = this.$inputSections();\r\n\r\n const formUi = this.$workflowReactContext()?.stepFormConfig?.formUi;\r\n if (!formUi) {\r\n console.log(\"[$effectiveSections computed]: formUi was undefined\"); \r\n return raw;\r\n }\r\n\r\n console.log(\"[$effectiveSections computed]: Calling applyFormUi()\", raw, formUi);\r\n return this.applyFormUi(raw, formUi);\r\n\r\n });\r\n\r\n constructor(\r\n public override mls: MultiLanguageService,\r\n private coreFormService: CoreFormService\r\n ) {\r\n super(mls);\r\n\r\n effect(() => {\r\n const context = this.$workflowReactContext();\r\n const form = this.$form();\r\n\r\n if (!context || !form) return;\r\n\r\n try {\r\n\r\n const attributesJson = context.instance.attributesJson;\r\n const formValue = JSON.parse(attributesJson);\r\n\r\n // 🔑 Ensure FormArrays have correct length BEFORE patching\r\n this.cfs.ensureFormArraysMatch(\r\n this.wfs.liveForm,\r\n formValue,\r\n this.cfs.formArrayConfigMap\r\n );\r\n\r\n console.log(\"this.wfs.liveForm.patchValue(formValue)\", formValue);\r\n this.coreFormService.syncAllFormArraysBeforePatch(this.wfs.liveForm, formValue);\r\n this.wfs.liveForm.patchValue(formValue);\r\n\r\n\r\n } catch (err: any) {\r\n if (isDevMode()) {\r\n this.alertService.error(err?.message || \"Error while set value for the context\");\r\n }\r\n }\r\n })\r\n\r\n const navigation = this.router.getCurrentNavigation();\r\n const previewMode = navigation?.extras?.state?.['previewMode'];\r\n this.$previewMode.set(previewMode ?? false);\r\n\r\n this.subscriptions.push(\r\n this.simulatedEmployee$.pipe(\r\n filter(x => !!x)\r\n ).subscribe(x => {\r\n this.wfs.$simulatedEmployee.set(x);\r\n })\r\n )\r\n\r\n this.subscriptions.push(\r\n this.route.params.subscribe(p => {\r\n const rawId = p['id'];\r\n\r\n if (rawId && rawId.includes('___')) {\r\n const parts = rawId.split('___');\r\n\r\n if (parts.length === 4) {\r\n const [workflowId] = parts;\r\n this.workflowId = workflowId;\r\n this.$customButtons.set([\r\n EnumCoreButtonVNSCode.NONE_HEADER_CANCEL,\r\n EnumCoreButtonVNSCode.NONE_HEADER_REJECT,\r\n EnumCoreButtonVNSCode.NONE_HEADER_APPROVE\r\n ])\r\n this.$reactMode.set(true);\r\n this.clearInjectedFields();\r\n // this.makeOriginReadonly();\r\n //this.addReactInjectedFields();\r\n }\r\n } else {\r\n\r\n this.$reactMode.set(false);\r\n\r\n this.$customButtons.set([\r\n EnumCoreButtonVNSCode.NONE_HEADER_CANCEL,\r\n EnumCoreButtonVNSCode.NONE_HEADER_SEND\r\n ])\r\n\r\n const preview = this.route.snapshot.queryParamMap.get('preview');\r\n const isPreviewMode = preview === 'true';\r\n if (isPreviewMode) {\r\n // This route is inside the (preview:) outlet\r\n this.workflowId = this.route.parent?.snapshot.params['id'];\r\n } else {\r\n // Not preview mode → Get workflowId from parent route\r\n const id = this.route.snapshot.params['id'];\r\n this.workflowId = id;\r\n }\r\n }\r\n })\r\n );\r\n\r\n }\r\n\r\n generateSubmitDto(): any {\r\n return {};\r\n }\r\n\r\n toggleShowRouting(): void {\r\n if (!this.$showLiveRouting() && !!this.wfs.liveForm.invalid) {\r\n this.alertService.info(\"The form value is invalid\", alertOptions);\r\n this.wfs.liveFormCheckError$.next(true);\r\n setTimeout(() => this.wfs.liveFormCheckError$.next(false), 5000);\r\n return;\r\n }\r\n this.$showLiveRouting.set(!this.$showLiveRouting())\r\n }\r\n\r\n initialSubmit(): void {\r\n const steps = this.wfs.$currentSteps();\r\n\r\n const nameMap = new Map<string, number>();\r\n\r\n for (const step of steps) {\r\n const name = step.name?.trim();\r\n if (!name) continue;\r\n\r\n nameMap.set(name, (nameMap.get(name) ?? 0) + 1);\r\n }\r\n\r\n const duplicateNames = [...nameMap.entries()]\r\n .filter(([_, count]) => count > 1)\r\n .map(([name]) => name);\r\n\r\n if (duplicateNames.length > 0) {\r\n this.alertService.warn(\r\n `Duplicate step name(s) found: ${duplicateNames.join(\", \")}`,\r\n alertOptions\r\n );\r\n this.wfs.$designActiveTab.set(3);\r\n return;\r\n }\r\n\r\n\r\n const form = this.$form();\r\n if (!form || !form.valid) {\r\n const controls = form?.controls ?? {};\r\n const entries = Object.entries(controls);\r\n\r\n const filteredInvalids = entries.filter(([key, ctrl]) => {\r\n if (key === '___submitterEmployeeId') return false; // skip check\r\n return ctrl.invalid;\r\n });\r\n\r\n if (filteredInvalids.length > 0) {\r\n this.wfs.liveFormCheckError$.next(true);\r\n setTimeout(() => this.wfs.liveFormCheckError$.next(false), 5000);\r\n this.alertService.info(\"Please fill required fields\", alertOptions);\r\n return;\r\n }\r\n }\r\n\r\n if (!this.wfs.$currentFlow()) {\r\n this.alertService.info(\"No flow detected\", alertOptions);\r\n return;\r\n }\r\n\r\n const request: IGenerateWorkflowRoutingRequest = {\r\n workflowId: this.wfs.$currentFlow()?.id!,\r\n attributes: this.cfs.getAttributesWithWys(this.$form()!),\r\n ___targetEmployees: this.$form()?.get('___targetEmployees')?.getRawValue()\r\n };\r\n\r\n this.$backendMessage.set('');\r\n this.$loading.set(true);\r\n this.$loadingMessage.set(\"Generating routes...\")\r\n\r\n this.wfs.initialSubmit(request).pipe(\r\n catchError(err => {\r\n const msg =\r\n err?.error?.message || // API-defined message\r\n err?.message || // Native JS or HttpErrorResponse\r\n err?.statusText || // Fallback\r\n 'An unknown error occurred.';\r\n this.$backendMessage.set(msg);\r\n return of({ ok: false, status: 500, body: { messageCode: msg } });\r\n }),\r\n finalize(() => {\r\n this.$loading.set(false);\r\n this.$loadingMessage.set('');\r\n })\r\n ).subscribe(x => {\r\n\r\n if (x.ok && x.status === 200) {\r\n const body = x.body;\r\n\r\n if (body?.statusCode === 200) {\r\n const inner: ISubmitResult = body.innerBody;\r\n\r\n if (!!inner.violations.length) {\r\n if (this.lang === 'en') {\r\n this.alertService.error(inner.violations[0].messageEnglish);\r\n } else {\r\n this.alertService.error(inner.violations[0].messageDefault);\r\n }\r\n }\r\n\r\n this.$logs.set(inner.logs ?? []);\r\n\r\n const backendResults = inner.items as ISubmitResponseItem[];\r\n\r\n const allErrors: string[] = [];\r\n\r\n for (const result of backendResults) {\r\n\r\n const { employeeId, employeeFullName, correlationId, error } = result;\r\n\r\n if (error || !correlationId) {\r\n allErrors.push(`🚫 Employee ${employeeId} (${employeeFullName}): ${error || 'Unknown error'}`);\r\n continue;\r\n }\r\n\r\n }\r\n\r\n this.$backendMessage.set(allErrors.join('\\n'));\r\n\r\n if (!!allErrors.length) {\r\n this.alertService.error(allErrors[0]);\r\n }\r\n\r\n } else {\r\n this.$backendMessage.set(body?.messageCode || 'UNEXPECTED_ERROR');\r\n }\r\n\r\n } else {\r\n this.$backendMessage.set('API_ERROR');\r\n }\r\n });\r\n }\r\n\r\n\r\n // 🔁 Reactive bindings\r\n $inputSections = signal<ICoreFormSection[]>([\r\n {\r\n rows: [\r\n [\r\n {\r\n field: 'id',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'string',\r\n flexSize: 0,\r\n hidden: true,\r\n label: '',\r\n value: ''\r\n }\r\n ]\r\n ]\r\n }\r\n ]);\r\n $workflow = this.wfs.$currentFlow;\r\n $afInstance = signal<IAfInstance | undefined>(undefined);\r\n $customButtons = signal<string[] | undefined>(undefined);\r\n $normalMode = signal<boolean | undefined>(undefined);\r\n $submitApi = signal<string | undefined>(undefined);\r\n\r\n $inputSectionsJson = computed(() => {\r\n const clean = this.js.safeTransform(this.$inputSections()).obj;\r\n return JSON.stringify(clean, null, 2);\r\n })\r\n\r\n //removeSignalKeysDeep = this.coreFormDesignService.removeSignalKeysDeep;\r\n\r\n $afInstanceJson = computed(() => {\r\n const instance = this.$afInstance();\r\n //const cleanedInstance = this.removeSignalKeysDeep(instance).obj; // Remove signals or $ fields\r\n const cleanedInstance = this.js.safeTransform(instance).obj; // Remove signals or $ fields\r\n return JSON.stringify(cleanedInstance, null, 2);\r\n\r\n });\r\n\r\n $wfWorkflowJson = computed(() => {\r\n const workflow = this.$workflow();\r\n //const cleanedInstance = this.removeSignalKeysDeep(workflow).obj; // Remove signals or $ fields\r\n const cleanedInstance = this.js.safeTransform(workflow).obj; // Remove signals or $ fields\r\n return JSON.stringify(cleanedInstance, null, 2);\r\n\r\n });\r\n\r\n mode$: BehaviorSubject<EnumCorePageEditMode> = new BehaviorSubject<EnumCorePageEditMode>(EnumCorePageEditMode.CREATE);\r\n\r\n checkError$ = this.wfs.liveFormCheckError$;\r\n\r\n override ngOnInit(): void {\r\n this.subscriptions.push(\r\n this.mls.lang$.subscribe(x => this.lang = x)\r\n )\r\n\r\n // Get query param ?preview=true\r\n const preview = this.route.snapshot.queryParamMap.get('preview');\r\n const isPreviewMode = preview === 'true';\r\n this.$previewMode.set(isPreviewMode);\r\n\r\n if (isDevMode()) {\r\n this.applicationHelpService.activeKey$.pipe(\r\n distinctUntilChanged()\r\n ).subscribe(x => {\r\n switch (x) {\r\n case 'F3':\r\n this.$showAfInstanceJson.set(true);\r\n break;\r\n case 'F6':\r\n this.$showWfWorkflowJson.set(true);\r\n break\r\n case 'Escape':\r\n this.$showAfInstanceJson.set(false);\r\n this.$showWfWorkflowJson.set(false);\r\n break;\r\n }\r\n })\r\n }\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n\r\n if (!this.$designMode() && !this.$previewMode()) {\r\n\r\n if (!!this.workflowId) {\r\n setTimeout(() => {\r\n\r\n this.subscriptions.push(\r\n this.wfs.loadWorkflowWithAfInstance(this.workflowId!).pipe(\r\n tap(_ => this.$loading.set(true)),\r\n catchError(err => {\r\n return of(err)\r\n }),\r\n finalize(() => this.$loading.set(false))\r\n\r\n ).subscribe(x => {\r\n this.$loading.set(false);\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n const workflow: IWfWorkflow = x.body.innerBody;\r\n\r\n this.$workflow.set(workflow);\r\n\r\n if (workflow.afInstanceDTO) {\r\n const afInstanceDto = workflow.afInstanceDTO;\r\n const instance = this.coreFormDesignService.mapFromAfInstanceDTO(afInstanceDto);\r\n\r\n instance.sections = this.coreFormDesignService.toCoreFormSections(instance.formDesignSections)\r\n\r\n this.$afInstance.set(instance);\r\n\r\n console.log(\"this.$inputSections being merged wuth:\", instance.sections);\r\n\r\n this.$inputSections.set([...instance.sections, ...this.$inputSections()]);\r\n\r\n this.$normalMode.set(instance.normalMode);\r\n this.$submitApi.set(instance.submitApi);\r\n\r\n this.coreFormDesignService.$afInstance.set(instance);\r\n\r\n this.clearInjectedFields();\r\n\r\n if (!this.$reactMode()) {\r\n this.addKickOffInjectedFields();\r\n }\r\n\r\n }\r\n\r\n }\r\n })\r\n )\r\n\r\n })\r\n }\r\n\r\n } else {\r\n\r\n this.$afInstance.set(this.coreFormDesignService.$afInstance());\r\n console.log(\"sections in ngAfterViewInit when !this.workflowId, being set\", this.coreFormDesignService.$afInstance().sections)\r\n this.$inputSections.set(this.coreFormDesignService.$afInstance().sections ?? []);\r\n this.$customButtons.set(this.coreFormDesignService.$afInstance().customFormButtonItems ?? []);\r\n this.$normalMode.set(this.coreFormDesignService.$afInstance().normalMode);\r\n this.$submitApi.set(this.coreFormDesignService.$afInstance().submitApi);\r\n\r\n this.clearInjectedFields();\r\n if (this.$reactMode()) {\r\n //this.addReactInjectedFields();\r\n } else {\r\n this.addKickOffInjectedFields();\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n onLiveFormCreated(e: any): void {\r\n const form: FormGroup = e.formGroup;\r\n this.$form.set(form);\r\n this.wfs.liveForm = form;\r\n\r\n if (!this.$reactMode()) {\r\n this.wfs.liveForm.get('___submitOnBehalf')?.valueChanges.subscribe(x => {\r\n const inputSections = this.$inputSections();\r\n const targetCtrl = this.coreFormService.getFormBaseControlByName(inputSections, '___targetEmployees');\r\n\r\n if (targetCtrl) {\r\n targetCtrl.hidden = !x;\r\n this.$inputSections.set([...inputSections]);\r\n\r\n // Optional: restore current form values without triggering another valueChanges loop\r\n const currentValue = this.cfs.getAttributesWithWys(this.wfs.liveForm);\r\n console.log(\"onLiveFormCreated\", currentValue)\r\n setTimeout(() => {\r\n this.wfs.liveForm.patchValue({\r\n ___submitOnBehalf: x // ensure value stays intact\r\n }, { emitEvent: false });\r\n if (!x && targetCtrl) {\r\n this.wfs.liveForm.patchValue({ ___targetEmployees: null }, { emitEvent: false });\r\n }\r\n });\r\n }\r\n });\r\n\r\n }\r\n\r\n }\r\n\r\n onLiveSubmit(e: any): void {\r\n\r\n if (!this.wfs.liveForm.valid) {\r\n this.checkError$.next(true);\r\n return;\r\n }\r\n\r\n if (!!this.$submitApi()) {\r\n const payload = this.generateSubmitDto();\r\n\r\n this.$loading.set(true);\r\n this.subscriptions.push(\r\n this.appService.postFullUrl(this.$submitApi()!, payload).pipe(\r\n catchError(err => {\r\n this.$loading.set(false);\r\n return of(err);\r\n })\r\n ).subscribe(x => {\r\n this.$loading.set(false);\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n // MILESTONE!\r\n }\r\n })\r\n )\r\n\r\n }\r\n }\r\n\r\n onClose(): void {\r\n if (this.$designMode()) {\r\n this.$onClose.emit();\r\n } else {\r\n if (!!this.$afInstance()?.normalMode) {\r\n\r\n } else {\r\n if (this.$previewMode()) {\r\n this.router.navigate(\r\n [\r\n {\r\n outlets: { preview: null }\r\n }\r\n ],\r\n { relativeTo: this.route.parent }\r\n );\r\n } else {\r\n this.router.navigate([\r\n '/root/workflow/workflow-consume',\r\n { outlets: { workflowConsume: null } }\r\n ]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n addKickOffInjectedFields(): void {\r\n\r\n const workflow = this.$workflow();\r\n const current = this.$inputSections();\r\n const sections = [...current];\r\n\r\n sections.push({\r\n rows: [\r\n [\r\n {\r\n field: '___submitterEmployeeId',\r\n flexSize: 12,\r\n type: 'number',\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n getByIdApi: '',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n label: 'Simulated Requester',\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n value: null,\r\n validators: [\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: 'Simulated ___submitterEmployeeId required'\r\n }\r\n ]\r\n },]\r\n ]\r\n })\r\n\r\n if (!!workflow && !!workflow.allowCustomCc) {\r\n sections.push({\r\n rows:\r\n [\r\n [\r\n {\r\n field: \"___customCcs\",\r\n type: \"text\",\r\n value: '',\r\n label: \"UI_FORM_CONTROL_LABEL.CUSTOM_CCS\",\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n textareaRows: 3,\r\n validators: [\r\n {\r\n name: 'pattern',\r\n validator: Validators.pattern(\r\n /^(\\s*[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}\\s*;)*\\s*[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}\\s*$/\r\n ),\r\n errorMessage: \"Please enter a list of email addresses separated by semicolons (;)\"\r\n }\r\n ]\r\n }\r\n ]\r\n\r\n ]\r\n })\r\n }\r\n\r\n if (!!this.$onBehalfMode()) {\r\n\r\n sections.push({\r\n rows:\r\n [\r\n [\r\n {\r\n field: \"___submitOnBehalf\",\r\n type: \"boolean\",\r\n hint: 'If enabled, users can submit this workflow request on behalf of other employees.',\r\n value: '',\r\n label: \"UI_FORM_CONTROL_LABEL.SUBMIT_ON_BEHALF\",\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CHECKBOX,\r\n }\r\n ],\r\n [\r\n {\r\n field: \"___targetEmployees\",\r\n type: \"object\",\r\n value: null,\r\n label: \"UI_FORM_CONTROL_LABEL.TARGET_EMPLOYEES\",\r\n hidden: true,\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n multiMode: true,\r\n }\r\n ],\r\n ]\r\n })\r\n\r\n }\r\n\r\n this.$inputSections.set(sections);\r\n\r\n }\r\n\r\n clearInjectedFields(): void {\r\n const original = this.$inputSections();\r\n if (!original || !original.length) return;\r\n\r\n // Tạo bản sao deep để tránh mutate sai\r\n const cleaned = original\r\n .map(section => {\r\n\r\n // deep clone rows\r\n const newRows = (section.rows || [])\r\n .map(row =>\r\n row.filter(ctrl => !ctrl.field.startsWith('___')) // remove injected\r\n )\r\n .filter(row => row.length > 0); // remove empty rows\r\n\r\n // Nếu rows rỗng → bỏ luôn section\r\n if (!newRows.length) return null;\r\n\r\n return {\r\n ...section,\r\n rows: newRows\r\n };\r\n })\r\n .filter(x => x !== null) as any[];\r\n\r\n this.$inputSections.set(cleaned);\r\n }\r\n\r\n react(reactType: string): void {\r\n const context = this.$workflowReactContext();\r\n if (!context) {\r\n this.alertService.error(\"NO_CONTEXT_FOUND\");\r\n return;\r\n }\r\n const { workflow, instance, step, actor } = context;\r\n const unitedCorrelationIds = `${workflow.id}___${instance.correlationId}___${step.id}___${actor.id}`;\r\n const updatedAttributes = this.cfs.getAttributesWithWys(this.$form()!);\r\n\r\n this.$loading.set(true);\r\n this.subscriptions.push(\r\n this.wfs.react(unitedCorrelationIds, reactType, \"\", updatedAttributes).pipe(\r\n catchError(err => {\r\n this.$loading.set(false);\r\n return of(err);\r\n })\r\n ).subscribe(x => {\r\n this.$loading.set(false);\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n\r\n }\r\n })\r\n )\r\n }\r\n\r\n applyFormUi(\r\n sections: ICoreFormSection[],\r\n formUi: IStepFormConfig[\"formUi\"]\r\n ): ICoreFormSection[] {\r\n if (!sections || !formUi) return sections;\r\n\r\n const hidden = formUi.hidden ?? {};\r\n const readonly = formUi.readonly ?? {};\r\n const required = formUi.required ?? {};\r\n\r\n console.log(\"[applyFormUi] hidden\", hidden);\r\n console.log(\"[applyFormUi] readonly\", readonly);\r\n console.log(\"[applyFormUi] required\", required);\r\n\r\n const sectionsTransformed = sections.map(sec => ({\r\n ...sec,\r\n rows: sec.rows.map(row =>\r\n row.map(ctrl => {\r\n const c = { ...ctrl };\r\n const key = c.field;\r\n\r\n // 1) Hidden\r\n if (hidden[key]) {\r\n c.hidden = true;\r\n return c;\r\n }\r\n\r\n // 2) Readonly\r\n if (readonly[key]) {\r\n c.readonly = true;\r\n c.disabled = true;\r\n }\r\n\r\n // 3) Required\r\n if (required[key]) {\r\n c.validators = [\r\n ...(c.validators ?? []),\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: `${c.label ?? c.field} is required`\r\n }\r\n ];\r\n } else {\r\n // remove required if exists (optional)\r\n c.validators = (c.validators ?? []).filter(v => v.name !== 'required');\r\n }\r\n\r\n return c;\r\n })\r\n )\r\n }));\r\n\r\n console.log(\"[applyFormUi] sectionsTransformed\", sectionsTransformed);\r\n\r\n return sectionsTransformed;\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n this.subscriptions.forEach(x => x?.unsubscribe());\r\n this.clearInjectedFields()\r\n }\r\n\r\n\r\n}\r\n","<div class=\"live-form-container\" [hotKeys]=\"['F3', 'F6', 'Escape']\">\r\n\r\n @if ($normalMode()) {\r\n <div class=\"form-wrapper live-form\" [ngStyle]=\"{\r\n width: !!coreFormDesignService.$afInstance().width ? coreFormDesignService.$afInstance().width + 'px' : 'unset'\r\n }\">\r\n <div class=\"live-form-header\">\r\n <core-page-header [title]=\"coreFormDesignService.$afInstance().captionCode | translate : lang\" [hideButtonGroup]=\"true\"></core-page-header>\r\n </div>\r\n\r\n <core-form\r\n [inputSections]=\"$effectiveSections()\"\r\n [customFormButtonItems]=\"$customButtons()!\"\r\n [forceCreateNewForm]=\"true\"\r\n [mode$]=\"mode$\"\r\n [hideButtons]=\"$previewMode()\"\r\n [hideCalculatedSection]=\"true\"\r\n [hideDevSector]=\"true\"\r\n [bottomTemplateRef]=\"bottomTemplateRef\"\r\n [buttonGroupTemplateRef]=\"buttonGroupTemplateRef\"\r\n [checkError$]=\"checkError$\"\r\n (onSubmit)=\"onLiveSubmit($event)\"\r\n (onFormCreated)=\"onLiveFormCreated($event)\"\r\n (onCancal)=\"onClose()\"\r\n />\r\n\r\n @if ($previewMode()) {\r\n <div class=\"show-routing-wrapper\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"toggleShowRouting()\">\r\n {{ $showLiveRouting() ? 'Hide Routing' : 'Show Routing' }}\r\n </button>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"routing-preview-wrapper\" [class.visible]=\"$showLiveRouting()\">\r\n @if ($showLiveRouting()) {\r\n <routing-preview-panel />\r\n }\r\n </div>\r\n\r\n\r\n } @else {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root no-padding\">\r\n\r\n <div class=\"form-wrapper live-form\" [class.d-none]=\"$showLiveRouting()\" [ngStyle]=\"{\r\n width: !!coreFormDesignService.$afInstance().width ? coreFormDesignService.$afInstance().width + 'px' : 'unset'\r\n }\">\r\n\r\n <div class=\"live-form-header\">\r\n <core-page-header [title]=\"coreFormDesignService.$afInstance().captionCode | translate : lang\" [hideButtonGroup]=\"true\" />\r\n <div class=\"preview-close-icon\" (click)=\"onClose()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n\r\n <core-form\r\n [inputSections]=\"$effectiveSections()\"\r\n [customFormButtonItems]=\"$customButtons()!\"\r\n [forceCreateNewForm]=\"true\"\r\n [hideCalculatedSection]=\"true\"\r\n [mode$]=\"mode$\"\r\n [hideButtons]=\"$previewMode()\"\r\n [bottomTemplateRef]=\"bottomTemplateRef\"\r\n [buttonGroupTemplateRef]=\"buttonGroupTemplateRef\"\r\n [hideDevSector]=\"false\"\r\n [checkError$]=\"checkError$\"\r\n (onSubmit)=\"onLiveSubmit($event)\"\r\n (onFormCreated)=\"onLiveFormCreated($event)\"\r\n (onCancal)=\"onClose()\"\r\n />\r\n\r\n <div class=\"submition-wrapper\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"toggleShowRouting()\">\r\n {{ $showLiveRouting() ? 'Hide Routing' : 'Show Routing' }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"initialSubmit()\">\r\n Submit \r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"routing-preview-wrapper\" [class.visible]=\"$showLiveRouting()\">\r\n @if ($showLiveRouting()) {\r\n <div class=\"h50\"></div>\r\n <routing-preview-panel [$minWidth]=\"coreFormDesignService.$afInstance().width\"/>\r\n <div class=\"h50\"></div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <ng-template #bottomTemplateRef>\r\n <!-- <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $inputSectionsJson() }}</pre> -->\r\n <!-- @if (isDevMode) {\r\n <p class=\"dev-hint\">F3/ESC: Show/Hide afInstance | F6/ESC: Show/Hide Workflow</p>\r\n } -->\r\n @if ($showAfInstanceJson()) {\r\n <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $afInstanceJson() }}</pre>\r\n }\r\n @if ($showWfWorkflowJson()) {\r\n <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $wfWorkflowJson() }}</pre>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #buttonGroupTemplateRef>\r\n <div class=\"button-group\">\r\n <div class=\"button-group-left\"></div>\r\n <div class=\"button-group-right\">\r\n @if ($reactMode()) {\r\n @if (true) {\r\n <button type=\"button\" class=\"btn btn-secondary\">Cancel</button> \r\n }\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"react('REJECTED')\">Reject</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"react('APPROVED')\">Approve</button>\r\n } @else {\r\n <button type=\"button\" class=\"btn btn-secondary\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\">Send Request</button>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n</div>"],"names":["i1.MultiLanguageService","i2.CoreFormService"],"mappings":"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"}
|