ngx-histaff-alpha 6.5.2 → 6.5.4

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.
Files changed (60) hide show
  1. package/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-DDvbg8O8.mjs → ngx-histaff-alpha-ai-hint-for-table.component-C7Fa_W__.mjs} +2 -2
  2. package/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-DDvbg8O8.mjs.map → ngx-histaff-alpha-ai-hint-for-table.component-C7Fa_W__.mjs.map} +1 -1
  3. package/fesm2022/{ngx-histaff-alpha-core-form-design.component-CgBi436L.mjs → ngx-histaff-alpha-core-form-design.component-DgQr4yfp.mjs} +4 -4
  4. package/fesm2022/{ngx-histaff-alpha-core-form-design.component-CgBi436L.mjs.map → ngx-histaff-alpha-core-form-design.component-DgQr4yfp.mjs.map} +1 -1
  5. package/fesm2022/{ngx-histaff-alpha-core-sys-action.component-DVZeWcQb.mjs → ngx-histaff-alpha-core-sys-action.component-CIrBaqBf.mjs} +2 -2
  6. package/fesm2022/{ngx-histaff-alpha-core-sys-action.component-DVZeWcQb.mjs.map → ngx-histaff-alpha-core-sys-action.component-CIrBaqBf.mjs.map} +1 -1
  7. package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-BRcSdxK_.mjs → ngx-histaff-alpha-core-template-editor.component-CNSOE7OY.mjs} +2 -2
  8. package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-BRcSdxK_.mjs.map → ngx-histaff-alpha-core-template-editor.component-CNSOE7OY.mjs.map} +1 -1
  9. package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-YX2KrBiL.mjs → ngx-histaff-alpha-core-toast-loading.component-oS_ZzBSc.mjs} +2 -2
  10. package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-YX2KrBiL.mjs.map → ngx-histaff-alpha-core-toast-loading.component-oS_ZzBSc.mjs.map} +1 -1
  11. package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-s093KfBI.mjs → ngx-histaff-alpha-core-workflow-consume.component-B5V58-GM.mjs} +2 -2
  12. package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-s093KfBI.mjs.map → ngx-histaff-alpha-core-workflow-consume.component-B5V58-GM.mjs.map} +1 -1
  13. package/fesm2022/{ngx-histaff-alpha-db-settings.component-Cu2fEPKk.mjs → ngx-histaff-alpha-db-settings.component-TDSwaL2X.mjs} +5 -5
  14. package/fesm2022/{ngx-histaff-alpha-db-settings.component-Cu2fEPKk.mjs.map → ngx-histaff-alpha-db-settings.component-TDSwaL2X.mjs.map} +1 -1
  15. package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-DlCeXrOT.mjs → ngx-histaff-alpha-design-wrapper.component-CXgYD-qY.mjs} +5 -5
  16. package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-DlCeXrOT.mjs.map → ngx-histaff-alpha-design-wrapper.component-CXgYD-qY.mjs.map} +1 -1
  17. package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-Bpdjq0kz.mjs → ngx-histaff-alpha-design-wrapper.route-EFSsdtK_.mjs} +5 -5
  18. package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-Bpdjq0kz.mjs.map → ngx-histaff-alpha-design-wrapper.route-EFSsdtK_.mjs.map} +1 -1
  19. package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-C448wZ6F.mjs → ngx-histaff-alpha-hrm-schema.component-CrmfFmp_.mjs} +2 -2
  20. package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-C448wZ6F.mjs.map → ngx-histaff-alpha-hrm-schema.component-CrmfFmp_.mjs.map} +1 -1
  21. package/fesm2022/{ngx-histaff-alpha-live-form.component-CNy_G74n.mjs → ngx-histaff-alpha-live-form.component-DV2i5J0O.mjs} +2 -2
  22. package/fesm2022/{ngx-histaff-alpha-live-form.component-CNy_G74n.mjs.map → ngx-histaff-alpha-live-form.component-DV2i5J0O.mjs.map} +1 -1
  23. package/fesm2022/{ngx-histaff-alpha-ngx-histaff-alpha-D4Zg0nBV.mjs → ngx-histaff-alpha-ngx-histaff-alpha-ZuJOUjx5.mjs} +625 -1652
  24. package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-ZuJOUjx5.mjs.map +1 -0
  25. package/fesm2022/{ngx-histaff-alpha-simple-chat.component-Bg2rS7wL.mjs → ngx-histaff-alpha-simple-chat.component-D-1-4ueG.mjs} +2 -2
  26. package/fesm2022/{ngx-histaff-alpha-simple-chat.component-Bg2rS7wL.mjs.map → ngx-histaff-alpha-simple-chat.component-D-1-4ueG.mjs.map} +1 -1
  27. package/fesm2022/{ngx-histaff-alpha-sys-smtp-client-edit.component-DQP2QX4z.mjs → ngx-histaff-alpha-sys-smtp-client-edit.component-B52kSmQQ.mjs} +2 -2
  28. package/fesm2022/{ngx-histaff-alpha-sys-smtp-client-edit.component-DQP2QX4z.mjs.map → ngx-histaff-alpha-sys-smtp-client-edit.component-B52kSmQQ.mjs.map} +1 -1
  29. package/fesm2022/{ngx-histaff-alpha-sys-smtp-client.component-xTuHp7MI.mjs → ngx-histaff-alpha-sys-smtp-client.component-Bx1Pe-L_.mjs} +2 -2
  30. package/fesm2022/{ngx-histaff-alpha-sys-smtp-client.component-xTuHp7MI.mjs.map → ngx-histaff-alpha-sys-smtp-client.component-Bx1Pe-L_.mjs.map} +1 -1
  31. package/fesm2022/{ngx-histaff-alpha-template-list.component-CC4egsUj.mjs → ngx-histaff-alpha-template-list.component-DmAuuRfO.mjs} +2 -2
  32. package/fesm2022/{ngx-histaff-alpha-template-list.component-CC4egsUj.mjs.map → ngx-histaff-alpha-template-list.component-DmAuuRfO.mjs.map} +1 -1
  33. package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-Cssn665S.mjs → ngx-histaff-alpha-tracker-studio.component-evqwYp7h.mjs} +2 -2
  34. package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-Cssn665S.mjs.map → ngx-histaff-alpha-tracker-studio.component-evqwYp7h.mjs.map} +1 -1
  35. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-CLHZB2lN.mjs → ngx-histaff-alpha-wf-form-assign.component-Z6DlbzJK.mjs} +2 -2
  36. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-CLHZB2lN.mjs.map → ngx-histaff-alpha-wf-form-assign.component-Z6DlbzJK.mjs.map} +1 -1
  37. package/fesm2022/{ngx-histaff-alpha-wf-global-config.component-BxVnI1su.mjs → ngx-histaff-alpha-wf-global-config.component-BI7j-13X.mjs} +2 -2
  38. package/fesm2022/{ngx-histaff-alpha-wf-global-config.component-BxVnI1su.mjs.map → ngx-histaff-alpha-wf-global-config.component-BI7j-13X.mjs.map} +1 -1
  39. package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-CkuuIl_T.mjs → ngx-histaff-alpha-wf-instance-status.component-DBjF1yqr.mjs} +2 -2
  40. package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-CkuuIl_T.mjs.map → ngx-histaff-alpha-wf-instance-status.component-DBjF1yqr.mjs.map} +1 -1
  41. package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-CTH5pEfa.mjs → ngx-histaff-alpha-wf-instance-step-react.component-Qk-rKXYM.mjs} +3 -3
  42. package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-CTH5pEfa.mjs.map → ngx-histaff-alpha-wf-instance-step-react.component-Qk-rKXYM.mjs.map} +1 -1
  43. package/fesm2022/{ngx-histaff-alpha-wf-lab.component-Cci9VXWf.mjs → ngx-histaff-alpha-wf-lab.component-CkX8-pIb.mjs} +2 -2
  44. package/fesm2022/{ngx-histaff-alpha-wf-lab.component-Cci9VXWf.mjs.map → ngx-histaff-alpha-wf-lab.component-CkX8-pIb.mjs.map} +1 -1
  45. package/fesm2022/ngx-histaff-alpha.mjs +1 -1
  46. package/lib/app/libraries/core-form-design/core-form-design.component.d.ts +1 -1
  47. package/lib/app/libraries/core-form-design/core-form-group-editor.component.d.ts +1 -1
  48. package/lib/app/libraries/core-org-tree/core-org-tree/core-org-tree.component.d.ts +1 -0
  49. package/lib/app/libraries/core-orgchartflex-wrapper/IOrgPosition.d.ts +5 -0
  50. package/lib/app/libraries/core-orgchartflex-wrapper/IOrgRawItem.d.ts +1 -0
  51. package/lib/app/libraries/core-switcher-collection/core-switcher-collection.component.d.ts +31 -0
  52. package/lib/app/libraries/core-table/core-table.component.d.ts +1 -0
  53. package/package.json +2 -2
  54. package/public-api.d.ts +0 -4
  55. package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-D4Zg0nBV.mjs.map +0 -1
  56. package/lib/app/libraries/core-com-profile/core-com-profile.component.d.ts +0 -71
  57. package/lib/app/libraries/core-com-tree/IComTreeItem.d.ts +0 -18
  58. package/lib/app/libraries/core-com-tree/com-party.service.d.ts +0 -32
  59. package/lib/app/libraries/core-com-tree/core-com-tree.component.d.ts +0 -84
  60. package/lib/app/libraries/core-com-tree/mokeUpLinearData.d.ts +0 -19
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-histaff-alpha-design-wrapper.component-DlCeXrOT.mjs","sources":["../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/current-header/current-header.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/current-header/current-header.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-basic-info/wf-basic-info.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-basic-info/wf-basic-info.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-insert-menu/wf-insert-menu.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-insert-menu/wf-insert-menu.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-bottom-v-insert/wf-bottom-v-insert.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-bottom-v-insert/wf-bottom-v-insert.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-control-value-only/core-control-value-only.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-control-value-only/core-control-value-only.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-rule-tree/core-rule-tree.service.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-rule-tree/EnumCoreRuleTreeOparator.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-rule-tree/core-rule-tree.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-rule-tree/core-rule-tree.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-actor-selector/wf-actor-selector.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-actor-selector/wf-actor-selector.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-approver-config/wf-approver-config.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-approver-config/wf-approver-config.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-cc-config/wf-cc-config.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-cc-config/wf-cc-config.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-end-config/wf-end-config.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-end-config/wf-end-config.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-handler-config/wf-handler-config.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-handler-config/wf-handler-config.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-submit-config/wf-submit-config.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-submit-config/wf-submit-config.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-gpt-assistant/wf-gpt-assistant.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-gpt-assistant/wf-gpt-assistant.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/rule-config-shell/rule-config-shell.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/rule-config-shell/rule-config-shell.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-formui-config/wf-formui-config.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-formui-config/wf-formui-config.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-step-config-shell.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-step-config-shell.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/enums/EnumWorkflowBranch.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/bridge-line.service.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/bridge-line.directive.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/pipes/wf-node-label.pipe.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-node/wf-node.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-node/wf-node.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-steps-preview/wf-steps-preview.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-steps-preview/wf-steps-preview.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-workflow-canvas.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-workflow-canvas.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-process-design.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-process-design.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-email-templates/wf-email-templates.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-email-templates/wf-email-templates.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/design-wrapper/design-wrapper.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/design-wrapper/design-wrapper.component.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, inject, isDevMode, signal } from '@angular/core';\r\nimport { CoreWorkflowService } from '../../core-workflow.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { TooltipDirective } from '../../../tooltip/tooltip.directive';\r\nimport { BaseComponent } from '../../../base-component/base/base.component';\r\nimport { TranslatePipe } from '../../../../app-pipes/translate.pipe';\r\nimport { MultiLanguageService } from '../../../../services/multi-language.service';\r\nimport { AlertService } from '../../../alert/alert.service';\r\nimport { alertOptions, noneAutoClosedAlertOptions } from '../../../../constants/alertOptions';\r\nimport { CoreFormDesignService } from '../../../core-form-design/core-form-design.service';\r\nimport { catchError, Observable, of, tap } from 'rxjs';\r\nimport { EnumCorePageEditMode } from '../../../core-page-edit/EnumCorePageEditMode';\r\nimport { IStep } from '../../interfaces/IStep';\r\nimport { IStepRuleConfig } from '../../interfaces/IStepConfig';\r\nimport { EnumWorkflowStepType } from '../../enums/EnumWorkflowStepType';\r\nimport { EnumFormBaseContolType } from '../../../../enum/EnumFormBaseContolType';\r\n\r\n@Component({\r\n selector: 'current-header',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n TooltipDirective,\r\n TranslatePipe\r\n ],\r\n templateUrl: './current-header.component.html',\r\n styleUrl: './current-header.component.scss'\r\n})\r\nexport class CurrentHeaderComponent extends BaseComponent {\r\n\r\n public wfs = inject(CoreWorkflowService);\r\n fds = inject(CoreFormDesignService);\r\n router = inject(Router);\r\n route = inject(ActivatedRoute);\r\n alertService = inject(AlertService);\r\n\r\n $activeTab = this.wfs.$designActiveTab;\r\n $loading = this.wfs.$loading;\r\n\r\n steps = [\r\n { index: 1, label: 'Basic Info', changed: this.wfs.$basicInfoChanged, onClick: () => this.goToBasicInfo() },\r\n { index: 2, label: 'Form Design', changed: this.wfs.$formDesignChanged, onClick: () => this.goToFormDesign() },\r\n { index: 3, label: 'Process Design', changed: this.wfs.$processDesignChanged, onClick: () => this.goToProcessDesign() },\r\n { index: 4, label: 'Email Templates', changed: this.wfs.$moreChanged, onClick: () => this.goToEmailTemplates() }\r\n ];\r\n\r\n constructor(\r\n public override mls: MultiLanguageService\r\n ) {\r\n super(mls);\r\n }\r\n\r\n findStepMissingFallback(steps: IStep[]): IStep | undefined {\r\n for (const step of steps) {\r\n const config = step.config as IStepRuleConfig | undefined;\r\n\r\n if (\r\n step.type !== EnumWorkflowStepType.ConditionalBranch &&\r\n step.type !== EnumWorkflowStepType.BranchCard &&\r\n config?.ruleTree &&\r\n !config?.fallbackType\r\n ) {\r\n return step;\r\n }\r\n\r\n // 🧠 Recursively check children or branches\r\n if (Array.isArray((step as any).children)) {\r\n const found = this.findStepMissingFallback((step as any).children);\r\n if (found) return found;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n\r\n publish(): void {\r\n\r\n if (this.wfs.basicInfoForm.invalid) {\r\n this.alertService.warn('Invalid Basic Info', alertOptions);\r\n this.wfs.basicInfoFormCheckError$.next(true);\r\n setTimeout(() => this.wfs.basicInfoFormCheckError$.next(false), 5000)\r\n this.$activeTab.set(1); // Jump to Basic Info tab\r\n return;\r\n }\r\n if (this.wfs.emailTemplatesForm.invalid) {\r\n this.alertService.warn('Invalid Email Templates', alertOptions);\r\n this.wfs.emailTemplatesFormCheckError$.next(true);\r\n setTimeout(() => this.wfs.emailTemplatesFormCheckError$.next(false), 5000)\r\n this.$activeTab.set(4); // Jump to Email Templates tab\r\n return;\r\n }\r\n\r\n if (this.fds.$placeholderSections().some(x => x.rows.some(r => r?.cells.some(c => !c.control)))) {\r\n this.alertService.warn('Invalid Form Design: no control added', alertOptions);\r\n this.$activeTab.set(2); // Jump to Form Design tab\r\n return;\r\n }\r\n\r\n if (this.fds.formMetadata.invalid) {\r\n this.alertService.warn('Invalid Form Metadata', alertOptions);\r\n this.fds.$showFormMetadata.set(true);\r\n this.$activeTab.set(2); // Jump to Metadata tab\r\n return;\r\n }\r\n\r\n const unSafes = this.fds.$afInstance().sections\r\n .flatMap(section =>\r\n section.rows.flatMap(row =>\r\n row\r\n .filter(control =>\r\n control?.controlType === EnumFormBaseContolType.CALCULATED && control.isUnsafe\r\n )\r\n )\r\n );\r\n\r\n if (unSafes.length > 0) {\r\n this.fds.$control.set(unSafes[0]);\r\n this.$activeTab.set(2);\r\n this.alertService.warn(\r\n `Field ${unSafes[0].field} script is unsafe!`,\r\n alertOptions\r\n );\r\n return;\r\n }\r\n\r\n\r\n if (!!unSafes.length) {\r\n this.fds.$control.set(unSafes[0]);\r\n this.$activeTab.set(2);\r\n this.alertService.warn(\r\n `Field ${unSafes[0].field} script is unsafe!`,\r\n alertOptions\r\n );\r\n return;\r\n }\r\n\r\n const steps = this.wfs.$currentSteps() ?? [];\r\n const stepWithMissingFallback = this.findStepMissingFallback(steps);\r\n\r\n if (stepWithMissingFallback) {\r\n this.wfs.$currentStep.set(stepWithMissingFallback);\r\n this.wfs.$showStepConfig.set(true);\r\n this.$activeTab.set(3);\r\n this.alertService.warn(\r\n 'One of steps has a condition but no fallback type is set.',\r\n alertOptions\r\n );\r\n return;\r\n }\r\n\r\n const afInstanceDTO = this.fds.mapToAfInstanceDTO(this.fds.$afInstance());\r\n const currentFlow = this.wfs.$currentFlow();\r\n\r\n if (!currentFlow) {\r\n this.alertService.warn('No workflow selected', alertOptions);\r\n return;\r\n }\r\n\r\n // Update the currentFlow signal reactively\r\n this.wfs.$currentFlow.update(flow => {\r\n if (flow) {\r\n flow.afInstanceDTO = afInstanceDTO;\r\n\r\n const templates = this.wfs.emailTemplatesForm.getRawValue();\r\n const {\r\n submitSubject,\r\n submitBody,\r\n reactSubject,\r\n reactBody,\r\n fullyApproveSubject,\r\n fullyApproveBody,\r\n rejectSubject,\r\n rejectBody,\r\n cancelSubject,\r\n cancelBody,\r\n terminateSubject,\r\n terminateBody,\r\n revokeSubject,\r\n revokeBody,\r\n ccSubject,\r\n ccBody\r\n } = templates;\r\n flow.submitSubject = submitSubject;\r\n flow.submitBody = submitBody; \r\n flow.reactSubject = reactSubject;\r\n flow.reactBody = reactBody;\r\n flow.fullyApproveSubject = fullyApproveSubject;\r\n flow.fullyApproveBody = fullyApproveBody;\r\n flow.rejectSubject = rejectSubject;\r\n flow.rejectBody = rejectBody;\r\n flow.cancelSubject = cancelSubject;\r\n flow.cancelBody = cancelBody;\r\n flow.terminateSubject = terminateSubject;\r\n flow.terminateBody = terminateBody;\r\n flow.revokeSubject = revokeSubject;\r\n flow.revokeBody = revokeBody;\r\n flow.ccSubject = ccSubject;\r\n flow.ccBody = ccBody;\r\n }\r\n return flow;\r\n });\r\n\r\n\r\n this.$loading.set(true);\r\n this.subscriptions.push(\r\n this.wfs.publish()\r\n .pipe(\r\n catchError(err => {\r\n this.$loading.set(false);\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 return of({ ok: false, status: 500, body: { messageCode: msg } });\r\n })\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 this.wfs.$initialBasicInfoJson.set(this.wfs.$currentBasicInfoJson());\r\n this.wfs.$initialFormDesignJson.set(this.wfs.$currentFormDesignJson());\r\n this.wfs.$initialProcessDesignJson.set(this.wfs.$currentProcessDesignJson());\r\n\r\n this.router.navigate(['design', x.body.innerBody.id], { relativeTo: this.route.parent?.parent })\r\n this.wfs.basicInfoForm.get('id')?.patchValue(x.body.innerBody.id);\r\n }\r\n })\r\n )\r\n }\r\n\r\n preview(): void {\r\n\r\n if (!!this.fds.$afInstance().normalMode) {\r\n this.router.navigate(\r\n [this.wfs.$currentFlow()?.afInstanceId],\r\n {\r\n relativeTo: this.route.parent,\r\n queryParams: { preview: true },\r\n queryParamsHandling: 'merge'\r\n },\r\n )\r\n } else {\r\n this.router.navigate(\r\n [\r\n {\r\n outlets: {\r\n preview: [this.wfs.$currentFlow()?.afInstanceId],\r\n },\r\n },\r\n ],\r\n {\r\n relativeTo: this.route.parent,\r\n queryParams: { preview: true },\r\n queryParamsHandling: 'merge'\r\n },\r\n )\r\n }\r\n }\r\n\r\n backToList(): void {\r\n this.router.navigateByUrl('/root/workflow/workflow-list');\r\n }\r\n\r\n goToBasicInfo(): void {\r\n this.$activeTab.set(1);\r\n }\r\n\r\n goToFormDesign(): void {\r\n this.$activeTab.set(2);\r\n }\r\n\r\n goToProcessDesign(): void {\r\n this.$activeTab.set(3);\r\n }\r\n\r\n goToEmailTemplates(): void {\r\n this.$activeTab.set(4);\r\n }\r\n}\r\n","<div class=\"current-header-container\">\r\n <div class=\"left pointer\" (click)=\"backToList()\">\r\n\r\n <div class=\"icon-wrapper\" [appTooltip]=\"'Back to list' | translate : lang\" [showAnyway]=\"true\">\r\n <i class=\"feather-chevron-left\"></i>\r\n </div>\r\n <div class=\"current-flow-name\" [appTooltip]=\"wfs.$currentFlow()?.name || ''\">\r\n {{ wfs.$currentFlow()?.name || 'New Workflow' }}\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"stages\">\r\n @for (step of steps; track step.index) {\r\n <div\r\n class=\"step-wrapper\"\r\n [class.active]=\"$activeTab() === step.index\"\r\n [class.changed]=\"step.changed()\"\r\n (click)=\"step.onClick()\"\r\n (keydown.enter)=\"step.onClick()\"\r\n >\r\n <div class=\"order\">{{ step.index }}</div>\r\n <div class=\"step\">{{ step.label }}</div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"right\">\r\n <button type=\"button\" class=\"btn preview\" (click)=\"preview()\">Preview</button>\r\n <button type=\"button\" class=\"btn publish\" (click)=\"publish()\">Save</button>\r\n </div>\r\n </div>\r\n ","import { AfterViewInit, ChangeDetectionStrategy, Component, effect, inject, Injector, Input, runInInjectionContext } from '@angular/core';\r\nimport { CorePageEditComponent } from '../../core-page-edit/core-page-edit.component';\r\nimport { BaseEditComponent } from '../../base-edit/base-edit/base-edit.component';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\nimport { ICorePageEditCRUD } from '../../core-page-edit/ICorePageEditCRUD';\r\nimport { ICoreFormSection } from '../../core-form/core-form/enum-interfaces';\r\nimport { EnumFormBaseContolType } from '../../../enum/EnumFormBaseContolType';\r\nimport { FormGroup, Validators } from '@angular/forms';\r\nimport { EnumTranslateKey } from 'alpha-global-constants';\r\nimport { DialogService } from '../../../services/dialog.service';\r\nimport { AppService } from '../../../services/app.service';\r\nimport { FullscreenModalLoaderComponent } from '../../fullscreen-modal-loader/fullscreen-modal-loader.component';\r\nimport { ICoreDropdownOption } from '../../../interfaces/ICoreDropdownOption';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\nimport { AlertService } from '../../alert/alert.service';\r\nimport { alertOptions } from '../../../constants/alertOptions';\r\nimport { CoreFormDesignService } from '../../core-form-design/core-form-design.service';\r\n\r\n@Component({\r\n selector: 'wf-basic-info',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CorePageEditComponent,\r\n FullscreenModalLoaderComponent\r\n ],\r\n templateUrl: './wf-basic-info.component.html',\r\n styleUrl: './wf-basic-info.component.scss'\r\n})\r\nexport class WfBasicInfoComponent extends BaseEditComponent implements AfterViewInit {\r\n\r\n @Input() captionCode!: string;\r\n public wfs = inject(CoreWorkflowService);\r\n alertService = inject(AlertService);\r\n fds = inject(CoreFormDesignService);\r\n\r\n private injector = inject(Injector);\r\n\r\n constructor(\r\n public override dialogService: DialogService,\r\n private appService: AppService,\r\n ) {\r\n\r\n super(dialogService);\r\n\r\n if (!this.captionCode) {\r\n this.captionCode = \"UI_COMPONENT_TITLE_WF_WORKFLOW_GROUP\";\r\n }\r\n\r\n this.crud = {\r\n c: '/api/WfWorkflow/Create',\r\n r: '/api/WfWorkflow/GetById',\r\n u: '/api/WfWorkflow/Update',\r\n d: '/api/WfWorkflow/Delete',\r\n };\r\n\r\n const groupIdString = this.route.snapshot.queryParamMap.get('groupId');\r\n if (!!groupIdString) {\r\n const groupId = Number(groupIdString);\r\n if (this.wfs.$allGroups().length) {\r\n this.wfs.$currentGroup.set(this.wfs.$allGroups().filter(g => g.id === groupId)[0])\r\n } else {\r\n //this.wfs.refresh('/api/WfWorkflowGroup/GetAllWithWorkflows', '', groupId);\r\n }\r\n } else if (this.wfs.$designActiveTab() === 1) {\r\n this.alertService.warn(\"The Query Params lack of groupId\", alertOptions);\r\n }\r\n\r\n }\r\n\r\n router = inject(Router);\r\n route = inject(ActivatedRoute);\r\n\r\n loading: boolean = false;\r\n override entityTable = \"WF_WORKFLOW\";\r\n subscriptions: Subscription[] = [];\r\n\r\n groupOptions$ = new BehaviorSubject<ICoreDropdownOption[]>([]);\r\n\r\n crud!: ICorePageEditCRUD;\r\n sections: ICoreFormSection[] =\r\n [\r\n {\r\n rows: [\r\n [\r\n {\r\n flexSize: 0,\r\n label: \"UI_ENTITY_FIELD_CAPTION_COMMON_ID\",\r\n field: 'id',\r\n value: null,\r\n hidden: true,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n },\r\n {\r\n flexSize: 0,\r\n label: \"UI_ENTITY_FIELD_CAPTION_WF_WORKFLOW_GROUP_ID\",\r\n field: 'groupId',\r\n disabled: true,\r\n hidden: true,\r\n value: this.wfs.$currentGroup()?.id,\r\n controlType: EnumFormBaseContolType.DROPDOWN,\r\n type: 'number',\r\n dropdownOptions$: this.groupOptions$,\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n getByIdApi: '/api/WfWorkflowGroup/GetById',\r\n shownFrom: 'name',\r\n validators: [\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_REQUIRED\r\n },\r\n ]\r\n },\r\n {\r\n flexSize: 6,\r\n label: \"UI_ENTITY_FIELD_CAPTION_WF_WORKFLOW_CODE\",\r\n field: 'code',\r\n value: '',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'string',\r\n validators: [\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_REQUIRED\r\n },\r\n {\r\n name: 'minLength',\r\n validator: Validators.minLength(4),\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n }\r\n ]\r\n },\r\n {\r\n flexSize: 6,\r\n label: \"UI_ENTITY_FIELD_CAPTION_WF_WORKFLOW_NAME\",\r\n field: 'name',\r\n value: '',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'string',\r\n validators: [\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_REQUIRED\r\n },\r\n {\r\n name: 'minLength',\r\n validator: Validators.minLength(4),\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n }\r\n ]\r\n },\r\n ],\r\n [\r\n {\r\n flexSize: 12,\r\n label: \"UI_ENTITY_FIELD_CAPTION_WF_WORKFLOW_DESCRIPTION\",\r\n field: 'description',\r\n value: '',\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n textareaRows: 5,\r\n type: 'string',\r\n validators: [\r\n {\r\n name: 'minLength',\r\n validator: Validators.minLength(20),\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH,\r\n }\r\n ]\r\n },\r\n ],\r\n [\r\n {\r\n flexSize: 12,\r\n label: \"UI_ENTITY_FIELD_CAPTION_WF_WORKFLOW_ALLOW_ON_BEHALF\",\r\n field: 'allowOnBehalf',\r\n value: false,\r\n controlType: EnumFormBaseContolType.CHECKBOX,\r\n type: 'boolean',\r\n hint: 'If enabled, users can submit this workflow request on behalf of other employees.'\r\n },\r\n ],\r\n [\r\n {\r\n flexSize: 12,\r\n label: \"UI_ENTITY_FIELD_CAPTION_WF_WORKFLOW_ALLOW_CUSTOM_CC\",\r\n field: 'allowCustomCc',\r\n value: false,\r\n controlType: EnumFormBaseContolType.CHECKBOX,\r\n type: 'boolean',\r\n hint: 'If enabled, submitter can add custom cc emails.'\r\n },\r\n ],\r\n /*\r\n [\r\n {\r\n field: 'afInstanceId',\r\n label: 'Form template',\r\n flexSize: 12,\r\n value: '',\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.FORM_SEEK,\r\n getByIdObject$: new BehaviorSubject<any>(null),\r\n getByIdApi: '/api/AfInstance/GetById',\r\n shownFrom: 'name',\r\n boundFrom: 'id'\r\n }\r\n ]\r\n */\r\n ]\r\n }\r\n ];\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n\r\n this.subscriptions.push(\r\n this.appService.get('/api/WfWorkflowGroup/GetAllAsc')\r\n .subscribe(x => {\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n const newGroupOptions: ICoreDropdownOption[] = [];\r\n x.body?.innerBody.forEach(e => {\r\n newGroupOptions.push({\r\n value: e.id,\r\n text: e.name\r\n })\r\n });\r\n this.groupOptions$.next(newGroupOptions)\r\n }\r\n })\r\n )\r\n })\r\n }\r\n\r\n private updateCurrentFlow(values: any) {\r\n if (!values) return;\r\n this.wfs.$currentFlow.update(currentFlow => {\r\n if (!currentFlow) {\r\n return null\r\n } else {\r\n Object.keys(values).forEach(key => {\r\n currentFlow[key] = values[key]\r\n })\r\n return { ...currentFlow }\r\n }\r\n })\r\n }\r\n private updateCurrentFlowByKey(key: string, value: any) {\r\n this.wfs.$currentFlow.update(currentFlow => {\r\n if (!currentFlow) {\r\n return null\r\n } else {\r\n currentFlow[key] = value\r\n return { ...currentFlow }\r\n }\r\n })\r\n }\r\n\r\n private updateCurrentAfInstance(formValue: any): void {\r\n console.log(\"[WfBasicInfoComponent][updateCurrentAfInstance]: $afInstance is being updated\");\r\n this.fds.$afInstance.update(current => {\r\n if (!current) return current;\r\n return {\r\n ...current,\r\n name: formValue.name,\r\n code: formValue.code\r\n };\r\n });\r\n }\r\n\r\n onFormCreated(e: FormGroup): void {\r\n this.wfs.basicInfoForm = e;\r\n\r\n e.valueChanges.subscribe(x => {\r\n this.wfs.$currentBasicInfoJson.set(JSON.stringify(x));\r\n\r\n this.updateCurrentFlow(x);\r\n this.updateCurrentAfInstance(x);\r\n\r\n });\r\n\r\n runInInjectionContext(this.injector, () => {\r\n effect(() => {\r\n const form = this.wfs.basicInfoForm;\r\n const groupId = this.wfs.$currentGroup()?.id;\r\n\r\n if (form && groupId) {\r\n form.get('groupId')?.patchValue(groupId, { emitEvent: false });\r\n this.updateCurrentFlowByKey('groupId', groupId);\r\n this.wfs.$currentBasicInfoJson.set(JSON.stringify(form.getRawValue()));\r\n }\r\n });\r\n });\r\n\r\n }\r\n\r\n\r\n /* To allow form to be deactivated */\r\n onFormReinit(e: string): void {\r\n this.wfs.$initialBasicInfoJson.set(e);\r\n this.formInitStringValue = e;\r\n }\r\n\r\n onSubmitSuccess(e: any) {\r\n //this.wfs.refresh(undefined, '');\r\n this.router.navigate(\r\n [{ outlets: { workflowAux: null } }],\r\n { relativeTo: this.route.parent }\r\n );\r\n }\r\n\r\n onGotById(e: any) {\r\n this.wfs.emailTemplatesForm.patchValue(e);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.wfs.$initialBasicInfoJson.set('{}');\r\n this.subscriptions.map(x => x?.unsubscribe())\r\n }\r\n}","<div class=\"wf-basic-info-container\">\r\n\r\n <div class=\"container container-fluid\">\r\n\r\n <core-page-edit\r\n [normalMode]=\"true\"\r\n [captionCode]=\"''\"\r\n [sections]=\"sections\" [crud]=\"crud\" [entityTable]=\"entityTable\" [hasIdOfStringType]=\"true\"\r\n [stayAfterSubmit]=\"true\" (onFormCreated)=\"onFormCreated($event)\"\r\n [idAsInput]=\"true\"\r\n [id]=\"wfs.$currentFlow()?.id\"\r\n [hideButtons]=\"true\"\r\n [checkError$]=\"wfs.basicInfoFormCheckError$\"\r\n (onGotById)=\"onGotById($event)\"\r\n (onInitialValueStringReady)=\"onFormReinit($event)\"\r\n (onSubmitSuccess)=\"onSubmitSuccess($event)\">\r\n </core-page-edit>\r\n\r\n </div>\r\n\r\n</div>\r\n\r\n@if (loading) {\r\n<app-fullscreen-modal-loader></app-fullscreen-modal-loader>\r\n}","import { AfterViewInit, Component, ElementRef, EventEmitter, inject, Input, Output, Renderer2, ViewChild } from '@angular/core';\r\nimport { EnumWorkflowStepType } from '../../enums/EnumWorkflowStepType';\r\nimport { BaseComponent } from '../../../base-component/base/base.component';\r\nimport { MultiLanguageService } from '../../../../services/multi-language.service';\r\nimport { CoreWorkflowService } from '../../core-workflow.service';\r\nimport { DomService } from '../../../services/dom.service';\r\n\r\n@Component({\r\n selector: 'wf-insert-menu',\r\n imports: [],\r\n templateUrl: './wf-insert-menu.component.html',\r\n styleUrl: './wf-insert-menu.component.scss'\r\n})\r\nexport class WfInsertMenuComponent extends BaseComponent implements AfterViewInit {\r\n\r\n @Output() insert = new EventEmitter<{ type: EnumWorkflowStepType; index: number; branchId: string }>();\r\n\r\n @ViewChild('container') container!: ElementRef;\r\n\r\n coreWorkflowService = inject(CoreWorkflowService);\r\n elRef = inject(ElementRef);\r\n\r\n listenerFn!: () => void;\r\n\r\n enumType = EnumWorkflowStepType;\r\n\r\n constructor(\r\n public override mls: MultiLanguageService,\r\n private renderer: Renderer2,\r\n private domService: DomService\r\n ) {\r\n super(mls);\r\n }\r\n \r\n onInsert(type: EnumWorkflowStepType): void {\r\n this.insert.emit({\r\n type,\r\n index: this.coreWorkflowService.insertContext$.value!.index,\r\n branchId: this.coreWorkflowService.insertContext$.value!.branchId ?? 'root'\r\n });\r\n this.coreWorkflowService.insertContext$.next(null);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n\r\n this.listenerFn = this.renderer.listen('window', 'click', (e: Event) => {\r\n\t\t\t\r\n e.stopPropagation();\r\n \r\n if (this.container && !!!this.container.nativeElement.contains(e.target)) {\r\n this.coreWorkflowService.insertContext$.next(null);\r\n }\r\n });\r\n\r\n const rect = this.coreWorkflowService.insertAnchorPoint$.value;\r\n const menuEl = this.elRef.nativeElement as HTMLElement;\r\n \r\n if (!rect) return;\r\n\r\n const menuHeight = menuEl.offsetHeight;\r\n const zIndex = this.domService.getMaxZIndex() + 1;\r\n\r\n menuEl.style.position = 'fixed';\r\n menuEl.style.left = `${rect.right + 8}px`;\r\n menuEl.style.top = `${rect.top}px`;\r\n menuEl.style.zIndex = `${zIndex}`;\r\n\r\n\r\n })\r\n }\r\n\r\n onCancelClicked(): void {\r\n this.coreWorkflowService.insertContext$.next(null);\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n this.subscriptions.forEach(x => x?.unsubscribe());\r\n if (this.listenerFn) this.listenerFn();\r\n }\r\n}\r\n","<div class=\"wf-insert-menu-container\" #container>\r\n\r\n <div class=\"menu-item\" (click)=\"onInsert(enumType.Approval)\">\r\n <div class=\"menu-item-icon-wrapper\">\r\n <div class=\"menu-item-icon\">🟧</div>\r\n </div>\r\n <div class=\"menu-item-text\">\r\n <div>Approver</div>\r\n </div>\r\n </div>\r\n <div class=\"menu-item\" (click)=\"onInsert(enumType.CC)\">\r\n <div class=\"menu-item-icon-wrapper\">\r\n <div class=\"menu-item-icon\">🟦</div>\r\n </div>\r\n <div class=\"menu-item-text\">\r\n <div>CC</div>\r\n </div>\r\n </div>\r\n <div class=\"menu-item\" (click)=\"onInsert(enumType.Handle)\">\r\n <div class=\"menu-item-icon-wrapper\">\r\n <div class=\"menu-item-icon\">🟪</div>\r\n </div>\r\n <div class=\"menu-item-text\">\r\n <div>Handler</div>\r\n </div>\r\n </div>\r\n <div class=\"menu-item\" (click)=\"onInsert(enumType.ConditionalBranch)\">\r\n <div class=\"menu-item-icon-wrapper\">\r\n <div class=\"menu-item-icon\">🌿</div>\r\n </div>\r\n <div class=\"menu-item-text\">\r\n <div>Conditional Branch</div>\r\n </div>\r\n </div>\r\n <div class=\"menu-item\" (click)=\"onCancelClicked()\">\r\n <div class=\"menu-item-icon-wrapper\">\r\n <div class=\"menu-item-icon\">❌</div>\r\n </div>\r\n <div class=\"menu-item-text\">\r\n <div>Cancel</div>\r\n </div>\r\n </div>\r\n</div>","import { AfterViewInit, Component, ElementRef, EventEmitter, inject, Input, OnChanges, Output, Renderer2, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { WfInsertMenuComponent } from '../wf-insert-menu/wf-insert-menu.component';\r\nimport { IWorkflowInsertPoint } from '../../interfaces/IWorkflowInsertPoint';\r\nimport { IInsertStepEvent } from '../../interfaces/IInsertStepEvent';\r\nimport { CoreWorkflowService } from '../../core-workflow.service';\r\nimport { BaseComponent } from '../../../base-component/base/base.component';\r\nimport { IStep } from '../../interfaces/IStep';\r\nimport { AsyncPipe } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'wf-bottom-v-insert',\r\n imports: [\r\n AsyncPipe,\r\n WfInsertMenuComponent\r\n ],\r\n templateUrl: './wf-bottom-v-insert.component.html',\r\n styleUrls: ['../wf-workflow-canvas.component.scss']\r\n})\r\nexport class WfBottomVInsertComponent extends BaseComponent implements AfterViewInit {\r\n @Input({ required: true }) currentContext!: IWorkflowInsertPoint;\r\n @Input({ required: true }) currentStep!: IStep;\r\n\r\n @Output() insertStep = new EventEmitter<IInsertStepEvent>();\r\n\r\n @ViewChild('plusContainer') plusContainer!: ElementRef;\r\n\r\n shouldShowInsert = false;\r\n\r\n public coreWorkflowService = inject(CoreWorkflowService);\r\n el = inject(ElementRef);\r\n renderer = inject(Renderer2);\r\n\r\n private observer: MutationObserver | null = null;\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 this.subscriptions.push(\r\n this.coreWorkflowService.insertContext$\r\n .subscribe(ctx => {\r\n this.shouldShowInsert = !!ctx &&\r\n ctx.branchId === this.currentContext.branchId &&\r\n ctx.index === this.currentContext.index;\r\n })\r\n );\r\n\r\n }\r\n\r\n onShowInsert(e: MouseEvent): void {\r\n const insertContext = {\r\n branchId: this.currentContext.branchId,\r\n index: this.currentContext.index\r\n };\r\n\r\n const triggerEl = e.currentTarget as HTMLElement;\r\n const rect = triggerEl.getBoundingClientRect();\r\n \r\n this.coreWorkflowService.insertContext$.next(insertContext);\r\n this.coreWorkflowService.insertAnchorPoint$.next(rect);\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n\r\n });\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n this.subscriptions.forEach(x => x?.unsubscribe());\r\n this.observer?.disconnect();\r\n }\r\n\r\n}\r\n","<div class=\"wf-bottom-v-insert-container\" \r\n [class.shorter]=\"(!!currentStep.isPseudo && !!currentStep.isInFallbackBranch!) || !!currentStep.config\"\r\n [class.insert-context]=\"(coreWorkflowService.insertContext$ | async)?.branchId === currentContext.branchId && (coreWorkflowService.insertContext$ | async)?.index === currentContext.index\"\r\n>\r\n <div class=\"vertical-line\"></div>\r\n\r\n <div class=\"plus-container\" #plusContainer>\r\n <button class=\"plus-btn\" (click)=\"onShowInsert($event)\">+</button>\r\n </div>\r\n\r\n <div class=\"arrow-down-container\">\r\n <div class=\"arrow-down\"></div>\r\n </div>\r\n\r\n</div>","import { ChangeDetectionStrategy, Component, effect, inject, input, isDevMode } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { IFormBaseControl } from '../core-form/core-form/enum-interfaces';\r\nimport { CoreDropdownComponent } from '../core-dropdown/core-dropdown/core-dropdown.component';\r\nimport { CoreChecklistComponent } from '../core-checklist/core-checklist/core-checklist.component';\r\nimport { CoreDatePickerComponent } from '../core-date-picker/core-date-picker/core-date-picker.component';\r\nimport { CoreFormControlSeekerComponent } from '../core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component';\r\nimport { CoreCurrencyInputComponent } from '../core-currency-input/core-currency-input/core-currency-input.component';\r\nimport { EnumFormBaseContolType } from '../../enum/EnumFormBaseContolType';\r\nimport { AlertService } from '../alert/alert.service';\r\nimport { alertOptions } from '../../constants/alertOptions';\r\n\r\n@Component({\r\n selector: 'core-control-value-only',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n ReactiveFormsModule,\r\n CoreDropdownComponent,\r\n CoreChecklistComponent,\r\n CoreDatePickerComponent,\r\n CoreFormControlSeekerComponent,\r\n CoreCurrencyInputComponent\r\n ],\r\n templateUrl: './core-control-value-only.component.html',\r\n styleUrl: './core-control-value-only.component.scss'\r\n})\r\nexport class CoreControlValueOnlyComponent {\r\n $control = input.required<IFormBaseControl>();\r\n $form = input.required<FormGroup>();\r\n $fieldName = input<string>();\r\n\r\n as = inject(AlertService);\r\n\r\n constructor() {\r\n effect(() => {\r\n const control = this.$control();\r\n const form = this.$form();\r\n form.get(control?.field)?.valueChanges.subscribe(x => {\r\n this.coerceControlValue()\r\n })\r\n })\r\n }\r\n\r\n private coerceControlValue(): void {\r\n const controlType = this.$control()?.controlType;\r\n\r\n switch (controlType) {\r\n case EnumFormBaseContolType.TEXTBOX:\r\n this.coerceNumber();\r\n break;\r\n\r\n case EnumFormBaseContolType.DATEPICKER:\r\n this.coerceDate();\r\n break;\r\n\r\n }\r\n }\r\n\r\n private coerceDate(): void {\r\n const field = this.$fieldName() || this.$control().field;\r\n const control = this.$form().get(field);\r\n const value = control?.value;\r\n\r\n if (this.$control()?.type === 'date') {\r\n if (value instanceof Date) {\r\n const normalized = this.formatDateOnly(value);\r\n control?.setValue(normalized, { emitEvent: false });\r\n } else if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}T/.test(value)) {\r\n const normalized = value.split('T')[0];\r\n control?.setValue(normalized, { emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private formatDateOnly(date: Date): string {\r\n const y = date.getFullYear();\r\n const m = String(date.getMonth() + 1).padStart(2, '0');\r\n const d = String(date.getDate()).padStart(2, '0');\r\n return `${y}-${m}-${d}`;\r\n }\r\n\r\n\r\n coerceNumber(): void {\r\n const field = this.$fieldName() || this.$control().field;\r\n const control = this.$form().get(field);\r\n const value = control?.value;\r\n\r\n if (this.$control()?.type === 'number' && typeof value === 'string') {\r\n const trimmed = value.trim();\r\n\r\n if (trimmed === '') {\r\n control?.setValue(null, { emitEvent: false }); // ✅ treat empty string as null\r\n return;\r\n }\r\n\r\n if (!isNaN(+trimmed)) {\r\n control?.setValue(Number(trimmed), { emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n const field = this.$fieldName() || this.$control().field;\r\n const control = this.$form().get(field);\r\n if (!control) {\r\n if (isDevMode()) {\r\n this.as.error(\"control is undefined|null\", alertOptions)\r\n }\r\n return;\r\n }\r\n\r\n this.coerceControlValue(); // Run once on init\r\n\r\n control.valueChanges.subscribe(() => {\r\n this.coerceControlValue(); // Run on every input change\r\n });\r\n }\r\n\r\n}\r\n","<div [formGroup]=\"$form()\">\r\n @switch ($control()?.controlType) {\r\n @case ('TEXTBOX') {\r\n <input class=\"form-control\" [formControlName]=\"$fieldName() || $control()?.field || ''\" [type]=\"$control()?.type || 'text'\"\r\n [placeholder]=\"$control()?.placeholder || ''\" [readonly]=\"$control()?.readonly\" />\r\n }\r\n @case ('CURRENCY') {\r\n <core-currency-input [formControlName]=\"$fieldName() || $control()?.field || ''\"\r\n [placeholder]=\"$control()?.placeholder || ''\">\r\n </core-currency-input>\r\n }\r\n @case ('DROPDOWN') {\r\n @if ($control()?.dropdownOptions$) {\r\n <core-dropdown \r\n [formControlName]=\"$fieldName() || $control()?.field || ''\" \r\n [options$]=\"$control()?.dropdownOptions$!\"\r\n [getByIdObject$]=\"$control()?.getByIdObject$!\"\r\n [shownFrom]=\"$control()?.shownFrom!\"\r\n\r\n [optionApiDriven]=\"$control()?.optionApiDriven!\"\r\n [optionApi]=\"$control()?.optionApi!\"\r\n [optionHttpVerb]=\"$control()?.optionHttpVerb!\"\r\n [optionHttpPayload]=\"$control()?.optionHttpPayload!\"\r\n [optionValueFrom]=\"$control()?.optionValueFrom!\"\r\n [optionTextFrom]=\"$control()?.optionTextFrom!\"\r\n >\r\n </core-dropdown>\r\n }\r\n }\r\n @case ('CHECKLIST') {\r\n @if ($control()?.checklistOptions$) {\r\n <core-checklist [formControlName]=\"$fieldName() || $control()?.field || ''\" [options$]=\"$control()?.checklistOptions$!\">\r\n </core-checklist>\r\n }\r\n }\r\n @case ('DATEPICKER') {\r\n <core-date-picker [formControlName]=\"$fieldName() || $control()?.field || ''\" [rangeLimit]=\"$control()?.rangeLimit!\"\r\n [popupAlign]=\"$control()?.popupAlign!\" [placeholder]=\"$control()?.placeholder || ''\"\r\n [readonly]=\"$control()?.readonly!\">\r\n </core-date-picker>\r\n }\r\n @case ('SEEKER') {\r\n <core-form-control-seeker [formControlName]=\"$fieldName() || $control()?.field || ''\"\r\n [seekerSourceType]=\"$control()?.seekerSourceType!\" [shownFrom]=\"$control()?.shownFrom!\"\r\n [multiMode]=\"$control()?.multiMode!\"\r\n [boundFrom]=\"$control()?.boundFrom!\" [objectList$]=\"$control()?.objectList$!\">\r\n </core-form-control-seeker>\r\n }\r\n @default {\r\n <input class=\"form-control\" [formControlName]=\"$fieldName() || $control()?.field || ''\" type=\"text\"\r\n [placeholder]=\"$control()?.placeholder || ''\" [readonly]=\"$control()?.readonly\" />\r\n }\r\n }\r\n</div>","import { computed, Injectable, signal, WritableSignal } from '@angular/core';\r\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CoreRuleTreeService {\r\n\r\n $formValue: WritableSignal<any> = signal<any>(null); // Manual form value signal\r\n $filterFormJsonString: WritableSignal<string> = signal<string>('{}');\r\n\r\n $filterString = computed(() => {\r\n const json = this.$filterFormJsonString();\r\n if (!json) return '()';\r\n\r\n try {\r\n const cleaned = JSON.parse(json);\r\n return this.getFilterString(cleaned);\r\n } catch {\r\n return '()';\r\n }\r\n });\r\n\r\n constructor() { }\r\n\r\n cleanEmptyFilters(node: any): any {\r\n if (!node || typeof node !== 'object') return node;\r\n\r\n // If it's a group with filters\r\n if (Array.isArray(node.filters)) {\r\n node.filters = node.filters\r\n .map(f => this.cleanEmptyFilters(f))\r\n .filter(f => f !== null); // optional: skip nulls\r\n\r\n if (node.filters.length === 0) {\r\n delete node.filters; // ← Clean!\r\n }\r\n }\r\n\r\n return node;\r\n }\r\n\r\n getFilterString(filter: any): string {\r\n if (!filter || Object.keys(filter).length === 0) return '()';\r\n\r\n let str = '(';\r\n for (let i = 0; i < filter.filters?.length; i++) {\r\n if (i > 0) str += ` ${filter.logicalOperator} `;\r\n\r\n const f = filter.filters[i];\r\n\r\n if (f?.filters?.length) {\r\n str += this.getFilterString(f);\r\n } else {\r\n const rawVal = f.value;\r\n let formattedVal = rawVal;\r\n\r\n if (rawVal instanceof Date) {\r\n formattedVal = this.formatDateToYMD(rawVal);\r\n } else if (typeof rawVal === 'string' && /^\\d{4}-\\d{2}-\\d{2}T/.test(rawVal)) {\r\n // parse ISO string if needed\r\n try {\r\n formattedVal = this.formatDateToYMD(new Date(rawVal));\r\n } catch { }\r\n }\r\n\r\n str += `${f.name} ${f.relationalOperator} '${formattedVal}'`;\r\n }\r\n }\r\n return str + ')';\r\n }\r\n\r\n formatDateToYMD(date: Date): string {\r\n const yyyy = date.getFullYear();\r\n const mm = String(date.getMonth() + 1).padStart(2, '0'); // Months are 0-based\r\n const dd = String(date.getDate()).padStart(2, '0');\r\n return `${yyyy}-${mm}-${dd}`;\r\n }\r\n\r\n buildFormGroupFromStep(config?: any): FormGroup {\r\n const logicalOperator = config?.logicalOperator ?? 'AND';\r\n\r\n const buildFilter = (f: any): FormGroup => {\r\n // If it has logicalOperator and filters → it's a nested group\r\n if (f?.logicalOperator && Array.isArray(f.filters)) {\r\n return this.buildFormGroupFromStep(f);\r\n }\r\n\r\n return new FormGroup({\r\n name: new FormControl(f?.name ?? null),\r\n value: new FormControl(f?.value ?? null),\r\n relationalOperator: new FormControl(f?.relationalOperator ?? 'EQUAL'),\r\n defaultMessage: new FormControl(f?.defaultMessage ?? ''),\r\n englishMessage: new FormControl(f?.englishMessage ?? '')\r\n });\r\n };\r\n\r\n const filters = Array.isArray(config?.filters)\r\n ? config.filters.map(buildFilter)\r\n : [];\r\n\r\n const form = new FormGroup({\r\n logicalOperator: new FormControl(logicalOperator),\r\n filters: new FormArray(filters)\r\n });\r\n\r\n // Only once all controls exist\r\n setTimeout(() => this.$formValue.set(form.getRawValue()));\r\n\r\n return form;\r\n }\r\n\r\n\r\n}\r\n","export enum EnumCoreRuleTreeOparator {\r\n EQUAL = 'EQUAL',\r\n GREATER_THAN = 'GREATER_THAN',\r\n LESS_THAN = 'LESS_THAN',\r\n GREATER_OR_EQUAL_THAN = 'GREATER_OR_EQUAL_THAN',\r\n LESS_OR_EQUAL_THAN = 'LESS_OR_EQUAL_THAN',\r\n STARTS_WITH = 'STARTS_WITH',\r\n ENDS_WITH = 'ENDS_WITH',\r\n CONTAINS = 'CONTAINS',\r\n IN = 'IN',\r\n NOT_EQUAL = 'NOT_EQUAL',\r\n NOT_STARTS_WITH = 'NOT_STARTS_WITH',\r\n NOT_ENDS_WITH = 'NOT_ENDS_WITH',\r\n NOT_CONTAINS = 'NOT_CONTAINS',\r\n NOT_IN = 'NOT_IN',\r\n IS_NULL = 'IS_NULL',\r\n IS_NOT_NULL = 'IS_NOT_NULL'\r\n}","import { Component, input, output, signal, effect, WritableSignal, ChangeDetectionStrategy, ChangeDetectorRef, computed, inject } from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { AbstractControl, FormArray, FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { CoreDropdownComponent } from '../core-dropdown/core-dropdown/core-dropdown.component';\r\nimport { TooltipDirective } from '../tooltip/tooltip.directive';\r\nimport { TranslatePipe } from '../../app-pipes/translate.pipe';\r\nimport { BaseComponent } from '../base-component/base/base.component';\r\nimport { MultiLanguageService } from '../../services/multi-language.service';\r\nimport { IFormBaseControl } from '../core-form/core-form/enum-interfaces';\r\nimport { CoreControlValueOnlyComponent } from '../core-control-value-only/core-control-value-only.component';\r\nimport { CoreRuleTreeService } from './core-rule-tree.service';\r\nimport { EnumCoreRuleTreeOparator } from './EnumCoreRuleTreeOparator';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\n\r\n@Component({\r\n selector: 'core-rule-tree',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CoreControlValueOnlyComponent,\r\n NgTemplateOutlet,\r\n CoreDropdownComponent,\r\n TooltipDirective,\r\n TranslatePipe\r\n ],\r\n templateUrl: './core-rule-tree.component.html',\r\n styleUrls: ['./core-rule-tree.component.scss'],\r\n animations: [\r\n trigger('fadeSwitch', [\r\n state('visible', style({ opacity: 1 })),\r\n state('hidden', style({ opacity: 0 })),\r\n transition('hidden => visible', [animate('250ms ease-in')]),\r\n transition('visible => hidden', [animate('150ms ease-out')]),\r\n ])\r\n ]\r\n})\r\nexport class CoreRuleTreeComponent extends BaseComponent {\r\n\r\n // Inputs\r\n $totalCols = input<IFormBaseControl[]>([]);\r\n $mainForm = input<FormGroup>(new FormGroup({\r\n logicalOperator: new FormControl('AND')\r\n }));\r\n $filterStringInput = input<string>();\r\n $expressionInput = input<string>();\r\n\r\n // Outputs\r\n $jsonEmitter = output<string>();\r\n\r\n public crts = inject(CoreRuleTreeService);\r\n\r\n $rawValue = computed(() => JSON.stringify(this.$mainForm().getRawValue(), null, 2))\r\n\r\n // Track collapsed groups manually\r\n private collapsedGroups = new WeakMap<FormGroup, boolean>();\r\n\r\n readonly operatorFriendlyMap: Record<EnumCoreRuleTreeOparator, string> = {\r\n [EnumCoreRuleTreeOparator.EQUAL]: 'Equals (=)',\r\n [EnumCoreRuleTreeOparator.NOT_EQUAL]: 'Does not equal (≠)',\r\n [EnumCoreRuleTreeOparator.STARTS_WITH]: 'Starts with (→)',\r\n [EnumCoreRuleTreeOparator.ENDS_WITH]: 'Ends with (←)',\r\n [EnumCoreRuleTreeOparator.CONTAINS]: 'Contains (∈)',\r\n [EnumCoreRuleTreeOparator.NOT_STARTS_WITH]: 'Does NOT start with (↛)',\r\n [EnumCoreRuleTreeOparator.NOT_ENDS_WITH]: 'Does NOT end with (↚)',\r\n [EnumCoreRuleTreeOparator.NOT_CONTAINS]: 'Does NOT contain (∉)',\r\n [EnumCoreRuleTreeOparator.GREATER_THAN]: 'Greater than (>)',\r\n [EnumCoreRuleTreeOparator.LESS_THAN]: 'Less than (<)',\r\n [EnumCoreRuleTreeOparator.GREATER_OR_EQUAL_THAN]: 'Greater or equal (≥)',\r\n [EnumCoreRuleTreeOparator.LESS_OR_EQUAL_THAN]: 'Less or equal (≤)',\r\n [EnumCoreRuleTreeOparator.IN]: 'In list (∈)',\r\n [EnumCoreRuleTreeOparator.NOT_IN]: 'Not in list (∉)',\r\n [EnumCoreRuleTreeOparator.IS_NULL]: 'Is null',\r\n [EnumCoreRuleTreeOparator.IS_NOT_NULL]: 'Is not null',\r\n };\r\n\r\n\r\n readonly relationalOperator = Object.values(EnumCoreRuleTreeOparator);\r\n\r\n getColLabelTooltip(filterGroup: AbstractControl): string | undefined {\r\n const selectedField = filterGroup.get('name')?.value;\r\n if (!selectedField) return;\r\n const match = this.$totalCols().find(col => col.field === selectedField);\r\n return match?.label || selectedField;\r\n }\r\n\r\n\r\n shouldShowValueControl(operator: string): boolean {\r\n return operator !== 'IS_NULL' && operator !== 'IS_NOT_NULL';\r\n }\r\n\r\n toggleCollapse(group: FormGroup): void {\r\n const current = this.collapsedGroups.get(group) || false;\r\n this.collapsedGroups.set(group, !current);\r\n }\r\n\r\n isCollapsed(group: FormGroup): boolean {\r\n return this.collapsedGroups.get(group) || false;\r\n }\r\n\r\n\r\n field(): FormGroup {\r\n return new FormGroup({\r\n name: new FormControl(null),\r\n value: new FormControl(null),\r\n relationalOperator: new FormControl('EQUAL'),\r\n defaultMessage: new FormControl(''),\r\n englishMessage: new FormControl('')\r\n });\r\n }\r\n\r\n filter(): FormGroup {\r\n return new FormGroup({\r\n logicalOperator: new FormControl('AND'),\r\n filters: new FormArray([])\r\n });\r\n }\r\n\r\n prevJson = signal<string>('{}');\r\n\r\n constructor(\r\n public override mls: MultiLanguageService,\r\n private cdr: ChangeDetectorRef,\r\n ) {\r\n\r\n super(mls);\r\n\r\n effect((onCleanup) => {\r\n const form = this.$mainForm();\r\n if (!!form) {\r\n const sub = form.valueChanges.subscribe(value => {\r\n\r\n const updateOperators = (group: FormGroup) => {\r\n const filters = group.get('filters') as FormArray;\r\n if (!filters) return;\r\n\r\n filters.controls.forEach(control => {\r\n if (!(control instanceof FormGroup)) return;\r\n\r\n const operator = control.get('relationalOperator')?.value;\r\n const valueControl = control.get('value');\r\n\r\n if (operator === 'IS_NULL' || operator === 'IS_NOT_NULL') {\r\n valueControl?.setValue(null, { emitEvent: false });\r\n valueControl?.disable({ emitEvent: false });\r\n } else {\r\n valueControl?.enable({ emitEvent: false });\r\n }\r\n\r\n // 🌀 Recurse safely if this nested control has subfilters\r\n const subFilters = control.get('filters') as FormArray;\r\n if (subFilters && control instanceof FormGroup) {\r\n updateOperators(control);\r\n }\r\n });\r\n };\r\n\r\n\r\n updateOperators(form);\r\n\r\n // 🔁 Now that the form has been normalized, update the signal\r\n this.crts.$formValue.set(form.getRawValue());\r\n });\r\n\r\n onCleanup(() => sub.unsubscribe());\r\n }\r\n });\r\n\r\n\r\n\r\n // ➡️ Separate reaction effect for serialization\r\n effect(() => {\r\n const formValue = this.crts.$formValue();\r\n if (!formValue) return;\r\n\r\n const cleaned = this.crts.cleanEmptyFilters(formValue); // 👈 apply cleaning here\r\n\r\n const json = JSON.stringify(cleaned, null, 2);\r\n\r\n if (json !== this.prevJson()) {\r\n this.crts.$filterFormJsonString.set(json.trim());\r\n this.$jsonEmitter.emit(json);\r\n this.prevJson.set(json);\r\n }\r\n\r\n });\r\n\r\n effect(() => {\r\n const _ = this.$mainForm().getRawValue();\r\n\r\n const updateAll = (formGroup: FormGroup) => {\r\n const filters = formGroup.get('filters') as FormArray;\r\n if (!filters) return;\r\n\r\n filters.controls.forEach(control => {\r\n // Handle nested groups\r\n const subFilters = control.get('filters') as FormArray;\r\n if (subFilters) updateAll(control as FormGroup);\r\n });\r\n };\r\n\r\n updateAll(this.$mainForm());\r\n });\r\n\r\n // Initialize immediately based on initial form\r\n this.crts.$formValue.set(this.$mainForm().getRawValue());\r\n }\r\n\r\n addGroup(groupForm: FormGroup): void {\r\n const filtersArray = groupForm.get('filters') as FormArray;\r\n if (filtersArray) {\r\n const newGroup = this.filter(); // 🛠 use your existing filter() factory method\r\n filtersArray.push(newGroup);\r\n }\r\n }\r\n\r\n removeGroup(groupForm: FormGroup, index: number): void {\r\n const filtersArray = groupForm.get('filters') as FormArray;\r\n if (filtersArray && filtersArray.length > index) {\r\n setTimeout(() => filtersArray.removeAt(index));\r\n }\r\n }\r\n\r\n addCondition(groupForm: FormGroup): void {\r\n const filtersArray = groupForm.get('filters') as FormArray;\r\n if (filtersArray) {\r\n const newCondition = this.field();\r\n filtersArray.push(newCondition);\r\n }\r\n }\r\n\r\n removeCondition(filterGroup: FormGroup, index: number): void {\r\n const filtersArray = filterGroup.get('filters') as FormArray;\r\n if (filtersArray && filtersArray.length > index) {\r\n setTimeout(() => filtersArray.removeAt(index));\r\n }\r\n }\r\n\r\n resolveControl(fieldName: string): IFormBaseControl | undefined {\r\n const cols = this.$totalCols();\r\n if (!cols || !fieldName) return undefined;\r\n const tryfind = cols.find(x => x.field === fieldName);\r\n return tryfind;\r\n }\r\n\r\n safeStringify(obj: any): string {\r\n const seen = new WeakSet();\r\n\r\n return JSON.stringify(obj, (key, value) => {\r\n if (typeof value === 'object' && value !== null) {\r\n if (seen.has(value)) {\r\n return undefined; // ✋ Skip circular reference\r\n }\r\n seen.add(value);\r\n }\r\n\r\n return value;\r\n });\r\n }\r\n\r\n isCalculatedField(fieldName: string): boolean {\r\n const control = this.resolveControl(fieldName);\r\n return control?.controlType === 'CALCULATED';\r\n }\r\n\r\n}\r\n","<div class=\"core-rule-tree-container\">\r\n\r\n <form [formGroup]=\"$mainForm()\" (ngSubmit)=\"null\" class=\"core-rule-tree-form\">\r\n\r\n <div class=\"top-bar\">\r\n <div class=\"expression-box\">\r\n Expression = {{ crts.$filterString() || '()' }}\r\n </div>\r\n \r\n </div>\r\n \r\n <div class=\"query-builder\">\r\n <ng-template #queryTemplate let-filter=\"filter\" let-groupToRemove=\"groupToRemove\">\r\n \r\n <div class=\"group-card\">\r\n\r\n <div class=\"group-header\">\r\n\r\n <div class=\"logical-operator\">\r\n\r\n <select class=\"form-control pointer\" [formControl]=\"filter.get('logicalOperator')\">\r\n <option value=\"AND\">AND</option>\r\n <option value=\"OR\">OR</option>\r\n </select>\r\n\r\n <!-- Collapse/Expand Button -->\r\n @if (!!filter.value.filters?.length) {\r\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\"\r\n (click)=\"toggleCollapse(filter)\"\r\n [appTooltip]=\"isCollapsed(filter) ? 'Expand Group' : 'Collapse Group'\">\r\n <i class=\"feather\" [class.feather-plus]=\"isCollapsed(filter)\" [class.feather-minus]=\"!isCollapsed(filter)\"></i>\r\n </button>\r\n }\r\n <div class=\"local-action-buttons\">\r\n <button type=\"button\" class=\"btn btn-success feather-file-plus\"\r\n (click)=\"addCondition(filter)\"\r\n [appTooltip]=\"'Add Condition to this Group'\" [position]=\"'above'\">\r\n </button>\r\n <button type=\"button\" class=\"btn btn-success feather-folder-plus\"\r\n (click)=\"addGroup(filter)\"\r\n [appTooltip]=\"'Add Subgroup to this Group'\" [position]=\"'above'\">\r\n </button>\r\n @if (!!groupToRemove) {\r\n <button type=\"button\" class=\"btn btn-danger feather-trash\"\r\n (click)=\"removeGroup(groupToRemove.group, groupToRemove.index)\"\r\n [appTooltip]=\"'Remove Group'\" [position]=\"'above'\">\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"group-content\">\r\n \r\n @if (!isCollapsed(filter)) {\r\n\r\n @if (!!filter.value.filters?.length) {\r\n <div class=\"filter-list\" formArrayName=\"filters\">\r\n @for (childFilter of filter.get('filters').controls; track $index; let idx = $index) {\r\n <div class=\"filter-row\" [formGroup]=\"childFilter\">\r\n \r\n @if (!childFilter.value.logicalOperator) {\r\n\r\n <div class=\"filter-raw\">\r\n\r\n <div class=\"field-cell\">\r\n <select class=\"form-control\"\r\n [appTooltip]=\"getColLabelTooltip(childFilter)\"\r\n [showAnyway]=\"true\"\r\n formControlName=\"name\">\r\n @for (col of $totalCols(); track $index) {\r\n <option [value]=\"col.field\">{{ col.label || col.field }}</option>\r\n }\r\n </select>\r\n\r\n </div>\r\n\r\n <div class=\"operator-cell\">\r\n <select class=\"form-control\" formControlName=\"relationalOperator\">\r\n @for (op of relationalOperator; track $index) {\r\n <option [value]=\"op\">{{ operatorFriendlyMap[op] || op }}</option>\r\n }\r\n </select>\r\n </div> \r\n\r\n <div class=\"value-cell\">\r\n @if (shouldShowValueControl(childFilter.value.relationalOperator)) {\r\n <core-control-value-only\r\n @fadeSwitch\r\n [$control]=\"resolveControl(childFilter.value.name)!\"\r\n [$form]=\"childFilter\"\r\n [$fieldName]=\"'value'\"\r\n >\r\n </core-control-value-only>\r\n }\r\n </div>\r\n\r\n <div class=\"action-cell\">\r\n <button type=\"button\" class=\"btn btn-danger btn-sm feather-trash-2\"\r\n (click)=\"removeCondition(filter, idx)\"\r\n [appTooltip]=\"'Remove Condition'\">\r\n </button>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"filter-message default\">\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Default message...\"\r\n formControlName=\"defaultMessage\" />\r\n </div>\r\n\r\n <div class=\"filter-message english\">\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"English message...\"\r\n formControlName=\"englishMessage\" />\r\n </div>\r\n\r\n } @else {\r\n <!-- Recursive nested groups -->\r\n <ng-container *ngTemplateOutlet=\"queryTemplate; context: { filter: childFilter, groupToRemove: { group: filter, index: idx } }\"></ng-container>\r\n }\r\n \r\n </div>\r\n }\r\n </div>\r\n }\r\n \r\n\r\n }\r\n\r\n </div>\r\n\r\n </div>\r\n \r\n </ng-template>\r\n \r\n <ng-container\r\n *ngTemplateOutlet=\"queryTemplate; context: { filter: $mainForm(), groupToRemove: null }\">\r\n </ng-container>\r\n \r\n </div>\r\n \r\n </form>\r\n \r\n <div class=\"dev-json-view\">\r\n <pre class=\"json-preview\">{{ crts.$filterFormJsonString() }}</pre>\r\n </div>\r\n \r\n </div>\r\n","import { ChangeDetectionStrategy, Component, computed, effect, inject, output, WritableSignal } from '@angular/core';\r\nimport { BaseComponent } from '../../../../base-component/base/base.component';\r\nimport { EnumActorSourceType } from '../../../enums/EnumActorSourceType';\r\nimport { CoreRadioGroupComponent, ICoreRadioOption } from '../../../../core-radio-group/core-radio-group/core-radio-group.component';\r\nimport { BehaviorSubject, } from 'rxjs';\r\nimport { TranslatePipe } from '../../../../../app-pipes/translate.pipe';\r\nimport { IActorAssignment } from '../../../interfaces/IActorAssignment';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ICoreDropdownOption } from '../../../../../interfaces/ICoreDropdownOption';\r\nimport { CoreParamControlComponent } from '../../../../core-param-control/core-param-control/core-param-control.component';\r\nimport { ICoreParamControl } from '../../../../core-header-params/enum-and-interfaces';\r\nimport { EnumFormBaseContolType } from '../../../../../enum/EnumFormBaseContolType';\r\nimport { EnumCoreFormControlSeekerSourceType } from '../../../../core-form-control-seeker/EnumCoreFormControlSeekerSourceType';\r\nimport { CoreWorkflowService } from '../../../core-workflow.service';\r\nimport { TooltipDirective } from '../../../../tooltip/tooltip.directive';\r\nimport { MultiLanguageService } from '../../../../../services/multi-language.service';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { AlertService } from '../../../../alert/alert.service';\r\nimport { AppService } from '../../../../../services/app.service';\r\nimport { IIdsRequest } from '../../../../../interfaces/IIdsRequest';\r\n\r\n@Component({\r\n selector: 'wf-actor-selector',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n CoreParamControlComponent,\r\n CoreRadioGroupComponent,\r\n TranslatePipe,\r\n TooltipDirective,\r\n ],\r\n templateUrl: './wf-actor-selector.component.html',\r\n styleUrl: './wf-actor-selector.component.scss'\r\n})\r\nexport class WfActorSelectorComponent extends BaseComponent {\r\n\r\n public wfs = inject(CoreWorkflowService);\r\n http = inject(HttpClient);\r\n as = inject(AlertService);\r\n appService = inject(AppService);\r\n\r\n $value = this.wfs.$selectedActorAssignment;\r\n $valueChange = output<IActorAssignment | null>();\r\n levelSpecificOptions$: BehaviorSubject<ICoreDropdownOption[]> = new BehaviorSubject<ICoreDropdownOption[]>([]);\r\n levelNgModel$ = new BehaviorSubject<number | undefined>(undefined);\r\n\r\n employeeObjectList$ = new BehaviorSubject<any[]>([]);\r\n positionObjectList$ = new BehaviorSubject<any[]>([]);\r\n\r\n $selectedActorAssignmentJson = computed(() => JSON.stringify(this.wfs.$selectedActorAssignment(), null, 2));\r\n\r\n onNgModelChange = (ngModel: string, value: any) => {\r\n switch (ngModel) {\r\n case 'level':\r\n this.onLevelChanged(value);\r\n break;\r\n case 'employeeIds':\r\n case 'positionIds':\r\n this.onStaticValueSelected(value)\r\n break;\r\n }\r\n }\r\n\r\n levelSpecificControl: ICoreParamControl = {\r\n controlType: EnumFormBaseContolType.DROPDOWN,\r\n name: 'level',\r\n dropdownOptions$: this.levelSpecificOptions$,\r\n ngModel: this.$value()?.level,\r\n ngModel$: this.levelNgModel$,\r\n flexSize: 12,\r\n label: '',\r\n ngModelChange: this.onNgModelChange,\r\n getByIdApi: '/api/HuEmployee/GetById'\r\n }\r\n\r\n employeeIdsControl: ICoreParamControl = {\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n multiMode: true,\r\n objectList$: this.employeeObjectList$,\r\n disabledDoubleClick: true,\r\n name: 'employeeIds',\r\n ngModel: this.$value()?.staticValueIds,\r\n flexSize: 12,\r\n label: '',\r\n ngModelChange: this.onNgModelChange,\r\n shownFrom: 'fullname',\r\n getByIdApi: '/api/HuEmployee/GetById'\r\n }\r\n\r\n positionIdsControl: ICoreParamControl = {\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.POSITION_SEEK,\r\n multiMode: true,\r\n objectList$: this.positionObjectList$,\r\n name: 'positionIds',\r\n ngModel: this.$value()?.staticValueIds,\r\n flexSize: 12,\r\n label: '',\r\n ngModelChange: this.onNgModelChange,\r\n shownFrom: 'name',\r\n getByIdApi: '/api/HuPosition/GetById'\r\n }\r\n\r\n readonly AVAILABLE_SOURCES = Object.values(EnumActorSourceType);\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n effect(() => {\r\n const _ = this.wfs.$currentStep();\r\n const assignment = this.wfs.$selectedActorAssignment();\r\n const source = assignment?.source;\r\n const ids = assignment?.staticValueIds;\r\n switch (source) {\r\n case EnumActorSourceType.Manager:\r\n case EnumActorSourceType.DepartmentSupervisor:\r\n this.updateLevelOptions(source);\r\n this.levelNgModel$.next(this.$value()?.level);\r\n break;\r\n case EnumActorSourceType.Employee:\r\n if (!!ids) {\r\n this.appService.post('/api/HuEmployee/ReadAllByIds', { ids: ids } as IIdsRequest).subscribe(x => {\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n this.employeeIdsControl.objectList$?.next(x.body.innerBody);\r\n }\r\n })\r\n } else {\r\n this.employeeIdsControl.objectList$?.next([]);\r\n }\r\n break;\r\n case EnumActorSourceType.Position:\r\n if (!!ids) {\r\n this.appService.post('/api/HuPosition/ReadAllByIds', { ids: ids } as IIdsRequest).subscribe(x => {\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n this.positionIdsControl.objectList$?.next(x.body.innerBody);\r\n }\r\n })\r\n } else {\r\n this.positionIdsControl.objectList$?.next([]);\r\n }\r\n break;\r\n }\r\n\r\n })\r\n }\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 const current = this.$value()?.source;\r\n if (\r\n current === EnumActorSourceType.Manager ||\r\n current === EnumActorSourceType.DepartmentSupervisor\r\n ) {\r\n this.updateLevelOptions(current);\r\n }\r\n }\r\n\r\n updateLevelOptions(source: EnumActorSourceType) {\r\n const prefix = source === EnumActorSourceType.Manager ? 'Direct manager' : 'Direct supervisor';\r\n const options = Array.from({ length: 10 }, (_, i) => ({\r\n value: i,\r\n text: i === 0 ? `${prefix}` : `${prefix} + ${i}`\r\n }));\r\n this.levelSpecificOptions$.next(options);\r\n }\r\n\r\n actorSourceOptions$ = new BehaviorSubject<ICoreRadioOption[]>(\r\n Object.values(EnumActorSourceType)\r\n .filter(val => ['Employee', 'Manager', 'DepartmentSupervisor', 'Position'].includes(val))\r\n .map(val => ({\r\n value: val,\r\n text: val\r\n }))\r\n );\r\n\r\n\r\n unsupportedYetactorSourceOptions$ = new BehaviorSubject<ICoreRadioOption[]>(\r\n Object.values(EnumActorSourceType)\r\n .filter(val => !['Employee', 'Manager', 'DepartmentSupervisor', 'Position'].includes(val))\r\n .map(val => ({\r\n value: val,\r\n text: val\r\n }))\r\n );\r\n\r\n $showEmployeeSeeker = computed(() =>\r\n this.$value()?.source === EnumActorSourceType.Employee\r\n );\r\n\r\n $showPositionSeeker = computed(() =>\r\n this.$value()?.source === EnumActorSourceType.Position\r\n );\r\n\r\n $showLevel = computed(() =>\r\n [EnumActorSourceType.Manager, EnumActorSourceType.DepartmentSupervisor].includes(this.$value()!.source)\r\n );\r\n\r\n $showStepKey = computed(() =>\r\n this.$value()?.source === EnumActorSourceType.StepRecipient\r\n );\r\n\r\n onSourceChanged(newSource: EnumActorSourceType): void {\r\n let newValue = this.$value();\r\n if (!newValue) return;\r\n\r\n // Optionally reset level\r\n if (\r\n newSource === EnumActorSourceType.Manager ||\r\n newSource === EnumActorSourceType.DepartmentSupervisor\r\n ) {\r\n newValue.level = undefined;\r\n delete newValue.staticValueIds;\r\n //delete newValue.stepKey;\r\n } else {\r\n delete newValue.level\r\n }\r\n\r\n this.$value.set({ ...newValue });\r\n\r\n this.updateLevelOptions(newSource);\r\n this.$valueChange.emit({ source: newSource });\r\n\r\n this.wfs.updateCurrentStepConfig({\r\n actors: { source: newSource },\r\n });\r\n\r\n }\r\n\r\n onStaticValueSelected(value: number[]): void {\r\n if (!this.$value()) return;\r\n const next = { ...this.$value()!, staticValueIds: value };\r\n this.$valueChange.emit(next);\r\n\r\n const prev = this.$value();\r\n if (!prev) return;\r\n this.wfs.updateCurrentStepConfig({\r\n actors: { ...prev, staticValueIds: value }\r\n });\r\n }\r\n\r\n onLevelChanged(level: number): void {\r\n if (!this.$value()) return;\r\n const next = { ...this.$value()!, level };\r\n this.$valueChange.emit(next);\r\n const prev = this.$value();\r\n if (!prev) return;\r\n this.wfs.updateCurrentStepConfig({\r\n actors: { ...prev, level }\r\n });\r\n }\r\n\r\n onStepKeyChanged(key: string): void {\r\n if (!this.$value()) return;\r\n const next = { ...this.$value()!, stepKey: key };\r\n this.$valueChange.emit(next);\r\n }\r\n\r\n}\r\n","<div class=\"wf-actor-selector-container\">\r\n <div class=\"soure-options\"\r\n [appTooltip]=\"'This version currently supports: Manager | Supervisor | Employee | Position | Requester'\"\r\n [showAnyway]=\"true\"\r\n [position]=\"'above'\" \r\n >\r\n <pre>{{ $selectedActorAssignmentJson() }}</pre>\r\n <core-radio-group\r\n [options$]=\"actorSourceOptions$\"\r\n [vertical]=\"true\"\r\n [columnCount]=\"2\"\r\n [gapY]=\"8\"\r\n [(ngModel)]=\"$value()!.source\"\r\n (ngModelChange)=\"onSourceChanged($event)\">\r\n </core-radio-group>\r\n </div>\r\n\r\n <div class=\"soure-options form-control-disabled\"\r\n [appTooltip]=\"'Not supported yet in this version'\"\r\n [showAnyway]=\"true\"\r\n >\r\n <core-radio-group\r\n [options$]=\"unsupportedYetactorSourceOptions$\"\r\n [vertical]=\"true\"\r\n [columnCount]=\"2\"\r\n [gapY]=\"8\"\r\n [disabled]=\"true\"\r\n [(ngModel)]=\"$value()!.source\"\r\n (ngModelChange)=\"onSourceChanged($event)\">\r\n </core-radio-group>\r\n </div>\r\n \r\n <!-- Manager / DepartmentSupervisor -->\r\n @if (!!$value() && $showLevel()) {\r\n <div class=\"manager-level\">\r\n <label>\r\n {{ $value()!.source === 'Manager' ? 'Manager level' : 'Supervisor level' }}\r\n </label>\r\n <core-param-control\r\n [control]=\"levelSpecificControl\"\r\n ></core-param-control>\r\n </div>\r\n }\r\n \r\n <!-- Employee / Position / UserGroup (choose static entities) -->\r\n @if (!!$value() && $value()!.source === 'Employee' || $value()!.source === 'Position' || $value()!.source === 'UserGroup') {\r\n <div class=\"static-selector\">\r\n <label>Select {{ $value()!.source }}</label>\r\n <!-- Choose component based on source -->\r\n @switch ($value()!.source) {\r\n @case('Employee') {\r\n <core-param-control\r\n [control]=\"employeeIdsControl\"\r\n ></core-param-control>\r\n }\r\n @case('Position') {\r\n <core-param-control\r\n [control]=\"positionIdsControl\"\r\n ></core-param-control>\r\n }\r\n @case('UserGroup') {\r\n <div>Not supported yet in this version</div>\r\n }\r\n }\r\n </div>\r\n }\r\n \r\n @if (!!$value() && $value()!.source === 'StepRecipient') {\r\n <div>Not supported yet in this version</div>\r\n }\r\n \r\n</div>\r\n ","import { ChangeDetectionStrategy, Component, computed, inject, Signal, signal } from '@angular/core';\r\nimport { WfActorSelectorComponent } from '../wf-actor-selector/wf-actor-selector.component';\r\nimport { BaseComponent } from '../../../../base-component/base/base.component';\r\nimport { CoreRadioGroupComponent, ICoreRadioOption } from '../../../../core-radio-group/core-radio-group/core-radio-group.component';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { CoreWorkflowService } from '../../../core-workflow.service';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TranslatePipe } from '../../../../../app-pipes/translate.pipe';\r\nimport { RoutingStepLogic } from '../../../types/RoutingStepLogic';\r\n\r\n@Component({\r\n selector: 'wf-approver-config',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n TranslatePipe,\r\n WfActorSelectorComponent,\r\n CoreRadioGroupComponent\r\n ],\r\n templateUrl: './wf-approver-config.component.html',\r\n styleUrl: './wf-approver-config.component.scss'\r\n})\r\nexport class WfApproverConfigComponent extends BaseComponent {\r\n\r\n public wfs = inject(CoreWorkflowService);\r\n\r\n $routingLogic: Signal<RoutingStepLogic> = computed<RoutingStepLogic>(() => (this.wfs.$currentStep()?.config as any)?.routingLogic || 'parallel');\r\n\r\n $actorSource = computed(() => this.wfs.$selectedActorAssignment()?.source || 'Unknown');\r\n\r\n actorSourceOptions$ = new BehaviorSubject<ICoreRadioOption[]>(\r\n [['parallel', 'Everyone assigned (all must approve)'], ['short-circuit', 'Anyone assigned (one must approve)']]\r\n .map(val => ({\r\n value: val[0],\r\n text: val[1],\r\n }))\r\n );\r\n\r\n onSourceChanged(e: any): void {\r\n this.wfs.updateCurrentStepConfig({\r\n routingLogic: e\r\n });\r\n }\r\n\r\n}\r\n","<div class=\"wf-approver-config-container\">\r\n <wf-actor-selector></wf-actor-selector>\r\n \r\n\r\n @if (['Employee', 'Position', 'UserGroup'].includes($actorSource())) {\r\n\r\n <div class=\"routing-logic\">\r\n\r\n <div class=\"routing-logic-caption\">{{ 'When there are multiple actors, use the method' | translate : lang }}</div>\r\n \r\n <core-radio-group\r\n [options$]=\"actorSourceOptions$\"\r\n [vertical]=\"true\"\r\n [gapY]=\"8\"\r\n [defaultValue]=\"'parallel'\"\r\n [ngModel]=\"$routingLogic()\"\r\n (ngModelChange)=\"onSourceChanged($event)\">\r\n </core-radio-group>\r\n \r\n </div>\r\n\r\n }\r\n\r\n</div>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { WfActorSelectorComponent } from '../wf-actor-selector/wf-actor-selector.component';\r\n\r\n@Component({\r\n selector: 'wf-cc-config',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n WfActorSelectorComponent\r\n ],\r\n templateUrl: './wf-cc-config.component.html',\r\n styleUrl: './wf-cc-config.component.scss'\r\n})\r\nexport class WfCcConfigComponent {\r\n\r\n}\r\n","<div class=\"wf-cc-config-container\">\r\n <wf-actor-selector></wf-actor-selector>\r\n</div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'wf-end-config',\r\n imports: [],\r\n templateUrl: './wf-end-config.component.html',\r\n styleUrl: './wf-end-config.component.scss'\r\n})\r\nexport class WfEndConfigComponent {\r\n\r\n}\r\n","<div class=\"wf-submit-config-container\">\r\n <div class=\"submit-config-box\">\r\n <span class=\"icon\"><i class=\"feather-mail\"></i></span>\r\n <span class=\"message\">\r\n In this version, an email will be sent the <strong>requester</strong> by default.\r\n </span>\r\n </div>\r\n <div class=\"submit-config-box\">Press ESC to hide</div>\r\n</div>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { WfActorSelectorComponent } from '../wf-actor-selector/wf-actor-selector.component';\r\n\r\n@Component({\r\n selector: 'wf-handler-config',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n WfActorSelectorComponent\r\n ],\r\n templateUrl: './wf-handler-config.component.html',\r\n styleUrl: './wf-handler-config.component.scss'\r\n})\r\nexport class WfHandlerConfigComponent {\r\n\r\n}\r\n","<div class=\"wf-handler-config\">\r\n <wf-actor-selector></wf-actor-selector>\r\n</div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'wf-submit-config',\r\n imports: [],\r\n templateUrl: './wf-submit-config.component.html',\r\n styleUrl: './wf-submit-config.component.scss'\r\n})\r\nexport class WfSubmitConfigComponent {\r\n\r\n}\r\n","<div class=\"wf-submit-config-container\">\r\n <div class=\"submit-config-box\">\r\n <span class=\"icon\"><i class=\"feather-check-square\"></i></span>\r\n <span class=\"message\">\r\n In this version, <strong>all members</strong> are allowed to submit.\r\n </span>\r\n </div>\r\n <div class=\"submit-config-box\">Press ESC to hide</div>\r\n</div>","import { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\nimport { catchError, of } from 'rxjs';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { GptService } from '../../../services/gpt.service';\r\n\r\n@Component({\r\n selector: 'wf-gpt-assistant',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n ],\r\n templateUrl: './wf-gpt-assistant.component.html',\r\n styleUrl: './wf-gpt-assistant.component.scss'\r\n})\r\nexport class WfGptAssistantComponent {\r\n $gptReply = signal('');\r\n gptInput: string = \"leaveDays > 5 and region != 'VN'\";\r\n \r\n wfs = inject(CoreWorkflowService);\r\n gpt = inject(GptService);\r\n\r\n askGpt(): void {\r\n const input = this.gptInput?.trim();\r\n if (!input) return;\r\n\r\n this.wfs.$loading.set(true);\r\n\r\n this.gpt.askGpt({\r\n input,\r\n context: []\r\n }).pipe(\r\n catchError(err => {\r\n this.wfs.$loading.set(false);\r\n console.error('ChatGPT error:', err);\r\n return of({ ok: false, body: { innerBody: 'Error: Unable to process request.' } });\r\n })\r\n ).subscribe(x => {\r\n this.wfs.$loading.set(false);\r\n\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n this.$gptReply.set(x.body.innerBody);\r\n } else {\r\n this.$gptReply.set('GPT could not generate a response.');\r\n }\r\n });\r\n }\r\n}\r\n","<div class=\"wf-gpt-assistant-container\">\r\n\r\n <div class=\"ask-gpt\">\r\n <label class=\"gpt-label\">💬 Ask ChatGPT for a condition</label>\r\n\r\n <textarea [(ngModel)]=\"gptInput\" class=\"gpt-textarea\" placeholder=\"e.g. Amount > 1000 and Region != 'CN'\">\r\n </textarea>\r\n\r\n <button (click)=\"askGpt()\" class=\"gpt-button\">Ask ChatGPT</button>\r\n\r\n @if ($gptReply()) {\r\n <div class=\"gpt-reply\">\r\n <strong>ChatGPT says:</strong>\r\n <pre>{{ $gptReply() }}</pre>\r\n </div>\r\n <small class=\"gpt-disclaimer\">\r\n 💡 This is a demo preview. GPT-generated logic will be integrated into the system in future versions.\r\n </small>\r\n }\r\n </div>\r\n\r\n</div>","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\r\nimport { CoreRuleTreeComponent } from '../../../core-rule-tree/core-rule-tree.component';\r\nimport { CoreWorkflowService } from '../../core-workflow.service';\r\nimport { CoreRuleTreeService } from '../../../core-rule-tree/core-rule-tree.service';\r\nimport { FormGroup, FormsModule } from '@angular/forms';\r\nimport { CoreRadioGroupComponent, ICoreRadioOption } from '../../../core-radio-group/core-radio-group/core-radio-group.component';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { EnumWorkflowStepType } from '../../enums/EnumWorkflowStepType';\r\n\r\n@Component({\r\n selector: 'rule-config-shell',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n CoreRuleTreeComponent,\r\n CoreRadioGroupComponent,\r\n ],\r\n templateUrl: './rule-config-shell.component.html',\r\n styleUrl: './rule-config-shell.component.scss'\r\n})\r\nexport class RuleConfigShellComponent {\r\n wfs = inject(CoreWorkflowService);\r\n crts = inject(CoreRuleTreeService);\r\n\r\n enumType = EnumWorkflowStepType;\r\n\r\n $stepType = computed(() => this.wfs.$currentStep()?.type);\r\n $fallbackType = computed(() => (this.wfs.$currentStep()?.config as any)?.fallbackType);\r\n $fallbackMessage = computed(() => (this.wfs.$currentStep()?.config as any)?.fallbackMessage);\r\n\r\n fallbackTypeOptions$ = new BehaviorSubject<ICoreRadioOption[]>([\r\n {\r\n value: 'hard-block',\r\n text: 'Hard Block'\r\n },\r\n {\r\n value: 'soft-warn',\r\n text: 'Soft Warning'\r\n }\r\n ])\r\n\r\n $stepFormGroup = computed<FormGroup>(() => {\r\n const step = this.wfs.$currentStep();\r\n if (!step) return this.crts.buildFormGroupFromStep(); // fallback\r\n\r\n const raw = (step.config as any)?.ruleTree;\r\n\r\n let parsed: any = undefined;\r\n\r\n try {\r\n parsed = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n } catch (e) {\r\n console.warn('Failed to parse ruleTree:', raw, e);\r\n parsed = undefined;\r\n }\r\n\r\n const form = this.crts.buildFormGroupFromStep(parsed);\r\n return form;\r\n });\r\n\r\n onRuleTreeJsonChange(e: any): void {\r\n this.wfs.updateCurrentStepConfig({\r\n ruleTree: e,\r\n //conditionExpression: this.crts.$filterFormJsonString(),\r\n });\r\n }\r\n\r\n onFallbackTypeChanged(e: any): void {\r\n this.wfs.updateCurrentStepConfig({\r\n fallbackType: e\r\n });\r\n }\r\n\r\n onFallbackMessageChanged(e: string): void {\r\n this.wfs.updateCurrentStepConfig({\r\n fallbackMessage: e\r\n });\r\n }\r\n\r\n}\r\n","<div class=\"rule-config-shell-container\">\r\n\r\n <div class=\"rule-tree-header\">\r\n <div class=\"title\">Rule Conditions</div>\r\n <div class=\"subtitle\">\r\n Define logic that must be satisfied for this step to proceed. These conditions will be evaluated\r\n automatically.\r\n </div>\r\n </div>\r\n\r\n <div class=\"fallback-type-header\">\r\n <div class=\"title\">Fallback Behavior</div>\r\n <div class=\"subtitle\">\r\n\r\n @if ($stepType() !== enumType.BranchCard) {\r\n Choose what happens when the rule condition evaluates to <strong>false (0)</strong> at runtime:\r\n <ul>\r\n <li><strong>Hard Block</strong> Step will be auto-rejected.</li>\r\n <li><strong>Soft Warn</strong> User will see a warning but may continue.</li>\r\n </ul>\r\n\r\n } @else {\r\n When the condition evaluates to <strong>false (0)</strong>, the next branch (by order) will be triggered automatically.\r\n }\r\n </div>\r\n @if ($stepType() !== enumType.BranchCard) {\r\n <core-radio-group\r\n [options$]=\"fallbackTypeOptions$\"\r\n [vertical]=\"true\"\r\n [gapY]=\"8\"\r\n [ngModel]=\"$fallbackType()\"\r\n (ngModelChange)=\"onFallbackTypeChanged($event)\" \r\n />\r\n }\r\n\r\n </div>\r\n\r\n @if ($stepType() !== enumType.BranchCard) {\r\n <div class=\"fallback-message-wrapper\">\r\n <label for=\"fallback-message\" class=\"form-label\">Optional Warning Message</label>\r\n <textarea\r\n id=\"fallback-message\"\r\n class=\"form-control\"\r\n placeholder=\"Enter a message to show when this fallback is triggered...\"\r\n rows=\"3\"\r\n [ngModel]=\"$fallbackMessage()\"\r\n (ngModelChange)=\"onFallbackMessageChanged($event)\"\r\n ></textarea>\r\n </div>\r\n }\r\n\r\n <div class=\"rule-tree-wrapper\">\r\n\r\n <core-rule-tree [$totalCols]=\"wfs.$availableCols()\" [$mainForm]=\"$stepFormGroup()\"\r\n ($jsonEmitter)=\"onRuleTreeJsonChange($event)\" />\r\n\r\n </div>\r\n</div>","import { Component, inject, computed } from '@angular/core';\r\nimport { CoreStickerCollectionComponent } from '../../../../core-sticker-collection/core-sticker-collection.component';\r\nimport { CoreWorkflowService } from '../../../core-workflow.service';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'wf-formui-config',\r\n imports: [CoreStickerCollectionComponent],\r\n templateUrl: './wf-formui-config.component.html',\r\n styleUrl: './wf-formui-config.component.scss'\r\n})\r\nexport class WfFormuiConfigComponent {\r\n\r\n private readonly systemFields = [\"initialRequesterEmployeeId\"];\r\n\r\n wfs = inject(CoreWorkflowService);\r\n\r\n $availableCols = computed(() =>\r\n this.$fields().filter(f =>\r\n !this.systemFields.includes(f.field)\r\n ) ?? []\r\n );\r\n\r\n /** All AF fields */\r\n $fields = computed<IFormBaseControl[]>(() => this.wfs.$availableCols());\r\n\r\n /** Current step */\r\n $step = computed(() => this.wfs.$currentStep());\r\n\r\n /** Initial checklists */\r\n $initialHidden = computed(() =>\r\n Object.keys(this.$step()?.config?.formUi?.hidden ?? {})\r\n );\r\n\r\n $initialReadonly = computed(() =>\r\n Object.keys(this.$step()?.config?.formUi?.readonly ?? {})\r\n );\r\n\r\n $initialRequired = computed(() =>\r\n Object.keys(this.$step()?.config?.formUi?.required ?? {})\r\n );\r\n\r\n $initialReset = computed(() =>\r\n Object.keys(this.$step()?.config?.formUi?.reset ?? {})\r\n );\r\n\r\n /** Toggle handler */\r\n onToggle(mode: 'hidden' | 'readonly' | 'required' | 'reset', list: string[]) {\r\n const step = this.$step();\r\n if (!step) return;\r\n\r\n const formUi = step.config?.formUi ?? {};\r\n\r\n formUi[mode] = list.reduce((acc, k) => {\r\n acc[k] = true;\r\n return acc;\r\n }, {} as Record<string, true>);\r\n\r\n this.wfs.updateStep({\r\n ...step,\r\n config: {\r\n ...(step.config ?? {}),\r\n formUi: { ...formUi }\r\n }\r\n });\r\n }\r\n}\r\n","<div class=\"formui-config-container\">\r\n\r\n <div class=\"formui-config-header\">\r\n <div class=\"title\">Form UI Configuration</div>\r\n <div class=\"subtitle\">Control field visibility and behavior for this step</div>\r\n </div>\r\n\r\n <div class=\"formui-body\">\r\n\r\n <!-- Hidden Fields -->\r\n <div class=\"formui-block\">\r\n <div class=\"label\">Hidden Fields</div>\r\n\r\n <core-sticker-collection [$items]=\"$availableCols()\" [$shownFrom]=\"'field'\" [$initialChecked]=\"$initialHidden()\"\r\n ($checkedChange)=\"onToggle('hidden', $event)\" [$enableFilter]=\"true\"></core-sticker-collection>\r\n </div>\r\n\r\n <!-- Readonly Fields -->\r\n <div class=\"formui-block\">\r\n <div class=\"label\">Readonly Fields</div>\r\n\r\n <core-sticker-collection [$items]=\"$availableCols()\" [$shownFrom]=\"'field'\" [$initialChecked]=\"$initialReadonly()\"\r\n ($checkedChange)=\"onToggle('readonly', $event)\" [$enableFilter]=\"true\"></core-sticker-collection>\r\n </div>\r\n\r\n <!-- Required Overrides -->\r\n <div class=\"formui-block\">\r\n <div class=\"label\">Required Overrides</div>\r\n\r\n <core-sticker-collection [$items]=\"$availableCols()\" [$shownFrom]=\"'field'\" [$initialChecked]=\"$initialRequired()\"\r\n ($checkedChange)=\"onToggle('required', $event)\" [$enableFilter]=\"true\"></core-sticker-collection>\r\n </div>\r\n\r\n <!-- Reset on Enter -->\r\n <div class=\"formui-block\">\r\n <div class=\"label\">Reset on Enter Step</div>\r\n\r\n <core-sticker-collection [$items]=\"$availableCols()\" [$shownFrom]=\"'field'\" [$initialChecked]=\"$initialReset()\"\r\n ($checkedChange)=\"onToggle('reset', $event)\" [$enableFilter]=\"true\"></core-sticker-collection>\r\n </div>\r\n\r\n </div>\r\n\r\n</div>","import { ChangeDetectionStrategy, Component, viewChild, effect, ElementRef, computed, inject, Renderer2, ChangeDetectorRef, signal } from '@angular/core';\r\nimport { FormGroup, FormsModule } from '@angular/forms';\r\nimport { CoreWorkflowService } from '../../core-workflow.service';\r\nimport { EnumWorkflowStepType } from '../../enums/EnumWorkflowStepType';\r\nimport { CoreRuleTreeComponent } from '../../../core-rule-tree/core-rule-tree.component';\r\nimport { DomService } from '../../../services/dom.service';\r\nimport { WfApproverConfigComponent } from './wf-approver-config/wf-approver-config.component';\r\nimport { WfCcConfigComponent } from './wf-cc-config/wf-cc-config.component';\r\nimport { WfEndConfigComponent } from './wf-end-config/wf-end-config.component';\r\nimport { WfHandlerConfigComponent } from './wf-handler-config/wf-handler-config.component';\r\nimport { WfSubmitConfigComponent } from './wf-submit-config/wf-submit-config.component';\r\nimport { WfGptAssistantComponent } from '../../wf-gpt-assistant/wf-gpt-assistant.component';\r\nimport { CoreRuleTreeService } from '../../../core-rule-tree/core-rule-tree.service';\r\nimport { IStepRuleConfig } from '../../interfaces/IStepConfig';\r\nimport { RuleConfigShellComponent } from '../rule-config-shell/rule-config-shell.component';\r\nimport { WfFormuiConfigComponent } from './wf-formui-config/wf-formui-config.component';\r\n\r\n@Component({\r\n selector: 'wf-step-config-shell',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n CoreRuleTreeComponent,\r\n WfApproverConfigComponent,\r\n WfCcConfigComponent,\r\n WfEndConfigComponent,\r\n WfHandlerConfigComponent,\r\n WfSubmitConfigComponent,\r\n WfFormuiConfigComponent,\r\n RuleConfigShellComponent,\r\n WfGptAssistantComponent\r\n ],\r\n templateUrl: './wf-step-config-shell.component.html',\r\n styleUrls: ['./wf-step-config-shell.component.scss']\r\n})\r\nexport class WfStepConfigShellComponent {\r\n\r\n $container = viewChild<ElementRef>('container');\r\n\r\n // listenerFn!: () => void;\r\n renderer = inject(Renderer2);\r\n cdr = inject(ChangeDetectorRef);\r\n crts = inject(CoreRuleTreeService);\r\n enumType = EnumWorkflowStepType;\r\n\r\n constructor(\r\n public wfs: CoreWorkflowService,\r\n private domService: DomService,\r\n ) {\r\n effect(() => {\r\n const containerRef = this.$container();\r\n if (containerRef) {\r\n containerRef.nativeElement.style.zIndex = this.domService.getMaxZIndex() + 1;\r\n }\r\n });\r\n }\r\n\r\n $stepFormGroup = computed<FormGroup>(() => {\r\n const step = this.wfs.$currentStep();\r\n if (!step) return this.crts.buildFormGroupFromStep(); // fallback\r\n\r\n const raw = (step.config as any)?.ruleTree;\r\n\r\n let parsed: any = undefined;\r\n\r\n try {\r\n parsed = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n } catch (e) {\r\n console.warn('Failed to parse ruleTree:', raw, e);\r\n parsed = undefined;\r\n }\r\n\r\n const form = this.crts.buildFormGroupFromStep(parsed);\r\n return form;\r\n });\r\n\r\n $isBranchCard = computed<boolean>(() => {\r\n const step = this.wfs.$currentStep();\r\n console.log(step?.type)\r\n console.log(step?.type === EnumWorkflowStepType.BranchCard)\r\n\r\n return !!step && step.type === EnumWorkflowStepType.BranchCard;\r\n })\r\n\r\n $canRenderRuleTree = computed(() => {\r\n const form = this.$stepFormGroup();\r\n const cols = this.wfs.$availableCols();\r\n const isBranchCard = this.$isBranchCard();\r\n\r\n if (!form || !cols || !isBranchCard) return false;\r\n if (cols.length === 0) return false;\r\n\r\n return form.valid;\r\n });\r\n\r\n close() {\r\n this.wfs.$showStepConfig.set(false); // example method\r\n }\r\n\r\n onRuleTreeJsonChange(e: any): void {\r\n this.wfs.updateCurrentStepConfig({\r\n ruleTree: e,\r\n //conditionExpression: this.crts.$filterFormJsonString(),\r\n });\r\n }\r\n\r\n}","<div class=\"wf-step-config-shell-container\" #container [class.shown]=\"wfs.$showStepConfig()\">\r\n \r\n <div class=\"wf-step-config-header\">\r\n <div class=\"panel-title\">\r\n {{ wfs.$currentStep()?.type || 'Step' }} Configuration\r\n </div>\r\n <div class=\"close-wrapper\" (click)=\"close()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n \r\n <div class=\"wf-step-config-content\">\r\n\r\n\r\n @switch (wfs.$currentStep()?.type) {\r\n\r\n @case (enumType.BranchCard) {\r\n <rule-config-shell />\r\n }\r\n \r\n @case (enumType.Approval) {\r\n <wf-approver-config/>\r\n <hr />\r\n <wf-formui-config />\r\n <hr />\r\n <rule-config-shell />\r\n }\r\n \r\n @case (enumType.Handle) {\r\n <wf-handler-config/>\r\n <hr />\r\n <wf-formui-config />\r\n }\r\n \r\n @case (enumType.CC) {\r\n <wf-cc-config/>\r\n }\r\n \r\n @case (enumType.Submit) {\r\n <wf-submit-config/>\r\n <hr />\r\n <wf-formui-config />\r\n <hr />\r\n <rule-config-shell />\r\n }\r\n \r\n @case (enumType.End) {\r\n <wf-end-config/>\r\n <hr />\r\n <rule-config-shell />\r\n }\r\n \r\n @default {\r\n <div class=\"unsupported-type\">\r\n Unsupported type\r\n </div>\r\n }\r\n \r\n }\r\n \r\n </div>\r\n \r\n</div>","export const ROOT_BRANCH_ID = 'root';","import { inject, Injectable } from '@angular/core';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BridgeLineService {\r\n\r\n coreWorkflowService = inject(CoreWorkflowService);\r\n\r\n colorRadius: number = 10;\r\n\r\n adjustBridgeLines(\r\n branchGroupEl: HTMLElement,\r\n topBridgeLineEl: HTMLElement,\r\n bottomBridgeLineEl: HTMLElement,\r\n branchColumnEls: HTMLElement[],\r\n ): void {\r\n const columns = Array.from(\r\n branchGroupEl.querySelectorAll(':scope > .branch-column')\r\n ) as HTMLElement[];\r\n\r\n if (columns.length < 2) return;\r\n\r\n // Helper: get the last .arrow-down inside a column\r\n // ':scope > .arrow-down' only works if .arrow-down is a direct child of col.\r\n // Safely queries only arrows inside wf-bottom-v-insert\r\n // Uses .pop() to grab the last one, if any (safe fallback if there's more than one).\r\n // Ensures type safety with instanceof HTMLElement.\r\n const getLastArrow = (col: HTMLElement): HTMLElement | null => {\r\n const arrow = Array.from(col.querySelectorAll('wf-bottom-v-insert .arrow-down')).pop() as HTMLElement;\r\n return arrow instanceof HTMLElement ? arrow : null;\r\n };\r\n\r\n const allArrows = columns\r\n .map(getLastArrow)\r\n .filter((el): el is HTMLElement => !!el);\r\n\r\n if (allArrows.length < 2) return;\r\n\r\n const r1 = allArrows[0].getBoundingClientRect();\r\n const r2 = allArrows[allArrows.length - 1].getBoundingClientRect();\r\n const containerRect = branchGroupEl.getBoundingClientRect();\r\n\r\n const left = r1.left + r1.width / 2 - containerRect.left;\r\n const right = r2.left + r2.width / 2 - containerRect.left;\r\n\r\n const maxArrowBottom = allArrows.reduce((max, el) => {\r\n const bottom = el.getBoundingClientRect().bottom;\r\n return Math.max(max, bottom);\r\n }, 0);\r\n\r\n const top = maxArrowBottom - containerRect.top - 1;\r\n\r\n // TOP bridge line\r\n topBridgeLineEl.style.top = `17.5px`;\r\n topBridgeLineEl.style.left = `${left}px`;\r\n topBridgeLineEl.style.width = `${right - left}px`;\r\n\r\n // BOTTOM bridge line\r\n bottomBridgeLineEl.style.top = `${top}px`;\r\n bottomBridgeLineEl.style.left = `${left}px`;\r\n bottomBridgeLineEl.style.width = `${right - left}px`;\r\n\r\n // Vertical lines\r\n branchColumnEls.forEach(col => {\r\n const lastArrow = getLastArrow(col);\r\n const vertical = col.querySelector(':scope > .vertical-bridge-line') as HTMLElement;\r\n\r\n if (!lastArrow || !vertical) return;\r\n\r\n const arrowRect = lastArrow.getBoundingClientRect();\r\n const colRect = col.getBoundingClientRect();\r\n\r\n const startY = arrowRect.bottom - colRect.top;\r\n const height = top - startY - this.coreWorkflowService.standardConnectorHeight - 17.5;\r\n\r\n vertical.style.top = `${startY}px`;\r\n vertical.style.left = `calc(50% - 1px)`;\r\n vertical.style.height = `${height}px`;\r\n vertical.style.display = height > 0 ? 'block' : 'none';\r\n //vertical.style.backgroundColor = `hsl(${this.colorRadius}, 100%, 50%)`;\r\n this.colorRadius += 10;\r\n });\r\n \r\n }\r\n\r\n}\r\n","import { Directive, ElementRef, EventEmitter, Input, NgZone, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { BridgeLineService } from './bridge-line.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[bridgeLine]'\r\n})\r\nexport class BridgeLineDirective implements OnInit, OnDestroy {\r\n\r\n @Output() bridgeLinesAdjusted = new EventEmitter<void>();\r\n\r\n private resizeObserver!: ResizeObserver;\r\n private mutationObserver!: MutationObserver;\r\n\r\n constructor(\r\n private elRef: ElementRef<HTMLElement>,\r\n private bridgeLineService: BridgeLineService,\r\n private zone: NgZone\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.zone.runOutsideAngular(() => {\r\n this.resizeObserver = new ResizeObserver(() => {\r\n requestAnimationFrame(() => this.adjustBridgeLines());\r\n });\r\n this.resizeObserver.observe(this.elRef.nativeElement);\r\n\r\n this.mutationObserver = new MutationObserver(() => {\r\n this.adjustBridgeLines();\r\n });\r\n \r\n this.mutationObserver.observe(this.elRef.nativeElement, {\r\n childList: true,\r\n subtree: true\r\n });\r\n\r\n });\r\n\r\n // First adjustment\r\n requestAnimationFrame(() => this.adjustBridgeLines());\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.resizeObserver?.disconnect();\r\n this.mutationObserver?.disconnect();\r\n }\r\n\r\n private adjustBridgeLines(): void {\r\n\r\n const branchGroupEl = this.elRef.nativeElement;\r\n\r\n const bridgeLines = branchGroupEl.querySelectorAll('.horizontal-bridge-line');\r\n const topBridgeLineEl = bridgeLines[0] as HTMLElement | null;\r\n const bottomBridgeLineEl = bridgeLines[1] as HTMLElement | null;\r\n\r\n const branchColumnEls = Array.from(branchGroupEl.querySelectorAll(':scope > .branch-column')) as HTMLElement[];\r\n\r\n if (!topBridgeLineEl || !bottomBridgeLineEl || !branchColumnEls) return;\r\n\r\n this.bridgeLineService.adjustBridgeLines(\r\n this.elRef.nativeElement,\r\n topBridgeLineEl,\r\n bottomBridgeLineEl,\r\n branchColumnEls,\r\n );\r\n this.bridgeLinesAdjusted.emit();\r\n }\r\n\r\n\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { IStep } from '../interfaces/IStep';\r\nimport { EnumWorkflowStepType } from '../enums/EnumWorkflowStepType';\r\nimport { EnumActorSourceType } from '../enums/EnumActorSourceType';\r\n\r\n@Pipe({\r\n name: 'wfNodeLabel'\r\n})\r\nexport class WfNodeLabelPipe implements PipeTransform {\r\n\r\n transform(value: IStep): string {\r\n\r\n let result: string = '';\r\n\r\n if (value.type === EnumWorkflowStepType.Approval || value.type === EnumWorkflowStepType.CC || value.type === EnumWorkflowStepType.Handle) {\r\n if (!!value.config?.actors) {\r\n switch (value.config?.actors.source) {\r\n case EnumActorSourceType.Manager:\r\n if (value.config?.actors.level !== undefined) {\r\n result += `${value.config?.actors.source} level ${value.config?.actors.level}`;\r\n }\r\n break;\r\n case EnumActorSourceType.DepartmentSupervisor:\r\n if (value.config?.actors.level !== undefined) {\r\n result += `${value.config?.actors.source} level ${value.config?.actors.level}`;\r\n }\r\n break;\r\n case EnumActorSourceType.Position:\r\n if (!!value.config?.actors.staticValueIds) {\r\n result += `${value.config?.actors.staticValueIds.length} ${value.config?.actors.source.toLowerCase()}(s) selected`;\r\n }\r\n break;\r\n case EnumActorSourceType.Employee:\r\n if (!!value.config?.actors.staticValueIds) {\r\n result += `${value.config?.actors.staticValueIds.length} ${value.config?.actors.source.toLowerCase()}(s) selected`;\r\n }\r\n break;\r\n default:\r\n result += value.label;\r\n }\r\n }\r\n\r\n if (!!value.config?.actors?.staticValueIds && value.config?.actors?.staticValueIds?.length > 1) {\r\n result += `; routing logic: ${value.config?.routingLogic}`\r\n }\r\n\r\n if (!!value.config?.ruleTree) {\r\n result += `; has pre-filter condition; fallback type: ${value.config.fallbackType}`;\r\n }\r\n\r\n } else {\r\n result = value.label;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n}\r\n","import { AfterViewInit, Component, ElementRef, inject, Input, QueryList, Renderer2, ViewChild, ViewChildren } from '@angular/core';\r\nimport { LowerCasePipe } from '@angular/common';\r\nimport { IStep } from '../../interfaces/IStep';\r\nimport { BaseComponent } from '../../../base-component/base/base.component';\r\nimport { CoreWorkflowService } from '../../core-workflow.service';\r\nimport { WfBottomVInsertComponent } from '../wf-bottom-v-insert/wf-bottom-v-insert.component';\r\nimport { EnumWorkflowStepType } from '../../enums/EnumWorkflowStepType';\r\nimport { TooltipDirective } from '../../../tooltip/tooltip.directive';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { IWorkflowBranch } from '../../interfaces/IWorkflowBranch';\r\nimport { BridgeLineService } from '../bridge-line.service';\r\nimport { BridgeLineDirective } from '../bridge-line.directive';\r\nimport { WfNodeLabelPipe } from '../../pipes/wf-node-label.pipe';\r\n\r\n@Component({\r\n selector: 'wf-node',\r\n imports: [\r\n FormsModule,\r\n WfNodeLabelPipe,\r\n BridgeLineDirective,\r\n LowerCasePipe,\r\n WfBottomVInsertComponent,\r\n TooltipDirective,\r\n ],\r\n templateUrl: './wf-node.component.html',\r\n styleUrls: [\r\n '../wf-workflow-canvas.component.scss',\r\n './wf-node.component.scss'\r\n ]\r\n})\r\nexport class WfNodeComponent extends BaseComponent implements AfterViewInit {\r\n @Input({ required: true }) branchId!: string;\r\n @Input({ required: true }) step!: IStep;\r\n @Input({ required: true }) index!: number;\r\n @Input({ required: true }) branchPriority!: number;\r\n @Input({ required: true }) stepGroup: IStep[] = []; // array that holds 'step'\r\n @Input() conditionalBranches!: IWorkflowBranch[];\r\n @Input() isRootLevelStepGroup: boolean = false;\r\n\r\n @Input() grandParentSteps: IStep[] | null = null; // The step array that owns the parent step of type ConditionalBranch\r\n @Input() isInFallbackBranch: boolean = false;\r\n\r\n @ViewChild('branchHeader') branchHeader!: ElementRef;\r\n @ViewChild('branchName') branchName!: ElementRef;\r\n @ViewChild('input') input!: ElementRef;\r\n\r\n @ViewChild('branchGroup') branchGroupRef!: ElementRef<HTMLElement>;\r\n @ViewChild('topBridgeLine') topBridgeLineRef!: ElementRef<HTMLElement>;\r\n @ViewChild('bottomBridgeLine') bottomBridgeLineRef!: ElementRef<HTMLElement>;\r\n @ViewChildren('branchColumn') branchColumnRefs!: QueryList<ElementRef<HTMLElement>>;\r\n\r\n listenerFn!: (() => void) | null;\r\n\r\n //private observer!: MutationObserver;\r\n\r\n enumType = EnumWorkflowStepType;\r\n\r\n public coreWorkflowService = inject(CoreWorkflowService);\r\n renderer = inject(Renderer2);\r\n bridgeLineService = inject(BridgeLineService);\r\n\r\n stepNameEditMode: boolean = false;\r\n\r\n onInputBlur(): void {\r\n this.stepNameEditMode = false;\r\n }\r\n\r\n onStepNameChanged(newName: string): void {\r\n if (this.isRootLevelStepGroup) {\r\n const cloned = structuredClone(this.coreWorkflowService.$currentSteps());\r\n const stepInCloned = cloned.find(s => s.id === this.step.id);\r\n if (stepInCloned) {\r\n stepInCloned.name = newName;\r\n this.coreWorkflowService.$currentSteps.set(cloned);\r\n }\r\n }\r\n }\r\n\r\n getBranchColumnElements(): HTMLElement[] {\r\n return this.branchColumnRefs?.map(ref => ref?.nativeElement);\r\n }\r\n\r\n private setupClickOutsideListener(): void {\r\n // Clean up any existing listener\r\n if (this.listenerFn) {\r\n this.listenerFn();\r\n this.listenerFn = null;\r\n }\r\n\r\n // Delay to ensure DOM has rendered\r\n setTimeout(() => {\r\n this.listenerFn = this.renderer.listen('document', 'click', (event: Event) => {\r\n const clickedInside = this.branchHeader?.nativeElement.contains(event.target);\r\n if (!clickedInside) {\r\n this.stepNameEditMode = false;\r\n this.removeClickOutsideListener(); // optional: remove after 1 toggle\r\n }\r\n });\r\n });\r\n }\r\n\r\n private removeClickOutsideListener(): void {\r\n if (this.listenerFn) {\r\n this.listenerFn();\r\n this.listenerFn = null;\r\n }\r\n }\r\n\r\n onLabelClicked(): void {\r\n this.coreWorkflowService.$showStepConfig.set(true);\r\n }\r\n\r\n switchToNameEditMode(): void {\r\n if (!!this.step.isPseudo && !!this.isInFallbackBranch) return;\r\n this.stepNameEditMode = true;\r\n setTimeout(() => this.input?.nativeElement.focus());\r\n this.setupClickOutsideListener();\r\n }\r\n\r\n\r\n adjustBridgeLines(): void {\r\n\r\n setTimeout(() => {\r\n\r\n if (!this.branchGroupRef || !this.topBridgeLineRef || !this.bottomBridgeLineRef) {\r\n console.warn('[DEBUG] Some ref was null');\r\n return;\r\n }\r\n\r\n console.log('[DEBUG] Triggering BridgeLineService');\r\n\r\n this.bridgeLineService.adjustBridgeLines(\r\n this.branchGroupRef.nativeElement,\r\n this.topBridgeLineRef.nativeElement,\r\n this.bottomBridgeLineRef.nativeElement,\r\n this.branchColumnRefs.map(ref => ref.nativeElement)\r\n );\r\n\r\n }, 50)\r\n\r\n }\r\n\r\n onDeleteBranch(branchId: string): void {\r\n if (!this.conditionalBranches) return;\r\n\r\n const index = this.conditionalBranches.findIndex(b => b.id === branchId);\r\n if (index === -1) return;\r\n\r\n // ⚠️ Remove selected branch (in-place is okay, but needs re-signal)\r\n this.conditionalBranches.splice(index, 1);\r\n\r\n const onlyFallbackLeft = this.conditionalBranches.length === 1 && this.conditionalBranches[0].isFallback;\r\n\r\n if (onlyFallbackLeft) {\r\n if (!this.grandParentSteps) return;\r\n\r\n const fallbackBranchId = this.conditionalBranches[0].id;\r\n\r\n const stepIndex = this.grandParentSteps.findIndex(step =>\r\n step.branches?.some(branch => branch.id === fallbackBranchId)\r\n );\r\n if (stepIndex === -1) return;\r\n\r\n if (this.isRootLevelStepGroup) {\r\n // ✅ Deep clone and reassign to trigger reactivity\r\n const updated = structuredClone(this.grandParentSteps);\r\n updated.splice(stepIndex, 1);\r\n this.coreWorkflowService.$currentSteps.set(updated);\r\n } else {\r\n // ✅ In-place mutation is fine for nested groups\r\n this.grandParentSteps.splice(stepIndex, 1);\r\n this.coreWorkflowService.$currentSteps.set(structuredClone(this.coreWorkflowService.$currentSteps()));\r\n }\r\n\r\n return;\r\n }\r\n\r\n // 🧠 Still re-trigger signal to reflect nested change in UI\r\n this.coreWorkflowService.autoReassignPriorities(this.conditionalBranches);\r\n this.coreWorkflowService.$currentSteps.set(structuredClone(this.coreWorkflowService.$currentSteps()));\r\n }\r\n\r\n onDeleteStep(): void {\r\n if (!this.stepGroup) return;\r\n\r\n const index = this.stepGroup.findIndex(s => s.id === this.step.id);\r\n if (index === -1) return;\r\n\r\n if (this.isRootLevelStepGroup) {\r\n this.coreWorkflowService.updateStepsSignalAfterNestedChange(this.coreWorkflowService.$currentSteps, draft => {\r\n draft.splice(index, 1);\r\n });\r\n } else {\r\n this.stepGroup.splice(index, 1); // nested mutation still allowed (e.g., in branch)\r\n this.coreWorkflowService.updateStepsSignalAfterNestedChange(this.coreWorkflowService.$currentSteps, _ => { }); // triggers reactivity\r\n }\r\n }\r\n\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n\r\n })\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 openConditionEditor(): void {\r\n this.coreWorkflowService.$currentStep.set(this.step);\r\n this.coreWorkflowService.$showStepConfig.set(true);\r\n }\r\n\r\n /*\r\n openNoneBranchRelatedEditor(): void {\r\n this.coreWorkflowService.$currentStep.set(this.step);\r\n this.coreWorkflowService.$showStepConfig.set(true);\r\n } \r\n */\r\n\r\n /*\r\n openNoneBranchRelatedEditor(): void {\r\n\r\n const steps = this.coreWorkflowService.$currentSteps();\r\n console.log(\"$currentSteps\", steps);\r\n console.log('🧪 Raw step found:', JSON.stringify(steps.find(s => s.id === this.step.id), null, 2));\r\n\r\n\r\n const filter = this.coreWorkflowService.$currentSteps().filter(x => x.id === this.step.id);\r\n if (filter.length === 1) {\r\n const step = filter[0];\r\n this.coreWorkflowService.$currentStep.set(step);\r\n this.coreWorkflowService.$showStepConfig.set(true);\r\n }\r\n }\r\n */\r\n\r\n openNoneBranchRelatedEditor(): void {\r\n const steps = this.coreWorkflowService.$currentSteps();\r\n\r\n const found = this.coreWorkflowService.findStepRecursive(steps, this.step.id);\r\n\r\n console.log(\"🧪 Step found:\", found);\r\n\r\n if (found) {\r\n this.coreWorkflowService.$currentStep.set(found);\r\n this.coreWorkflowService.$showStepConfig.set(true);\r\n } else {\r\n console.warn(`Step with id=${this.step.id} not found in workflow tree`);\r\n }\r\n }\r\n\r\n}\r\n","@switch (step.type) {\r\n\r\n @case (enumType.ConditionalBranch) {\r\n <div class=\"wf-branch-group-container\">\r\n <div \r\n class=\"branch-group\" \r\n #branchGroup \r\n bridgeLine\r\n (bridgeLinesAdjusted)=\"adjustBridgeLines()\"\r\n >\r\n <!-- 🔹 Top Bridge Line -->\r\n <div class=\"horizontal-bridge-line\" #topBridgeLine></div>\r\n\r\n <div class=\"add-branch-inline\" [appTooltip]=\"'All conditional branches are checked from Left to Right in a strict order'\" [showAnyway]=\"true\">\r\n <button class=\"add-branch-btn\" (click)=\"coreWorkflowService.addBranchToStep(step.id)\">\r\n + Add New Branch\r\n </button>\r\n </div>\r\n\r\n \r\n @for (branch of step.branches; track $index; let j = $index) {\r\n <div class=\"branch-column\" #branchColumn>\r\n <div class=\"branch-column-inner\">\r\n \r\n @for (bstep of branch.steps; track $index; let k = $index) {\r\n <wf-node\r\n [branchId]=\"branch.id\"\r\n [branchPriority]=\"branch.priority\"\r\n [step]=\"bstep\"\r\n [conditionalBranches]=\"step.branches || []\"\r\n [stepGroup]=\"branch.steps\"\r\n [grandParentSteps]=\"stepGroup\"\r\n [index]=\"k\"\r\n [isInFallbackBranch]=\"!!branch.isFallback\"\r\n ></wf-node>\r\n }\r\n \r\n </div>\r\n \r\n <div class=\"vertical-bridge-line\"></div>\r\n </div>\r\n }\r\n \r\n <!-- 🔹 Bottom Bridge Line -->\r\n <div class=\"horizontal-bridge-line\" #bottomBridgeLine></div>\r\n </div>\r\n </div>\r\n }\r\n \r\n @case (enumType.BranchCard) {\r\n <div class=\"wf-step-container wf-branch-card-container workflow-box\">\r\n <div class=\"step-wrapper branch-card-wrapper\" [class.fallback]=\"!!isInFallbackBranch\">\r\n <div class=\"arrow-down-container\">\r\n <div class=\"arrow-down\"></div>\r\n </div>\r\n \r\n <div class=\"step-header branch-header\" [class.edit-mode]=\"stepNameEditMode\" #branchHeader>\r\n @if (stepNameEditMode) {\r\n <div class=\"input-wrapper\">\r\n <input class=\"form-control\" \r\n (blur)=\"onInputBlur()\" \r\n [(ngModel)]=\"step.name\"\r\n (ngModelChange)=\"onStepNameChanged($event)\" \r\n #input>\r\n </div>\r\n } @else {\r\n <div class=\"step-name-wrapper branch-name-wrapper\">\r\n <div\r\n class=\"step-name branch-name\"\r\n [class.pointer]=\"!isInFallbackBranch\"\r\n (click)=\"switchToNameEditMode()\"\r\n #branchName>\r\n {{ step.name }}\r\n </div>\r\n \r\n @if (!!isInFallbackBranch) {\r\n <i class=\"ti-info-alt\"\r\n [appTooltip]=\"'This branch is created by default and will only be activated if none of the other branches can be executed.'\"\r\n [showAnyway]=\"true\" [position]=\"'above'\"></i>\r\n }\r\n </div>\r\n \r\n <div class=\"branch-priority\">Priority {{ branchPriority }}</div>\r\n <div class=\"step-delete branch-delete pointer\" (click)=\"onDeleteBranch(branchId)\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"step-set-config branch-set-condition\" [class.pointer]=\"!isInFallbackBranch\">\r\n @if (!!isInFallbackBranch) {\r\n <div class=\"branch-subtext fallback\"\r\n [appTooltip]=\"'If other branches are not met, the alternative branch will be executed'\"\r\n [showAnyway]=\"true\" [position]=\"'above'\">\r\n If other branches are not met, the alternative branch will be executed\r\n </div>\r\n } @else {\r\n <div class=\"step-subtext branch-subtext\" (click)=\"openConditionEditor()\">Set conditions</div>\r\n <div><i class=\"feather-chevron-right\"></i></div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- The handler node applies to the situation where no approval is required, but a member needs to process something:\r\n💰 Financial payment,\r\n📎 Stamping,\r\n🗂 Document filing, and so on. -->\r\n \r\n @default() {\r\n <div class=\"wf-step-container workflow-box {{ step.type.toLowerCase() }}\">\r\n\r\n <div class=\"step-wrapper\">\r\n \r\n <div class=\"step-header\" [class.edit-mode]=\"stepNameEditMode\">\r\n @if (stepNameEditMode) {\r\n <div class=\"input-wrapper\">\r\n <input class=\"form-control\" \r\n (blur)=\"onInputBlur()\" \r\n [(ngModel)]=\"step.name\" \r\n (ngModelChange)=\"onStepNameChanged($event)\" \r\n #input>\r\n </div>\r\n } @else {\r\n <div class=\"step-name-wrapper\">\r\n <div\r\n class=\"step-name pointer\"\r\n (click)=\"switchToNameEditMode()\"\r\n #stepName>\r\n {{ step.name }}\r\n </div>\r\n @if (step.type === enumType.Handle) {\r\n <i class=\"ti-info-alt pointer\"\r\n [appTooltip]=\"'The handler node applies to the situation where no approval is required, but a member needs to process something (Financial payment, Stamping, Document filing, and so on.)'\"\r\n [showAnyway]=\"true\" [position]=\"'above'\"></i>\r\n }\r\n </div>\r\n \r\n <div class=\"step-delete pointer\" (click)=\"onDeleteStep()\" [class.d-none]=\"step.type === enumType.Submit || step.type === enumType.End\">\r\n <i class=\"feather-x\" ></i>\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"step-set-config pointer\" (click)=\"openNoneBranchRelatedEditor()\">\r\n <div class=\"step-subtext pointer\" [class.configurated]=\"!!step.config\" [appTooltip]=\"step | wfNodeLabel\">{{ step | wfNodeLabel }}</div>\r\n <div><i class=\"feather-chevron-right\"></i></div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n}\r\n \r\n@if (step.type !== enumType.End) {\r\n <wf-bottom-v-insert\r\n [currentContext]=\"{ branchId: step.branchId, index: index + 1 }\"\r\n [currentStep]=\"step\"\r\n ></wf-bottom-v-insert>\r\n}\r\n ","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\r\nimport { CoreWorkflowService } from '../../core-workflow.service';\r\nimport { BaseComponent } from '../../../base-component/base/base.component';\r\n\r\n@Component({\r\n selector: 'wf-steps-preview',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [],\r\n templateUrl: './wf-steps-preview.component.html',\r\n styleUrl: './wf-steps-preview.component.scss'\r\n})\r\nexport class WfStepsPreviewComponent extends BaseComponent {\r\n\r\n public wfs = inject(CoreWorkflowService);\r\n\r\n close(): void {\r\n this.wfs.$showCurrentStepsPreview.set(false);\r\n }\r\n\r\n}\r\n","<div class=\"wf-steps-preview-container\">\r\n\r\n <div class=\"wf-steps-preview-header\">\r\n <div class=\"panel-title\">\r\n All Steps Json\r\n </div>\r\n <div class=\"close-wrapper\" (click)=\"close()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n\r\n @if (wfs.$stepsJsonPreview()) {\r\n <pre class=\"json-preview\">{{ wfs.$stepsJsonPreview() }}</pre>\r\n } @else {\r\n <div class=\"empty-preview\">No steps to preview</div>\r\n }\r\n\r\n</div>","import { AsyncPipe, LowerCasePipe, NgStyle, NgTemplateOutlet } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, ElementRef, inject, input, OnDestroy, signal, viewChild, WritableSignal } from '@angular/core';\r\nimport { IStep } from '../interfaces/IStep';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\nimport { EnumWorkflowStepType } from '../enums/EnumWorkflowStepType';\r\nimport { WfInsertMenuComponent } from './wf-insert-menu/wf-insert-menu.component';\r\nimport { WfBottomVInsertComponent } from './wf-bottom-v-insert/wf-bottom-v-insert.component';\r\nimport { WfStepConfigShellComponent } from './wf-step-config-shell/wf-step-config-shell.component';\r\nimport { IInsertStepEvent } from '../interfaces/IInsertStepEvent';\r\nimport { IWorkflowInsertPoint } from '../interfaces/IWorkflowInsertPoint';\r\nimport { ROOT_BRANCH_ID } from '../enums/EnumWorkflowBranch';\r\nimport { IWorkflowBranch } from '../interfaces/IWorkflowBranch';\r\nimport { WfNodeComponent } from './wf-node/wf-node.component';\r\nimport { BaseComponent } from '../../base-component/base/base.component';\r\nimport { MultiLanguageService } from '../../../services/multi-language.service';\r\nimport { HotKeysDirective } from '../../../directives/hot-keys.directive';\r\nimport { ApplicationHelpService } from '../../../services/application-help.service';\r\nimport { distinctUntilChanged } from 'rxjs';\r\nimport { WfStepsPreviewComponent } from './wf-steps-preview/wf-steps-preview.component';\r\nimport { DomService } from '../../services/dom.service';\r\nimport { TooltipDirective } from '../../tooltip/tooltip.directive';\r\n\r\n@Component({\r\n selector: 'wf-workflow-canvas',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n AsyncPipe,\r\n NgStyle,\r\n HotKeysDirective,\r\n TooltipDirective,\r\n NgTemplateOutlet,\r\n LowerCasePipe,\r\n WfInsertMenuComponent,\r\n WfBottomVInsertComponent,\r\n WfInsertMenuComponent,\r\n WfStepConfigShellComponent,\r\n WfNodeComponent,\r\n WfStepsPreviewComponent\r\n ],\r\n templateUrl: './wf-workflow-canvas.component.html',\r\n styleUrl: './wf-workflow-canvas.component.scss'\r\n})\r\nexport class WfWorkflowCanvasComponent extends BaseComponent implements AfterViewInit, OnDestroy {\r\n\r\n $width: WritableSignal<number> = signal(0);\r\n $height: WritableSignal<number> = signal(0);\r\n\r\n $container = viewChild<ElementRef>('container');\r\n $printArea = viewChild<ElementRef>('printArea');\r\n $zoomTools = viewChild<ElementRef>('zoomTools');\r\n $parent = viewChild<ElementRef>('parent');\r\n\r\n hotKeys: string[] = ['F3', 'Escape']\r\n\r\n enumType = EnumWorkflowStepType;\r\n ROOT_BRANCH_ID = ROOT_BRANCH_ID;\r\n\r\n public wfs = inject(CoreWorkflowService);\r\n $steps = this.wfs.$currentSteps;\r\n applicationHelpService = inject(ApplicationHelpService);\r\n domService = inject(DomService);\r\n\r\n insertIndex: number | null = null;\r\n\r\n $previewZIndex: WritableSignal<number> = signal(this.domService.getMaxZIndex() + 1);\r\n\r\n $scale: WritableSignal<number> = signal(1);\r\n $scalePercent = computed(() => `${Math.round(this.$scale() * 100)}%`);\r\n cdr = inject(ChangeDetectorRef);\r\n\r\n $mouseDown = signal(false);\r\n $isDragging = computed(() => this.$mouseDown())\r\n $startX: WritableSignal<any> = signal(undefined);\r\n $scrollLeft: WritableSignal<any> = signal(undefined);\r\n $startY: WritableSignal<any> = signal(undefined);\r\n $scrollTop: WritableSignal<any> = signal(undefined);\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n effect(() => {\r\n this.$container()?.nativeElement.style.setProperty('--standard-connector-height', this.wfs.standardConnectorHeight + 'px');\r\n })\r\n this.subscriptions.push(\r\n this.applicationHelpService.activeKey$\r\n .pipe(\r\n distinctUntilChanged()\r\n )\r\n .subscribe(x => {\r\n console.log(\"x\", x)\r\n switch (x) {\r\n case 'F3':\r\n this.wfs.$showCurrentStepsPreview.set(true);\r\n break;\r\n case 'Escape':\r\n this.wfs.$currentStep.set(null);\r\n this.wfs.$showCurrentStepsPreview.set(false);\r\n this.wfs.$showStepConfig.set(false)\r\n break;\r\n }\r\n })\r\n )\r\n }\r\n\r\n startDragging(e: any, flag: any) {\r\n this.$mouseDown.set(true);\r\n this.$startX.set(e.pageX - this.$parent()?.nativeElement.offsetLeft);\r\n this.$scrollLeft.set(this.$parent()?.nativeElement.scrollLeft);\r\n this.$startY.set(e.pageY - this.$parent()?.nativeElement.offsetTop);\r\n this.$scrollTop.set(this.$parent()?.nativeElement.scrollTop);\r\n }\r\n\r\n stopDragging(e: any, flag: any) {\r\n this.$mouseDown.set(false);\r\n }\r\n\r\n moveEvent(e: any) {\r\n e.preventDefault();\r\n if (!this.$mouseDown()) {\r\n return;\r\n }\r\n const x = e.pageX - this.$parent()?.nativeElement.offsetLeft;\r\n const scrollX = x - this.$startX();\r\n this.$parent()!.nativeElement.scrollLeft = this.$scrollLeft() - scrollX;\r\n const y = e.pageY - this.$parent()?.nativeElement.offsetTop;\r\n const scrollY = y - this.$startY();\r\n this.$parent()!.nativeElement.scrollTop = this.$scrollTop() - scrollY;\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.wfs.$showStepConfig.set(false);\r\n this.wfs.$showCurrentStepsPreview.set(false);\r\n setTimeout(() => {\r\n this.wfs.$initialProcessDesignJson.set(this.wfs.$stepsJsonPreview());\r\n }, 1000)\r\n }\r\n\r\n findBranchById(branchId: string, steps: IStep[] = this.wfs.$currentSteps()): IWorkflowBranch | undefined {\r\n for (const step of steps) {\r\n if (step.type === EnumWorkflowStepType.ConditionalBranch && step.branches) {\r\n // ✅ step.branches is now just an array\r\n const found = step.branches.find(b => b.id === branchId);\r\n if (found) return found;\r\n\r\n // 🔁 Recurse into steps of each branch\r\n for (const branch of step.branches) {\r\n const deep = this.findBranchById(branchId, branch.steps);\r\n if (deep) return deep;\r\n }\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n\r\n // safeInsertStep(\r\n // branchId: string | null,\r\n // index: number,\r\n // newStep: IStep\r\n // ): void {\r\n // if (branchId === null || branchId === ROOT_BRANCH_ID) {\r\n // this.$steps.update(steps => {\r\n // const copy = [...steps];\r\n // copy.splice(index, 0, newStep);\r\n // return copy;\r\n // })\r\n // return;\r\n // }\r\n\r\n // const branch = this.findBranchById(branchId);\r\n // if (!branch) {\r\n // console.warn(`❗ Cannot insert: Branch with ID \"${branchId}\" not found.`);\r\n // return;\r\n // }\r\n\r\n // branch.steps.splice(index, 0, newStep);\r\n\r\n // // ✅ now update $steps based on branch changes\r\n // this.$steps.update(steps => {\r\n // const copy = structuredClone(steps); // deep clone of old tree\r\n // const targetBranch = this.findBranchById(branchId, copy);\r\n // if (!targetBranch) {\r\n // console.warn(`❗ Cannot insert: Branch with ID \"${branchId}\" not found.`);\r\n // return steps;\r\n // }\r\n\r\n // targetBranch.steps.splice(index, 0, newStep); // mutate clone only\r\n // return copy; // return fresh tree\r\n // });\r\n\r\n\r\n // }\r\n\r\n\r\n safeInsertStep(\r\n branchId: string | null,\r\n index: number,\r\n newStep: IStep\r\n ): void {\r\n \r\n if (branchId === null || branchId === ROOT_BRANCH_ID) {\r\n this.$steps.update(steps => {\r\n const copy = [...steps];\r\n copy.splice(index, 0, newStep);\r\n return copy;\r\n });\r\n return;\r\n }\r\n\r\n this.$steps.update(steps => {\r\n const copy = structuredClone(steps);\r\n const targetBranch = this.findBranchById(branchId, copy);\r\n if (!targetBranch) {\r\n console.warn(`❗ Cannot insert: Branch with ID \"${branchId}\" not found.`);\r\n return steps;\r\n }\r\n\r\n const safeIndex = Math.min(Math.max(index, 0), targetBranch.steps.length);\r\n const stepToInsert = structuredClone(newStep);\r\n\r\n targetBranch.steps.splice(safeIndex, 0, stepToInsert);\r\n return copy;\r\n });\r\n\r\n }\r\n\r\n\r\n insertStep(event: IInsertStepEvent) {\r\n const { type, index, branchId } = event;\r\n\r\n if (!branchId) {\r\n console.error(`insertStep error: without branchId`)\r\n return;\r\n };\r\n\r\n let newStep: IStep;\r\n\r\n switch (type) {\r\n case EnumWorkflowStepType.Approval:\r\n newStep = this.wfs.createStep(type, branchId, 'Set approver');\r\n break;\r\n case EnumWorkflowStepType.CC:\r\n newStep = this.wfs.createStep(type, branchId, 'Set cc recipients');\r\n break;\r\n case EnumWorkflowStepType.Handle:\r\n newStep = this.wfs.createStep(type, branchId, 'Set handler');\r\n break;\r\n case EnumWorkflowStepType.ConditionalBranch:\r\n newStep = this.wfs.createConditionalBranchStep(branchId);\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n this.safeInsertStep(branchId, index, newStep);\r\n\r\n this.wfs.insertContext$.next(null);\r\n }\r\n\r\n showInsertInBranch(context: IWorkflowInsertPoint): void {\r\n this.wfs.insertContext$.next(context);\r\n }\r\n\r\n insertIntoBranch(event: IInsertStepEvent): void {\r\n const { branchId, type, index } = event;\r\n\r\n if (!branchId) {\r\n console.error(`insertStep error: missing branchId`);\r\n return;\r\n }\r\n\r\n // 🔍 Find the branch that matches the given ID\r\n const branch = this.findBranchById(branchId);\r\n if (!branch) {\r\n console.warn(`Branch not found: ${branchId}`);\r\n return;\r\n }\r\n\r\n let newStep: IStep;\r\n\r\n switch (type) {\r\n case EnumWorkflowStepType.Approval:\r\n newStep = this.wfs.createStep(type, branchId, 'Set approver');\r\n break;\r\n case EnumWorkflowStepType.CC:\r\n newStep = this.wfs.createStep(type, branchId, 'Set cc recipients');\r\n break;\r\n case EnumWorkflowStepType.Handle:\r\n newStep = this.wfs.createStep(type, branchId, 'Set handler');\r\n break;\r\n case EnumWorkflowStepType.ConditionalBranch:\r\n newStep = this.wfs.createConditionalBranchStep(branchId);\r\n break;\r\n default:\r\n console.warn(`Unsupported step type: ${type}`);\r\n return;\r\n }\r\n\r\n // ✅ Insert into the correct step list\r\n branch.steps.splice(index, 0, newStep);\r\n\r\n // 🧹 Clear insert state\r\n this.wfs.insertContext$.next(null);\r\n }\r\n\r\n private findStepRecursive(steps: IStep[], targetId: string): IStep | null {\r\n for (const step of steps) {\r\n if (step.id === targetId) return step;\r\n\r\n // ✅ New model: step.branches is directly an array\r\n if (step.type === EnumWorkflowStepType.ConditionalBranch && step.branches) {\r\n for (const branch of step.branches) {\r\n const found = this.findStepRecursive(branch.steps, targetId);\r\n if (found) return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n addBranchToConditional(conditionalStepId: string) {\r\n const conditional = this.findStepRecursive(this.wfs.$currentSteps(), conditionalStepId);\r\n\r\n if (!conditional || conditional.type !== EnumWorkflowStepType.ConditionalBranch || !conditional.branches) return;\r\n\r\n const branches = conditional.branches;\r\n\r\n const newBranchId = crypto.randomUUID();\r\n const name = `Condition ${branches.length}`;\r\n\r\n const newBranch: IWorkflowBranch = {\r\n id: newBranchId,\r\n name,\r\n priority: branches.length + 1,\r\n steps: [\r\n {\r\n id: `pseudo-${newBranchId}`,\r\n name: `pseudo-${newBranchId}`,\r\n branchId: newBranchId,\r\n type: EnumWorkflowStepType.BranchCard,\r\n label: name,\r\n isPseudo: true\r\n },\r\n {\r\n id: crypto.randomUUID(),\r\n name: `default-approval-${branches.length + 1}`,\r\n branchId: newBranchId,\r\n type: EnumWorkflowStepType.Approval,\r\n label: `Approve ${branches.length + 1}`\r\n }\r\n ]\r\n };\r\n\r\n const fallbackIndex = branches.findIndex(b => b.isFallback);\r\n\r\n if (fallbackIndex !== -1) {\r\n branches.splice(fallbackIndex, 0, newBranch);\r\n } else {\r\n branches.push(newBranch);\r\n }\r\n\r\n this.wfs.autoReassignPriorities(branches);\r\n }\r\n\r\n deleteBranchGroup(stepId: string): void {\r\n const step = this.wfs.$currentSteps().find(s => s.id === stepId);\r\n\r\n if (step?.type === EnumWorkflowStepType.ConditionalBranch) {\r\n const index = this.wfs.$currentSteps().indexOf(step);\r\n if (index !== -1) {\r\n this.$steps.update(steps => {\r\n const copy = [...steps];\r\n copy.splice(index, 1);\r\n return copy;\r\n })\r\n }\r\n }\r\n }\r\n\r\n tempOnLabelClicked(): void {\r\n this.wfs.$showStepConfig.set(true);\r\n }\r\n\r\n onInsert(event: IInsertStepEvent): void {\r\n // Delegate to CoreWorkflowService or your working tree logic\r\n this.insertStep(event);\r\n this.clearInsertContext(); // clean up\r\n }\r\n\r\n clearInsertContext(): void {\r\n this.wfs.insertContext$.next(null);\r\n }\r\n\r\n showStepsJSON(): void {\r\n this.wfs.$showCurrentStepsPreview.set(true);\r\n }\r\n\r\n zoonIn(): void {\r\n this.$scale.set(this.$scale() * 1.1);\r\n this.$container()!.nativeElement.style.setProperty('--print-area-scale', this.$scale())\r\n }\r\n\r\n zoonOut(): void {\r\n this.$scale.set(this.$scale() / 1.1);\r\n this.$container()!.nativeElement.style.setProperty('--print-area-scale', this.$scale())\r\n }\r\n\r\n zoonFeat(): void {\r\n this.$scale.set(1);\r\n this.$container()!.nativeElement.style.setProperty('--print-area-scale', this.$scale())\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=\"wf-workflow-canvas-container\" #container [hotKeys]=\"hotKeys\"\r\n (mousedown)=\"startDragging($event, false)\"\r\n (mouseup)=\"stopDragging($event, false)\" \r\n (mouseleave)=\"stopDragging($event, false)\" \r\n (mousemove)=\"moveEvent($event)\"\r\n>\r\n\r\n <div class=\"canvas-top-tool\">\r\n <button type=\"button\" class=\"btn btn-secondary\"\r\n [appTooltip]=\"'Press F3 to show, Escape to hide'\"\r\n [showAnyway]=\"true\"\r\n (click)=\"showStepsJSON()\"\r\n >Show JSON</button>\r\n </div> \r\n\r\n <div class=\"zoom-tools\" #zoomTools>\r\n <div class=\"tools-wrapper\">\r\n <button type=\"button\" class=\"zoom-btn\" (click)=\"zoonOut()\">\r\n <span class=\"universe-icon\"><i class=\"feather-zoom-out\"></i></span>\r\n </button>\r\n <button type=\"button\" class=\"zoom-label\">\r\n {{ $scalePercent() }}\r\n </button>\r\n <button type=\"button\" class=\"zoom-btn\" (click)=\"zoonIn()\">\r\n <span class=\"universe-icon\"><i class=\"feather-zoom-in\"></i></span>\r\n </button>\r\n <button type=\"button\" class=\"zoom-btn\" (click)=\"zoonFeat()\">\r\n <span class=\"universe-icon\"><i class=\"feather-zap\"></i></span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"scroll-container\" #parent [ngStyle]=\"{ cursor: $mouseDown() ? 'all-scroll' : 'unset', width: $width() ? $width() + 'px' : '100%', height: $height() ? $height() + 'px' : 'unset'}\">\r\n\r\n <div class=\"canvas print-area\" #printArea [class.is-dragging]=\"$isDragging()\">\r\n\r\n @for (step of wfs.$currentSteps(); track $index; let i = $index) {\r\n <div class=\"step\">\r\n <wf-node\r\n [branchId]=\"'root'\"\r\n [branchPriority]=\"1\"\r\n [step]=\"step\"\r\n [stepGroup]=\"wfs.$currentSteps()\"\r\n [index]=\"i\"\r\n [isRootLevelStepGroup]=\"true\"\r\n ></wf-node>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n @if (!!(wfs.insertContext$ | async)) {\r\n <wf-insert-menu (insert)=\"insertStep($event)\"></wf-insert-menu>\r\n }\r\n\r\n <wf-step-config-shell></wf-step-config-shell>\r\n\r\n <div class=\"steps-preview\" [class.shown]=\"wfs.$showCurrentStepsPreview()\"\r\n [ngStyle]=\"{\r\n zIndex: $previewZIndex()\r\n }\"\r\n >\r\n <wf-steps-preview></wf-steps-preview>\r\n </div>\r\n \r\n\r\n</div>","import { AfterViewInit, ChangeDetectionStrategy, Component, inject, OnDestroy } from '@angular/core';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\nimport { AsyncPipe } from '@angular/common';\r\nimport { WfWorkflowCanvasComponent } from './wf-workflow-canvas.component'\r\nimport { BaseComponent } from '../../base-component/base/base.component';\r\nimport { MultiLanguageService } from '../../../services/multi-language.service';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { CoreToastLoadingComponent } from '../../core-toast-loading/core-toast-loading.component';\r\n\r\n@Component({\r\n selector: 'wf-process-design',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n AsyncPipe,\r\n WfWorkflowCanvasComponent,\r\n CoreToastLoadingComponent\r\n ],\r\n templateUrl: './wf-process-design.component.html',\r\n styleUrl: './wf-process-design.component.scss'\r\n})\r\nexport class WfProcessDesignComponent extends BaseComponent {\r\n\r\n wfs = inject(CoreWorkflowService);\r\n $loading = this.wfs.$loading;\r\n \r\n\r\n constructor(\r\n public override mls: MultiLanguageService,\r\n private route: ActivatedRoute,\r\n ) {\r\n super(mls);\r\n }\r\n\r\n}\r\n","<div class=\"wf-process-design-container\">\r\n\r\n @if (!!wfs.$currentFlow()) {\r\n <wf-workflow-canvas></wf-workflow-canvas>\r\n }\r\n\r\n @if ($loading()) {\r\n <core-toast-loading></core-toast-loading>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, inject, Input, OnInit } from '@angular/core';\r\nimport { BaseEditComponent } from '../../base-edit/base-edit/base-edit.component';\r\nimport { CoreFormDesignService } from '../../core-form-design/core-form-design.service';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\nimport { AlertService } from '../../alert/alert.service';\r\nimport { DialogService } from '../../../services/dialog.service';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\nimport { CoreFormComponent, IDynamicFormEmitOnFormCreated } from '../../core-form/core-form/core-form.component';\r\nimport { Validators } from '@angular/forms';\r\nimport { EnumTranslateKey } from 'alpha-global-constants';\r\nimport { EnumFormBaseContolType } from '../../../enum/EnumFormBaseContolType';\r\nimport { ICoreFormSection } from '../../core-form/core-form/enum-interfaces';\r\nimport { EnumCorePageEditMode } from '../../core-page-edit/EnumCorePageEditMode';\r\nimport { MultiLanguageService } from '../../../services/multi-language.service';\r\nimport { alertOptions } from '../../../constants/alertOptions';\r\n\r\nconst EMAIL_ICON = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-mail\"><path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"/><polyline points=\"22,6 12,13 2,6\"/></svg>'\r\nconst TEMPLATE_TYPES = [\r\n { key: 'submit', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBMIT' },\r\n { key: 'react', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_REACT' },\r\n { key: 'selfReact', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SELF_REACT' },\r\n { key: 'fullyApprove', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_FULLY_APPROVE' },\r\n { key: 'reject', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_REJECT' },\r\n { key: 'cancel', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_CANCEL' },\r\n { key: 'terminate', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_TERMINATE' },\r\n { key: 'revoke', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_REVOKE' },\r\n { key: 'cc', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_CC' }\r\n]\r\n\r\n@Component({\r\n selector: 'wf-email-templates',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CoreFormComponent,\r\n ],\r\n templateUrl: './wf-email-templates.component.html',\r\n styleUrl: './wf-email-templates.component.scss'\r\n})\r\nexport class WfEmailTemplatesComponent extends BaseEditComponent implements OnInit {\r\n @Input() captionCode!: string;\r\n public wfs = inject(CoreWorkflowService);\r\n alertService = inject(AlertService);\r\n fds = inject(CoreFormDesignService);\r\n mls = inject(MultiLanguageService);\r\n as = inject(AlertService);\r\n\r\n lang!: string;\r\n\r\n $wysGroups = computed(() => this.fds.extractWysGroups(this.fds.$placeholderSections()))\r\n\r\n mode$ = new BehaviorSubject<EnumCorePageEditMode>(EnumCorePageEditMode.CREATE)\r\n\r\n availableTokens: string[] = ['webappStatusUrl','portalStatusUrl','webappReactUrl','portalReactUrl','workflowName' ,'firstActorFullName','submitterFullName','actorFullName']\r\n\r\n constructor(\r\n public override dialogService: DialogService,\r\n ) {\r\n\r\n super(dialogService);\r\n\r\n if (!this.captionCode) {\r\n this.captionCode = \"UI_COMPONENT_TITLE_WF_WORKFLOW_EMAIL_TEMPLATES\";\r\n }\r\n\r\n this.subscriptions.push(\r\n this.mls.lang$.subscribe(x => this.lang = x)\r\n )\r\n\r\n }\r\n\r\n loading: boolean = false;\r\n override entityTable = \"WF_WORKFLOW\";\r\n subscriptions: Subscription[] = [];\r\n\r\n // sections: ICoreFormSection[] = \r\n // [\r\n // {\r\n // caption: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_REACT\",\r\n // iconSvg: EMAIL_ICON,\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 0,\r\n // label: \"UI_ENTITY_FIELD_CAPTION_COMMON_ID\",\r\n // field: 'id',\r\n // value: null,\r\n // hidden: true,\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // },\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBJECT\",\r\n // field: 'reactSubject',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ],\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_BODY\",\r\n // field: 'reactBody',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTAREA,\r\n // textareaRows: 5,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ]\r\n // ]\r\n // },\r\n // {\r\n // caption: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_FULLY_APPROVE\",\r\n // iconSvg: EMAIL_ICON,\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBJECT\",\r\n // field: 'fullyApproveSubject',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ],\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_BODY\",\r\n // field: 'fullyApproveBody',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTAREA,\r\n // textareaRows: 5,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ]\r\n // ]\r\n // },\r\n // {\r\n // caption: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_REJECT\",\r\n // iconSvg: EMAIL_ICON,\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBJECT\",\r\n // field: 'rejectSubject',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ],\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_BODY\",\r\n // field: 'rejectBody',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTAREA,\r\n // textareaRows: 5,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ]\r\n // ]\r\n // },\r\n // {\r\n // caption: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_CANCEL\",\r\n // iconSvg: EMAIL_ICON,\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBJECT\",\r\n // field: 'cancelSubject',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ],\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_BODY\",\r\n // field: 'cancelBody',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTAREA,\r\n // textareaRows: 5,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ]\r\n // ]\r\n // },\r\n // {\r\n // caption: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_TERMINATE\",\r\n // iconSvg: EMAIL_ICON,\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBJECT\",\r\n // field: 'terminateSubject',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ],\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_BODY\",\r\n // field: 'terminateBody',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTAREA,\r\n // textareaRows: 5,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ]\r\n // ]\r\n // },\r\n // {\r\n // caption: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_REVOKE\",\r\n // iconSvg: EMAIL_ICON,\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBJECT\",\r\n // field: 'revokeSubject',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ],\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_BODY\",\r\n // field: 'revokeBody',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTAREA,\r\n // textareaRows: 5,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ]\r\n // ]\r\n // },\r\n // {\r\n // caption: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_CC\",\r\n // iconSvg: EMAIL_ICON,\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBJECT\",\r\n // field: 'ccSubject',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ],\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_BODY\",\r\n // field: 'ccBody',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTAREA,\r\n // textareaRows: 5,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ]\r\n // ]\r\n // },\r\n // ];\r\n\r\n sections!: ICoreFormSection[];\r\n\r\n ngOnInit(): void {\r\n this.sections = TEMPLATE_TYPES.map(type => ({\r\n caption: type.caption,\r\n iconSvg: EMAIL_ICON,\r\n rows: [\r\n [\r\n {\r\n flexSize: 12,\r\n label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBJECT\",\r\n field: `${type.key}Subject`,\r\n value: '',\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n textareaRows: 2,\r\n type: 'string',\r\n validators: [\r\n {\r\n name: 'minLength',\r\n validator: Validators.minLength(4),\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n }\r\n ]\r\n }\r\n ],\r\n [\r\n {\r\n flexSize: 12,\r\n label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_BODY\",\r\n field: `${type.key}Body`,\r\n value: '',\r\n controlType: EnumFormBaseContolType.LIQUID_WYSIWYG,\r\n textareaRows: 5,\r\n type: 'string',\r\n showLiquidSourceOnly: true,\r\n isForWorkflowEmail: true,\r\n validators: [\r\n {\r\n name: 'minLength',\r\n validator: Validators.minLength(4),\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n }\r\n ]\r\n }\r\n ]\r\n ]\r\n }));\r\n\r\n // for compatibility\r\n this.sections[0].rows[0].push(\r\n {\r\n field: \"id\",\r\n label: '',\r\n type: 'string',\r\n value: '',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n hidden: true,\r\n flexSize: 0\r\n }\r\n )\r\n\r\n }\r\n\r\n copyToken(event: any, value: string, isParent: boolean = false): void {\r\n event.preventDefault();\r\n if (isParent) return;\r\n navigator.clipboard.writeText(value).then(() => {\r\n this.as.success(`\"${value}\" copied!`, alertOptions);\r\n });\r\n }\r\n\r\n onFormCreated(e: IDynamicFormEmitOnFormCreated): void {\r\n this.wfs.emailTemplatesForm = e.formGroup;\r\n }\r\n\r\n\r\n /* To allow form to be deactivated */\r\n onFormReinit(e: string): void {\r\n this.wfs.$initialEmailTemplatesJson.set(e);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscriptions.map(x => x?.unsubscribe())\r\n }\r\n}\r\n","<div style=\"height: 50px;\"></div>\r\n\r\n<label class=\"mb-2\">\r\n @if (lang==='vi') {\r\n <span>Ngữ cảnh ngoài biểu mẫu</span>\r\n } @else {\r\n <span>Non-form instance context</span>\r\n }\r\n</label>\r\n<ul class=\"tokens\">\r\n @for (token of availableTokens; track $index) {\r\n <li (click)=\"copyToken($event, token, false)\">{{ token }}</li>\r\n }\r\n</ul>\r\n<label class=\"mb-2\">\r\n @if (lang==='vi') {\r\n <span>Ngữ cảnh trong biểu mẫu</span>\r\n } @else {\r\n <span>Form instance context</span>\r\n }\r\n</label>\r\n<ul class=\"tokens\">\r\n @for (group of $wysGroups(); track $index) {\r\n <li data-level=\"parent\" [class.system-injected]=\"group.parent?.trim()?.startsWith('___')\" data-label=\"Parent\" (click)=\"copyToken($event, group.parent, !!group.children && !!group.children.length)\">\r\n {{ group.parent }}\r\n\r\n @if (!!group.children && !!group.children.length) {\r\n <ul>\r\n @for (child of group.children; track $index) {\r\n <li data-level=\"child\" data-label=\"Child\" (click)=\"copyToken($event, child, false)\">\r\n {{ child }}\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n</ul>\r\n<!-- <div ngNonBindable>\r\n Example array usage:\r\n <code>\r\n &#123;% for c in contracts___wys %&#125;\r\n &#123;&#123; c.jobName___wys &#125;&#125; - &#123;&#123; c.email___wys &#125;&#125; \r\n &#123;% endfor %&#125;\r\n </code>\r\n</div> -->\r\n\r\n<div style=\"height: 50px;\"></div>\r\n\r\n<core-form [inputSections]=\"sections\" [mode$]=\"mode$\" [hideButtons]=\"true\" [wrapEachSectionInAccordion]=\"true\"\r\n [checkError$]=\"wfs.emailTemplatesFormCheckError$\" (onFormCreated)=\"onFormCreated($event)\" />\r\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, OnInit, signal } from '@angular/core';\r\nimport { CurrentHeaderComponent } from '../wf-process-design/current-header/current-header.component';\r\nimport { Observable } from 'rxjs';\r\nimport { DialogService } from '../../../services/dialog.service';\r\nimport { EnumTranslateKey } from 'alpha-global-constants';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\nimport { HotKeysDirective } from '../../../directives/hot-keys.directive';\r\nimport { ApplicationHelpService } from '../../../services/application-help.service';\r\nimport { NavigatorService } from '../../../services/navigator.service';\r\nimport { AsyncPipe, NgStyle } from '@angular/common';\r\n\r\nimport { WfBasicInfoComponent } from '../wf-basic-info/wf-basic-info.component';\r\nimport { CoreFormDesignComponent } from '../../core-form-design/core-form-design.component';\r\nimport { WfProcessDesignComponent } from '../wf-process-design/wf-process-design.component';\r\nimport { WfEmailTemplatesComponent } from '../wf-email-templates/wf-email-templates.component';\r\nimport { ActivatedRoute, RouterOutlet } from '@angular/router';\r\nimport { JsonService } from '../../../services/json.service';\r\nimport { CoreFormDesignService } from '../../core-form-design/core-form-design.service';\r\n\r\nimport { RoutingPreviewPanelComponent } from '../../core-workflow-builder/routing-preview-panel/routing-preview-panel.component';\r\nimport { AlertService } from '../../alert/alert.service';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\n\r\n@Component({\r\n selector: 'design-wrapper',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n RouterOutlet,\r\n RoutingPreviewPanelComponent,\r\n WfBasicInfoComponent,\r\n CoreFormDesignComponent,\r\n WfProcessDesignComponent,\r\n WfEmailTemplatesComponent,\r\n NgStyle,\r\n AsyncPipe,\r\n HotKeysDirective,\r\n CurrentHeaderComponent\r\n ],\r\n templateUrl: './design-wrapper.component.html',\r\n styleUrl: './design-wrapper.component.scss',\r\n animations: [\r\n trigger('fadeSwitch', [\r\n state('visible', style({ opacity: 1 })),\r\n state('hidden', style({ opacity: 0 })),\r\n transition('hidden => visible', [animate('250ms ease-in')]),\r\n transition('visible => hidden', [animate('150ms ease-out')]),\r\n ])\r\n ]\r\n})\r\nexport class DesignWrapperComponent implements OnInit, AfterViewInit {\r\n\r\n $showInitialState = signal(false);\r\n\r\n dialogService = inject(DialogService);\r\n public wfs = inject(CoreWorkflowService);\r\n fds = inject(CoreFormDesignService);\r\n hs = inject(ApplicationHelpService);\r\n public ns = inject(NavigatorService);\r\n route = inject(ActivatedRoute);\r\n js = inject(JsonService);\r\n cdr = inject(ChangeDetectorRef);\r\n as = inject(AlertService);\r\n\r\n id!: string | undefined;\r\n\r\n constructor() {\r\n this.hs.activeKey$.subscribe(x => {\r\n switch (x) {\r\n case 'F7':\r\n this.$showInitialState.set(true);\r\n break;\r\n case 'Escape':\r\n this.$showInitialState.set(false);\r\n break;\r\n }\r\n })\r\n\r\n const id = this.route.snapshot.paramMap.get('id');\r\n if (!!id) {\r\n this.id = id;\r\n } else {\r\n this.id = undefined;\r\n }\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.wfs.loadByIdWithAfInstance(this.id!)\r\n this.fds.$isInWorkflowDesign.set(true);\r\n }\r\n\r\n debugClick(): void {\r\n let obj1;\r\n let obj2;\r\n try {\r\n obj1 = JSON.parse(this.wfs.$initialFormDesignJson());\r\n obj2 = JSON.parse(this.wfs.$currentFormDesignJson());\r\n } catch {\r\n alert(\"error\")\r\n }\r\n const string1 = this.wfs.$initialFormDesignJson();\r\n const string2 = this.wfs.$currentFormDesignJson();\r\n const isDifferent = string1 !== string2;\r\n if (isDifferent) {\r\n const ignoredKeys = ['selected'];\r\n const found = this.js.findFirstStringDifference(\r\n this.wfs.$initialFormDesignJson(),\r\n this.wfs.$currentFormDesignJson(),\r\n ignoredKeys,\r\n 500\r\n );\r\n\r\n if (found) {\r\n const { index, htmlA, htmlB } = found;\r\n this.js.showDiffModal(`💥 Difference at index ${index}`, htmlA, htmlB);\r\n\r\n } else {\r\n alert(\"Nigntmare!\")\r\n }\r\n\r\n } else {\r\n alert(\"There is no diffs\")\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n if (!this.wfs.$currentFlow()) {\r\n this.wfs.$currentFlow.set(this.wfs.newWorkflow())\r\n }\r\n })\r\n }\r\n\r\n canDeactivate(): Observable<boolean> | boolean {\r\n\r\n if (!this.wfs.$basicInfoChanged() && !this.wfs.$formDesignChanged() && !this.wfs.$processDesignChanged() && !this.wfs.$moreChanged()) {\r\n return true;\r\n } else {\r\n this.dialogService.busy = true;\r\n this.dialogService.showConfirmDialog$.next(true);\r\n this.dialogService.title$.next(EnumTranslateKey.UI_CORE_CONFIRM_DIALOG_TITLE);\r\n this.dialogService.body$.next(EnumTranslateKey.UI_CORE_CONFIRM_DIALOG_BODY_CHANGES_WILL_BE_LOST);\r\n this.dialogService.okButtonText$.next(EnumTranslateKey.UI_CORE_CONFIRM_DIALOG_BUTTON_CONFIRM);\r\n this.dialogService.cancelButtonText$.next(EnumTranslateKey.UI_CORE_CONFIRM_DIALOG_BUTTON_GO_BACK_TO_EDIT_FORM);\r\n const observable = this.dialogService.canDeactivate$.asObservable();\r\n return observable;\r\n }\r\n }\r\n\r\n}\r\n","<current-header></current-header>\r\n\r\n<div class=\"all-tabs\" [hotKeys]=\"['F7', 'Escape']\">\r\n\r\n <div class=\"tab-content basic-info\" [class.d-none]=\"wfs.$designActiveTab() !== 1\"\r\n [@fadeSwitch]=\"wfs.$designActiveTab() === 1 ? 'visible' : 'hidden'\"\r\n >\r\n <wf-basic-info></wf-basic-info>\r\n </div>\r\n\r\n <div class=\"tab-content form-design\" [class.d-none]=\"wfs.$designActiveTab() !== 2\"\r\n [@fadeSwitch]=\"wfs.$designActiveTab() === 2 ? 'visible' : 'hidden'\"\r\n >\r\n <core-form-design [$idAsInput]=\"true\" [$id]=\"wfs.$currentFlow()?.afInstanceId\" />\r\n </div>\r\n\r\n <div class=\"tab-content process-design\" [class.d-none]=\"wfs.$designActiveTab() !== 3\"\r\n [@fadeSwitch]=\"wfs.$designActiveTab() === 3 ? 'visible' : 'hidden'\"\r\n >\r\n <wf-process-design></wf-process-design>\r\n </div>\r\n\r\n <div class=\"tab-content more\" [class.d-none]=\"wfs.$designActiveTab() !== 4\"\r\n [@fadeSwitch]=\"wfs.$designActiveTab() === 4 ? 'visible' : 'hidden'\"\r\n >\r\n <wf-email-templates></wf-email-templates>\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<router-outlet name=\"preview\" [hotKeys]=\"['Escape']\"></router-outlet>\r\n\r\n<div class=\"state\" [class.shown]=\"$showInitialState()\"\r\n [ngStyle]=\"{ width: !!(ns.wideMode$ | async) ? 'calc(100vw - 280px - 15px)' : 'calc(100vw - 66px - 15px)' }\">\r\n\r\n <div class=\"scroll-container\">\r\n\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"debugClick()\">FormDesign Compare</button>\r\n\r\n <div class=\"tab-info\">\r\n\r\n <div class=\"value-caption\">initialBasicInfoJson:</div>\r\n <pre [class.d-none]=\"!wfs.$initialBasicInfoJson()\">{{ wfs.$initialBasicInfoJson() }}</pre>\r\n\r\n <div class=\"value-caption\">currentBasicInfoJson:</div>\r\n <pre [class.d-none]=\"!wfs.$currentBasicInfoJson()\">{{ wfs.$currentBasicInfoJson() }}</pre>\r\n\r\n </div>\r\n\r\n <div class=\"tab-info\">\r\n <div class=\"value-caption\">initialFormDesignJson:</div>\r\n <pre><code class=\"lang-json\">{{ wfs.$initialFormDesignJson() }}</code></pre>\r\n\r\n <div class=\"value-caption\">currentFormDesignJson:</div>\r\n <pre><code class=\"lang-json\">{{ wfs.$currentFormDesignJson() }}</code></pre>\r\n </div>\r\n\r\n <div class=\"tab-info\">\r\n <div class=\"value-caption\">initialProcessDesignJson:</div>\r\n <pre>{{ wfs.$initialProcessDesignJson() }}</pre>\r\n\r\n <div class=\"value-caption\">currentProcessDesignJson:</div>\r\n <pre>{{ wfs.$currentProcessDesignJson() }}</pre>\r\n </div>\r\n\r\n <div class=\"tab-info\">\r\n <div class=\"value-caption\">initialEmailTemplatesJson:</div>\r\n <pre>{{ wfs.$initialEmailTemplatesJson() }}</pre>\r\n </div>\r\n\r\n </div>\r\n\r\n</div>"],"names":["i1.MultiLanguageService","i1.DialogService","i2.AppService","i2.DomService","i2","i1.CoreWorkflowService","i1.BridgeLineService"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-histaff-alpha-design-wrapper.component-CXgYD-qY.mjs","sources":["../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/current-header/current-header.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/current-header/current-header.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-basic-info/wf-basic-info.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-basic-info/wf-basic-info.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-insert-menu/wf-insert-menu.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-insert-menu/wf-insert-menu.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-bottom-v-insert/wf-bottom-v-insert.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-bottom-v-insert/wf-bottom-v-insert.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-control-value-only/core-control-value-only.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-control-value-only/core-control-value-only.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-rule-tree/core-rule-tree.service.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-rule-tree/EnumCoreRuleTreeOparator.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-rule-tree/core-rule-tree.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-rule-tree/core-rule-tree.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-actor-selector/wf-actor-selector.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-actor-selector/wf-actor-selector.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-approver-config/wf-approver-config.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-approver-config/wf-approver-config.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-cc-config/wf-cc-config.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-cc-config/wf-cc-config.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-end-config/wf-end-config.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-end-config/wf-end-config.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-handler-config/wf-handler-config.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-handler-config/wf-handler-config.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-submit-config/wf-submit-config.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-submit-config/wf-submit-config.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-gpt-assistant/wf-gpt-assistant.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-gpt-assistant/wf-gpt-assistant.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/rule-config-shell/rule-config-shell.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/rule-config-shell/rule-config-shell.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-formui-config/wf-formui-config.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-formui-config/wf-formui-config.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-step-config-shell.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-step-config-shell.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/enums/EnumWorkflowBranch.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/bridge-line.service.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/bridge-line.directive.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/pipes/wf-node-label.pipe.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-node/wf-node.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-node/wf-node.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-steps-preview/wf-steps-preview.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-steps-preview/wf-steps-preview.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-workflow-canvas.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-workflow-canvas.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-process-design.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-process-design/wf-process-design.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-email-templates/wf-email-templates.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/wf-email-templates/wf-email-templates.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/design-wrapper/design-wrapper.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/design-wrapper/design-wrapper.component.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, inject, isDevMode, signal } from '@angular/core';\r\nimport { CoreWorkflowService } from '../../core-workflow.service';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { TooltipDirective } from '../../../tooltip/tooltip.directive';\r\nimport { BaseComponent } from '../../../base-component/base/base.component';\r\nimport { TranslatePipe } from '../../../../app-pipes/translate.pipe';\r\nimport { MultiLanguageService } from '../../../../services/multi-language.service';\r\nimport { AlertService } from '../../../alert/alert.service';\r\nimport { alertOptions, noneAutoClosedAlertOptions } from '../../../../constants/alertOptions';\r\nimport { CoreFormDesignService } from '../../../core-form-design/core-form-design.service';\r\nimport { catchError, Observable, of, tap } from 'rxjs';\r\nimport { EnumCorePageEditMode } from '../../../core-page-edit/EnumCorePageEditMode';\r\nimport { IStep } from '../../interfaces/IStep';\r\nimport { IStepRuleConfig } from '../../interfaces/IStepConfig';\r\nimport { EnumWorkflowStepType } from '../../enums/EnumWorkflowStepType';\r\nimport { EnumFormBaseContolType } from '../../../../enum/EnumFormBaseContolType';\r\n\r\n@Component({\r\n selector: 'current-header',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n TooltipDirective,\r\n TranslatePipe\r\n ],\r\n templateUrl: './current-header.component.html',\r\n styleUrl: './current-header.component.scss'\r\n})\r\nexport class CurrentHeaderComponent extends BaseComponent {\r\n\r\n public wfs = inject(CoreWorkflowService);\r\n fds = inject(CoreFormDesignService);\r\n router = inject(Router);\r\n route = inject(ActivatedRoute);\r\n alertService = inject(AlertService);\r\n\r\n $activeTab = this.wfs.$designActiveTab;\r\n $loading = this.wfs.$loading;\r\n\r\n steps = [\r\n { index: 1, label: 'Basic Info', changed: this.wfs.$basicInfoChanged, onClick: () => this.goToBasicInfo() },\r\n { index: 2, label: 'Form Design', changed: this.wfs.$formDesignChanged, onClick: () => this.goToFormDesign() },\r\n { index: 3, label: 'Process Design', changed: this.wfs.$processDesignChanged, onClick: () => this.goToProcessDesign() },\r\n { index: 4, label: 'Email Templates', changed: this.wfs.$moreChanged, onClick: () => this.goToEmailTemplates() }\r\n ];\r\n\r\n constructor(\r\n public override mls: MultiLanguageService\r\n ) {\r\n super(mls);\r\n }\r\n\r\n findStepMissingFallback(steps: IStep[]): IStep | undefined {\r\n for (const step of steps) {\r\n const config = step.config as IStepRuleConfig | undefined;\r\n\r\n if (\r\n step.type !== EnumWorkflowStepType.ConditionalBranch &&\r\n step.type !== EnumWorkflowStepType.BranchCard &&\r\n config?.ruleTree &&\r\n !config?.fallbackType\r\n ) {\r\n return step;\r\n }\r\n\r\n // 🧠 Recursively check children or branches\r\n if (Array.isArray((step as any).children)) {\r\n const found = this.findStepMissingFallback((step as any).children);\r\n if (found) return found;\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n\r\n publish(): void {\r\n\r\n if (this.wfs.basicInfoForm.invalid) {\r\n this.alertService.warn('Invalid Basic Info', alertOptions);\r\n this.wfs.basicInfoFormCheckError$.next(true);\r\n setTimeout(() => this.wfs.basicInfoFormCheckError$.next(false), 5000)\r\n this.$activeTab.set(1); // Jump to Basic Info tab\r\n return;\r\n }\r\n if (this.wfs.emailTemplatesForm.invalid) {\r\n this.alertService.warn('Invalid Email Templates', alertOptions);\r\n this.wfs.emailTemplatesFormCheckError$.next(true);\r\n setTimeout(() => this.wfs.emailTemplatesFormCheckError$.next(false), 5000)\r\n this.$activeTab.set(4); // Jump to Email Templates tab\r\n return;\r\n }\r\n\r\n if (this.fds.$placeholderSections().some(x => x.rows.some(r => r?.cells.some(c => !c.control)))) {\r\n this.alertService.warn('Invalid Form Design: no control added', alertOptions);\r\n this.$activeTab.set(2); // Jump to Form Design tab\r\n return;\r\n }\r\n\r\n if (this.fds.formMetadata.invalid) {\r\n this.alertService.warn('Invalid Form Metadata', alertOptions);\r\n this.fds.$showFormMetadata.set(true);\r\n this.$activeTab.set(2); // Jump to Metadata tab\r\n return;\r\n }\r\n\r\n const unSafes = this.fds.$afInstance().sections\r\n .flatMap(section =>\r\n section.rows.flatMap(row =>\r\n row\r\n .filter(control =>\r\n control?.controlType === EnumFormBaseContolType.CALCULATED && control.isUnsafe\r\n )\r\n )\r\n );\r\n\r\n if (unSafes.length > 0) {\r\n this.fds.$control.set(unSafes[0]);\r\n this.$activeTab.set(2);\r\n this.alertService.warn(\r\n `Field ${unSafes[0].field} script is unsafe!`,\r\n alertOptions\r\n );\r\n return;\r\n }\r\n\r\n\r\n if (!!unSafes.length) {\r\n this.fds.$control.set(unSafes[0]);\r\n this.$activeTab.set(2);\r\n this.alertService.warn(\r\n `Field ${unSafes[0].field} script is unsafe!`,\r\n alertOptions\r\n );\r\n return;\r\n }\r\n\r\n const steps = this.wfs.$currentSteps() ?? [];\r\n const stepWithMissingFallback = this.findStepMissingFallback(steps);\r\n\r\n if (stepWithMissingFallback) {\r\n this.wfs.$currentStep.set(stepWithMissingFallback);\r\n this.wfs.$showStepConfig.set(true);\r\n this.$activeTab.set(3);\r\n this.alertService.warn(\r\n 'One of steps has a condition but no fallback type is set.',\r\n alertOptions\r\n );\r\n return;\r\n }\r\n\r\n const afInstanceDTO = this.fds.mapToAfInstanceDTO(this.fds.$afInstance());\r\n const currentFlow = this.wfs.$currentFlow();\r\n\r\n if (!currentFlow) {\r\n this.alertService.warn('No workflow selected', alertOptions);\r\n return;\r\n }\r\n\r\n // Update the currentFlow signal reactively\r\n this.wfs.$currentFlow.update(flow => {\r\n if (flow) {\r\n flow.afInstanceDTO = afInstanceDTO;\r\n\r\n const templates = this.wfs.emailTemplatesForm.getRawValue();\r\n const {\r\n submitSubject,\r\n submitBody,\r\n reactSubject,\r\n reactBody,\r\n fullyApproveSubject,\r\n fullyApproveBody,\r\n rejectSubject,\r\n rejectBody,\r\n cancelSubject,\r\n cancelBody,\r\n terminateSubject,\r\n terminateBody,\r\n revokeSubject,\r\n revokeBody,\r\n ccSubject,\r\n ccBody\r\n } = templates;\r\n flow.submitSubject = submitSubject;\r\n flow.submitBody = submitBody; \r\n flow.reactSubject = reactSubject;\r\n flow.reactBody = reactBody;\r\n flow.fullyApproveSubject = fullyApproveSubject;\r\n flow.fullyApproveBody = fullyApproveBody;\r\n flow.rejectSubject = rejectSubject;\r\n flow.rejectBody = rejectBody;\r\n flow.cancelSubject = cancelSubject;\r\n flow.cancelBody = cancelBody;\r\n flow.terminateSubject = terminateSubject;\r\n flow.terminateBody = terminateBody;\r\n flow.revokeSubject = revokeSubject;\r\n flow.revokeBody = revokeBody;\r\n flow.ccSubject = ccSubject;\r\n flow.ccBody = ccBody;\r\n }\r\n return flow;\r\n });\r\n\r\n\r\n this.$loading.set(true);\r\n this.subscriptions.push(\r\n this.wfs.publish()\r\n .pipe(\r\n catchError(err => {\r\n this.$loading.set(false);\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 return of({ ok: false, status: 500, body: { messageCode: msg } });\r\n })\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 this.wfs.$initialBasicInfoJson.set(this.wfs.$currentBasicInfoJson());\r\n this.wfs.$initialFormDesignJson.set(this.wfs.$currentFormDesignJson());\r\n this.wfs.$initialProcessDesignJson.set(this.wfs.$currentProcessDesignJson());\r\n\r\n this.router.navigate(['design', x.body.innerBody.id], { relativeTo: this.route.parent?.parent })\r\n this.wfs.basicInfoForm.get('id')?.patchValue(x.body.innerBody.id);\r\n }\r\n })\r\n )\r\n }\r\n\r\n preview(): void {\r\n\r\n if (!!this.fds.$afInstance().normalMode) {\r\n this.router.navigate(\r\n [this.wfs.$currentFlow()?.afInstanceId],\r\n {\r\n relativeTo: this.route.parent,\r\n queryParams: { preview: true },\r\n queryParamsHandling: 'merge'\r\n },\r\n )\r\n } else {\r\n this.router.navigate(\r\n [\r\n {\r\n outlets: {\r\n preview: [this.wfs.$currentFlow()?.afInstanceId],\r\n },\r\n },\r\n ],\r\n {\r\n relativeTo: this.route.parent,\r\n queryParams: { preview: true },\r\n queryParamsHandling: 'merge'\r\n },\r\n )\r\n }\r\n }\r\n\r\n backToList(): void {\r\n this.router.navigateByUrl('/root/workflow/workflow-list');\r\n }\r\n\r\n goToBasicInfo(): void {\r\n this.$activeTab.set(1);\r\n }\r\n\r\n goToFormDesign(): void {\r\n this.$activeTab.set(2);\r\n }\r\n\r\n goToProcessDesign(): void {\r\n this.$activeTab.set(3);\r\n }\r\n\r\n goToEmailTemplates(): void {\r\n this.$activeTab.set(4);\r\n }\r\n}\r\n","<div class=\"current-header-container\">\r\n <div class=\"left pointer\" (click)=\"backToList()\">\r\n\r\n <div class=\"icon-wrapper\" [appTooltip]=\"'Back to list' | translate : lang\" [showAnyway]=\"true\">\r\n <i class=\"feather-chevron-left\"></i>\r\n </div>\r\n <div class=\"current-flow-name\" [appTooltip]=\"wfs.$currentFlow()?.name || ''\">\r\n {{ wfs.$currentFlow()?.name || 'New Workflow' }}\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"stages\">\r\n @for (step of steps; track step.index) {\r\n <div\r\n class=\"step-wrapper\"\r\n [class.active]=\"$activeTab() === step.index\"\r\n [class.changed]=\"step.changed()\"\r\n (click)=\"step.onClick()\"\r\n (keydown.enter)=\"step.onClick()\"\r\n >\r\n <div class=\"order\">{{ step.index }}</div>\r\n <div class=\"step\">{{ step.label }}</div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"right\">\r\n <button type=\"button\" class=\"btn preview\" (click)=\"preview()\">Preview</button>\r\n <button type=\"button\" class=\"btn publish\" (click)=\"publish()\">Save</button>\r\n </div>\r\n </div>\r\n ","import { AfterViewInit, ChangeDetectionStrategy, Component, effect, inject, Injector, Input, runInInjectionContext } from '@angular/core';\r\nimport { CorePageEditComponent } from '../../core-page-edit/core-page-edit.component';\r\nimport { BaseEditComponent } from '../../base-edit/base-edit/base-edit.component';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\nimport { ICorePageEditCRUD } from '../../core-page-edit/ICorePageEditCRUD';\r\nimport { ICoreFormSection } from '../../core-form/core-form/enum-interfaces';\r\nimport { EnumFormBaseContolType } from '../../../enum/EnumFormBaseContolType';\r\nimport { FormGroup, Validators } from '@angular/forms';\r\nimport { EnumTranslateKey } from 'alpha-global-constants';\r\nimport { DialogService } from '../../../services/dialog.service';\r\nimport { AppService } from '../../../services/app.service';\r\nimport { FullscreenModalLoaderComponent } from '../../fullscreen-modal-loader/fullscreen-modal-loader.component';\r\nimport { ICoreDropdownOption } from '../../../interfaces/ICoreDropdownOption';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\nimport { AlertService } from '../../alert/alert.service';\r\nimport { alertOptions } from '../../../constants/alertOptions';\r\nimport { CoreFormDesignService } from '../../core-form-design/core-form-design.service';\r\n\r\n@Component({\r\n selector: 'wf-basic-info',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CorePageEditComponent,\r\n FullscreenModalLoaderComponent\r\n ],\r\n templateUrl: './wf-basic-info.component.html',\r\n styleUrl: './wf-basic-info.component.scss'\r\n})\r\nexport class WfBasicInfoComponent extends BaseEditComponent implements AfterViewInit {\r\n\r\n @Input() captionCode!: string;\r\n public wfs = inject(CoreWorkflowService);\r\n alertService = inject(AlertService);\r\n fds = inject(CoreFormDesignService);\r\n\r\n private injector = inject(Injector);\r\n\r\n constructor(\r\n public override dialogService: DialogService,\r\n private appService: AppService,\r\n ) {\r\n\r\n super(dialogService);\r\n\r\n if (!this.captionCode) {\r\n this.captionCode = \"UI_COMPONENT_TITLE_WF_WORKFLOW_GROUP\";\r\n }\r\n\r\n this.crud = {\r\n c: '/api/WfWorkflow/Create',\r\n r: '/api/WfWorkflow/GetById',\r\n u: '/api/WfWorkflow/Update',\r\n d: '/api/WfWorkflow/Delete',\r\n };\r\n\r\n const groupIdString = this.route.snapshot.queryParamMap.get('groupId');\r\n if (!!groupIdString) {\r\n const groupId = Number(groupIdString);\r\n if (this.wfs.$allGroups().length) {\r\n this.wfs.$currentGroup.set(this.wfs.$allGroups().filter(g => g.id === groupId)[0])\r\n } else {\r\n //this.wfs.refresh('/api/WfWorkflowGroup/GetAllWithWorkflows', '', groupId);\r\n }\r\n } else if (this.wfs.$designActiveTab() === 1) {\r\n this.alertService.warn(\"The Query Params lack of groupId\", alertOptions);\r\n }\r\n\r\n }\r\n\r\n router = inject(Router);\r\n route = inject(ActivatedRoute);\r\n\r\n loading: boolean = false;\r\n override entityTable = \"WF_WORKFLOW\";\r\n subscriptions: Subscription[] = [];\r\n\r\n groupOptions$ = new BehaviorSubject<ICoreDropdownOption[]>([]);\r\n\r\n crud!: ICorePageEditCRUD;\r\n sections: ICoreFormSection[] =\r\n [\r\n {\r\n rows: [\r\n [\r\n {\r\n flexSize: 0,\r\n label: \"UI_ENTITY_FIELD_CAPTION_COMMON_ID\",\r\n field: 'id',\r\n value: null,\r\n hidden: true,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n },\r\n {\r\n flexSize: 0,\r\n label: \"UI_ENTITY_FIELD_CAPTION_WF_WORKFLOW_GROUP_ID\",\r\n field: 'groupId',\r\n disabled: true,\r\n hidden: true,\r\n value: this.wfs.$currentGroup()?.id,\r\n controlType: EnumFormBaseContolType.DROPDOWN,\r\n type: 'number',\r\n dropdownOptions$: this.groupOptions$,\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n getByIdApi: '/api/WfWorkflowGroup/GetById',\r\n shownFrom: 'name',\r\n validators: [\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_REQUIRED\r\n },\r\n ]\r\n },\r\n {\r\n flexSize: 6,\r\n label: \"UI_ENTITY_FIELD_CAPTION_WF_WORKFLOW_CODE\",\r\n field: 'code',\r\n value: '',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'string',\r\n validators: [\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_REQUIRED\r\n },\r\n {\r\n name: 'minLength',\r\n validator: Validators.minLength(4),\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n }\r\n ]\r\n },\r\n {\r\n flexSize: 6,\r\n label: \"UI_ENTITY_FIELD_CAPTION_WF_WORKFLOW_NAME\",\r\n field: 'name',\r\n value: '',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'string',\r\n validators: [\r\n {\r\n name: 'required',\r\n validator: Validators.required,\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_REQUIRED\r\n },\r\n {\r\n name: 'minLength',\r\n validator: Validators.minLength(4),\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n }\r\n ]\r\n },\r\n ],\r\n [\r\n {\r\n flexSize: 12,\r\n label: \"UI_ENTITY_FIELD_CAPTION_WF_WORKFLOW_DESCRIPTION\",\r\n field: 'description',\r\n value: '',\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n textareaRows: 5,\r\n type: 'string',\r\n validators: [\r\n {\r\n name: 'minLength',\r\n validator: Validators.minLength(20),\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH,\r\n }\r\n ]\r\n },\r\n ],\r\n [\r\n {\r\n flexSize: 12,\r\n label: \"UI_ENTITY_FIELD_CAPTION_WF_WORKFLOW_ALLOW_ON_BEHALF\",\r\n field: 'allowOnBehalf',\r\n value: false,\r\n controlType: EnumFormBaseContolType.CHECKBOX,\r\n type: 'boolean',\r\n hint: 'If enabled, users can submit this workflow request on behalf of other employees.'\r\n },\r\n ],\r\n [\r\n {\r\n flexSize: 12,\r\n label: \"UI_ENTITY_FIELD_CAPTION_WF_WORKFLOW_ALLOW_CUSTOM_CC\",\r\n field: 'allowCustomCc',\r\n value: false,\r\n controlType: EnumFormBaseContolType.CHECKBOX,\r\n type: 'boolean',\r\n hint: 'If enabled, submitter can add custom cc emails.'\r\n },\r\n ],\r\n /*\r\n [\r\n {\r\n field: 'afInstanceId',\r\n label: 'Form template',\r\n flexSize: 12,\r\n value: '',\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.FORM_SEEK,\r\n getByIdObject$: new BehaviorSubject<any>(null),\r\n getByIdApi: '/api/AfInstance/GetById',\r\n shownFrom: 'name',\r\n boundFrom: 'id'\r\n }\r\n ]\r\n */\r\n ]\r\n }\r\n ];\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n\r\n this.subscriptions.push(\r\n this.appService.get('/api/WfWorkflowGroup/GetAllAsc')\r\n .subscribe(x => {\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n const newGroupOptions: ICoreDropdownOption[] = [];\r\n x.body?.innerBody.forEach(e => {\r\n newGroupOptions.push({\r\n value: e.id,\r\n text: e.name\r\n })\r\n });\r\n this.groupOptions$.next(newGroupOptions)\r\n }\r\n })\r\n )\r\n })\r\n }\r\n\r\n private updateCurrentFlow(values: any) {\r\n if (!values) return;\r\n this.wfs.$currentFlow.update(currentFlow => {\r\n if (!currentFlow) {\r\n return null\r\n } else {\r\n Object.keys(values).forEach(key => {\r\n currentFlow[key] = values[key]\r\n })\r\n return { ...currentFlow }\r\n }\r\n })\r\n }\r\n private updateCurrentFlowByKey(key: string, value: any) {\r\n this.wfs.$currentFlow.update(currentFlow => {\r\n if (!currentFlow) {\r\n return null\r\n } else {\r\n currentFlow[key] = value\r\n return { ...currentFlow }\r\n }\r\n })\r\n }\r\n\r\n private updateCurrentAfInstance(formValue: any): void {\r\n console.log(\"[WfBasicInfoComponent][updateCurrentAfInstance]: $afInstance is being updated\");\r\n this.fds.$afInstance.update(current => {\r\n if (!current) return current;\r\n return {\r\n ...current,\r\n name: formValue.name,\r\n code: formValue.code\r\n };\r\n });\r\n }\r\n\r\n onFormCreated(e: FormGroup): void {\r\n this.wfs.basicInfoForm = e;\r\n\r\n e.valueChanges.subscribe(x => {\r\n this.wfs.$currentBasicInfoJson.set(JSON.stringify(x));\r\n\r\n this.updateCurrentFlow(x);\r\n this.updateCurrentAfInstance(x);\r\n\r\n });\r\n\r\n runInInjectionContext(this.injector, () => {\r\n effect(() => {\r\n const form = this.wfs.basicInfoForm;\r\n const groupId = this.wfs.$currentGroup()?.id;\r\n\r\n if (form && groupId) {\r\n form.get('groupId')?.patchValue(groupId, { emitEvent: false });\r\n this.updateCurrentFlowByKey('groupId', groupId);\r\n this.wfs.$currentBasicInfoJson.set(JSON.stringify(form.getRawValue()));\r\n }\r\n });\r\n });\r\n\r\n }\r\n\r\n\r\n /* To allow form to be deactivated */\r\n onFormReinit(e: string): void {\r\n this.wfs.$initialBasicInfoJson.set(e);\r\n this.formInitStringValue = e;\r\n }\r\n\r\n onSubmitSuccess(e: any) {\r\n //this.wfs.refresh(undefined, '');\r\n this.router.navigate(\r\n [{ outlets: { workflowAux: null } }],\r\n { relativeTo: this.route.parent }\r\n );\r\n }\r\n\r\n onGotById(e: any) {\r\n this.wfs.emailTemplatesForm.patchValue(e);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.wfs.$initialBasicInfoJson.set('{}');\r\n this.subscriptions.map(x => x?.unsubscribe())\r\n }\r\n}","<div class=\"wf-basic-info-container\">\r\n\r\n <div class=\"container container-fluid\">\r\n\r\n <core-page-edit\r\n [normalMode]=\"true\"\r\n [captionCode]=\"''\"\r\n [sections]=\"sections\" [crud]=\"crud\" [entityTable]=\"entityTable\" [hasIdOfStringType]=\"true\"\r\n [stayAfterSubmit]=\"true\" (onFormCreated)=\"onFormCreated($event)\"\r\n [idAsInput]=\"true\"\r\n [id]=\"wfs.$currentFlow()?.id\"\r\n [hideButtons]=\"true\"\r\n [checkError$]=\"wfs.basicInfoFormCheckError$\"\r\n (onGotById)=\"onGotById($event)\"\r\n (onInitialValueStringReady)=\"onFormReinit($event)\"\r\n (onSubmitSuccess)=\"onSubmitSuccess($event)\">\r\n </core-page-edit>\r\n\r\n </div>\r\n\r\n</div>\r\n\r\n@if (loading) {\r\n<app-fullscreen-modal-loader></app-fullscreen-modal-loader>\r\n}","import { AfterViewInit, Component, ElementRef, EventEmitter, inject, Input, Output, Renderer2, ViewChild } from '@angular/core';\r\nimport { EnumWorkflowStepType } from '../../enums/EnumWorkflowStepType';\r\nimport { BaseComponent } from '../../../base-component/base/base.component';\r\nimport { MultiLanguageService } from '../../../../services/multi-language.service';\r\nimport { CoreWorkflowService } from '../../core-workflow.service';\r\nimport { DomService } from '../../../services/dom.service';\r\n\r\n@Component({\r\n selector: 'wf-insert-menu',\r\n imports: [],\r\n templateUrl: './wf-insert-menu.component.html',\r\n styleUrl: './wf-insert-menu.component.scss'\r\n})\r\nexport class WfInsertMenuComponent extends BaseComponent implements AfterViewInit {\r\n\r\n @Output() insert = new EventEmitter<{ type: EnumWorkflowStepType; index: number; branchId: string }>();\r\n\r\n @ViewChild('container') container!: ElementRef;\r\n\r\n coreWorkflowService = inject(CoreWorkflowService);\r\n elRef = inject(ElementRef);\r\n\r\n listenerFn!: () => void;\r\n\r\n enumType = EnumWorkflowStepType;\r\n\r\n constructor(\r\n public override mls: MultiLanguageService,\r\n private renderer: Renderer2,\r\n private domService: DomService\r\n ) {\r\n super(mls);\r\n }\r\n \r\n onInsert(type: EnumWorkflowStepType): void {\r\n this.insert.emit({\r\n type,\r\n index: this.coreWorkflowService.insertContext$.value!.index,\r\n branchId: this.coreWorkflowService.insertContext$.value!.branchId ?? 'root'\r\n });\r\n this.coreWorkflowService.insertContext$.next(null);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n\r\n this.listenerFn = this.renderer.listen('window', 'click', (e: Event) => {\r\n\t\t\t\r\n e.stopPropagation();\r\n \r\n if (this.container && !!!this.container.nativeElement.contains(e.target)) {\r\n this.coreWorkflowService.insertContext$.next(null);\r\n }\r\n });\r\n\r\n const rect = this.coreWorkflowService.insertAnchorPoint$.value;\r\n const menuEl = this.elRef.nativeElement as HTMLElement;\r\n \r\n if (!rect) return;\r\n\r\n const menuHeight = menuEl.offsetHeight;\r\n const zIndex = this.domService.getMaxZIndex() + 1;\r\n\r\n menuEl.style.position = 'fixed';\r\n menuEl.style.left = `${rect.right + 8}px`;\r\n menuEl.style.top = `${rect.top}px`;\r\n menuEl.style.zIndex = `${zIndex}`;\r\n\r\n\r\n })\r\n }\r\n\r\n onCancelClicked(): void {\r\n this.coreWorkflowService.insertContext$.next(null);\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n this.subscriptions.forEach(x => x?.unsubscribe());\r\n if (this.listenerFn) this.listenerFn();\r\n }\r\n}\r\n","<div class=\"wf-insert-menu-container\" #container>\r\n\r\n <div class=\"menu-item\" (click)=\"onInsert(enumType.Approval)\">\r\n <div class=\"menu-item-icon-wrapper\">\r\n <div class=\"menu-item-icon\">🟧</div>\r\n </div>\r\n <div class=\"menu-item-text\">\r\n <div>Approver</div>\r\n </div>\r\n </div>\r\n <div class=\"menu-item\" (click)=\"onInsert(enumType.CC)\">\r\n <div class=\"menu-item-icon-wrapper\">\r\n <div class=\"menu-item-icon\">🟦</div>\r\n </div>\r\n <div class=\"menu-item-text\">\r\n <div>CC</div>\r\n </div>\r\n </div>\r\n <div class=\"menu-item\" (click)=\"onInsert(enumType.Handle)\">\r\n <div class=\"menu-item-icon-wrapper\">\r\n <div class=\"menu-item-icon\">🟪</div>\r\n </div>\r\n <div class=\"menu-item-text\">\r\n <div>Handler</div>\r\n </div>\r\n </div>\r\n <div class=\"menu-item\" (click)=\"onInsert(enumType.ConditionalBranch)\">\r\n <div class=\"menu-item-icon-wrapper\">\r\n <div class=\"menu-item-icon\">🌿</div>\r\n </div>\r\n <div class=\"menu-item-text\">\r\n <div>Conditional Branch</div>\r\n </div>\r\n </div>\r\n <div class=\"menu-item\" (click)=\"onCancelClicked()\">\r\n <div class=\"menu-item-icon-wrapper\">\r\n <div class=\"menu-item-icon\">❌</div>\r\n </div>\r\n <div class=\"menu-item-text\">\r\n <div>Cancel</div>\r\n </div>\r\n </div>\r\n</div>","import { AfterViewInit, Component, ElementRef, EventEmitter, inject, Input, OnChanges, Output, Renderer2, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { WfInsertMenuComponent } from '../wf-insert-menu/wf-insert-menu.component';\r\nimport { IWorkflowInsertPoint } from '../../interfaces/IWorkflowInsertPoint';\r\nimport { IInsertStepEvent } from '../../interfaces/IInsertStepEvent';\r\nimport { CoreWorkflowService } from '../../core-workflow.service';\r\nimport { BaseComponent } from '../../../base-component/base/base.component';\r\nimport { IStep } from '../../interfaces/IStep';\r\nimport { AsyncPipe } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'wf-bottom-v-insert',\r\n imports: [\r\n AsyncPipe,\r\n WfInsertMenuComponent\r\n ],\r\n templateUrl: './wf-bottom-v-insert.component.html',\r\n styleUrls: ['../wf-workflow-canvas.component.scss']\r\n})\r\nexport class WfBottomVInsertComponent extends BaseComponent implements AfterViewInit {\r\n @Input({ required: true }) currentContext!: IWorkflowInsertPoint;\r\n @Input({ required: true }) currentStep!: IStep;\r\n\r\n @Output() insertStep = new EventEmitter<IInsertStepEvent>();\r\n\r\n @ViewChild('plusContainer') plusContainer!: ElementRef;\r\n\r\n shouldShowInsert = false;\r\n\r\n public coreWorkflowService = inject(CoreWorkflowService);\r\n el = inject(ElementRef);\r\n renderer = inject(Renderer2);\r\n\r\n private observer: MutationObserver | null = null;\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 this.subscriptions.push(\r\n this.coreWorkflowService.insertContext$\r\n .subscribe(ctx => {\r\n this.shouldShowInsert = !!ctx &&\r\n ctx.branchId === this.currentContext.branchId &&\r\n ctx.index === this.currentContext.index;\r\n })\r\n );\r\n\r\n }\r\n\r\n onShowInsert(e: MouseEvent): void {\r\n const insertContext = {\r\n branchId: this.currentContext.branchId,\r\n index: this.currentContext.index\r\n };\r\n\r\n const triggerEl = e.currentTarget as HTMLElement;\r\n const rect = triggerEl.getBoundingClientRect();\r\n \r\n this.coreWorkflowService.insertContext$.next(insertContext);\r\n this.coreWorkflowService.insertAnchorPoint$.next(rect);\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n\r\n });\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n this.subscriptions.forEach(x => x?.unsubscribe());\r\n this.observer?.disconnect();\r\n }\r\n\r\n}\r\n","<div class=\"wf-bottom-v-insert-container\" \r\n [class.shorter]=\"(!!currentStep.isPseudo && !!currentStep.isInFallbackBranch!) || !!currentStep.config\"\r\n [class.insert-context]=\"(coreWorkflowService.insertContext$ | async)?.branchId === currentContext.branchId && (coreWorkflowService.insertContext$ | async)?.index === currentContext.index\"\r\n>\r\n <div class=\"vertical-line\"></div>\r\n\r\n <div class=\"plus-container\" #plusContainer>\r\n <button class=\"plus-btn\" (click)=\"onShowInsert($event)\">+</button>\r\n </div>\r\n\r\n <div class=\"arrow-down-container\">\r\n <div class=\"arrow-down\"></div>\r\n </div>\r\n\r\n</div>","import { ChangeDetectionStrategy, Component, effect, inject, input, isDevMode } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { IFormBaseControl } from '../core-form/core-form/enum-interfaces';\r\nimport { CoreDropdownComponent } from '../core-dropdown/core-dropdown/core-dropdown.component';\r\nimport { CoreChecklistComponent } from '../core-checklist/core-checklist/core-checklist.component';\r\nimport { CoreDatePickerComponent } from '../core-date-picker/core-date-picker/core-date-picker.component';\r\nimport { CoreFormControlSeekerComponent } from '../core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component';\r\nimport { CoreCurrencyInputComponent } from '../core-currency-input/core-currency-input/core-currency-input.component';\r\nimport { EnumFormBaseContolType } from '../../enum/EnumFormBaseContolType';\r\nimport { AlertService } from '../alert/alert.service';\r\nimport { alertOptions } from '../../constants/alertOptions';\r\n\r\n@Component({\r\n selector: 'core-control-value-only',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n ReactiveFormsModule,\r\n CoreDropdownComponent,\r\n CoreChecklistComponent,\r\n CoreDatePickerComponent,\r\n CoreFormControlSeekerComponent,\r\n CoreCurrencyInputComponent\r\n ],\r\n templateUrl: './core-control-value-only.component.html',\r\n styleUrl: './core-control-value-only.component.scss'\r\n})\r\nexport class CoreControlValueOnlyComponent {\r\n $control = input.required<IFormBaseControl>();\r\n $form = input.required<FormGroup>();\r\n $fieldName = input<string>();\r\n\r\n as = inject(AlertService);\r\n\r\n constructor() {\r\n effect(() => {\r\n const control = this.$control();\r\n const form = this.$form();\r\n form.get(control?.field)?.valueChanges.subscribe(x => {\r\n this.coerceControlValue()\r\n })\r\n })\r\n }\r\n\r\n private coerceControlValue(): void {\r\n const controlType = this.$control()?.controlType;\r\n\r\n switch (controlType) {\r\n case EnumFormBaseContolType.TEXTBOX:\r\n this.coerceNumber();\r\n break;\r\n\r\n case EnumFormBaseContolType.DATEPICKER:\r\n this.coerceDate();\r\n break;\r\n\r\n }\r\n }\r\n\r\n private coerceDate(): void {\r\n const field = this.$fieldName() || this.$control().field;\r\n const control = this.$form().get(field);\r\n const value = control?.value;\r\n\r\n if (this.$control()?.type === 'date') {\r\n if (value instanceof Date) {\r\n const normalized = this.formatDateOnly(value);\r\n control?.setValue(normalized, { emitEvent: false });\r\n } else if (typeof value === 'string' && /^\\d{4}-\\d{2}-\\d{2}T/.test(value)) {\r\n const normalized = value.split('T')[0];\r\n control?.setValue(normalized, { emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n private formatDateOnly(date: Date): string {\r\n const y = date.getFullYear();\r\n const m = String(date.getMonth() + 1).padStart(2, '0');\r\n const d = String(date.getDate()).padStart(2, '0');\r\n return `${y}-${m}-${d}`;\r\n }\r\n\r\n\r\n coerceNumber(): void {\r\n const field = this.$fieldName() || this.$control().field;\r\n const control = this.$form().get(field);\r\n const value = control?.value;\r\n\r\n if (this.$control()?.type === 'number' && typeof value === 'string') {\r\n const trimmed = value.trim();\r\n\r\n if (trimmed === '') {\r\n control?.setValue(null, { emitEvent: false }); // ✅ treat empty string as null\r\n return;\r\n }\r\n\r\n if (!isNaN(+trimmed)) {\r\n control?.setValue(Number(trimmed), { emitEvent: false });\r\n }\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n const field = this.$fieldName() || this.$control().field;\r\n const control = this.$form().get(field);\r\n if (!control) {\r\n if (isDevMode()) {\r\n this.as.error(\"control is undefined|null\", alertOptions)\r\n }\r\n return;\r\n }\r\n\r\n this.coerceControlValue(); // Run once on init\r\n\r\n control.valueChanges.subscribe(() => {\r\n this.coerceControlValue(); // Run on every input change\r\n });\r\n }\r\n\r\n}\r\n","<div [formGroup]=\"$form()\">\r\n @switch ($control()?.controlType) {\r\n @case ('TEXTBOX') {\r\n <input class=\"form-control\" [formControlName]=\"$fieldName() || $control()?.field || ''\" [type]=\"$control()?.type || 'text'\"\r\n [placeholder]=\"$control()?.placeholder || ''\" [readonly]=\"$control()?.readonly\" />\r\n }\r\n @case ('CURRENCY') {\r\n <core-currency-input [formControlName]=\"$fieldName() || $control()?.field || ''\"\r\n [placeholder]=\"$control()?.placeholder || ''\">\r\n </core-currency-input>\r\n }\r\n @case ('DROPDOWN') {\r\n @if ($control()?.dropdownOptions$) {\r\n <core-dropdown \r\n [formControlName]=\"$fieldName() || $control()?.field || ''\" \r\n [options$]=\"$control()?.dropdownOptions$!\"\r\n [getByIdObject$]=\"$control()?.getByIdObject$!\"\r\n [shownFrom]=\"$control()?.shownFrom!\"\r\n\r\n [optionApiDriven]=\"$control()?.optionApiDriven!\"\r\n [optionApi]=\"$control()?.optionApi!\"\r\n [optionHttpVerb]=\"$control()?.optionHttpVerb!\"\r\n [optionHttpPayload]=\"$control()?.optionHttpPayload!\"\r\n [optionValueFrom]=\"$control()?.optionValueFrom!\"\r\n [optionTextFrom]=\"$control()?.optionTextFrom!\"\r\n >\r\n </core-dropdown>\r\n }\r\n }\r\n @case ('CHECKLIST') {\r\n @if ($control()?.checklistOptions$) {\r\n <core-checklist [formControlName]=\"$fieldName() || $control()?.field || ''\" [options$]=\"$control()?.checklistOptions$!\">\r\n </core-checklist>\r\n }\r\n }\r\n @case ('DATEPICKER') {\r\n <core-date-picker [formControlName]=\"$fieldName() || $control()?.field || ''\" [rangeLimit]=\"$control()?.rangeLimit!\"\r\n [popupAlign]=\"$control()?.popupAlign!\" [placeholder]=\"$control()?.placeholder || ''\"\r\n [readonly]=\"$control()?.readonly!\">\r\n </core-date-picker>\r\n }\r\n @case ('SEEKER') {\r\n <core-form-control-seeker [formControlName]=\"$fieldName() || $control()?.field || ''\"\r\n [seekerSourceType]=\"$control()?.seekerSourceType!\" [shownFrom]=\"$control()?.shownFrom!\"\r\n [multiMode]=\"$control()?.multiMode!\"\r\n [boundFrom]=\"$control()?.boundFrom!\" [objectList$]=\"$control()?.objectList$!\">\r\n </core-form-control-seeker>\r\n }\r\n @default {\r\n <input class=\"form-control\" [formControlName]=\"$fieldName() || $control()?.field || ''\" type=\"text\"\r\n [placeholder]=\"$control()?.placeholder || ''\" [readonly]=\"$control()?.readonly\" />\r\n }\r\n }\r\n</div>","import { computed, Injectable, signal, WritableSignal } from '@angular/core';\r\nimport { FormArray, FormControl, FormGroup } from '@angular/forms';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CoreRuleTreeService {\r\n\r\n $formValue: WritableSignal<any> = signal<any>(null); // Manual form value signal\r\n $filterFormJsonString: WritableSignal<string> = signal<string>('{}');\r\n\r\n $filterString = computed(() => {\r\n const json = this.$filterFormJsonString();\r\n if (!json) return '()';\r\n\r\n try {\r\n const cleaned = JSON.parse(json);\r\n return this.getFilterString(cleaned);\r\n } catch {\r\n return '()';\r\n }\r\n });\r\n\r\n constructor() { }\r\n\r\n cleanEmptyFilters(node: any): any {\r\n if (!node || typeof node !== 'object') return node;\r\n\r\n // If it's a group with filters\r\n if (Array.isArray(node.filters)) {\r\n node.filters = node.filters\r\n .map(f => this.cleanEmptyFilters(f))\r\n .filter(f => f !== null); // optional: skip nulls\r\n\r\n if (node.filters.length === 0) {\r\n delete node.filters; // ← Clean!\r\n }\r\n }\r\n\r\n return node;\r\n }\r\n\r\n getFilterString(filter: any): string {\r\n if (!filter || Object.keys(filter).length === 0) return '()';\r\n\r\n let str = '(';\r\n for (let i = 0; i < filter.filters?.length; i++) {\r\n if (i > 0) str += ` ${filter.logicalOperator} `;\r\n\r\n const f = filter.filters[i];\r\n\r\n if (f?.filters?.length) {\r\n str += this.getFilterString(f);\r\n } else {\r\n const rawVal = f.value;\r\n let formattedVal = rawVal;\r\n\r\n if (rawVal instanceof Date) {\r\n formattedVal = this.formatDateToYMD(rawVal);\r\n } else if (typeof rawVal === 'string' && /^\\d{4}-\\d{2}-\\d{2}T/.test(rawVal)) {\r\n // parse ISO string if needed\r\n try {\r\n formattedVal = this.formatDateToYMD(new Date(rawVal));\r\n } catch { }\r\n }\r\n\r\n str += `${f.name} ${f.relationalOperator} '${formattedVal}'`;\r\n }\r\n }\r\n return str + ')';\r\n }\r\n\r\n formatDateToYMD(date: Date): string {\r\n const yyyy = date.getFullYear();\r\n const mm = String(date.getMonth() + 1).padStart(2, '0'); // Months are 0-based\r\n const dd = String(date.getDate()).padStart(2, '0');\r\n return `${yyyy}-${mm}-${dd}`;\r\n }\r\n\r\n buildFormGroupFromStep(config?: any): FormGroup {\r\n const logicalOperator = config?.logicalOperator ?? 'AND';\r\n\r\n const buildFilter = (f: any): FormGroup => {\r\n // If it has logicalOperator and filters → it's a nested group\r\n if (f?.logicalOperator && Array.isArray(f.filters)) {\r\n return this.buildFormGroupFromStep(f);\r\n }\r\n\r\n return new FormGroup({\r\n name: new FormControl(f?.name ?? null),\r\n value: new FormControl(f?.value ?? null),\r\n relationalOperator: new FormControl(f?.relationalOperator ?? 'EQUAL'),\r\n defaultMessage: new FormControl(f?.defaultMessage ?? ''),\r\n englishMessage: new FormControl(f?.englishMessage ?? '')\r\n });\r\n };\r\n\r\n const filters = Array.isArray(config?.filters)\r\n ? config.filters.map(buildFilter)\r\n : [];\r\n\r\n const form = new FormGroup({\r\n logicalOperator: new FormControl(logicalOperator),\r\n filters: new FormArray(filters)\r\n });\r\n\r\n // Only once all controls exist\r\n setTimeout(() => this.$formValue.set(form.getRawValue()));\r\n\r\n return form;\r\n }\r\n\r\n\r\n}\r\n","export enum EnumCoreRuleTreeOparator {\r\n EQUAL = 'EQUAL',\r\n GREATER_THAN = 'GREATER_THAN',\r\n LESS_THAN = 'LESS_THAN',\r\n GREATER_OR_EQUAL_THAN = 'GREATER_OR_EQUAL_THAN',\r\n LESS_OR_EQUAL_THAN = 'LESS_OR_EQUAL_THAN',\r\n STARTS_WITH = 'STARTS_WITH',\r\n ENDS_WITH = 'ENDS_WITH',\r\n CONTAINS = 'CONTAINS',\r\n IN = 'IN',\r\n NOT_EQUAL = 'NOT_EQUAL',\r\n NOT_STARTS_WITH = 'NOT_STARTS_WITH',\r\n NOT_ENDS_WITH = 'NOT_ENDS_WITH',\r\n NOT_CONTAINS = 'NOT_CONTAINS',\r\n NOT_IN = 'NOT_IN',\r\n IS_NULL = 'IS_NULL',\r\n IS_NOT_NULL = 'IS_NOT_NULL'\r\n}","import { Component, input, output, signal, effect, WritableSignal, ChangeDetectionStrategy, ChangeDetectorRef, computed, inject } from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { AbstractControl, FormArray, FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { CoreDropdownComponent } from '../core-dropdown/core-dropdown/core-dropdown.component';\r\nimport { TooltipDirective } from '../tooltip/tooltip.directive';\r\nimport { TranslatePipe } from '../../app-pipes/translate.pipe';\r\nimport { BaseComponent } from '../base-component/base/base.component';\r\nimport { MultiLanguageService } from '../../services/multi-language.service';\r\nimport { IFormBaseControl } from '../core-form/core-form/enum-interfaces';\r\nimport { CoreControlValueOnlyComponent } from '../core-control-value-only/core-control-value-only.component';\r\nimport { CoreRuleTreeService } from './core-rule-tree.service';\r\nimport { EnumCoreRuleTreeOparator } from './EnumCoreRuleTreeOparator';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\n\r\n@Component({\r\n selector: 'core-rule-tree',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CoreControlValueOnlyComponent,\r\n NgTemplateOutlet,\r\n CoreDropdownComponent,\r\n TooltipDirective,\r\n TranslatePipe\r\n ],\r\n templateUrl: './core-rule-tree.component.html',\r\n styleUrls: ['./core-rule-tree.component.scss'],\r\n animations: [\r\n trigger('fadeSwitch', [\r\n state('visible', style({ opacity: 1 })),\r\n state('hidden', style({ opacity: 0 })),\r\n transition('hidden => visible', [animate('250ms ease-in')]),\r\n transition('visible => hidden', [animate('150ms ease-out')]),\r\n ])\r\n ]\r\n})\r\nexport class CoreRuleTreeComponent extends BaseComponent {\r\n\r\n // Inputs\r\n $totalCols = input<IFormBaseControl[]>([]);\r\n $mainForm = input<FormGroup>(new FormGroup({\r\n logicalOperator: new FormControl('AND')\r\n }));\r\n $filterStringInput = input<string>();\r\n $expressionInput = input<string>();\r\n\r\n // Outputs\r\n $jsonEmitter = output<string>();\r\n\r\n public crts = inject(CoreRuleTreeService);\r\n\r\n $rawValue = computed(() => JSON.stringify(this.$mainForm().getRawValue(), null, 2))\r\n\r\n // Track collapsed groups manually\r\n private collapsedGroups = new WeakMap<FormGroup, boolean>();\r\n\r\n readonly operatorFriendlyMap: Record<EnumCoreRuleTreeOparator, string> = {\r\n [EnumCoreRuleTreeOparator.EQUAL]: 'Equals (=)',\r\n [EnumCoreRuleTreeOparator.NOT_EQUAL]: 'Does not equal (≠)',\r\n [EnumCoreRuleTreeOparator.STARTS_WITH]: 'Starts with (→)',\r\n [EnumCoreRuleTreeOparator.ENDS_WITH]: 'Ends with (←)',\r\n [EnumCoreRuleTreeOparator.CONTAINS]: 'Contains (∈)',\r\n [EnumCoreRuleTreeOparator.NOT_STARTS_WITH]: 'Does NOT start with (↛)',\r\n [EnumCoreRuleTreeOparator.NOT_ENDS_WITH]: 'Does NOT end with (↚)',\r\n [EnumCoreRuleTreeOparator.NOT_CONTAINS]: 'Does NOT contain (∉)',\r\n [EnumCoreRuleTreeOparator.GREATER_THAN]: 'Greater than (>)',\r\n [EnumCoreRuleTreeOparator.LESS_THAN]: 'Less than (<)',\r\n [EnumCoreRuleTreeOparator.GREATER_OR_EQUAL_THAN]: 'Greater or equal (≥)',\r\n [EnumCoreRuleTreeOparator.LESS_OR_EQUAL_THAN]: 'Less or equal (≤)',\r\n [EnumCoreRuleTreeOparator.IN]: 'In list (∈)',\r\n [EnumCoreRuleTreeOparator.NOT_IN]: 'Not in list (∉)',\r\n [EnumCoreRuleTreeOparator.IS_NULL]: 'Is null',\r\n [EnumCoreRuleTreeOparator.IS_NOT_NULL]: 'Is not null',\r\n };\r\n\r\n\r\n readonly relationalOperator = Object.values(EnumCoreRuleTreeOparator);\r\n\r\n getColLabelTooltip(filterGroup: AbstractControl): string | undefined {\r\n const selectedField = filterGroup.get('name')?.value;\r\n if (!selectedField) return;\r\n const match = this.$totalCols().find(col => col.field === selectedField);\r\n return match?.label || selectedField;\r\n }\r\n\r\n\r\n shouldShowValueControl(operator: string): boolean {\r\n return operator !== 'IS_NULL' && operator !== 'IS_NOT_NULL';\r\n }\r\n\r\n toggleCollapse(group: FormGroup): void {\r\n const current = this.collapsedGroups.get(group) || false;\r\n this.collapsedGroups.set(group, !current);\r\n }\r\n\r\n isCollapsed(group: FormGroup): boolean {\r\n return this.collapsedGroups.get(group) || false;\r\n }\r\n\r\n\r\n field(): FormGroup {\r\n return new FormGroup({\r\n name: new FormControl(null),\r\n value: new FormControl(null),\r\n relationalOperator: new FormControl('EQUAL'),\r\n defaultMessage: new FormControl(''),\r\n englishMessage: new FormControl('')\r\n });\r\n }\r\n\r\n filter(): FormGroup {\r\n return new FormGroup({\r\n logicalOperator: new FormControl('AND'),\r\n filters: new FormArray([])\r\n });\r\n }\r\n\r\n prevJson = signal<string>('{}');\r\n\r\n constructor(\r\n public override mls: MultiLanguageService,\r\n private cdr: ChangeDetectorRef,\r\n ) {\r\n\r\n super(mls);\r\n\r\n effect((onCleanup) => {\r\n const form = this.$mainForm();\r\n if (!!form) {\r\n const sub = form.valueChanges.subscribe(value => {\r\n\r\n const updateOperators = (group: FormGroup) => {\r\n const filters = group.get('filters') as FormArray;\r\n if (!filters) return;\r\n\r\n filters.controls.forEach(control => {\r\n if (!(control instanceof FormGroup)) return;\r\n\r\n const operator = control.get('relationalOperator')?.value;\r\n const valueControl = control.get('value');\r\n\r\n if (operator === 'IS_NULL' || operator === 'IS_NOT_NULL') {\r\n valueControl?.setValue(null, { emitEvent: false });\r\n valueControl?.disable({ emitEvent: false });\r\n } else {\r\n valueControl?.enable({ emitEvent: false });\r\n }\r\n\r\n // 🌀 Recurse safely if this nested control has subfilters\r\n const subFilters = control.get('filters') as FormArray;\r\n if (subFilters && control instanceof FormGroup) {\r\n updateOperators(control);\r\n }\r\n });\r\n };\r\n\r\n\r\n updateOperators(form);\r\n\r\n // 🔁 Now that the form has been normalized, update the signal\r\n this.crts.$formValue.set(form.getRawValue());\r\n });\r\n\r\n onCleanup(() => sub.unsubscribe());\r\n }\r\n });\r\n\r\n\r\n\r\n // ➡️ Separate reaction effect for serialization\r\n effect(() => {\r\n const formValue = this.crts.$formValue();\r\n if (!formValue) return;\r\n\r\n const cleaned = this.crts.cleanEmptyFilters(formValue); // 👈 apply cleaning here\r\n\r\n const json = JSON.stringify(cleaned, null, 2);\r\n\r\n if (json !== this.prevJson()) {\r\n this.crts.$filterFormJsonString.set(json.trim());\r\n this.$jsonEmitter.emit(json);\r\n this.prevJson.set(json);\r\n }\r\n\r\n });\r\n\r\n effect(() => {\r\n const _ = this.$mainForm().getRawValue();\r\n\r\n const updateAll = (formGroup: FormGroup) => {\r\n const filters = formGroup.get('filters') as FormArray;\r\n if (!filters) return;\r\n\r\n filters.controls.forEach(control => {\r\n // Handle nested groups\r\n const subFilters = control.get('filters') as FormArray;\r\n if (subFilters) updateAll(control as FormGroup);\r\n });\r\n };\r\n\r\n updateAll(this.$mainForm());\r\n });\r\n\r\n // Initialize immediately based on initial form\r\n this.crts.$formValue.set(this.$mainForm().getRawValue());\r\n }\r\n\r\n addGroup(groupForm: FormGroup): void {\r\n const filtersArray = groupForm.get('filters') as FormArray;\r\n if (filtersArray) {\r\n const newGroup = this.filter(); // 🛠 use your existing filter() factory method\r\n filtersArray.push(newGroup);\r\n }\r\n }\r\n\r\n removeGroup(groupForm: FormGroup, index: number): void {\r\n const filtersArray = groupForm.get('filters') as FormArray;\r\n if (filtersArray && filtersArray.length > index) {\r\n setTimeout(() => filtersArray.removeAt(index));\r\n }\r\n }\r\n\r\n addCondition(groupForm: FormGroup): void {\r\n const filtersArray = groupForm.get('filters') as FormArray;\r\n if (filtersArray) {\r\n const newCondition = this.field();\r\n filtersArray.push(newCondition);\r\n }\r\n }\r\n\r\n removeCondition(filterGroup: FormGroup, index: number): void {\r\n const filtersArray = filterGroup.get('filters') as FormArray;\r\n if (filtersArray && filtersArray.length > index) {\r\n setTimeout(() => filtersArray.removeAt(index));\r\n }\r\n }\r\n\r\n resolveControl(fieldName: string): IFormBaseControl | undefined {\r\n const cols = this.$totalCols();\r\n if (!cols || !fieldName) return undefined;\r\n const tryfind = cols.find(x => x.field === fieldName);\r\n return tryfind;\r\n }\r\n\r\n safeStringify(obj: any): string {\r\n const seen = new WeakSet();\r\n\r\n return JSON.stringify(obj, (key, value) => {\r\n if (typeof value === 'object' && value !== null) {\r\n if (seen.has(value)) {\r\n return undefined; // ✋ Skip circular reference\r\n }\r\n seen.add(value);\r\n }\r\n\r\n return value;\r\n });\r\n }\r\n\r\n isCalculatedField(fieldName: string): boolean {\r\n const control = this.resolveControl(fieldName);\r\n return control?.controlType === 'CALCULATED';\r\n }\r\n\r\n}\r\n","<div class=\"core-rule-tree-container\">\r\n\r\n <form [formGroup]=\"$mainForm()\" (ngSubmit)=\"null\" class=\"core-rule-tree-form\">\r\n\r\n <div class=\"top-bar\">\r\n <div class=\"expression-box\">\r\n Expression = {{ crts.$filterString() || '()' }}\r\n </div>\r\n \r\n </div>\r\n \r\n <div class=\"query-builder\">\r\n <ng-template #queryTemplate let-filter=\"filter\" let-groupToRemove=\"groupToRemove\">\r\n \r\n <div class=\"group-card\">\r\n\r\n <div class=\"group-header\">\r\n\r\n <div class=\"logical-operator\">\r\n\r\n <select class=\"form-control pointer\" [formControl]=\"filter.get('logicalOperator')\">\r\n <option value=\"AND\">AND</option>\r\n <option value=\"OR\">OR</option>\r\n </select>\r\n\r\n <!-- Collapse/Expand Button -->\r\n @if (!!filter.value.filters?.length) {\r\n <button type=\"button\" class=\"btn btn-sm btn-outline-secondary\"\r\n (click)=\"toggleCollapse(filter)\"\r\n [appTooltip]=\"isCollapsed(filter) ? 'Expand Group' : 'Collapse Group'\">\r\n <i class=\"feather\" [class.feather-plus]=\"isCollapsed(filter)\" [class.feather-minus]=\"!isCollapsed(filter)\"></i>\r\n </button>\r\n }\r\n <div class=\"local-action-buttons\">\r\n <button type=\"button\" class=\"btn btn-success feather-file-plus\"\r\n (click)=\"addCondition(filter)\"\r\n [appTooltip]=\"'Add Condition to this Group'\" [position]=\"'above'\">\r\n </button>\r\n <button type=\"button\" class=\"btn btn-success feather-folder-plus\"\r\n (click)=\"addGroup(filter)\"\r\n [appTooltip]=\"'Add Subgroup to this Group'\" [position]=\"'above'\">\r\n </button>\r\n @if (!!groupToRemove) {\r\n <button type=\"button\" class=\"btn btn-danger feather-trash\"\r\n (click)=\"removeGroup(groupToRemove.group, groupToRemove.index)\"\r\n [appTooltip]=\"'Remove Group'\" [position]=\"'above'\">\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"group-content\">\r\n \r\n @if (!isCollapsed(filter)) {\r\n\r\n @if (!!filter.value.filters?.length) {\r\n <div class=\"filter-list\" formArrayName=\"filters\">\r\n @for (childFilter of filter.get('filters').controls; track $index; let idx = $index) {\r\n <div class=\"filter-row\" [formGroup]=\"childFilter\">\r\n \r\n @if (!childFilter.value.logicalOperator) {\r\n\r\n <div class=\"filter-raw\">\r\n\r\n <div class=\"field-cell\">\r\n <select class=\"form-control\"\r\n [appTooltip]=\"getColLabelTooltip(childFilter)\"\r\n [showAnyway]=\"true\"\r\n formControlName=\"name\">\r\n @for (col of $totalCols(); track $index) {\r\n <option [value]=\"col.field\">{{ col.label || col.field }}</option>\r\n }\r\n </select>\r\n\r\n </div>\r\n\r\n <div class=\"operator-cell\">\r\n <select class=\"form-control\" formControlName=\"relationalOperator\">\r\n @for (op of relationalOperator; track $index) {\r\n <option [value]=\"op\">{{ operatorFriendlyMap[op] || op }}</option>\r\n }\r\n </select>\r\n </div> \r\n\r\n <div class=\"value-cell\">\r\n @if (shouldShowValueControl(childFilter.value.relationalOperator)) {\r\n <core-control-value-only\r\n @fadeSwitch\r\n [$control]=\"resolveControl(childFilter.value.name)!\"\r\n [$form]=\"childFilter\"\r\n [$fieldName]=\"'value'\"\r\n >\r\n </core-control-value-only>\r\n }\r\n </div>\r\n\r\n <div class=\"action-cell\">\r\n <button type=\"button\" class=\"btn btn-danger btn-sm feather-trash-2\"\r\n (click)=\"removeCondition(filter, idx)\"\r\n [appTooltip]=\"'Remove Condition'\">\r\n </button>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"filter-message default\">\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"Default message...\"\r\n formControlName=\"defaultMessage\" />\r\n </div>\r\n\r\n <div class=\"filter-message english\">\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n placeholder=\"English message...\"\r\n formControlName=\"englishMessage\" />\r\n </div>\r\n\r\n } @else {\r\n <!-- Recursive nested groups -->\r\n <ng-container *ngTemplateOutlet=\"queryTemplate; context: { filter: childFilter, groupToRemove: { group: filter, index: idx } }\"></ng-container>\r\n }\r\n \r\n </div>\r\n }\r\n </div>\r\n }\r\n \r\n\r\n }\r\n\r\n </div>\r\n\r\n </div>\r\n \r\n </ng-template>\r\n \r\n <ng-container\r\n *ngTemplateOutlet=\"queryTemplate; context: { filter: $mainForm(), groupToRemove: null }\">\r\n </ng-container>\r\n \r\n </div>\r\n \r\n </form>\r\n \r\n <div class=\"dev-json-view\">\r\n <pre class=\"json-preview\">{{ crts.$filterFormJsonString() }}</pre>\r\n </div>\r\n \r\n </div>\r\n","import { ChangeDetectionStrategy, Component, computed, effect, inject, output, WritableSignal } from '@angular/core';\r\nimport { BaseComponent } from '../../../../base-component/base/base.component';\r\nimport { EnumActorSourceType } from '../../../enums/EnumActorSourceType';\r\nimport { CoreRadioGroupComponent, ICoreRadioOption } from '../../../../core-radio-group/core-radio-group/core-radio-group.component';\r\nimport { BehaviorSubject, } from 'rxjs';\r\nimport { TranslatePipe } from '../../../../../app-pipes/translate.pipe';\r\nimport { IActorAssignment } from '../../../interfaces/IActorAssignment';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ICoreDropdownOption } from '../../../../../interfaces/ICoreDropdownOption';\r\nimport { CoreParamControlComponent } from '../../../../core-param-control/core-param-control/core-param-control.component';\r\nimport { ICoreParamControl } from '../../../../core-header-params/enum-and-interfaces';\r\nimport { EnumFormBaseContolType } from '../../../../../enum/EnumFormBaseContolType';\r\nimport { EnumCoreFormControlSeekerSourceType } from '../../../../core-form-control-seeker/EnumCoreFormControlSeekerSourceType';\r\nimport { CoreWorkflowService } from '../../../core-workflow.service';\r\nimport { TooltipDirective } from '../../../../tooltip/tooltip.directive';\r\nimport { MultiLanguageService } from '../../../../../services/multi-language.service';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { AlertService } from '../../../../alert/alert.service';\r\nimport { AppService } from '../../../../../services/app.service';\r\nimport { IIdsRequest } from '../../../../../interfaces/IIdsRequest';\r\n\r\n@Component({\r\n selector: 'wf-actor-selector',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n CoreParamControlComponent,\r\n CoreRadioGroupComponent,\r\n TranslatePipe,\r\n TooltipDirective,\r\n ],\r\n templateUrl: './wf-actor-selector.component.html',\r\n styleUrl: './wf-actor-selector.component.scss'\r\n})\r\nexport class WfActorSelectorComponent extends BaseComponent {\r\n\r\n public wfs = inject(CoreWorkflowService);\r\n http = inject(HttpClient);\r\n as = inject(AlertService);\r\n appService = inject(AppService);\r\n\r\n $value = this.wfs.$selectedActorAssignment;\r\n $valueChange = output<IActorAssignment | null>();\r\n levelSpecificOptions$: BehaviorSubject<ICoreDropdownOption[]> = new BehaviorSubject<ICoreDropdownOption[]>([]);\r\n levelNgModel$ = new BehaviorSubject<number | undefined>(undefined);\r\n\r\n employeeObjectList$ = new BehaviorSubject<any[]>([]);\r\n positionObjectList$ = new BehaviorSubject<any[]>([]);\r\n\r\n $selectedActorAssignmentJson = computed(() => JSON.stringify(this.wfs.$selectedActorAssignment(), null, 2));\r\n\r\n onNgModelChange = (ngModel: string, value: any) => {\r\n switch (ngModel) {\r\n case 'level':\r\n this.onLevelChanged(value);\r\n break;\r\n case 'employeeIds':\r\n case 'positionIds':\r\n this.onStaticValueSelected(value)\r\n break;\r\n }\r\n }\r\n\r\n levelSpecificControl: ICoreParamControl = {\r\n controlType: EnumFormBaseContolType.DROPDOWN,\r\n name: 'level',\r\n dropdownOptions$: this.levelSpecificOptions$,\r\n ngModel: this.$value()?.level,\r\n ngModel$: this.levelNgModel$,\r\n flexSize: 12,\r\n label: '',\r\n ngModelChange: this.onNgModelChange,\r\n getByIdApi: '/api/HuEmployee/GetById'\r\n }\r\n\r\n employeeIdsControl: ICoreParamControl = {\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n multiMode: true,\r\n objectList$: this.employeeObjectList$,\r\n disabledDoubleClick: true,\r\n name: 'employeeIds',\r\n ngModel: this.$value()?.staticValueIds,\r\n flexSize: 12,\r\n label: '',\r\n ngModelChange: this.onNgModelChange,\r\n shownFrom: 'fullname',\r\n getByIdApi: '/api/HuEmployee/GetById'\r\n }\r\n\r\n positionIdsControl: ICoreParamControl = {\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.POSITION_SEEK,\r\n multiMode: true,\r\n objectList$: this.positionObjectList$,\r\n name: 'positionIds',\r\n ngModel: this.$value()?.staticValueIds,\r\n flexSize: 12,\r\n label: '',\r\n ngModelChange: this.onNgModelChange,\r\n shownFrom: 'name',\r\n getByIdApi: '/api/HuPosition/GetById'\r\n }\r\n\r\n readonly AVAILABLE_SOURCES = Object.values(EnumActorSourceType);\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n effect(() => {\r\n const _ = this.wfs.$currentStep();\r\n const assignment = this.wfs.$selectedActorAssignment();\r\n const source = assignment?.source;\r\n const ids = assignment?.staticValueIds;\r\n switch (source) {\r\n case EnumActorSourceType.Manager:\r\n case EnumActorSourceType.DepartmentSupervisor:\r\n this.updateLevelOptions(source);\r\n this.levelNgModel$.next(this.$value()?.level);\r\n break;\r\n case EnumActorSourceType.Employee:\r\n if (!!ids) {\r\n this.appService.post('/api/HuEmployee/ReadAllByIds', { ids: ids } as IIdsRequest).subscribe(x => {\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n this.employeeIdsControl.objectList$?.next(x.body.innerBody);\r\n }\r\n })\r\n } else {\r\n this.employeeIdsControl.objectList$?.next([]);\r\n }\r\n break;\r\n case EnumActorSourceType.Position:\r\n if (!!ids) {\r\n this.appService.post('/api/HuPosition/ReadAllByIds', { ids: ids } as IIdsRequest).subscribe(x => {\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n this.positionIdsControl.objectList$?.next(x.body.innerBody);\r\n }\r\n })\r\n } else {\r\n this.positionIdsControl.objectList$?.next([]);\r\n }\r\n break;\r\n }\r\n\r\n })\r\n }\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 const current = this.$value()?.source;\r\n if (\r\n current === EnumActorSourceType.Manager ||\r\n current === EnumActorSourceType.DepartmentSupervisor\r\n ) {\r\n this.updateLevelOptions(current);\r\n }\r\n }\r\n\r\n updateLevelOptions(source: EnumActorSourceType) {\r\n const prefix = source === EnumActorSourceType.Manager ? 'Direct manager' : 'Direct supervisor';\r\n const options = Array.from({ length: 10 }, (_, i) => ({\r\n value: i,\r\n text: i === 0 ? `${prefix}` : `${prefix} + ${i}`\r\n }));\r\n this.levelSpecificOptions$.next(options);\r\n }\r\n\r\n actorSourceOptions$ = new BehaviorSubject<ICoreRadioOption[]>(\r\n Object.values(EnumActorSourceType)\r\n .filter(val => ['Employee', 'Manager', 'DepartmentSupervisor', 'Position'].includes(val))\r\n .map(val => ({\r\n value: val,\r\n text: val\r\n }))\r\n );\r\n\r\n\r\n unsupportedYetactorSourceOptions$ = new BehaviorSubject<ICoreRadioOption[]>(\r\n Object.values(EnumActorSourceType)\r\n .filter(val => !['Employee', 'Manager', 'DepartmentSupervisor', 'Position'].includes(val))\r\n .map(val => ({\r\n value: val,\r\n text: val\r\n }))\r\n );\r\n\r\n $showEmployeeSeeker = computed(() =>\r\n this.$value()?.source === EnumActorSourceType.Employee\r\n );\r\n\r\n $showPositionSeeker = computed(() =>\r\n this.$value()?.source === EnumActorSourceType.Position\r\n );\r\n\r\n $showLevel = computed(() =>\r\n [EnumActorSourceType.Manager, EnumActorSourceType.DepartmentSupervisor].includes(this.$value()!.source)\r\n );\r\n\r\n $showStepKey = computed(() =>\r\n this.$value()?.source === EnumActorSourceType.StepRecipient\r\n );\r\n\r\n onSourceChanged(newSource: EnumActorSourceType): void {\r\n let newValue = this.$value();\r\n if (!newValue) return;\r\n\r\n // Optionally reset level\r\n if (\r\n newSource === EnumActorSourceType.Manager ||\r\n newSource === EnumActorSourceType.DepartmentSupervisor\r\n ) {\r\n newValue.level = undefined;\r\n delete newValue.staticValueIds;\r\n //delete newValue.stepKey;\r\n } else {\r\n delete newValue.level\r\n }\r\n\r\n this.$value.set({ ...newValue });\r\n\r\n this.updateLevelOptions(newSource);\r\n this.$valueChange.emit({ source: newSource });\r\n\r\n this.wfs.updateCurrentStepConfig({\r\n actors: { source: newSource },\r\n });\r\n\r\n }\r\n\r\n onStaticValueSelected(value: number[]): void {\r\n if (!this.$value()) return;\r\n const next = { ...this.$value()!, staticValueIds: value };\r\n this.$valueChange.emit(next);\r\n\r\n const prev = this.$value();\r\n if (!prev) return;\r\n this.wfs.updateCurrentStepConfig({\r\n actors: { ...prev, staticValueIds: value }\r\n });\r\n }\r\n\r\n onLevelChanged(level: number): void {\r\n if (!this.$value()) return;\r\n const next = { ...this.$value()!, level };\r\n this.$valueChange.emit(next);\r\n const prev = this.$value();\r\n if (!prev) return;\r\n this.wfs.updateCurrentStepConfig({\r\n actors: { ...prev, level }\r\n });\r\n }\r\n\r\n onStepKeyChanged(key: string): void {\r\n if (!this.$value()) return;\r\n const next = { ...this.$value()!, stepKey: key };\r\n this.$valueChange.emit(next);\r\n }\r\n\r\n}\r\n","<div class=\"wf-actor-selector-container\">\r\n <div class=\"soure-options\"\r\n [appTooltip]=\"'This version currently supports: Manager | Supervisor | Employee | Position | Requester'\"\r\n [showAnyway]=\"true\"\r\n [position]=\"'above'\" \r\n >\r\n <pre>{{ $selectedActorAssignmentJson() }}</pre>\r\n <core-radio-group\r\n [options$]=\"actorSourceOptions$\"\r\n [vertical]=\"true\"\r\n [columnCount]=\"2\"\r\n [gapY]=\"8\"\r\n [(ngModel)]=\"$value()!.source\"\r\n (ngModelChange)=\"onSourceChanged($event)\">\r\n </core-radio-group>\r\n </div>\r\n\r\n <div class=\"soure-options form-control-disabled\"\r\n [appTooltip]=\"'Not supported yet in this version'\"\r\n [showAnyway]=\"true\"\r\n >\r\n <core-radio-group\r\n [options$]=\"unsupportedYetactorSourceOptions$\"\r\n [vertical]=\"true\"\r\n [columnCount]=\"2\"\r\n [gapY]=\"8\"\r\n [disabled]=\"true\"\r\n [(ngModel)]=\"$value()!.source\"\r\n (ngModelChange)=\"onSourceChanged($event)\">\r\n </core-radio-group>\r\n </div>\r\n \r\n <!-- Manager / DepartmentSupervisor -->\r\n @if (!!$value() && $showLevel()) {\r\n <div class=\"manager-level\">\r\n <label>\r\n {{ $value()!.source === 'Manager' ? 'Manager level' : 'Supervisor level' }}\r\n </label>\r\n <core-param-control\r\n [control]=\"levelSpecificControl\"\r\n ></core-param-control>\r\n </div>\r\n }\r\n \r\n <!-- Employee / Position / UserGroup (choose static entities) -->\r\n @if (!!$value() && $value()!.source === 'Employee' || $value()!.source === 'Position' || $value()!.source === 'UserGroup') {\r\n <div class=\"static-selector\">\r\n <label>Select {{ $value()!.source }}</label>\r\n <!-- Choose component based on source -->\r\n @switch ($value()!.source) {\r\n @case('Employee') {\r\n <core-param-control\r\n [control]=\"employeeIdsControl\"\r\n ></core-param-control>\r\n }\r\n @case('Position') {\r\n <core-param-control\r\n [control]=\"positionIdsControl\"\r\n ></core-param-control>\r\n }\r\n @case('UserGroup') {\r\n <div>Not supported yet in this version</div>\r\n }\r\n }\r\n </div>\r\n }\r\n \r\n @if (!!$value() && $value()!.source === 'StepRecipient') {\r\n <div>Not supported yet in this version</div>\r\n }\r\n \r\n</div>\r\n ","import { ChangeDetectionStrategy, Component, computed, inject, Signal, signal } from '@angular/core';\r\nimport { WfActorSelectorComponent } from '../wf-actor-selector/wf-actor-selector.component';\r\nimport { BaseComponent } from '../../../../base-component/base/base.component';\r\nimport { CoreRadioGroupComponent, ICoreRadioOption } from '../../../../core-radio-group/core-radio-group/core-radio-group.component';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { CoreWorkflowService } from '../../../core-workflow.service';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TranslatePipe } from '../../../../../app-pipes/translate.pipe';\r\nimport { RoutingStepLogic } from '../../../types/RoutingStepLogic';\r\n\r\n@Component({\r\n selector: 'wf-approver-config',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n TranslatePipe,\r\n WfActorSelectorComponent,\r\n CoreRadioGroupComponent\r\n ],\r\n templateUrl: './wf-approver-config.component.html',\r\n styleUrl: './wf-approver-config.component.scss'\r\n})\r\nexport class WfApproverConfigComponent extends BaseComponent {\r\n\r\n public wfs = inject(CoreWorkflowService);\r\n\r\n $routingLogic: Signal<RoutingStepLogic> = computed<RoutingStepLogic>(() => (this.wfs.$currentStep()?.config as any)?.routingLogic || 'parallel');\r\n\r\n $actorSource = computed(() => this.wfs.$selectedActorAssignment()?.source || 'Unknown');\r\n\r\n actorSourceOptions$ = new BehaviorSubject<ICoreRadioOption[]>(\r\n [['parallel', 'Everyone assigned (all must approve)'], ['short-circuit', 'Anyone assigned (one must approve)']]\r\n .map(val => ({\r\n value: val[0],\r\n text: val[1],\r\n }))\r\n );\r\n\r\n onSourceChanged(e: any): void {\r\n this.wfs.updateCurrentStepConfig({\r\n routingLogic: e\r\n });\r\n }\r\n\r\n}\r\n","<div class=\"wf-approver-config-container\">\r\n <wf-actor-selector></wf-actor-selector>\r\n \r\n\r\n @if (['Employee', 'Position', 'UserGroup'].includes($actorSource())) {\r\n\r\n <div class=\"routing-logic\">\r\n\r\n <div class=\"routing-logic-caption\">{{ 'When there are multiple actors, use the method' | translate : lang }}</div>\r\n \r\n <core-radio-group\r\n [options$]=\"actorSourceOptions$\"\r\n [vertical]=\"true\"\r\n [gapY]=\"8\"\r\n [defaultValue]=\"'parallel'\"\r\n [ngModel]=\"$routingLogic()\"\r\n (ngModelChange)=\"onSourceChanged($event)\">\r\n </core-radio-group>\r\n \r\n </div>\r\n\r\n }\r\n\r\n</div>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { WfActorSelectorComponent } from '../wf-actor-selector/wf-actor-selector.component';\r\n\r\n@Component({\r\n selector: 'wf-cc-config',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n WfActorSelectorComponent\r\n ],\r\n templateUrl: './wf-cc-config.component.html',\r\n styleUrl: './wf-cc-config.component.scss'\r\n})\r\nexport class WfCcConfigComponent {\r\n\r\n}\r\n","<div class=\"wf-cc-config-container\">\r\n <wf-actor-selector></wf-actor-selector>\r\n</div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'wf-end-config',\r\n imports: [],\r\n templateUrl: './wf-end-config.component.html',\r\n styleUrl: './wf-end-config.component.scss'\r\n})\r\nexport class WfEndConfigComponent {\r\n\r\n}\r\n","<div class=\"wf-submit-config-container\">\r\n <div class=\"submit-config-box\">\r\n <span class=\"icon\"><i class=\"feather-mail\"></i></span>\r\n <span class=\"message\">\r\n In this version, an email will be sent the <strong>requester</strong> by default.\r\n </span>\r\n </div>\r\n <div class=\"submit-config-box\">Press ESC to hide</div>\r\n</div>","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { WfActorSelectorComponent } from '../wf-actor-selector/wf-actor-selector.component';\r\n\r\n@Component({\r\n selector: 'wf-handler-config',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n WfActorSelectorComponent\r\n ],\r\n templateUrl: './wf-handler-config.component.html',\r\n styleUrl: './wf-handler-config.component.scss'\r\n})\r\nexport class WfHandlerConfigComponent {\r\n\r\n}\r\n","<div class=\"wf-handler-config\">\r\n <wf-actor-selector></wf-actor-selector>\r\n</div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'wf-submit-config',\r\n imports: [],\r\n templateUrl: './wf-submit-config.component.html',\r\n styleUrl: './wf-submit-config.component.scss'\r\n})\r\nexport class WfSubmitConfigComponent {\r\n\r\n}\r\n","<div class=\"wf-submit-config-container\">\r\n <div class=\"submit-config-box\">\r\n <span class=\"icon\"><i class=\"feather-check-square\"></i></span>\r\n <span class=\"message\">\r\n In this version, <strong>all members</strong> are allowed to submit.\r\n </span>\r\n </div>\r\n <div class=\"submit-config-box\">Press ESC to hide</div>\r\n</div>","import { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\nimport { catchError, of } from 'rxjs';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { GptService } from '../../../services/gpt.service';\r\n\r\n@Component({\r\n selector: 'wf-gpt-assistant',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n ],\r\n templateUrl: './wf-gpt-assistant.component.html',\r\n styleUrl: './wf-gpt-assistant.component.scss'\r\n})\r\nexport class WfGptAssistantComponent {\r\n $gptReply = signal('');\r\n gptInput: string = \"leaveDays > 5 and region != 'VN'\";\r\n \r\n wfs = inject(CoreWorkflowService);\r\n gpt = inject(GptService);\r\n\r\n askGpt(): void {\r\n const input = this.gptInput?.trim();\r\n if (!input) return;\r\n\r\n this.wfs.$loading.set(true);\r\n\r\n this.gpt.askGpt({\r\n input,\r\n context: []\r\n }).pipe(\r\n catchError(err => {\r\n this.wfs.$loading.set(false);\r\n console.error('ChatGPT error:', err);\r\n return of({ ok: false, body: { innerBody: 'Error: Unable to process request.' } });\r\n })\r\n ).subscribe(x => {\r\n this.wfs.$loading.set(false);\r\n\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n this.$gptReply.set(x.body.innerBody);\r\n } else {\r\n this.$gptReply.set('GPT could not generate a response.');\r\n }\r\n });\r\n }\r\n}\r\n","<div class=\"wf-gpt-assistant-container\">\r\n\r\n <div class=\"ask-gpt\">\r\n <label class=\"gpt-label\">💬 Ask ChatGPT for a condition</label>\r\n\r\n <textarea [(ngModel)]=\"gptInput\" class=\"gpt-textarea\" placeholder=\"e.g. Amount > 1000 and Region != 'CN'\">\r\n </textarea>\r\n\r\n <button (click)=\"askGpt()\" class=\"gpt-button\">Ask ChatGPT</button>\r\n\r\n @if ($gptReply()) {\r\n <div class=\"gpt-reply\">\r\n <strong>ChatGPT says:</strong>\r\n <pre>{{ $gptReply() }}</pre>\r\n </div>\r\n <small class=\"gpt-disclaimer\">\r\n 💡 This is a demo preview. GPT-generated logic will be integrated into the system in future versions.\r\n </small>\r\n }\r\n </div>\r\n\r\n</div>","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\r\nimport { CoreRuleTreeComponent } from '../../../core-rule-tree/core-rule-tree.component';\r\nimport { CoreWorkflowService } from '../../core-workflow.service';\r\nimport { CoreRuleTreeService } from '../../../core-rule-tree/core-rule-tree.service';\r\nimport { FormGroup, FormsModule } from '@angular/forms';\r\nimport { CoreRadioGroupComponent, ICoreRadioOption } from '../../../core-radio-group/core-radio-group/core-radio-group.component';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { EnumWorkflowStepType } from '../../enums/EnumWorkflowStepType';\r\n\r\n@Component({\r\n selector: 'rule-config-shell',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n CoreRuleTreeComponent,\r\n CoreRadioGroupComponent,\r\n ],\r\n templateUrl: './rule-config-shell.component.html',\r\n styleUrl: './rule-config-shell.component.scss'\r\n})\r\nexport class RuleConfigShellComponent {\r\n wfs = inject(CoreWorkflowService);\r\n crts = inject(CoreRuleTreeService);\r\n\r\n enumType = EnumWorkflowStepType;\r\n\r\n $stepType = computed(() => this.wfs.$currentStep()?.type);\r\n $fallbackType = computed(() => (this.wfs.$currentStep()?.config as any)?.fallbackType);\r\n $fallbackMessage = computed(() => (this.wfs.$currentStep()?.config as any)?.fallbackMessage);\r\n\r\n fallbackTypeOptions$ = new BehaviorSubject<ICoreRadioOption[]>([\r\n {\r\n value: 'hard-block',\r\n text: 'Hard Block'\r\n },\r\n {\r\n value: 'soft-warn',\r\n text: 'Soft Warning'\r\n }\r\n ])\r\n\r\n $stepFormGroup = computed<FormGroup>(() => {\r\n const step = this.wfs.$currentStep();\r\n if (!step) return this.crts.buildFormGroupFromStep(); // fallback\r\n\r\n const raw = (step.config as any)?.ruleTree;\r\n\r\n let parsed: any = undefined;\r\n\r\n try {\r\n parsed = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n } catch (e) {\r\n console.warn('Failed to parse ruleTree:', raw, e);\r\n parsed = undefined;\r\n }\r\n\r\n const form = this.crts.buildFormGroupFromStep(parsed);\r\n return form;\r\n });\r\n\r\n onRuleTreeJsonChange(e: any): void {\r\n this.wfs.updateCurrentStepConfig({\r\n ruleTree: e,\r\n //conditionExpression: this.crts.$filterFormJsonString(),\r\n });\r\n }\r\n\r\n onFallbackTypeChanged(e: any): void {\r\n this.wfs.updateCurrentStepConfig({\r\n fallbackType: e\r\n });\r\n }\r\n\r\n onFallbackMessageChanged(e: string): void {\r\n this.wfs.updateCurrentStepConfig({\r\n fallbackMessage: e\r\n });\r\n }\r\n\r\n}\r\n","<div class=\"rule-config-shell-container\">\r\n\r\n <div class=\"rule-tree-header\">\r\n <div class=\"title\">Rule Conditions</div>\r\n <div class=\"subtitle\">\r\n Define logic that must be satisfied for this step to proceed. These conditions will be evaluated\r\n automatically.\r\n </div>\r\n </div>\r\n\r\n <div class=\"fallback-type-header\">\r\n <div class=\"title\">Fallback Behavior</div>\r\n <div class=\"subtitle\">\r\n\r\n @if ($stepType() !== enumType.BranchCard) {\r\n Choose what happens when the rule condition evaluates to <strong>false (0)</strong> at runtime:\r\n <ul>\r\n <li><strong>Hard Block</strong> Step will be auto-rejected.</li>\r\n <li><strong>Soft Warn</strong> User will see a warning but may continue.</li>\r\n </ul>\r\n\r\n } @else {\r\n When the condition evaluates to <strong>false (0)</strong>, the next branch (by order) will be triggered automatically.\r\n }\r\n </div>\r\n @if ($stepType() !== enumType.BranchCard) {\r\n <core-radio-group\r\n [options$]=\"fallbackTypeOptions$\"\r\n [vertical]=\"true\"\r\n [gapY]=\"8\"\r\n [ngModel]=\"$fallbackType()\"\r\n (ngModelChange)=\"onFallbackTypeChanged($event)\" \r\n />\r\n }\r\n\r\n </div>\r\n\r\n @if ($stepType() !== enumType.BranchCard) {\r\n <div class=\"fallback-message-wrapper\">\r\n <label for=\"fallback-message\" class=\"form-label\">Optional Warning Message</label>\r\n <textarea\r\n id=\"fallback-message\"\r\n class=\"form-control\"\r\n placeholder=\"Enter a message to show when this fallback is triggered...\"\r\n rows=\"3\"\r\n [ngModel]=\"$fallbackMessage()\"\r\n (ngModelChange)=\"onFallbackMessageChanged($event)\"\r\n ></textarea>\r\n </div>\r\n }\r\n\r\n <div class=\"rule-tree-wrapper\">\r\n\r\n <core-rule-tree [$totalCols]=\"wfs.$availableCols()\" [$mainForm]=\"$stepFormGroup()\"\r\n ($jsonEmitter)=\"onRuleTreeJsonChange($event)\" />\r\n\r\n </div>\r\n</div>","import { Component, inject, computed } from '@angular/core';\r\nimport { CoreStickerCollectionComponent } from '../../../../core-sticker-collection/core-sticker-collection.component';\r\nimport { CoreWorkflowService } from '../../../core-workflow.service';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'wf-formui-config',\r\n imports: [CoreStickerCollectionComponent],\r\n templateUrl: './wf-formui-config.component.html',\r\n styleUrl: './wf-formui-config.component.scss'\r\n})\r\nexport class WfFormuiConfigComponent {\r\n\r\n private readonly systemFields = [\"initialRequesterEmployeeId\"];\r\n\r\n wfs = inject(CoreWorkflowService);\r\n\r\n $availableCols = computed(() =>\r\n this.$fields().filter(f =>\r\n !this.systemFields.includes(f.field)\r\n ) ?? []\r\n );\r\n\r\n /** All AF fields */\r\n $fields = computed<IFormBaseControl[]>(() => this.wfs.$availableCols());\r\n\r\n /** Current step */\r\n $step = computed(() => this.wfs.$currentStep());\r\n\r\n /** Initial checklists */\r\n $initialHidden = computed(() =>\r\n Object.keys(this.$step()?.config?.formUi?.hidden ?? {})\r\n );\r\n\r\n $initialReadonly = computed(() =>\r\n Object.keys(this.$step()?.config?.formUi?.readonly ?? {})\r\n );\r\n\r\n $initialRequired = computed(() =>\r\n Object.keys(this.$step()?.config?.formUi?.required ?? {})\r\n );\r\n\r\n $initialReset = computed(() =>\r\n Object.keys(this.$step()?.config?.formUi?.reset ?? {})\r\n );\r\n\r\n /** Toggle handler */\r\n onToggle(mode: 'hidden' | 'readonly' | 'required' | 'reset', list: string[]) {\r\n const step = this.$step();\r\n if (!step) return;\r\n\r\n const formUi = step.config?.formUi ?? {};\r\n\r\n formUi[mode] = list.reduce((acc, k) => {\r\n acc[k] = true;\r\n return acc;\r\n }, {} as Record<string, true>);\r\n\r\n this.wfs.updateStep({\r\n ...step,\r\n config: {\r\n ...(step.config ?? {}),\r\n formUi: { ...formUi }\r\n }\r\n });\r\n }\r\n}\r\n","<div class=\"formui-config-container\">\r\n\r\n <div class=\"formui-config-header\">\r\n <div class=\"title\">Form UI Configuration</div>\r\n <div class=\"subtitle\">Control field visibility and behavior for this step</div>\r\n </div>\r\n\r\n <div class=\"formui-body\">\r\n\r\n <!-- Hidden Fields -->\r\n <div class=\"formui-block\">\r\n <div class=\"label\">Hidden Fields</div>\r\n\r\n <core-sticker-collection [$items]=\"$availableCols()\" [$shownFrom]=\"'field'\" [$initialChecked]=\"$initialHidden()\"\r\n ($checkedChange)=\"onToggle('hidden', $event)\" [$enableFilter]=\"true\"></core-sticker-collection>\r\n </div>\r\n\r\n <!-- Readonly Fields -->\r\n <div class=\"formui-block\">\r\n <div class=\"label\">Readonly Fields</div>\r\n\r\n <core-sticker-collection [$items]=\"$availableCols()\" [$shownFrom]=\"'field'\" [$initialChecked]=\"$initialReadonly()\"\r\n ($checkedChange)=\"onToggle('readonly', $event)\" [$enableFilter]=\"true\"></core-sticker-collection>\r\n </div>\r\n\r\n <!-- Required Overrides -->\r\n <div class=\"formui-block\">\r\n <div class=\"label\">Required Overrides</div>\r\n\r\n <core-sticker-collection [$items]=\"$availableCols()\" [$shownFrom]=\"'field'\" [$initialChecked]=\"$initialRequired()\"\r\n ($checkedChange)=\"onToggle('required', $event)\" [$enableFilter]=\"true\"></core-sticker-collection>\r\n </div>\r\n\r\n <!-- Reset on Enter -->\r\n <div class=\"formui-block\">\r\n <div class=\"label\">Reset on Enter Step</div>\r\n\r\n <core-sticker-collection [$items]=\"$availableCols()\" [$shownFrom]=\"'field'\" [$initialChecked]=\"$initialReset()\"\r\n ($checkedChange)=\"onToggle('reset', $event)\" [$enableFilter]=\"true\"></core-sticker-collection>\r\n </div>\r\n\r\n </div>\r\n\r\n</div>","import { ChangeDetectionStrategy, Component, viewChild, effect, ElementRef, computed, inject, Renderer2, ChangeDetectorRef, signal } from '@angular/core';\r\nimport { FormGroup, FormsModule } from '@angular/forms';\r\nimport { CoreWorkflowService } from '../../core-workflow.service';\r\nimport { EnumWorkflowStepType } from '../../enums/EnumWorkflowStepType';\r\nimport { CoreRuleTreeComponent } from '../../../core-rule-tree/core-rule-tree.component';\r\nimport { DomService } from '../../../services/dom.service';\r\nimport { WfApproverConfigComponent } from './wf-approver-config/wf-approver-config.component';\r\nimport { WfCcConfigComponent } from './wf-cc-config/wf-cc-config.component';\r\nimport { WfEndConfigComponent } from './wf-end-config/wf-end-config.component';\r\nimport { WfHandlerConfigComponent } from './wf-handler-config/wf-handler-config.component';\r\nimport { WfSubmitConfigComponent } from './wf-submit-config/wf-submit-config.component';\r\nimport { WfGptAssistantComponent } from '../../wf-gpt-assistant/wf-gpt-assistant.component';\r\nimport { CoreRuleTreeService } from '../../../core-rule-tree/core-rule-tree.service';\r\nimport { IStepRuleConfig } from '../../interfaces/IStepConfig';\r\nimport { RuleConfigShellComponent } from '../rule-config-shell/rule-config-shell.component';\r\nimport { WfFormuiConfigComponent } from './wf-formui-config/wf-formui-config.component';\r\n\r\n@Component({\r\n selector: 'wf-step-config-shell',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n CoreRuleTreeComponent,\r\n WfApproverConfigComponent,\r\n WfCcConfigComponent,\r\n WfEndConfigComponent,\r\n WfHandlerConfigComponent,\r\n WfSubmitConfigComponent,\r\n WfFormuiConfigComponent,\r\n RuleConfigShellComponent,\r\n WfGptAssistantComponent\r\n ],\r\n templateUrl: './wf-step-config-shell.component.html',\r\n styleUrls: ['./wf-step-config-shell.component.scss']\r\n})\r\nexport class WfStepConfigShellComponent {\r\n\r\n $container = viewChild<ElementRef>('container');\r\n\r\n // listenerFn!: () => void;\r\n renderer = inject(Renderer2);\r\n cdr = inject(ChangeDetectorRef);\r\n crts = inject(CoreRuleTreeService);\r\n enumType = EnumWorkflowStepType;\r\n\r\n constructor(\r\n public wfs: CoreWorkflowService,\r\n private domService: DomService,\r\n ) {\r\n effect(() => {\r\n const containerRef = this.$container();\r\n if (containerRef) {\r\n containerRef.nativeElement.style.zIndex = this.domService.getMaxZIndex() + 1;\r\n }\r\n });\r\n }\r\n\r\n $stepFormGroup = computed<FormGroup>(() => {\r\n const step = this.wfs.$currentStep();\r\n if (!step) return this.crts.buildFormGroupFromStep(); // fallback\r\n\r\n const raw = (step.config as any)?.ruleTree;\r\n\r\n let parsed: any = undefined;\r\n\r\n try {\r\n parsed = typeof raw === 'string' ? JSON.parse(raw) : raw;\r\n } catch (e) {\r\n console.warn('Failed to parse ruleTree:', raw, e);\r\n parsed = undefined;\r\n }\r\n\r\n const form = this.crts.buildFormGroupFromStep(parsed);\r\n return form;\r\n });\r\n\r\n $isBranchCard = computed<boolean>(() => {\r\n const step = this.wfs.$currentStep();\r\n console.log(step?.type)\r\n console.log(step?.type === EnumWorkflowStepType.BranchCard)\r\n\r\n return !!step && step.type === EnumWorkflowStepType.BranchCard;\r\n })\r\n\r\n $canRenderRuleTree = computed(() => {\r\n const form = this.$stepFormGroup();\r\n const cols = this.wfs.$availableCols();\r\n const isBranchCard = this.$isBranchCard();\r\n\r\n if (!form || !cols || !isBranchCard) return false;\r\n if (cols.length === 0) return false;\r\n\r\n return form.valid;\r\n });\r\n\r\n close() {\r\n this.wfs.$showStepConfig.set(false); // example method\r\n }\r\n\r\n onRuleTreeJsonChange(e: any): void {\r\n this.wfs.updateCurrentStepConfig({\r\n ruleTree: e,\r\n //conditionExpression: this.crts.$filterFormJsonString(),\r\n });\r\n }\r\n\r\n}","<div class=\"wf-step-config-shell-container\" #container [class.shown]=\"wfs.$showStepConfig()\">\r\n \r\n <div class=\"wf-step-config-header\">\r\n <div class=\"panel-title\">\r\n {{ wfs.$currentStep()?.type || 'Step' }} Configuration\r\n </div>\r\n <div class=\"close-wrapper\" (click)=\"close()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n \r\n <div class=\"wf-step-config-content\">\r\n\r\n\r\n @switch (wfs.$currentStep()?.type) {\r\n\r\n @case (enumType.BranchCard) {\r\n <rule-config-shell />\r\n }\r\n \r\n @case (enumType.Approval) {\r\n <wf-approver-config/>\r\n <hr />\r\n <wf-formui-config />\r\n <hr />\r\n <rule-config-shell />\r\n }\r\n \r\n @case (enumType.Handle) {\r\n <wf-handler-config/>\r\n <hr />\r\n <wf-formui-config />\r\n }\r\n \r\n @case (enumType.CC) {\r\n <wf-cc-config/>\r\n }\r\n \r\n @case (enumType.Submit) {\r\n <wf-submit-config/>\r\n <hr />\r\n <wf-formui-config />\r\n <hr />\r\n <rule-config-shell />\r\n }\r\n \r\n @case (enumType.End) {\r\n <wf-end-config/>\r\n <hr />\r\n <rule-config-shell />\r\n }\r\n \r\n @default {\r\n <div class=\"unsupported-type\">\r\n Unsupported type\r\n </div>\r\n }\r\n \r\n }\r\n \r\n </div>\r\n \r\n</div>","export const ROOT_BRANCH_ID = 'root';","import { inject, Injectable } from '@angular/core';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BridgeLineService {\r\n\r\n coreWorkflowService = inject(CoreWorkflowService);\r\n\r\n colorRadius: number = 10;\r\n\r\n adjustBridgeLines(\r\n branchGroupEl: HTMLElement,\r\n topBridgeLineEl: HTMLElement,\r\n bottomBridgeLineEl: HTMLElement,\r\n branchColumnEls: HTMLElement[],\r\n ): void {\r\n const columns = Array.from(\r\n branchGroupEl.querySelectorAll(':scope > .branch-column')\r\n ) as HTMLElement[];\r\n\r\n if (columns.length < 2) return;\r\n\r\n // Helper: get the last .arrow-down inside a column\r\n // ':scope > .arrow-down' only works if .arrow-down is a direct child of col.\r\n // Safely queries only arrows inside wf-bottom-v-insert\r\n // Uses .pop() to grab the last one, if any (safe fallback if there's more than one).\r\n // Ensures type safety with instanceof HTMLElement.\r\n const getLastArrow = (col: HTMLElement): HTMLElement | null => {\r\n const arrow = Array.from(col.querySelectorAll('wf-bottom-v-insert .arrow-down')).pop() as HTMLElement;\r\n return arrow instanceof HTMLElement ? arrow : null;\r\n };\r\n\r\n const allArrows = columns\r\n .map(getLastArrow)\r\n .filter((el): el is HTMLElement => !!el);\r\n\r\n if (allArrows.length < 2) return;\r\n\r\n const r1 = allArrows[0].getBoundingClientRect();\r\n const r2 = allArrows[allArrows.length - 1].getBoundingClientRect();\r\n const containerRect = branchGroupEl.getBoundingClientRect();\r\n\r\n const left = r1.left + r1.width / 2 - containerRect.left;\r\n const right = r2.left + r2.width / 2 - containerRect.left;\r\n\r\n const maxArrowBottom = allArrows.reduce((max, el) => {\r\n const bottom = el.getBoundingClientRect().bottom;\r\n return Math.max(max, bottom);\r\n }, 0);\r\n\r\n const top = maxArrowBottom - containerRect.top - 1;\r\n\r\n // TOP bridge line\r\n topBridgeLineEl.style.top = `17.5px`;\r\n topBridgeLineEl.style.left = `${left}px`;\r\n topBridgeLineEl.style.width = `${right - left}px`;\r\n\r\n // BOTTOM bridge line\r\n bottomBridgeLineEl.style.top = `${top}px`;\r\n bottomBridgeLineEl.style.left = `${left}px`;\r\n bottomBridgeLineEl.style.width = `${right - left}px`;\r\n\r\n // Vertical lines\r\n branchColumnEls.forEach(col => {\r\n const lastArrow = getLastArrow(col);\r\n const vertical = col.querySelector(':scope > .vertical-bridge-line') as HTMLElement;\r\n\r\n if (!lastArrow || !vertical) return;\r\n\r\n const arrowRect = lastArrow.getBoundingClientRect();\r\n const colRect = col.getBoundingClientRect();\r\n\r\n const startY = arrowRect.bottom - colRect.top;\r\n const height = top - startY - this.coreWorkflowService.standardConnectorHeight - 17.5;\r\n\r\n vertical.style.top = `${startY}px`;\r\n vertical.style.left = `calc(50% - 1px)`;\r\n vertical.style.height = `${height}px`;\r\n vertical.style.display = height > 0 ? 'block' : 'none';\r\n //vertical.style.backgroundColor = `hsl(${this.colorRadius}, 100%, 50%)`;\r\n this.colorRadius += 10;\r\n });\r\n \r\n }\r\n\r\n}\r\n","import { Directive, ElementRef, EventEmitter, Input, NgZone, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { BridgeLineService } from './bridge-line.service';\r\nimport { take } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[bridgeLine]'\r\n})\r\nexport class BridgeLineDirective implements OnInit, OnDestroy {\r\n\r\n @Output() bridgeLinesAdjusted = new EventEmitter<void>();\r\n\r\n private resizeObserver!: ResizeObserver;\r\n private mutationObserver!: MutationObserver;\r\n\r\n constructor(\r\n private elRef: ElementRef<HTMLElement>,\r\n private bridgeLineService: BridgeLineService,\r\n private zone: NgZone\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.zone.runOutsideAngular(() => {\r\n this.resizeObserver = new ResizeObserver(() => {\r\n requestAnimationFrame(() => this.adjustBridgeLines());\r\n });\r\n this.resizeObserver.observe(this.elRef.nativeElement);\r\n\r\n this.mutationObserver = new MutationObserver(() => {\r\n this.adjustBridgeLines();\r\n });\r\n \r\n this.mutationObserver.observe(this.elRef.nativeElement, {\r\n childList: true,\r\n subtree: true\r\n });\r\n\r\n });\r\n\r\n // First adjustment\r\n requestAnimationFrame(() => this.adjustBridgeLines());\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.resizeObserver?.disconnect();\r\n this.mutationObserver?.disconnect();\r\n }\r\n\r\n private adjustBridgeLines(): void {\r\n\r\n const branchGroupEl = this.elRef.nativeElement;\r\n\r\n const bridgeLines = branchGroupEl.querySelectorAll('.horizontal-bridge-line');\r\n const topBridgeLineEl = bridgeLines[0] as HTMLElement | null;\r\n const bottomBridgeLineEl = bridgeLines[1] as HTMLElement | null;\r\n\r\n const branchColumnEls = Array.from(branchGroupEl.querySelectorAll(':scope > .branch-column')) as HTMLElement[];\r\n\r\n if (!topBridgeLineEl || !bottomBridgeLineEl || !branchColumnEls) return;\r\n\r\n this.bridgeLineService.adjustBridgeLines(\r\n this.elRef.nativeElement,\r\n topBridgeLineEl,\r\n bottomBridgeLineEl,\r\n branchColumnEls,\r\n );\r\n this.bridgeLinesAdjusted.emit();\r\n }\r\n\r\n\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { IStep } from '../interfaces/IStep';\r\nimport { EnumWorkflowStepType } from '../enums/EnumWorkflowStepType';\r\nimport { EnumActorSourceType } from '../enums/EnumActorSourceType';\r\n\r\n@Pipe({\r\n name: 'wfNodeLabel'\r\n})\r\nexport class WfNodeLabelPipe implements PipeTransform {\r\n\r\n transform(value: IStep): string {\r\n\r\n let result: string = '';\r\n\r\n if (value.type === EnumWorkflowStepType.Approval || value.type === EnumWorkflowStepType.CC || value.type === EnumWorkflowStepType.Handle) {\r\n if (!!value.config?.actors) {\r\n switch (value.config?.actors.source) {\r\n case EnumActorSourceType.Manager:\r\n if (value.config?.actors.level !== undefined) {\r\n result += `${value.config?.actors.source} level ${value.config?.actors.level}`;\r\n }\r\n break;\r\n case EnumActorSourceType.DepartmentSupervisor:\r\n if (value.config?.actors.level !== undefined) {\r\n result += `${value.config?.actors.source} level ${value.config?.actors.level}`;\r\n }\r\n break;\r\n case EnumActorSourceType.Position:\r\n if (!!value.config?.actors.staticValueIds) {\r\n result += `${value.config?.actors.staticValueIds.length} ${value.config?.actors.source.toLowerCase()}(s) selected`;\r\n }\r\n break;\r\n case EnumActorSourceType.Employee:\r\n if (!!value.config?.actors.staticValueIds) {\r\n result += `${value.config?.actors.staticValueIds.length} ${value.config?.actors.source.toLowerCase()}(s) selected`;\r\n }\r\n break;\r\n default:\r\n result += value.label;\r\n }\r\n }\r\n\r\n if (!!value.config?.actors?.staticValueIds && value.config?.actors?.staticValueIds?.length > 1) {\r\n result += `; routing logic: ${value.config?.routingLogic}`\r\n }\r\n\r\n if (!!value.config?.ruleTree) {\r\n result += `; has pre-filter condition; fallback type: ${value.config.fallbackType}`;\r\n }\r\n\r\n } else {\r\n result = value.label;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n}\r\n","import { AfterViewInit, Component, ElementRef, inject, Input, QueryList, Renderer2, ViewChild, ViewChildren } from '@angular/core';\r\nimport { LowerCasePipe } from '@angular/common';\r\nimport { IStep } from '../../interfaces/IStep';\r\nimport { BaseComponent } from '../../../base-component/base/base.component';\r\nimport { CoreWorkflowService } from '../../core-workflow.service';\r\nimport { WfBottomVInsertComponent } from '../wf-bottom-v-insert/wf-bottom-v-insert.component';\r\nimport { EnumWorkflowStepType } from '../../enums/EnumWorkflowStepType';\r\nimport { TooltipDirective } from '../../../tooltip/tooltip.directive';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { IWorkflowBranch } from '../../interfaces/IWorkflowBranch';\r\nimport { BridgeLineService } from '../bridge-line.service';\r\nimport { BridgeLineDirective } from '../bridge-line.directive';\r\nimport { WfNodeLabelPipe } from '../../pipes/wf-node-label.pipe';\r\n\r\n@Component({\r\n selector: 'wf-node',\r\n imports: [\r\n FormsModule,\r\n WfNodeLabelPipe,\r\n BridgeLineDirective,\r\n LowerCasePipe,\r\n WfBottomVInsertComponent,\r\n TooltipDirective,\r\n ],\r\n templateUrl: './wf-node.component.html',\r\n styleUrls: [\r\n '../wf-workflow-canvas.component.scss',\r\n './wf-node.component.scss'\r\n ]\r\n})\r\nexport class WfNodeComponent extends BaseComponent implements AfterViewInit {\r\n @Input({ required: true }) branchId!: string;\r\n @Input({ required: true }) step!: IStep;\r\n @Input({ required: true }) index!: number;\r\n @Input({ required: true }) branchPriority!: number;\r\n @Input({ required: true }) stepGroup: IStep[] = []; // array that holds 'step'\r\n @Input() conditionalBranches!: IWorkflowBranch[];\r\n @Input() isRootLevelStepGroup: boolean = false;\r\n\r\n @Input() grandParentSteps: IStep[] | null = null; // The step array that owns the parent step of type ConditionalBranch\r\n @Input() isInFallbackBranch: boolean = false;\r\n\r\n @ViewChild('branchHeader') branchHeader!: ElementRef;\r\n @ViewChild('branchName') branchName!: ElementRef;\r\n @ViewChild('input') input!: ElementRef;\r\n\r\n @ViewChild('branchGroup') branchGroupRef!: ElementRef<HTMLElement>;\r\n @ViewChild('topBridgeLine') topBridgeLineRef!: ElementRef<HTMLElement>;\r\n @ViewChild('bottomBridgeLine') bottomBridgeLineRef!: ElementRef<HTMLElement>;\r\n @ViewChildren('branchColumn') branchColumnRefs!: QueryList<ElementRef<HTMLElement>>;\r\n\r\n listenerFn!: (() => void) | null;\r\n\r\n //private observer!: MutationObserver;\r\n\r\n enumType = EnumWorkflowStepType;\r\n\r\n public coreWorkflowService = inject(CoreWorkflowService);\r\n renderer = inject(Renderer2);\r\n bridgeLineService = inject(BridgeLineService);\r\n\r\n stepNameEditMode: boolean = false;\r\n\r\n onInputBlur(): void {\r\n this.stepNameEditMode = false;\r\n }\r\n\r\n onStepNameChanged(newName: string): void {\r\n if (this.isRootLevelStepGroup) {\r\n const cloned = structuredClone(this.coreWorkflowService.$currentSteps());\r\n const stepInCloned = cloned.find(s => s.id === this.step.id);\r\n if (stepInCloned) {\r\n stepInCloned.name = newName;\r\n this.coreWorkflowService.$currentSteps.set(cloned);\r\n }\r\n }\r\n }\r\n\r\n getBranchColumnElements(): HTMLElement[] {\r\n return this.branchColumnRefs?.map(ref => ref?.nativeElement);\r\n }\r\n\r\n private setupClickOutsideListener(): void {\r\n // Clean up any existing listener\r\n if (this.listenerFn) {\r\n this.listenerFn();\r\n this.listenerFn = null;\r\n }\r\n\r\n // Delay to ensure DOM has rendered\r\n setTimeout(() => {\r\n this.listenerFn = this.renderer.listen('document', 'click', (event: Event) => {\r\n const clickedInside = this.branchHeader?.nativeElement.contains(event.target);\r\n if (!clickedInside) {\r\n this.stepNameEditMode = false;\r\n this.removeClickOutsideListener(); // optional: remove after 1 toggle\r\n }\r\n });\r\n });\r\n }\r\n\r\n private removeClickOutsideListener(): void {\r\n if (this.listenerFn) {\r\n this.listenerFn();\r\n this.listenerFn = null;\r\n }\r\n }\r\n\r\n onLabelClicked(): void {\r\n this.coreWorkflowService.$showStepConfig.set(true);\r\n }\r\n\r\n switchToNameEditMode(): void {\r\n if (!!this.step.isPseudo && !!this.isInFallbackBranch) return;\r\n this.stepNameEditMode = true;\r\n setTimeout(() => this.input?.nativeElement.focus());\r\n this.setupClickOutsideListener();\r\n }\r\n\r\n\r\n adjustBridgeLines(): void {\r\n\r\n setTimeout(() => {\r\n\r\n if (!this.branchGroupRef || !this.topBridgeLineRef || !this.bottomBridgeLineRef) {\r\n console.warn('[DEBUG] Some ref was null');\r\n return;\r\n }\r\n\r\n console.log('[DEBUG] Triggering BridgeLineService');\r\n\r\n this.bridgeLineService.adjustBridgeLines(\r\n this.branchGroupRef.nativeElement,\r\n this.topBridgeLineRef.nativeElement,\r\n this.bottomBridgeLineRef.nativeElement,\r\n this.branchColumnRefs.map(ref => ref.nativeElement)\r\n );\r\n\r\n }, 50)\r\n\r\n }\r\n\r\n onDeleteBranch(branchId: string): void {\r\n if (!this.conditionalBranches) return;\r\n\r\n const index = this.conditionalBranches.findIndex(b => b.id === branchId);\r\n if (index === -1) return;\r\n\r\n // ⚠️ Remove selected branch (in-place is okay, but needs re-signal)\r\n this.conditionalBranches.splice(index, 1);\r\n\r\n const onlyFallbackLeft = this.conditionalBranches.length === 1 && this.conditionalBranches[0].isFallback;\r\n\r\n if (onlyFallbackLeft) {\r\n if (!this.grandParentSteps) return;\r\n\r\n const fallbackBranchId = this.conditionalBranches[0].id;\r\n\r\n const stepIndex = this.grandParentSteps.findIndex(step =>\r\n step.branches?.some(branch => branch.id === fallbackBranchId)\r\n );\r\n if (stepIndex === -1) return;\r\n\r\n if (this.isRootLevelStepGroup) {\r\n // ✅ Deep clone and reassign to trigger reactivity\r\n const updated = structuredClone(this.grandParentSteps);\r\n updated.splice(stepIndex, 1);\r\n this.coreWorkflowService.$currentSteps.set(updated);\r\n } else {\r\n // ✅ In-place mutation is fine for nested groups\r\n this.grandParentSteps.splice(stepIndex, 1);\r\n this.coreWorkflowService.$currentSteps.set(structuredClone(this.coreWorkflowService.$currentSteps()));\r\n }\r\n\r\n return;\r\n }\r\n\r\n // 🧠 Still re-trigger signal to reflect nested change in UI\r\n this.coreWorkflowService.autoReassignPriorities(this.conditionalBranches);\r\n this.coreWorkflowService.$currentSteps.set(structuredClone(this.coreWorkflowService.$currentSteps()));\r\n }\r\n\r\n onDeleteStep(): void {\r\n if (!this.stepGroup) return;\r\n\r\n const index = this.stepGroup.findIndex(s => s.id === this.step.id);\r\n if (index === -1) return;\r\n\r\n if (this.isRootLevelStepGroup) {\r\n this.coreWorkflowService.updateStepsSignalAfterNestedChange(this.coreWorkflowService.$currentSteps, draft => {\r\n draft.splice(index, 1);\r\n });\r\n } else {\r\n this.stepGroup.splice(index, 1); // nested mutation still allowed (e.g., in branch)\r\n this.coreWorkflowService.updateStepsSignalAfterNestedChange(this.coreWorkflowService.$currentSteps, _ => { }); // triggers reactivity\r\n }\r\n }\r\n\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n\r\n })\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 openConditionEditor(): void {\r\n this.coreWorkflowService.$currentStep.set(this.step);\r\n this.coreWorkflowService.$showStepConfig.set(true);\r\n }\r\n\r\n /*\r\n openNoneBranchRelatedEditor(): void {\r\n this.coreWorkflowService.$currentStep.set(this.step);\r\n this.coreWorkflowService.$showStepConfig.set(true);\r\n } \r\n */\r\n\r\n /*\r\n openNoneBranchRelatedEditor(): void {\r\n\r\n const steps = this.coreWorkflowService.$currentSteps();\r\n console.log(\"$currentSteps\", steps);\r\n console.log('🧪 Raw step found:', JSON.stringify(steps.find(s => s.id === this.step.id), null, 2));\r\n\r\n\r\n const filter = this.coreWorkflowService.$currentSteps().filter(x => x.id === this.step.id);\r\n if (filter.length === 1) {\r\n const step = filter[0];\r\n this.coreWorkflowService.$currentStep.set(step);\r\n this.coreWorkflowService.$showStepConfig.set(true);\r\n }\r\n }\r\n */\r\n\r\n openNoneBranchRelatedEditor(): void {\r\n const steps = this.coreWorkflowService.$currentSteps();\r\n\r\n const found = this.coreWorkflowService.findStepRecursive(steps, this.step.id);\r\n\r\n console.log(\"🧪 Step found:\", found);\r\n\r\n if (found) {\r\n this.coreWorkflowService.$currentStep.set(found);\r\n this.coreWorkflowService.$showStepConfig.set(true);\r\n } else {\r\n console.warn(`Step with id=${this.step.id} not found in workflow tree`);\r\n }\r\n }\r\n\r\n}\r\n","@switch (step.type) {\r\n\r\n @case (enumType.ConditionalBranch) {\r\n <div class=\"wf-branch-group-container\">\r\n <div \r\n class=\"branch-group\" \r\n #branchGroup \r\n bridgeLine\r\n (bridgeLinesAdjusted)=\"adjustBridgeLines()\"\r\n >\r\n <!-- 🔹 Top Bridge Line -->\r\n <div class=\"horizontal-bridge-line\" #topBridgeLine></div>\r\n\r\n <div class=\"add-branch-inline\" [appTooltip]=\"'All conditional branches are checked from Left to Right in a strict order'\" [showAnyway]=\"true\">\r\n <button class=\"add-branch-btn\" (click)=\"coreWorkflowService.addBranchToStep(step.id)\">\r\n + Add New Branch\r\n </button>\r\n </div>\r\n\r\n \r\n @for (branch of step.branches; track $index; let j = $index) {\r\n <div class=\"branch-column\" #branchColumn>\r\n <div class=\"branch-column-inner\">\r\n \r\n @for (bstep of branch.steps; track $index; let k = $index) {\r\n <wf-node\r\n [branchId]=\"branch.id\"\r\n [branchPriority]=\"branch.priority\"\r\n [step]=\"bstep\"\r\n [conditionalBranches]=\"step.branches || []\"\r\n [stepGroup]=\"branch.steps\"\r\n [grandParentSteps]=\"stepGroup\"\r\n [index]=\"k\"\r\n [isInFallbackBranch]=\"!!branch.isFallback\"\r\n ></wf-node>\r\n }\r\n \r\n </div>\r\n \r\n <div class=\"vertical-bridge-line\"></div>\r\n </div>\r\n }\r\n \r\n <!-- 🔹 Bottom Bridge Line -->\r\n <div class=\"horizontal-bridge-line\" #bottomBridgeLine></div>\r\n </div>\r\n </div>\r\n }\r\n \r\n @case (enumType.BranchCard) {\r\n <div class=\"wf-step-container wf-branch-card-container workflow-box\">\r\n <div class=\"step-wrapper branch-card-wrapper\" [class.fallback]=\"!!isInFallbackBranch\">\r\n <div class=\"arrow-down-container\">\r\n <div class=\"arrow-down\"></div>\r\n </div>\r\n \r\n <div class=\"step-header branch-header\" [class.edit-mode]=\"stepNameEditMode\" #branchHeader>\r\n @if (stepNameEditMode) {\r\n <div class=\"input-wrapper\">\r\n <input class=\"form-control\" \r\n (blur)=\"onInputBlur()\" \r\n [(ngModel)]=\"step.name\"\r\n (ngModelChange)=\"onStepNameChanged($event)\" \r\n #input>\r\n </div>\r\n } @else {\r\n <div class=\"step-name-wrapper branch-name-wrapper\">\r\n <div\r\n class=\"step-name branch-name\"\r\n [class.pointer]=\"!isInFallbackBranch\"\r\n (click)=\"switchToNameEditMode()\"\r\n #branchName>\r\n {{ step.name }}\r\n </div>\r\n \r\n @if (!!isInFallbackBranch) {\r\n <i class=\"ti-info-alt\"\r\n [appTooltip]=\"'This branch is created by default and will only be activated if none of the other branches can be executed.'\"\r\n [showAnyway]=\"true\" [position]=\"'above'\"></i>\r\n }\r\n </div>\r\n \r\n <div class=\"branch-priority\">Priority {{ branchPriority }}</div>\r\n <div class=\"step-delete branch-delete pointer\" (click)=\"onDeleteBranch(branchId)\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"step-set-config branch-set-condition\" [class.pointer]=\"!isInFallbackBranch\">\r\n @if (!!isInFallbackBranch) {\r\n <div class=\"branch-subtext fallback\"\r\n [appTooltip]=\"'If other branches are not met, the alternative branch will be executed'\"\r\n [showAnyway]=\"true\" [position]=\"'above'\">\r\n If other branches are not met, the alternative branch will be executed\r\n </div>\r\n } @else {\r\n <div class=\"step-subtext branch-subtext\" (click)=\"openConditionEditor()\">Set conditions</div>\r\n <div><i class=\"feather-chevron-right\"></i></div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- The handler node applies to the situation where no approval is required, but a member needs to process something:\r\n💰 Financial payment,\r\n📎 Stamping,\r\n🗂 Document filing, and so on. -->\r\n \r\n @default() {\r\n <div class=\"wf-step-container workflow-box {{ step.type.toLowerCase() }}\">\r\n\r\n <div class=\"step-wrapper\">\r\n \r\n <div class=\"step-header\" [class.edit-mode]=\"stepNameEditMode\">\r\n @if (stepNameEditMode) {\r\n <div class=\"input-wrapper\">\r\n <input class=\"form-control\" \r\n (blur)=\"onInputBlur()\" \r\n [(ngModel)]=\"step.name\" \r\n (ngModelChange)=\"onStepNameChanged($event)\" \r\n #input>\r\n </div>\r\n } @else {\r\n <div class=\"step-name-wrapper\">\r\n <div\r\n class=\"step-name pointer\"\r\n (click)=\"switchToNameEditMode()\"\r\n #stepName>\r\n {{ step.name }}\r\n </div>\r\n @if (step.type === enumType.Handle) {\r\n <i class=\"ti-info-alt pointer\"\r\n [appTooltip]=\"'The handler node applies to the situation where no approval is required, but a member needs to process something (Financial payment, Stamping, Document filing, and so on.)'\"\r\n [showAnyway]=\"true\" [position]=\"'above'\"></i>\r\n }\r\n </div>\r\n \r\n <div class=\"step-delete pointer\" (click)=\"onDeleteStep()\" [class.d-none]=\"step.type === enumType.Submit || step.type === enumType.End\">\r\n <i class=\"feather-x\" ></i>\r\n </div>\r\n }\r\n </div>\r\n \r\n <div class=\"step-set-config pointer\" (click)=\"openNoneBranchRelatedEditor()\">\r\n <div class=\"step-subtext pointer\" [class.configurated]=\"!!step.config\" [appTooltip]=\"step | wfNodeLabel\">{{ step | wfNodeLabel }}</div>\r\n <div><i class=\"feather-chevron-right\"></i></div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n}\r\n \r\n@if (step.type !== enumType.End) {\r\n <wf-bottom-v-insert\r\n [currentContext]=\"{ branchId: step.branchId, index: index + 1 }\"\r\n [currentStep]=\"step\"\r\n ></wf-bottom-v-insert>\r\n}\r\n ","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\r\nimport { CoreWorkflowService } from '../../core-workflow.service';\r\nimport { BaseComponent } from '../../../base-component/base/base.component';\r\n\r\n@Component({\r\n selector: 'wf-steps-preview',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [],\r\n templateUrl: './wf-steps-preview.component.html',\r\n styleUrl: './wf-steps-preview.component.scss'\r\n})\r\nexport class WfStepsPreviewComponent extends BaseComponent {\r\n\r\n public wfs = inject(CoreWorkflowService);\r\n\r\n close(): void {\r\n this.wfs.$showCurrentStepsPreview.set(false);\r\n }\r\n\r\n}\r\n","<div class=\"wf-steps-preview-container\">\r\n\r\n <div class=\"wf-steps-preview-header\">\r\n <div class=\"panel-title\">\r\n All Steps Json\r\n </div>\r\n <div class=\"close-wrapper\" (click)=\"close()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n\r\n @if (wfs.$stepsJsonPreview()) {\r\n <pre class=\"json-preview\">{{ wfs.$stepsJsonPreview() }}</pre>\r\n } @else {\r\n <div class=\"empty-preview\">No steps to preview</div>\r\n }\r\n\r\n</div>","import { AsyncPipe, LowerCasePipe, NgStyle, NgTemplateOutlet } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, ElementRef, inject, input, OnDestroy, signal, viewChild, WritableSignal } from '@angular/core';\r\nimport { IStep } from '../interfaces/IStep';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\nimport { EnumWorkflowStepType } from '../enums/EnumWorkflowStepType';\r\nimport { WfInsertMenuComponent } from './wf-insert-menu/wf-insert-menu.component';\r\nimport { WfBottomVInsertComponent } from './wf-bottom-v-insert/wf-bottom-v-insert.component';\r\nimport { WfStepConfigShellComponent } from './wf-step-config-shell/wf-step-config-shell.component';\r\nimport { IInsertStepEvent } from '../interfaces/IInsertStepEvent';\r\nimport { IWorkflowInsertPoint } from '../interfaces/IWorkflowInsertPoint';\r\nimport { ROOT_BRANCH_ID } from '../enums/EnumWorkflowBranch';\r\nimport { IWorkflowBranch } from '../interfaces/IWorkflowBranch';\r\nimport { WfNodeComponent } from './wf-node/wf-node.component';\r\nimport { BaseComponent } from '../../base-component/base/base.component';\r\nimport { MultiLanguageService } from '../../../services/multi-language.service';\r\nimport { HotKeysDirective } from '../../../directives/hot-keys.directive';\r\nimport { ApplicationHelpService } from '../../../services/application-help.service';\r\nimport { distinctUntilChanged } from 'rxjs';\r\nimport { WfStepsPreviewComponent } from './wf-steps-preview/wf-steps-preview.component';\r\nimport { DomService } from '../../services/dom.service';\r\nimport { TooltipDirective } from '../../tooltip/tooltip.directive';\r\n\r\n@Component({\r\n selector: 'wf-workflow-canvas',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n AsyncPipe,\r\n NgStyle,\r\n HotKeysDirective,\r\n TooltipDirective,\r\n NgTemplateOutlet,\r\n LowerCasePipe,\r\n WfInsertMenuComponent,\r\n WfBottomVInsertComponent,\r\n WfInsertMenuComponent,\r\n WfStepConfigShellComponent,\r\n WfNodeComponent,\r\n WfStepsPreviewComponent\r\n ],\r\n templateUrl: './wf-workflow-canvas.component.html',\r\n styleUrl: './wf-workflow-canvas.component.scss'\r\n})\r\nexport class WfWorkflowCanvasComponent extends BaseComponent implements AfterViewInit, OnDestroy {\r\n\r\n $width: WritableSignal<number> = signal(0);\r\n $height: WritableSignal<number> = signal(0);\r\n\r\n $container = viewChild<ElementRef>('container');\r\n $printArea = viewChild<ElementRef>('printArea');\r\n $zoomTools = viewChild<ElementRef>('zoomTools');\r\n $parent = viewChild<ElementRef>('parent');\r\n\r\n hotKeys: string[] = ['F3', 'Escape']\r\n\r\n enumType = EnumWorkflowStepType;\r\n ROOT_BRANCH_ID = ROOT_BRANCH_ID;\r\n\r\n public wfs = inject(CoreWorkflowService);\r\n $steps = this.wfs.$currentSteps;\r\n applicationHelpService = inject(ApplicationHelpService);\r\n domService = inject(DomService);\r\n\r\n insertIndex: number | null = null;\r\n\r\n $previewZIndex: WritableSignal<number> = signal(this.domService.getMaxZIndex() + 1);\r\n\r\n $scale: WritableSignal<number> = signal(1);\r\n $scalePercent = computed(() => `${Math.round(this.$scale() * 100)}%`);\r\n cdr = inject(ChangeDetectorRef);\r\n\r\n $mouseDown = signal(false);\r\n $isDragging = computed(() => this.$mouseDown())\r\n $startX: WritableSignal<any> = signal(undefined);\r\n $scrollLeft: WritableSignal<any> = signal(undefined);\r\n $startY: WritableSignal<any> = signal(undefined);\r\n $scrollTop: WritableSignal<any> = signal(undefined);\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n effect(() => {\r\n this.$container()?.nativeElement.style.setProperty('--standard-connector-height', this.wfs.standardConnectorHeight + 'px');\r\n })\r\n this.subscriptions.push(\r\n this.applicationHelpService.activeKey$\r\n .pipe(\r\n distinctUntilChanged()\r\n )\r\n .subscribe(x => {\r\n console.log(\"x\", x)\r\n switch (x) {\r\n case 'F3':\r\n this.wfs.$showCurrentStepsPreview.set(true);\r\n break;\r\n case 'Escape':\r\n this.wfs.$currentStep.set(null);\r\n this.wfs.$showCurrentStepsPreview.set(false);\r\n this.wfs.$showStepConfig.set(false)\r\n break;\r\n }\r\n })\r\n )\r\n }\r\n\r\n startDragging(e: any, flag: any) {\r\n this.$mouseDown.set(true);\r\n this.$startX.set(e.pageX - this.$parent()?.nativeElement.offsetLeft);\r\n this.$scrollLeft.set(this.$parent()?.nativeElement.scrollLeft);\r\n this.$startY.set(e.pageY - this.$parent()?.nativeElement.offsetTop);\r\n this.$scrollTop.set(this.$parent()?.nativeElement.scrollTop);\r\n }\r\n\r\n stopDragging(e: any, flag: any) {\r\n this.$mouseDown.set(false);\r\n }\r\n\r\n moveEvent(e: any) {\r\n e.preventDefault();\r\n if (!this.$mouseDown()) {\r\n return;\r\n }\r\n const x = e.pageX - this.$parent()?.nativeElement.offsetLeft;\r\n const scrollX = x - this.$startX();\r\n this.$parent()!.nativeElement.scrollLeft = this.$scrollLeft() - scrollX;\r\n const y = e.pageY - this.$parent()?.nativeElement.offsetTop;\r\n const scrollY = y - this.$startY();\r\n this.$parent()!.nativeElement.scrollTop = this.$scrollTop() - scrollY;\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.wfs.$showStepConfig.set(false);\r\n this.wfs.$showCurrentStepsPreview.set(false);\r\n setTimeout(() => {\r\n this.wfs.$initialProcessDesignJson.set(this.wfs.$stepsJsonPreview());\r\n }, 1000)\r\n }\r\n\r\n findBranchById(branchId: string, steps: IStep[] = this.wfs.$currentSteps()): IWorkflowBranch | undefined {\r\n for (const step of steps) {\r\n if (step.type === EnumWorkflowStepType.ConditionalBranch && step.branches) {\r\n // ✅ step.branches is now just an array\r\n const found = step.branches.find(b => b.id === branchId);\r\n if (found) return found;\r\n\r\n // 🔁 Recurse into steps of each branch\r\n for (const branch of step.branches) {\r\n const deep = this.findBranchById(branchId, branch.steps);\r\n if (deep) return deep;\r\n }\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n\r\n // safeInsertStep(\r\n // branchId: string | null,\r\n // index: number,\r\n // newStep: IStep\r\n // ): void {\r\n // if (branchId === null || branchId === ROOT_BRANCH_ID) {\r\n // this.$steps.update(steps => {\r\n // const copy = [...steps];\r\n // copy.splice(index, 0, newStep);\r\n // return copy;\r\n // })\r\n // return;\r\n // }\r\n\r\n // const branch = this.findBranchById(branchId);\r\n // if (!branch) {\r\n // console.warn(`❗ Cannot insert: Branch with ID \"${branchId}\" not found.`);\r\n // return;\r\n // }\r\n\r\n // branch.steps.splice(index, 0, newStep);\r\n\r\n // // ✅ now update $steps based on branch changes\r\n // this.$steps.update(steps => {\r\n // const copy = structuredClone(steps); // deep clone of old tree\r\n // const targetBranch = this.findBranchById(branchId, copy);\r\n // if (!targetBranch) {\r\n // console.warn(`❗ Cannot insert: Branch with ID \"${branchId}\" not found.`);\r\n // return steps;\r\n // }\r\n\r\n // targetBranch.steps.splice(index, 0, newStep); // mutate clone only\r\n // return copy; // return fresh tree\r\n // });\r\n\r\n\r\n // }\r\n\r\n\r\n safeInsertStep(\r\n branchId: string | null,\r\n index: number,\r\n newStep: IStep\r\n ): void {\r\n \r\n if (branchId === null || branchId === ROOT_BRANCH_ID) {\r\n this.$steps.update(steps => {\r\n const copy = [...steps];\r\n copy.splice(index, 0, newStep);\r\n return copy;\r\n });\r\n return;\r\n }\r\n\r\n this.$steps.update(steps => {\r\n const copy = structuredClone(steps);\r\n const targetBranch = this.findBranchById(branchId, copy);\r\n if (!targetBranch) {\r\n console.warn(`❗ Cannot insert: Branch with ID \"${branchId}\" not found.`);\r\n return steps;\r\n }\r\n\r\n const safeIndex = Math.min(Math.max(index, 0), targetBranch.steps.length);\r\n const stepToInsert = structuredClone(newStep);\r\n\r\n targetBranch.steps.splice(safeIndex, 0, stepToInsert);\r\n return copy;\r\n });\r\n\r\n }\r\n\r\n\r\n insertStep(event: IInsertStepEvent) {\r\n const { type, index, branchId } = event;\r\n\r\n if (!branchId) {\r\n console.error(`insertStep error: without branchId`)\r\n return;\r\n };\r\n\r\n let newStep: IStep;\r\n\r\n switch (type) {\r\n case EnumWorkflowStepType.Approval:\r\n newStep = this.wfs.createStep(type, branchId, 'Set approver');\r\n break;\r\n case EnumWorkflowStepType.CC:\r\n newStep = this.wfs.createStep(type, branchId, 'Set cc recipients');\r\n break;\r\n case EnumWorkflowStepType.Handle:\r\n newStep = this.wfs.createStep(type, branchId, 'Set handler');\r\n break;\r\n case EnumWorkflowStepType.ConditionalBranch:\r\n newStep = this.wfs.createConditionalBranchStep(branchId);\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n this.safeInsertStep(branchId, index, newStep);\r\n\r\n this.wfs.insertContext$.next(null);\r\n }\r\n\r\n showInsertInBranch(context: IWorkflowInsertPoint): void {\r\n this.wfs.insertContext$.next(context);\r\n }\r\n\r\n insertIntoBranch(event: IInsertStepEvent): void {\r\n const { branchId, type, index } = event;\r\n\r\n if (!branchId) {\r\n console.error(`insertStep error: missing branchId`);\r\n return;\r\n }\r\n\r\n // 🔍 Find the branch that matches the given ID\r\n const branch = this.findBranchById(branchId);\r\n if (!branch) {\r\n console.warn(`Branch not found: ${branchId}`);\r\n return;\r\n }\r\n\r\n let newStep: IStep;\r\n\r\n switch (type) {\r\n case EnumWorkflowStepType.Approval:\r\n newStep = this.wfs.createStep(type, branchId, 'Set approver');\r\n break;\r\n case EnumWorkflowStepType.CC:\r\n newStep = this.wfs.createStep(type, branchId, 'Set cc recipients');\r\n break;\r\n case EnumWorkflowStepType.Handle:\r\n newStep = this.wfs.createStep(type, branchId, 'Set handler');\r\n break;\r\n case EnumWorkflowStepType.ConditionalBranch:\r\n newStep = this.wfs.createConditionalBranchStep(branchId);\r\n break;\r\n default:\r\n console.warn(`Unsupported step type: ${type}`);\r\n return;\r\n }\r\n\r\n // ✅ Insert into the correct step list\r\n branch.steps.splice(index, 0, newStep);\r\n\r\n // 🧹 Clear insert state\r\n this.wfs.insertContext$.next(null);\r\n }\r\n\r\n private findStepRecursive(steps: IStep[], targetId: string): IStep | null {\r\n for (const step of steps) {\r\n if (step.id === targetId) return step;\r\n\r\n // ✅ New model: step.branches is directly an array\r\n if (step.type === EnumWorkflowStepType.ConditionalBranch && step.branches) {\r\n for (const branch of step.branches) {\r\n const found = this.findStepRecursive(branch.steps, targetId);\r\n if (found) return found;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n addBranchToConditional(conditionalStepId: string) {\r\n const conditional = this.findStepRecursive(this.wfs.$currentSteps(), conditionalStepId);\r\n\r\n if (!conditional || conditional.type !== EnumWorkflowStepType.ConditionalBranch || !conditional.branches) return;\r\n\r\n const branches = conditional.branches;\r\n\r\n const newBranchId = crypto.randomUUID();\r\n const name = `Condition ${branches.length}`;\r\n\r\n const newBranch: IWorkflowBranch = {\r\n id: newBranchId,\r\n name,\r\n priority: branches.length + 1,\r\n steps: [\r\n {\r\n id: `pseudo-${newBranchId}`,\r\n name: `pseudo-${newBranchId}`,\r\n branchId: newBranchId,\r\n type: EnumWorkflowStepType.BranchCard,\r\n label: name,\r\n isPseudo: true\r\n },\r\n {\r\n id: crypto.randomUUID(),\r\n name: `default-approval-${branches.length + 1}`,\r\n branchId: newBranchId,\r\n type: EnumWorkflowStepType.Approval,\r\n label: `Approve ${branches.length + 1}`\r\n }\r\n ]\r\n };\r\n\r\n const fallbackIndex = branches.findIndex(b => b.isFallback);\r\n\r\n if (fallbackIndex !== -1) {\r\n branches.splice(fallbackIndex, 0, newBranch);\r\n } else {\r\n branches.push(newBranch);\r\n }\r\n\r\n this.wfs.autoReassignPriorities(branches);\r\n }\r\n\r\n deleteBranchGroup(stepId: string): void {\r\n const step = this.wfs.$currentSteps().find(s => s.id === stepId);\r\n\r\n if (step?.type === EnumWorkflowStepType.ConditionalBranch) {\r\n const index = this.wfs.$currentSteps().indexOf(step);\r\n if (index !== -1) {\r\n this.$steps.update(steps => {\r\n const copy = [...steps];\r\n copy.splice(index, 1);\r\n return copy;\r\n })\r\n }\r\n }\r\n }\r\n\r\n tempOnLabelClicked(): void {\r\n this.wfs.$showStepConfig.set(true);\r\n }\r\n\r\n onInsert(event: IInsertStepEvent): void {\r\n // Delegate to CoreWorkflowService or your working tree logic\r\n this.insertStep(event);\r\n this.clearInsertContext(); // clean up\r\n }\r\n\r\n clearInsertContext(): void {\r\n this.wfs.insertContext$.next(null);\r\n }\r\n\r\n showStepsJSON(): void {\r\n this.wfs.$showCurrentStepsPreview.set(true);\r\n }\r\n\r\n zoonIn(): void {\r\n this.$scale.set(this.$scale() * 1.1);\r\n this.$container()!.nativeElement.style.setProperty('--print-area-scale', this.$scale())\r\n }\r\n\r\n zoonOut(): void {\r\n this.$scale.set(this.$scale() / 1.1);\r\n this.$container()!.nativeElement.style.setProperty('--print-area-scale', this.$scale())\r\n }\r\n\r\n zoonFeat(): void {\r\n this.$scale.set(1);\r\n this.$container()!.nativeElement.style.setProperty('--print-area-scale', this.$scale())\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=\"wf-workflow-canvas-container\" #container [hotKeys]=\"hotKeys\"\r\n (mousedown)=\"startDragging($event, false)\"\r\n (mouseup)=\"stopDragging($event, false)\" \r\n (mouseleave)=\"stopDragging($event, false)\" \r\n (mousemove)=\"moveEvent($event)\"\r\n>\r\n\r\n <div class=\"canvas-top-tool\">\r\n <button type=\"button\" class=\"btn btn-secondary\"\r\n [appTooltip]=\"'Press F3 to show, Escape to hide'\"\r\n [showAnyway]=\"true\"\r\n (click)=\"showStepsJSON()\"\r\n >Show JSON</button>\r\n </div> \r\n\r\n <div class=\"zoom-tools\" #zoomTools>\r\n <div class=\"tools-wrapper\">\r\n <button type=\"button\" class=\"zoom-btn\" (click)=\"zoonOut()\">\r\n <span class=\"universe-icon\"><i class=\"feather-zoom-out\"></i></span>\r\n </button>\r\n <button type=\"button\" class=\"zoom-label\">\r\n {{ $scalePercent() }}\r\n </button>\r\n <button type=\"button\" class=\"zoom-btn\" (click)=\"zoonIn()\">\r\n <span class=\"universe-icon\"><i class=\"feather-zoom-in\"></i></span>\r\n </button>\r\n <button type=\"button\" class=\"zoom-btn\" (click)=\"zoonFeat()\">\r\n <span class=\"universe-icon\"><i class=\"feather-zap\"></i></span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"scroll-container\" #parent [ngStyle]=\"{ cursor: $mouseDown() ? 'all-scroll' : 'unset', width: $width() ? $width() + 'px' : '100%', height: $height() ? $height() + 'px' : 'unset'}\">\r\n\r\n <div class=\"canvas print-area\" #printArea [class.is-dragging]=\"$isDragging()\">\r\n\r\n @for (step of wfs.$currentSteps(); track $index; let i = $index) {\r\n <div class=\"step\">\r\n <wf-node\r\n [branchId]=\"'root'\"\r\n [branchPriority]=\"1\"\r\n [step]=\"step\"\r\n [stepGroup]=\"wfs.$currentSteps()\"\r\n [index]=\"i\"\r\n [isRootLevelStepGroup]=\"true\"\r\n ></wf-node>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n @if (!!(wfs.insertContext$ | async)) {\r\n <wf-insert-menu (insert)=\"insertStep($event)\"></wf-insert-menu>\r\n }\r\n\r\n <wf-step-config-shell></wf-step-config-shell>\r\n\r\n <div class=\"steps-preview\" [class.shown]=\"wfs.$showCurrentStepsPreview()\"\r\n [ngStyle]=\"{\r\n zIndex: $previewZIndex()\r\n }\"\r\n >\r\n <wf-steps-preview></wf-steps-preview>\r\n </div>\r\n \r\n\r\n</div>","import { AfterViewInit, ChangeDetectionStrategy, Component, inject, OnDestroy } from '@angular/core';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\nimport { AsyncPipe } from '@angular/common';\r\nimport { WfWorkflowCanvasComponent } from './wf-workflow-canvas.component'\r\nimport { BaseComponent } from '../../base-component/base/base.component';\r\nimport { MultiLanguageService } from '../../../services/multi-language.service';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { CoreToastLoadingComponent } from '../../core-toast-loading/core-toast-loading.component';\r\n\r\n@Component({\r\n selector: 'wf-process-design',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n AsyncPipe,\r\n WfWorkflowCanvasComponent,\r\n CoreToastLoadingComponent\r\n ],\r\n templateUrl: './wf-process-design.component.html',\r\n styleUrl: './wf-process-design.component.scss'\r\n})\r\nexport class WfProcessDesignComponent extends BaseComponent {\r\n\r\n wfs = inject(CoreWorkflowService);\r\n $loading = this.wfs.$loading;\r\n \r\n\r\n constructor(\r\n public override mls: MultiLanguageService,\r\n private route: ActivatedRoute,\r\n ) {\r\n super(mls);\r\n }\r\n\r\n}\r\n","<div class=\"wf-process-design-container\">\r\n\r\n @if (!!wfs.$currentFlow()) {\r\n <wf-workflow-canvas></wf-workflow-canvas>\r\n }\r\n\r\n @if ($loading()) {\r\n <core-toast-loading></core-toast-loading>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, inject, Input, OnInit } from '@angular/core';\r\nimport { BaseEditComponent } from '../../base-edit/base-edit/base-edit.component';\r\nimport { CoreFormDesignService } from '../../core-form-design/core-form-design.service';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\nimport { AlertService } from '../../alert/alert.service';\r\nimport { DialogService } from '../../../services/dialog.service';\r\nimport { BehaviorSubject, Subscription } from 'rxjs';\r\nimport { CoreFormComponent, IDynamicFormEmitOnFormCreated } from '../../core-form/core-form/core-form.component';\r\nimport { Validators } from '@angular/forms';\r\nimport { EnumTranslateKey } from 'alpha-global-constants';\r\nimport { EnumFormBaseContolType } from '../../../enum/EnumFormBaseContolType';\r\nimport { ICoreFormSection } from '../../core-form/core-form/enum-interfaces';\r\nimport { EnumCorePageEditMode } from '../../core-page-edit/EnumCorePageEditMode';\r\nimport { MultiLanguageService } from '../../../services/multi-language.service';\r\nimport { alertOptions } from '../../../constants/alertOptions';\r\n\r\nconst EMAIL_ICON = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-mail\"><path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\"/><polyline points=\"22,6 12,13 2,6\"/></svg>'\r\nconst TEMPLATE_TYPES = [\r\n { key: 'submit', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBMIT' },\r\n { key: 'react', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_REACT' },\r\n { key: 'selfReact', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SELF_REACT' },\r\n { key: 'fullyApprove', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_FULLY_APPROVE' },\r\n { key: 'reject', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_REJECT' },\r\n { key: 'cancel', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_CANCEL' },\r\n { key: 'terminate', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_TERMINATE' },\r\n { key: 'revoke', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_REVOKE' },\r\n { key: 'cc', caption: 'UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_CC' }\r\n]\r\n\r\n@Component({\r\n selector: 'wf-email-templates',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CoreFormComponent,\r\n ],\r\n templateUrl: './wf-email-templates.component.html',\r\n styleUrl: './wf-email-templates.component.scss'\r\n})\r\nexport class WfEmailTemplatesComponent extends BaseEditComponent implements OnInit {\r\n @Input() captionCode!: string;\r\n public wfs = inject(CoreWorkflowService);\r\n alertService = inject(AlertService);\r\n fds = inject(CoreFormDesignService);\r\n mls = inject(MultiLanguageService);\r\n as = inject(AlertService);\r\n\r\n lang!: string;\r\n\r\n $wysGroups = computed(() => this.fds.extractWysGroups(this.fds.$placeholderSections()))\r\n\r\n mode$ = new BehaviorSubject<EnumCorePageEditMode>(EnumCorePageEditMode.CREATE)\r\n\r\n availableTokens: string[] = ['webappStatusUrl','portalStatusUrl','webappReactUrl','portalReactUrl','workflowName' ,'firstActorFullName','submitterFullName','actorFullName']\r\n\r\n constructor(\r\n public override dialogService: DialogService,\r\n ) {\r\n\r\n super(dialogService);\r\n\r\n if (!this.captionCode) {\r\n this.captionCode = \"UI_COMPONENT_TITLE_WF_WORKFLOW_EMAIL_TEMPLATES\";\r\n }\r\n\r\n this.subscriptions.push(\r\n this.mls.lang$.subscribe(x => this.lang = x)\r\n )\r\n\r\n }\r\n\r\n loading: boolean = false;\r\n override entityTable = \"WF_WORKFLOW\";\r\n subscriptions: Subscription[] = [];\r\n\r\n // sections: ICoreFormSection[] = \r\n // [\r\n // {\r\n // caption: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_REACT\",\r\n // iconSvg: EMAIL_ICON,\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 0,\r\n // label: \"UI_ENTITY_FIELD_CAPTION_COMMON_ID\",\r\n // field: 'id',\r\n // value: null,\r\n // hidden: true,\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // },\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBJECT\",\r\n // field: 'reactSubject',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ],\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_BODY\",\r\n // field: 'reactBody',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTAREA,\r\n // textareaRows: 5,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ]\r\n // ]\r\n // },\r\n // {\r\n // caption: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_FULLY_APPROVE\",\r\n // iconSvg: EMAIL_ICON,\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBJECT\",\r\n // field: 'fullyApproveSubject',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ],\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_BODY\",\r\n // field: 'fullyApproveBody',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTAREA,\r\n // textareaRows: 5,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ]\r\n // ]\r\n // },\r\n // {\r\n // caption: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_REJECT\",\r\n // iconSvg: EMAIL_ICON,\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBJECT\",\r\n // field: 'rejectSubject',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ],\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_BODY\",\r\n // field: 'rejectBody',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTAREA,\r\n // textareaRows: 5,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ]\r\n // ]\r\n // },\r\n // {\r\n // caption: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_CANCEL\",\r\n // iconSvg: EMAIL_ICON,\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBJECT\",\r\n // field: 'cancelSubject',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ],\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_BODY\",\r\n // field: 'cancelBody',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTAREA,\r\n // textareaRows: 5,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ]\r\n // ]\r\n // },\r\n // {\r\n // caption: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_TERMINATE\",\r\n // iconSvg: EMAIL_ICON,\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBJECT\",\r\n // field: 'terminateSubject',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ],\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_BODY\",\r\n // field: 'terminateBody',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTAREA,\r\n // textareaRows: 5,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ]\r\n // ]\r\n // },\r\n // {\r\n // caption: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_REVOKE\",\r\n // iconSvg: EMAIL_ICON,\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBJECT\",\r\n // field: 'revokeSubject',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ],\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_BODY\",\r\n // field: 'revokeBody',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTAREA,\r\n // textareaRows: 5,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ]\r\n // ]\r\n // },\r\n // {\r\n // caption: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_CC\",\r\n // iconSvg: EMAIL_ICON,\r\n // rows: [\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBJECT\",\r\n // field: 'ccSubject',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTBOX,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ],\r\n // [\r\n // {\r\n // flexSize: 12,\r\n // label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_BODY\",\r\n // field: 'ccBody',\r\n // value: '',\r\n // controlType: EnumFormBaseContolType.TEXTAREA,\r\n // textareaRows: 5,\r\n // type: 'string',\r\n // validators: [\r\n // {\r\n // name: 'minLength',\r\n // validator: Validators.minLength(4),\r\n // errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n // }\r\n // ]\r\n // },\r\n // ]\r\n // ]\r\n // },\r\n // ];\r\n\r\n sections!: ICoreFormSection[];\r\n\r\n ngOnInit(): void {\r\n this.sections = TEMPLATE_TYPES.map(type => ({\r\n caption: type.caption,\r\n iconSvg: EMAIL_ICON,\r\n rows: [\r\n [\r\n {\r\n flexSize: 12,\r\n label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_SUBJECT\",\r\n field: `${type.key}Subject`,\r\n value: '',\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n textareaRows: 2,\r\n type: 'string',\r\n validators: [\r\n {\r\n name: 'minLength',\r\n validator: Validators.minLength(4),\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n }\r\n ]\r\n }\r\n ],\r\n [\r\n {\r\n flexSize: 12,\r\n label: \"UI_WORKFLOW_EMAIL_TEMPLATE_SECTION_BODY\",\r\n field: `${type.key}Body`,\r\n value: '',\r\n controlType: EnumFormBaseContolType.LIQUID_WYSIWYG,\r\n textareaRows: 5,\r\n type: 'string',\r\n showLiquidSourceOnly: true,\r\n isForWorkflowEmail: true,\r\n validators: [\r\n {\r\n name: 'minLength',\r\n validator: Validators.minLength(4),\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n }\r\n ]\r\n }\r\n ]\r\n ]\r\n }));\r\n\r\n // for compatibility\r\n this.sections[0].rows[0].push(\r\n {\r\n field: \"id\",\r\n label: '',\r\n type: 'string',\r\n value: '',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n hidden: true,\r\n flexSize: 0\r\n }\r\n )\r\n\r\n }\r\n\r\n copyToken(event: any, value: string, isParent: boolean = false): void {\r\n event.preventDefault();\r\n if (isParent) return;\r\n navigator.clipboard.writeText(value).then(() => {\r\n this.as.success(`\"${value}\" copied!`, alertOptions);\r\n });\r\n }\r\n\r\n onFormCreated(e: IDynamicFormEmitOnFormCreated): void {\r\n this.wfs.emailTemplatesForm = e.formGroup;\r\n }\r\n\r\n\r\n /* To allow form to be deactivated */\r\n onFormReinit(e: string): void {\r\n this.wfs.$initialEmailTemplatesJson.set(e);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscriptions.map(x => x?.unsubscribe())\r\n }\r\n}\r\n","<div style=\"height: 50px;\"></div>\r\n\r\n<label class=\"mb-2\">\r\n @if (lang==='vi') {\r\n <span>Ngữ cảnh ngoài biểu mẫu</span>\r\n } @else {\r\n <span>Non-form instance context</span>\r\n }\r\n</label>\r\n<ul class=\"tokens\">\r\n @for (token of availableTokens; track $index) {\r\n <li (click)=\"copyToken($event, token, false)\">{{ token }}</li>\r\n }\r\n</ul>\r\n<label class=\"mb-2\">\r\n @if (lang==='vi') {\r\n <span>Ngữ cảnh trong biểu mẫu</span>\r\n } @else {\r\n <span>Form instance context</span>\r\n }\r\n</label>\r\n<ul class=\"tokens\">\r\n @for (group of $wysGroups(); track $index) {\r\n <li data-level=\"parent\" [class.system-injected]=\"group.parent?.trim()?.startsWith('___')\" data-label=\"Parent\" (click)=\"copyToken($event, group.parent, !!group.children && !!group.children.length)\">\r\n {{ group.parent }}\r\n\r\n @if (!!group.children && !!group.children.length) {\r\n <ul>\r\n @for (child of group.children; track $index) {\r\n <li data-level=\"child\" data-label=\"Child\" (click)=\"copyToken($event, child, false)\">\r\n {{ child }}\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n</ul>\r\n<!-- <div ngNonBindable>\r\n Example array usage:\r\n <code>\r\n &#123;% for c in contracts___wys %&#125;\r\n &#123;&#123; c.jobName___wys &#125;&#125; - &#123;&#123; c.email___wys &#125;&#125; \r\n &#123;% endfor %&#125;\r\n </code>\r\n</div> -->\r\n\r\n<div style=\"height: 50px;\"></div>\r\n\r\n<core-form [inputSections]=\"sections\" [mode$]=\"mode$\" [hideButtons]=\"true\" [wrapEachSectionInAccordion]=\"true\"\r\n [checkError$]=\"wfs.emailTemplatesFormCheckError$\" (onFormCreated)=\"onFormCreated($event)\" />\r\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, OnInit, signal } from '@angular/core';\r\nimport { CurrentHeaderComponent } from '../wf-process-design/current-header/current-header.component';\r\nimport { Observable } from 'rxjs';\r\nimport { DialogService } from '../../../services/dialog.service';\r\nimport { EnumTranslateKey } from 'alpha-global-constants';\r\nimport { CoreWorkflowService } from '../core-workflow.service';\r\nimport { HotKeysDirective } from '../../../directives/hot-keys.directive';\r\nimport { ApplicationHelpService } from '../../../services/application-help.service';\r\nimport { NavigatorService } from '../../../services/navigator.service';\r\nimport { AsyncPipe, NgStyle } from '@angular/common';\r\n\r\nimport { WfBasicInfoComponent } from '../wf-basic-info/wf-basic-info.component';\r\nimport { CoreFormDesignComponent } from '../../core-form-design/core-form-design.component';\r\nimport { WfProcessDesignComponent } from '../wf-process-design/wf-process-design.component';\r\nimport { WfEmailTemplatesComponent } from '../wf-email-templates/wf-email-templates.component';\r\nimport { ActivatedRoute, RouterOutlet } from '@angular/router';\r\nimport { JsonService } from '../../../services/json.service';\r\nimport { CoreFormDesignService } from '../../core-form-design/core-form-design.service';\r\n\r\nimport { RoutingPreviewPanelComponent } from '../../core-workflow-builder/routing-preview-panel/routing-preview-panel.component';\r\nimport { AlertService } from '../../alert/alert.service';\r\nimport { animate, state, style, transition, trigger } from '@angular/animations';\r\n\r\n@Component({\r\n selector: 'design-wrapper',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n RouterOutlet,\r\n RoutingPreviewPanelComponent,\r\n WfBasicInfoComponent,\r\n CoreFormDesignComponent,\r\n WfProcessDesignComponent,\r\n WfEmailTemplatesComponent,\r\n NgStyle,\r\n AsyncPipe,\r\n HotKeysDirective,\r\n CurrentHeaderComponent\r\n ],\r\n templateUrl: './design-wrapper.component.html',\r\n styleUrl: './design-wrapper.component.scss',\r\n animations: [\r\n trigger('fadeSwitch', [\r\n state('visible', style({ opacity: 1 })),\r\n state('hidden', style({ opacity: 0 })),\r\n transition('hidden => visible', [animate('250ms ease-in')]),\r\n transition('visible => hidden', [animate('150ms ease-out')]),\r\n ])\r\n ]\r\n})\r\nexport class DesignWrapperComponent implements OnInit, AfterViewInit {\r\n\r\n $showInitialState = signal(false);\r\n\r\n dialogService = inject(DialogService);\r\n public wfs = inject(CoreWorkflowService);\r\n fds = inject(CoreFormDesignService);\r\n hs = inject(ApplicationHelpService);\r\n public ns = inject(NavigatorService);\r\n route = inject(ActivatedRoute);\r\n js = inject(JsonService);\r\n cdr = inject(ChangeDetectorRef);\r\n as = inject(AlertService);\r\n\r\n id!: string | undefined;\r\n\r\n constructor() {\r\n this.hs.activeKey$.subscribe(x => {\r\n switch (x) {\r\n case 'F7':\r\n this.$showInitialState.set(true);\r\n break;\r\n case 'Escape':\r\n this.$showInitialState.set(false);\r\n break;\r\n }\r\n })\r\n\r\n const id = this.route.snapshot.paramMap.get('id');\r\n if (!!id) {\r\n this.id = id;\r\n } else {\r\n this.id = undefined;\r\n }\r\n\r\n }\r\n\r\n ngOnInit(): void {\r\n this.wfs.loadByIdWithAfInstance(this.id!)\r\n this.fds.$isInWorkflowDesign.set(true);\r\n }\r\n\r\n debugClick(): void {\r\n let obj1;\r\n let obj2;\r\n try {\r\n obj1 = JSON.parse(this.wfs.$initialFormDesignJson());\r\n obj2 = JSON.parse(this.wfs.$currentFormDesignJson());\r\n } catch {\r\n alert(\"error\")\r\n }\r\n const string1 = this.wfs.$initialFormDesignJson();\r\n const string2 = this.wfs.$currentFormDesignJson();\r\n const isDifferent = string1 !== string2;\r\n if (isDifferent) {\r\n const ignoredKeys = ['selected'];\r\n const found = this.js.findFirstStringDifference(\r\n this.wfs.$initialFormDesignJson(),\r\n this.wfs.$currentFormDesignJson(),\r\n ignoredKeys,\r\n 500\r\n );\r\n\r\n if (found) {\r\n const { index, htmlA, htmlB } = found;\r\n this.js.showDiffModal(`💥 Difference at index ${index}`, htmlA, htmlB);\r\n\r\n } else {\r\n alert(\"Nigntmare!\")\r\n }\r\n\r\n } else {\r\n alert(\"There is no diffs\")\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n if (!this.wfs.$currentFlow()) {\r\n this.wfs.$currentFlow.set(this.wfs.newWorkflow())\r\n }\r\n })\r\n }\r\n\r\n canDeactivate(): Observable<boolean> | boolean {\r\n\r\n if (!this.wfs.$basicInfoChanged() && !this.wfs.$formDesignChanged() && !this.wfs.$processDesignChanged() && !this.wfs.$moreChanged()) {\r\n return true;\r\n } else {\r\n this.dialogService.busy = true;\r\n this.dialogService.showConfirmDialog$.next(true);\r\n this.dialogService.title$.next(EnumTranslateKey.UI_CORE_CONFIRM_DIALOG_TITLE);\r\n this.dialogService.body$.next(EnumTranslateKey.UI_CORE_CONFIRM_DIALOG_BODY_CHANGES_WILL_BE_LOST);\r\n this.dialogService.okButtonText$.next(EnumTranslateKey.UI_CORE_CONFIRM_DIALOG_BUTTON_CONFIRM);\r\n this.dialogService.cancelButtonText$.next(EnumTranslateKey.UI_CORE_CONFIRM_DIALOG_BUTTON_GO_BACK_TO_EDIT_FORM);\r\n const observable = this.dialogService.canDeactivate$.asObservable();\r\n return observable;\r\n }\r\n }\r\n\r\n}\r\n","<current-header></current-header>\r\n\r\n<div class=\"all-tabs\" [hotKeys]=\"['F7', 'Escape']\">\r\n\r\n <div class=\"tab-content basic-info\" [class.d-none]=\"wfs.$designActiveTab() !== 1\"\r\n [@fadeSwitch]=\"wfs.$designActiveTab() === 1 ? 'visible' : 'hidden'\"\r\n >\r\n <wf-basic-info></wf-basic-info>\r\n </div>\r\n\r\n <div class=\"tab-content form-design\" [class.d-none]=\"wfs.$designActiveTab() !== 2\"\r\n [@fadeSwitch]=\"wfs.$designActiveTab() === 2 ? 'visible' : 'hidden'\"\r\n >\r\n <core-form-design [$idAsInput]=\"true\" [$id]=\"wfs.$currentFlow()?.afInstanceId\" />\r\n </div>\r\n\r\n <div class=\"tab-content process-design\" [class.d-none]=\"wfs.$designActiveTab() !== 3\"\r\n [@fadeSwitch]=\"wfs.$designActiveTab() === 3 ? 'visible' : 'hidden'\"\r\n >\r\n <wf-process-design></wf-process-design>\r\n </div>\r\n\r\n <div class=\"tab-content more\" [class.d-none]=\"wfs.$designActiveTab() !== 4\"\r\n [@fadeSwitch]=\"wfs.$designActiveTab() === 4 ? 'visible' : 'hidden'\"\r\n >\r\n <wf-email-templates></wf-email-templates>\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<router-outlet name=\"preview\" [hotKeys]=\"['Escape']\"></router-outlet>\r\n\r\n<div class=\"state\" [class.shown]=\"$showInitialState()\"\r\n [ngStyle]=\"{ width: !!(ns.wideMode$ | async) ? 'calc(100vw - 280px - 15px)' : 'calc(100vw - 66px - 15px)' }\">\r\n\r\n <div class=\"scroll-container\">\r\n\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"debugClick()\">FormDesign Compare</button>\r\n\r\n <div class=\"tab-info\">\r\n\r\n <div class=\"value-caption\">initialBasicInfoJson:</div>\r\n <pre [class.d-none]=\"!wfs.$initialBasicInfoJson()\">{{ wfs.$initialBasicInfoJson() }}</pre>\r\n\r\n <div class=\"value-caption\">currentBasicInfoJson:</div>\r\n <pre [class.d-none]=\"!wfs.$currentBasicInfoJson()\">{{ wfs.$currentBasicInfoJson() }}</pre>\r\n\r\n </div>\r\n\r\n <div class=\"tab-info\">\r\n <div class=\"value-caption\">initialFormDesignJson:</div>\r\n <pre><code class=\"lang-json\">{{ wfs.$initialFormDesignJson() }}</code></pre>\r\n\r\n <div class=\"value-caption\">currentFormDesignJson:</div>\r\n <pre><code class=\"lang-json\">{{ wfs.$currentFormDesignJson() }}</code></pre>\r\n </div>\r\n\r\n <div class=\"tab-info\">\r\n <div class=\"value-caption\">initialProcessDesignJson:</div>\r\n <pre>{{ wfs.$initialProcessDesignJson() }}</pre>\r\n\r\n <div class=\"value-caption\">currentProcessDesignJson:</div>\r\n <pre>{{ wfs.$currentProcessDesignJson() }}</pre>\r\n </div>\r\n\r\n <div class=\"tab-info\">\r\n <div class=\"value-caption\">initialEmailTemplatesJson:</div>\r\n <pre>{{ wfs.$initialEmailTemplatesJson() }}</pre>\r\n </div>\r\n\r\n </div>\r\n\r\n</div>"],"names":["i1.MultiLanguageService","i1.DialogService","i2.AppService","i2.DomService","i2","i1.CoreWorkflowService","i1.BridgeLineService"],"mappings":"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"}