ngx-histaff-alpha 5.2.2 → 5.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{ngx-histaff-alpha-core-form-design.component-DkGU3mLc.mjs → ngx-histaff-alpha-core-form-design.component-DUH4SkB7.mjs} +29 -11
- package/fesm2022/ngx-histaff-alpha-core-form-design.component-DUH4SkB7.mjs.map +1 -0
- package/fesm2022/ngx-histaff-alpha-core-workflow-consume.component-5bEZHFsi.mjs +64 -0
- package/fesm2022/ngx-histaff-alpha-core-workflow-consume.component-5bEZHFsi.mjs.map +1 -0
- package/fesm2022/ngx-histaff-alpha-live-form.component-Cl8EQ7M8.mjs +36 -0
- package/fesm2022/ngx-histaff-alpha-live-form.component-Cl8EQ7M8.mjs.map +1 -0
- package/fesm2022/{ngx-histaff-alpha-ngx-histaff-alpha-DG1v69l1.mjs → ngx-histaff-alpha-ngx-histaff-alpha-B6dYCMll.mjs} +278 -94
- package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-B6dYCMll.mjs.map +1 -0
- package/fesm2022/{ngx-histaff-alpha-wf-basic-info.component-GP8my3qI.mjs → ngx-histaff-alpha-wf-basic-info.component-BL7fXjKU.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-wf-basic-info.component-GP8my3qI.mjs.map → ngx-histaff-alpha-wf-basic-info.component-BL7fXjKU.mjs.map} +1 -1
- package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-BuqyHWhW.mjs → ngx-histaff-alpha-wf-form-assign.component-BzsIRon0.mjs} +2 -2
- package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-BuqyHWhW.mjs.map → ngx-histaff-alpha-wf-form-assign.component-BzsIRon0.mjs.map} +1 -1
- package/fesm2022/ngx-histaff-alpha-wf-process-design.component-CQxxRCqC.mjs +1439 -0
- package/fesm2022/ngx-histaff-alpha-wf-process-design.component-CQxxRCqC.mjs.map +1 -0
- package/fesm2022/ngx-histaff-alpha.mjs +1 -1
- package/lib/app/libraries/core-button-group-vns/core-button-group-vns/EnumCoreButtonVNSCode.d.ts +2 -1
- package/lib/app/libraries/core-form/core-form/core-form.component.d.ts +2 -1
- package/lib/app/libraries/core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component.d.ts +3 -2
- package/lib/app/libraries/core-form-design/core-form-design.component.d.ts +2 -0
- package/lib/app/libraries/core-form-design/core-form-design.service.d.ts +2 -0
- package/lib/app/libraries/core-form-design/field-setting/mandatory-props/mandatory-props.component.d.ts +2 -0
- package/lib/app/libraries/core-form-design/form-metadata/form-metadata.component.d.ts +3 -1
- package/lib/app/libraries/core-form-design/live-form/live-form.component.d.ts +18 -0
- package/lib/app/libraries/core-header-params/enum-and-interfaces.d.ts +1 -1
- package/lib/app/libraries/core-radio-group/core-radio-group/core-radio-group.component.d.ts +8 -3
- package/lib/app/libraries/core-rule-tree/core-rule-tree.component.d.ts +1 -1
- package/lib/app/libraries/core-workflow-builder/constants/INITIAL_PROCESS_DEFINITION.d.ts +2 -0
- package/lib/app/libraries/core-workflow-builder/core-workflow-consume/core-workflow-consume.component.d.ts +9 -0
- package/lib/app/libraries/core-workflow-builder/core-workflow-list/core-workflow-list.component.d.ts +6 -4
- package/lib/app/libraries/core-workflow-builder/core-workflow.service.d.ts +13 -2
- package/lib/app/libraries/core-workflow-builder/enums/EnumActorSourceType.d.ts +10 -0
- package/lib/app/libraries/core-workflow-builder/interfaces/IActorAssignment.d.ts +7 -0
- package/lib/app/libraries/core-workflow-builder/interfaces/IStepConfig.d.ts +37 -4
- package/lib/app/libraries/core-workflow-builder/interfaces/IWfWorkflow.d.ts +3 -0
- package/lib/app/libraries/core-workflow-builder/wf-process-design/wf-node/wf-node.component.d.ts +3 -1
- package/lib/app/libraries/core-workflow-builder/wf-process-design/wf-process-design.component.d.ts +12 -3
- package/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-actor-selector/wf-actor-selector.component.d.ts +40 -0
- package/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-approver-config/wf-approver-config.component.d.ts +5 -0
- package/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-cc-config/wf-cc-config.component.d.ts +5 -0
- package/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-end-config/wf-end-config.component.d.ts +5 -0
- package/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-handler-config/wf-handler-config.component.d.ts +5 -0
- package/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-step-config-shell.component.d.ts +4 -5
- package/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-submit-config/wf-submit-config.component.d.ts +5 -0
- package/lib/app/libraries/core-workflow-builder/wf-process-design/wf-steps-preview/wf-steps-preview.component.d.ts +8 -0
- package/lib/app/libraries/core-workflow-builder/wf-process-design/wf-workflow-canvas.component.d.ts +32 -3
- package/package.json +1 -1
- package/fesm2022/ngx-histaff-alpha-core-form-design.component-DkGU3mLc.mjs.map +0 -1
- package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-DG1v69l1.mjs.map +0 -1
- package/fesm2022/ngx-histaff-alpha-wf-process-design.component-D9Ba7Fkx.mjs +0 -1068
- package/fesm2022/ngx-histaff-alpha-wf-process-design.component-D9Ba7Fkx.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-histaff-alpha-wf-process-design.component-D9Ba7Fkx.mjs","sources":["../../../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.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-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/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-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"],"sourcesContent":["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 { IWorkflowInsertPoint } from '../../interfaces/IWorkflowInsertPoint';\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, input } 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\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","<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 [formControlName]=\"$fieldName() || $control().field\" [options$]=\"$control().dropdownOptions$!\">\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 [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 { Component, input, output, signal, effect, WritableSignal, ChangeDetectionStrategy, ChangeDetectorRef, computed } from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { 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 { TableCellPipe } from '../../libraries/pipes/table-cell.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\n\r\nexport 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}\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 TableCellPipe,\r\n TranslatePipe\r\n ],\r\n templateUrl: './core-rule-tree.component.html',\r\n styleUrls: ['./core-rule-tree.component.scss']\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 filters: new FormArray([\r\n this.trueLeaf()\r\n ])\r\n }));\r\n $filterStringInput = input<string>();\r\n $expressionInput = input<string>();\r\n\r\n // Outputs\r\n $jsonEmitter = output<string>();\r\n $expressionEmitter = output<string>();\r\n\r\n // Internal signals\r\n $filterString = signal<string>('()');\r\n $filterFormJsonString: WritableSignal<string> = signal<string>('{}');\r\n\r\n private $formValue = signal<any>(null); // Manual form value signal\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 };\r\n\r\n\r\n readonly relationalOperator = Object.values(EnumCoreRuleTreeOparator);\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 type: new FormControl(null),\r\n value: new FormControl(null),\r\n relationalOperator: new FormControl('EQUAL'),\r\n filters: new FormArray([])\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 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 this.$formValue.set(value);\r\n //this.cdr.markForCheck();\r\n });\r\n onCleanup(() => sub.unsubscribe()); // Unsubscribe if form changes\r\n }\r\n });\r\n\r\n // ➡️ Separate reaction effect for serialization\r\n effect(() => {\r\n const formValue = this.$formValue();\r\n if (!formValue) return;\r\n\r\n const cleaned = this.cleanEmptyFilters(formValue); // 👈 apply cleaning here\r\n\r\n const expr = this.getFilterString(cleaned);\r\n const json = JSON.stringify(cleaned, null, 2);\r\n\r\n this.$filterString.set(expr);\r\n this.$filterFormJsonString.set(json.trim());\r\n\r\n this.$expressionEmitter.emit(expr);\r\n this.$jsonEmitter.emit(json);\r\n });\r\n\r\n // Reaction effect: whenever form value changes\r\n /*\r\n effect(() => {\r\n const formValue = this.$formValue();\r\n\r\n if (!formValue) return;\r\n\r\n const expr = this.getFilterString(formValue);\r\n const json = JSON.stringify(this.$mainForm().getRawValue(), null, 2);\r\n\r\n this.$filterString.set(expr);\r\n this.$filterFormJsonString.set(json.trim());\r\n\r\n this.$expressionEmitter.emit(expr);\r\n this.$jsonEmitter.emit(json);\r\n });\r\n */\r\n\r\n // Initialize immediately based on initial form\r\n this.$formValue.set(this.$mainForm().getRawValue());\r\n }\r\n\r\n private 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 if (filter.filters?.length === 1 && filter.filters[0]?.name === 'TRUE') {\r\n return '(TRUE)';\r\n }\r\n\r\n // Special handling if only TRUE exists\r\n if (filter.filters?.length === 1 && filter.filters[0].name === 'TRUE') {\r\n return '(TRUE)';\r\n }\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 if (filter.filters[i]?.filters?.length) {\r\n str += this.getFilterString(filter.filters[i]);\r\n } else {\r\n str += `${filter.filters[i].name} ${filter.filters[i].relationalOperator} ${filter.filters[i].value}`;\r\n }\r\n }\r\n return str + ')';\r\n }\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 // Check if currently only TRUE node\r\n if (filtersArray.length === 1 && filtersArray.at(0).value.name === 'TRUE') {\r\n filtersArray.clear();\r\n }\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 if (!!tryfind) {\r\n // switch (tryfind.controlType) {\r\n // case EnumFormBaseContolType.DATEPICKER:\r\n // tryfind.rangeLimit = {\r\n // minDate: new Date(1900, 0, 1),\r\n // maxDate: new Date(9999, 11, 31),\r\n // }\r\n // break;\r\n // }\r\n }\r\n return tryfind;\r\n }\r\n\r\n private trueLeaf(): FormGroup {\r\n return new FormGroup({\r\n name: new FormControl('TRUE'),\r\n // type: new FormControl(null),\r\n // value: new FormControl(null),\r\n // relationalOperator: new FormControl('EQUAL'),\r\n // filters: new FormArray([])\r\n });\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}\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 <!-- Top Controls -->\r\n <div class=\"top-bar\">\r\n <div class=\"expression-box\">\r\n Expression = {{ $filterString() || '()' }}\r\n </div>\r\n \r\n <!-- <div class=\"button-group\">\r\n <button type=\"button\" class=\"btn btn-success btn-sm feather-file-plus\"\r\n (click)=\"addCondition($mainForm())\"\r\n [appTooltip]=\"'Add Condition'\">\r\n </button>\r\n <button type=\"button\" class=\"btn btn-success btn-sm feather-folder-plus\"\r\n (click)=\"addGroup($mainForm())\"\r\n [appTooltip]=\"'Add Group'\">\r\n </button>\r\n </div> -->\r\n </div>\r\n \r\n <!-- Query Builder -->\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 <!-- Logical Operator -->\r\n <div class=\"logical-operator\">\r\n\r\n @if (filter === $mainForm()) {\r\n <div class=\"logical-operator-label\">\r\n AND\r\n </div>\r\n } @else {\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\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-xs btn-success feather-file-plus\"\r\n (click)=\"addCondition(filter)\"\r\n [appTooltip]=\"'Add Condition to this Group'\" [position]=\"'top'\">\r\n </button>\r\n <button type=\"button\" class=\"btn btn-xs btn-success feather-folder-plus\"\r\n (click)=\"addGroup(filter)\"\r\n [appTooltip]=\"'Add Subgroup to this Group'\" [position]=\"'top'\">\r\n </button>\r\n @if (!!groupToRemove) {\r\n <button type=\"button\" class=\"btn btn-xs btn-danger feather-trash\"\r\n (click)=\"removeGroup(groupToRemove.group, groupToRemove.index)\"\r\n [appTooltip]=\"'Remove Group'\" [position]=\"'top'\">\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 <!-- Filter List (only shown when expanded) -->\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 <div class=\"field-cell\">\r\n <select class=\"form-control\" formControlName=\"name\">\r\n @for (col of $totalCols(); track $index) {\r\n <option [value]=\"col.field\">\r\n {{ col.label || col.field }}\r\n </option>\r\n }\r\n </select>\r\n </div>\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\">\r\n {{ operatorFriendlyMap[op] || op }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n <div class=\"value-cell\">\r\n <!-- <input class=\"form-control\" formControlName=\"value\" /> -->\r\n <core-control-value-only\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 </div>\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 } @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\">{{ $filterFormJsonString() | tableCell : 'TRIM' : lang }}</pre>\r\n </div>\r\n <div class=\"dev-json-view\">\r\n <pre class=\"json-preview\">{{ $rawValue() | tableCell : 'TRIM' : lang }}</pre>\r\n </div>\r\n \r\n </div>\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, viewChild, effect, ElementRef, computed, inject, Renderer2, ChangeDetectorRef, OnDestroy } from '@angular/core';\r\nimport { FormGroup, FormControl, FormArray } 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 { CoreDatePickerComponent} from '../../../core-date-picker/core-date-picker/core-date-picker.component';\r\n\r\n@Component({\r\n selector: 'wf-step-config-shell',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n CoreRuleTreeComponent,\r\n CoreDatePickerComponent\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 implements AfterViewInit, OnDestroy {\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\r\n constructor(\r\n public coreWorkflowService: 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 ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n this.listenerFn = this.renderer.listen('window', 'click', (e: Event) => {\r\n\r\n const container = this.$container();\r\n const target = e.target as Element;\r\n if (\r\n !!container &&\r\n !container.nativeElement.contains(target) &&\r\n !target.closest('.step-subtext')\r\n ) {\r\n this.coreWorkflowService.$showStepConfig.set(false);\r\n }\r\n\r\n this.cdr.markForCheck();\r\n })\r\n })\r\n }\r\n\r\n $stepFormGroup = computed<FormGroup>(() => {\r\n const step = this.coreWorkflowService.$currentStep();\r\n if (!step) {\r\n return new FormGroup({\r\n logicalOperator: new FormControl('AND'),\r\n filters: new FormArray([])\r\n });\r\n }\r\n return this.buildFormGroupFromStep(step.config);\r\n });\r\n\r\n $isBranchCard = computed<boolean>(() => {\r\n const step = this.coreWorkflowService.$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.coreWorkflowService.$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 buildFormGroupFromStep(config?: any): FormGroup {\r\n if (!config) {\r\n return new FormGroup({\r\n logicalOperator: new FormControl('AND'),\r\n filters: new FormArray([])\r\n });\r\n }\r\n\r\n return new FormGroup({\r\n logicalOperator: new FormControl(config.logicalOperator ?? 'AND'),\r\n filters: new FormArray([]) // You could map config.filters to prefilled controls\r\n });\r\n }\r\n\r\n close() {\r\n this.coreWorkflowService.$showStepConfig.set(false); // example method\r\n }\r\n\r\n save() {\r\n // handle save logic\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (!!this.listenerFn) this.listenerFn();\r\n }\r\n}","<div class=\"wf-step-config-shell-container\" #container [class.shown]=\"coreWorkflowService.$showStepConfig()\">\r\n \r\n <div class=\"wf-step-config-header\">\r\n <div class=\"panel-title\">\r\n {{ coreWorkflowService.$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 @if (!!$canRenderRuleTree()) {\r\n <core-rule-tree \r\n [$totalCols]=\"coreWorkflowService.$availableCols()\" \r\n [$mainForm]=\"$stepFormGroup()\">\r\n </core-rule-tree> \r\n } @else {\r\n <div class=\"loading-placeholder\">\r\n Loading Step Configuration...\r\n </div>\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 { 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\n\r\n@Component({\r\n selector: 'wf-node',\r\n imports: [\r\n FormsModule,\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 \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 //@ViewChild('bottomInsertArrow') bottomInsertArrowRef!: 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 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 \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 the selected branch\r\n this.conditionalBranches.splice(index, 1);\r\n\r\n // ✅ Check if only fallback branch remains → delete the group step\r\n if (this.conditionalBranches.length === 1 && this.conditionalBranches[0].isFallback) {\r\n\r\n if (!this.grandParentSteps) return;\r\n\r\n const indexInGrandParentSteps = this.grandParentSteps.findIndex(x => x.branches?.some(y => y.id === this.conditionalBranches[0].id));\r\n if (indexInGrandParentSteps === -1) return;\r\n\r\n // 🧹 Remove the ConditionalBranch step (parent step)\r\n this.grandParentSteps.splice(indexInGrandParentSteps, 1);\r\n\r\n } else {\r\n\r\n this.coreWorkflowService.autoReassignPriorities(this.conditionalBranches);\r\n\r\n }\r\n }\r\n\r\n onDeleteStep(): void {\r\n \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 // ❌ Remove the selected step\r\n this.stepGroup.splice(index, 1);\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 openNoneBranchRelatedEditor(): void {\r\n this.coreWorkflowService.$currentStep.set(this.step);\r\n this.coreWorkflowService.$showStepConfig.set(true);\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\">\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\" (blur)=\"onInputBlur()\" [(ngModel)]=\"step.name\" #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 @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\" (blur)=\"onInputBlur()\" [(ngModel)]=\"step.name\" #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 </div>\r\n \r\n <div class=\"step-delete pointer\" (click)=\"onDeleteStep()\">\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\" [class.configurated]=\"!!step.config\">{{ step.label }}</div>\r\n <div><i class=\"feather-chevron-right\"></i></div>\r\n </div>\r\n </div>\r\n\r\n <!-- <strong>{{ step.type }}</strong>\r\n <div (click)=\"onLabelClicked()\">{{ step.label }}</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 { AsyncPipe, LowerCasePipe, NgTemplateOutlet } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectionStrategy, Component, effect, ElementRef, inject, signal, viewChild, 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\n\r\n@Component({\r\n selector: 'wf-workflow-canvas',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n AsyncPipe,\r\n NgTemplateOutlet,\r\n LowerCasePipe,\r\n WfInsertMenuComponent,\r\n WfBottomVInsertComponent,\r\n WfInsertMenuComponent,\r\n WfStepConfigShellComponent,\r\n WfNodeComponent\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 {\r\n\r\n $container = viewChild<ElementRef>('container');\r\n\r\n enumType = EnumWorkflowStepType;\r\n ROOT_BRANCH_ID = ROOT_BRANCH_ID;\r\n\r\n public coreWorkflowService = inject(CoreWorkflowService);\r\n\r\n $steps: WritableSignal<IStep[]> = signal([]);\r\n\r\n insertIndex: number | null = null;\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.coreWorkflowService.standardConnectorHeight + 'px');\r\n })\r\n effect(() => {\r\n this.$steps.set(this.coreWorkflowService.$currentSteps())\r\n })\r\n }\r\n\r\n findBranchById(branchId: string, steps: IStep[] = this.$steps()): 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 steps.splice(index, 0, newStep);\r\n return steps;\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\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.coreWorkflowService.createStep(type, branchId, 'Set approver');\r\n break;\r\n case EnumWorkflowStepType.CC:\r\n newStep = this.coreWorkflowService.createStep(type, branchId, 'Set cc recipients');\r\n break;\r\n case EnumWorkflowStepType.Handle:\r\n newStep = this.coreWorkflowService.createStep(type, branchId, 'Set handler');\r\n break;\r\n case EnumWorkflowStepType.ConditionalBranch:\r\n newStep = this.coreWorkflowService.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.coreWorkflowService.insertContext$.next(null);\r\n }\r\n\r\n showInsertInBranch(context: IWorkflowInsertPoint): void {\r\n this.coreWorkflowService.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.coreWorkflowService.createStep(type, branchId, 'Set approver');\r\n break;\r\n case EnumWorkflowStepType.CC:\r\n newStep = this.coreWorkflowService.createStep(type, branchId, 'Set cc recipients');\r\n break;\r\n case EnumWorkflowStepType.Handle:\r\n newStep = this.coreWorkflowService.createStep(type, branchId, 'Set handler');\r\n break;\r\n case EnumWorkflowStepType.ConditionalBranch:\r\n newStep = this.coreWorkflowService.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.coreWorkflowService.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.$steps(), 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.coreWorkflowService.autoReassignPriorities(branches);\r\n }\r\n \r\n deleteBranchGroup(stepId: string): void {\r\n const step = this.$steps().find(s => s.id === stepId);\r\n \r\n if (step?.type === EnumWorkflowStepType.ConditionalBranch) {\r\n const index = this.$steps().indexOf(step);\r\n if (index !== -1) {\r\n this.$steps.update(steps => {\r\n steps.splice(index, 1);\r\n return steps;\r\n })\r\n }\r\n }\r\n }\r\n\r\n tempOnLabelClicked(): void {\r\n this.coreWorkflowService.$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.coreWorkflowService.insertContext$.next(null);\r\n }\r\n\r\n}\r\n","<div class=\"wf-workflow-canvas-container\" #container>\r\n\r\n <div class=\"canvas\">\r\n\r\n @for (step of $steps(); 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]=\"$steps()\"\r\n [index]=\"i\"\r\n ></wf-node>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n @if (!!(coreWorkflowService.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>\r\n\r\n\r\n<!-- <div class=\"wf-workflow-canvas-container\">\r\n\r\n <div class=\"canvas\">\r\n\r\n @for (step of coreWorkflowService.currentSteps$ | async; track $index; let i = $index) {\r\n <div class=\"step\">\r\n\r\n @if (step.type === enumType.ConditionalBranch && step.branches?.length) {\r\n <div class=\"add-branch-inline\">\r\n <button class=\"add-branch-btn\" (click)=\"addBranchToConditional(step.id)\">\r\n + Add New Branch\r\n </button>\r\n </div>\r\n\r\n <wf-node\r\n [branchId]=\"'root'\"\r\n [branchPriority]=\"1\"\r\n [step]=\"step\"\r\n [index]=\"i\"\r\n ></wf-node>\r\n\r\n }\r\n @else {\r\n <wf-node\r\n [branchId]=\"'root'\"\r\n [branchPriority]=\"1\"\r\n [step]=\"step\"\r\n [index]=\"i\"\r\n ></wf-node>\r\n }\r\n\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n @if (!!(coreWorkflowService.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> -->\r\n","import { ChangeDetectionStrategy, Component } 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 { EnumCoreButtonVNSCode } from '../../core-button-group-vns/core-button-group-vns/EnumCoreButtonVNSCode';\r\nimport { EnumWorkflowStepType } from '../enums/EnumWorkflowStepType';\r\nimport { ICoreButtonVNS } from '../../core-button-group-vns/core-button-group-vns/ICoreButtonVNS';\r\nimport { CorePageHeaderComponent } from '../../core-page-header/core-page-header/core-page-header.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 CorePageHeaderComponent,\r\n WfWorkflowCanvasComponent\r\n ],\r\n templateUrl: './wf-process-design.component.html',\r\n styleUrl: './wf-process-design.component.scss'\r\n})\r\nexport class WfProcessDesignComponent {\r\n\r\n constructor(\r\n public coreWorkflowService: CoreWorkflowService\r\n ) {\r\n\r\n }\r\n\r\n onCorePageHeaderButtonClicked(e: ICoreButtonVNS) {\r\n if (e.code === EnumCoreButtonVNSCode.HEADER_RESET) {\r\n this.coreWorkflowService.$currentSteps.set(\r\n\r\n [\r\n {\r\n id: 'submit',\r\n name: 'submit',\r\n branchId: 'root',\r\n type: EnumWorkflowStepType.Submit,\r\n label: 'Submitted by: All members',\r\n },\r\n {\r\n id: 'brancher',\r\n name: 'brancher',\r\n branchId: 'root',\r\n type: EnumWorkflowStepType.ConditionalBranch,\r\n label: 'Set branch logic',\r\n branches: [ // ✅ Flattened\r\n {\r\n id: 'b1',\r\n name: 'Condition 1',\r\n priority: 1,\r\n steps: [\r\n {\r\n id: 'pseudo-b1',\r\n name: 'pseudo-b1',\r\n branchId: 'b1',\r\n type: EnumWorkflowStepType.BranchCard,\r\n label: 'Condition 1',\r\n isPseudo: true\r\n },\r\n {\r\n id: 'a1',\r\n name: 'a1',\r\n branchId: 'b1',\r\n type: EnumWorkflowStepType.Approval,\r\n label: 'Approve A'\r\n }\r\n ]\r\n },\r\n {\r\n id: 'b2',\r\n isFallback: true,\r\n name: 'Fallback',\r\n priority: 2,\r\n steps: [\r\n {\r\n id: 'pseudo-b2',\r\n name: 'Fallback-b2',\r\n branchId: 'b2',\r\n type: EnumWorkflowStepType.BranchCard,\r\n label: '[Fallback Branch]',\r\n config: { isFallback: true },\r\n isInFallbackBranch: true,\r\n isPseudo: true\r\n },\r\n {\r\n id: 'a2',\r\n name: 'a2',\r\n branchId: 'b2',\r\n type: EnumWorkflowStepType.Approval,\r\n label: 'Fallback Approver',\r\n isInFallbackBranch: true\r\n }\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n id: 'end',\r\n name: 'end',\r\n branchId: 'root',\r\n type: EnumWorkflowStepType.End,\r\n label: 'Workflow completed',\r\n }\r\n ]\r\n\r\n )\r\n }\r\n }\r\n}\r\n","<div class=\"wf-process-design-container\">\r\n <core-page-header title=\"UI.COMPONENT_TITLE.WORKFLOW_LIST\" (buttonClick)=\"onCorePageHeaderButtonClicked($event)\"></core-page-header>\r\n @if (!!coreWorkflowService.$currentFlow()) {\r\n <p>{{ coreWorkflowService.$currentFlow()!.name + ' > Process Design' }}</p>\r\n <wf-workflow-canvas></wf-workflow-canvas>\r\n }\r\n</div>"],"names":["i1.MultiLanguageService","i2.DomService","i2","i1.CoreWorkflowService","i1.BridgeLineService"],"mappings":"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"}
|