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.
Files changed (50) hide show
  1. package/fesm2022/{ngx-histaff-alpha-core-form-design.component-DkGU3mLc.mjs → ngx-histaff-alpha-core-form-design.component-DUH4SkB7.mjs} +29 -11
  2. package/fesm2022/ngx-histaff-alpha-core-form-design.component-DUH4SkB7.mjs.map +1 -0
  3. package/fesm2022/ngx-histaff-alpha-core-workflow-consume.component-5bEZHFsi.mjs +64 -0
  4. package/fesm2022/ngx-histaff-alpha-core-workflow-consume.component-5bEZHFsi.mjs.map +1 -0
  5. package/fesm2022/ngx-histaff-alpha-live-form.component-Cl8EQ7M8.mjs +36 -0
  6. package/fesm2022/ngx-histaff-alpha-live-form.component-Cl8EQ7M8.mjs.map +1 -0
  7. package/fesm2022/{ngx-histaff-alpha-ngx-histaff-alpha-DG1v69l1.mjs → ngx-histaff-alpha-ngx-histaff-alpha-B6dYCMll.mjs} +278 -94
  8. package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-B6dYCMll.mjs.map +1 -0
  9. package/fesm2022/{ngx-histaff-alpha-wf-basic-info.component-GP8my3qI.mjs → ngx-histaff-alpha-wf-basic-info.component-BL7fXjKU.mjs} +2 -2
  10. package/fesm2022/{ngx-histaff-alpha-wf-basic-info.component-GP8my3qI.mjs.map → ngx-histaff-alpha-wf-basic-info.component-BL7fXjKU.mjs.map} +1 -1
  11. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-BuqyHWhW.mjs → ngx-histaff-alpha-wf-form-assign.component-BzsIRon0.mjs} +2 -2
  12. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-BuqyHWhW.mjs.map → ngx-histaff-alpha-wf-form-assign.component-BzsIRon0.mjs.map} +1 -1
  13. package/fesm2022/ngx-histaff-alpha-wf-process-design.component-CQxxRCqC.mjs +1439 -0
  14. package/fesm2022/ngx-histaff-alpha-wf-process-design.component-CQxxRCqC.mjs.map +1 -0
  15. package/fesm2022/ngx-histaff-alpha.mjs +1 -1
  16. package/lib/app/libraries/core-button-group-vns/core-button-group-vns/EnumCoreButtonVNSCode.d.ts +2 -1
  17. package/lib/app/libraries/core-form/core-form/core-form.component.d.ts +2 -1
  18. package/lib/app/libraries/core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component.d.ts +3 -2
  19. package/lib/app/libraries/core-form-design/core-form-design.component.d.ts +2 -0
  20. package/lib/app/libraries/core-form-design/core-form-design.service.d.ts +2 -0
  21. package/lib/app/libraries/core-form-design/field-setting/mandatory-props/mandatory-props.component.d.ts +2 -0
  22. package/lib/app/libraries/core-form-design/form-metadata/form-metadata.component.d.ts +3 -1
  23. package/lib/app/libraries/core-form-design/live-form/live-form.component.d.ts +18 -0
  24. package/lib/app/libraries/core-header-params/enum-and-interfaces.d.ts +1 -1
  25. package/lib/app/libraries/core-radio-group/core-radio-group/core-radio-group.component.d.ts +8 -3
  26. package/lib/app/libraries/core-rule-tree/core-rule-tree.component.d.ts +1 -1
  27. package/lib/app/libraries/core-workflow-builder/constants/INITIAL_PROCESS_DEFINITION.d.ts +2 -0
  28. package/lib/app/libraries/core-workflow-builder/core-workflow-consume/core-workflow-consume.component.d.ts +9 -0
  29. package/lib/app/libraries/core-workflow-builder/core-workflow-list/core-workflow-list.component.d.ts +6 -4
  30. package/lib/app/libraries/core-workflow-builder/core-workflow.service.d.ts +13 -2
  31. package/lib/app/libraries/core-workflow-builder/enums/EnumActorSourceType.d.ts +10 -0
  32. package/lib/app/libraries/core-workflow-builder/interfaces/IActorAssignment.d.ts +7 -0
  33. package/lib/app/libraries/core-workflow-builder/interfaces/IStepConfig.d.ts +37 -4
  34. package/lib/app/libraries/core-workflow-builder/interfaces/IWfWorkflow.d.ts +3 -0
  35. package/lib/app/libraries/core-workflow-builder/wf-process-design/wf-node/wf-node.component.d.ts +3 -1
  36. package/lib/app/libraries/core-workflow-builder/wf-process-design/wf-process-design.component.d.ts +12 -3
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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
  42. package/lib/app/libraries/core-workflow-builder/wf-process-design/wf-step-config-shell/wf-step-config-shell.component.d.ts +4 -5
  43. 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
  44. package/lib/app/libraries/core-workflow-builder/wf-process-design/wf-steps-preview/wf-steps-preview.component.d.ts +8 -0
  45. package/lib/app/libraries/core-workflow-builder/wf-process-design/wf-workflow-canvas.component.d.ts +32 -3
  46. package/package.json +1 -1
  47. package/fesm2022/ngx-histaff-alpha-core-form-design.component-DkGU3mLc.mjs.map +0 -1
  48. package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-DG1v69l1.mjs.map +0 -1
  49. package/fesm2022/ngx-histaff-alpha-wf-process-design.component-D9Ba7Fkx.mjs +0 -1068
  50. package/fesm2022/ngx-histaff-alpha-wf-process-design.component-D9Ba7Fkx.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-histaff-alpha-core-form-design.component-DUH4SkB7.mjs","sources":["../../../projects/ngx-histaff-alpha/src/lib/app/libraries/animations/slide-animations.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/save-live-json/save-live-json.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/save-live-json/save-live-json.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/form-metadata/form-metadata.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/form-metadata/form-metadata.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/attachment-props/attachment-field-helper.service.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/base-props/base-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/mandatory-props/mandatory-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/mandatory-props/mandatory-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/optional-props/optional-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/optional-props/optional-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/props-host/props-host.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/attachment-props/attachment-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/attachment-props/attachment-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/checklist-props/checklist-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/checklist-props/checklist-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/datepicker-props/datepicker-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/datepicker-props/datepicker-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/dropdown-props/dropdown-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/dropdown-props/dropdown-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/grid-buffer-props/grid-buffer-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/grid-buffer-props/grid-buffer-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/list-props/list-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/list-props/list-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/mcc-props/mcc-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/mcc-props/mcc-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/number-props/number-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/number-props/number-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/radio-group-props/radio-group-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/radio-group-props/radio-group-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/seeker-props/seeker-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/seeker-props/seeker-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/textarea-props/textarea-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/textarea-props/textarea-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/uploader-props/uploader-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/uploader-props/uploader-props.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/validator-editor/validator-editor.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/validator-editor/validator-editor.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/field-setting.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/field-setting.component.html","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/enums/EnumLeftPanelMode.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-design.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/core-form-design.component.html"],"sourcesContent":["import { trigger, transition, style, animate, state } from '@angular/animations';\r\n\r\nexport const slideFromTopFadeIn = trigger('slideFromTopFadeIn', [\r\n state('in', style({ opacity: 1, transform: 'translateY(0)' })),\r\n state('out', style({ opacity: 0, transform: 'translateY(-50vh)' })),\r\n transition('out => in', [\r\n animate('200ms ease-out')\r\n ]),\r\n transition('in => out', [\r\n animate('150ms ease-in')\r\n ])\r\n]);","import { AfterViewInit, ChangeDetectorRef, Component, computed, inject } from '@angular/core';\r\nimport { CoreFormDesignService } from '../core-form-design.service';\r\n\r\n@Component({\r\n selector: 'save-live-json',\r\n imports: [],\r\n templateUrl: './save-live-json.component.html',\r\n styleUrl: './save-live-json.component.scss'\r\n})\r\nexport class SaveLiveJsonComponent implements AfterViewInit {\r\n coreFormDesignService = inject(CoreFormDesignService);\r\n cdr = inject(ChangeDetectorRef);\r\n\r\n json$ = computed(() => {\r\n\r\n\r\n const removeSignalKeysDeep = (obj: any) => {\r\n if (Array.isArray(obj)) {\r\n return obj.map(removeSignalKeysDeep);\r\n }\r\n \r\n if (obj && typeof obj === 'object') {\r\n return Object.entries(obj)\r\n .filter(([key]) => !key.endsWith('$'))\r\n .reduce((acc, [key, value]) => {\r\n acc[key] = removeSignalKeysDeep(value);\r\n return acc;\r\n }, {} as any);\r\n }\r\n \r\n return obj;\r\n }\r\n\r\n const instance = this.coreFormDesignService.$afInstance();\r\n const cleanedInstance = removeSignalKeysDeep(instance); // Remove signals or $ fields\r\n return JSON.stringify(cleanedInstance, null, 2);\r\n\r\n });\r\n\r\n copyToClipboard() {\r\n navigator.clipboard.writeText(this.json$());\r\n }\r\n \r\n download() {\r\n const blob = new Blob([this.json$()], { type: 'application/json' });\r\n const url = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = `${this.coreFormDesignService.$afInstance().name || 'form'}.json`;\r\n link.click();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => this.cdr.markForCheck());\r\n }\r\n}\r\n","<pre class=\"json-preview\">{{ json$() }}</pre>","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, effect, HostListener, inject, signal, WritableSignal } from '@angular/core';\r\nimport { CoreFormDesignService } from '../core-form-design.service';\r\nimport { CoreFormComponent } from '../../core-form/core-form/core-form.component';\r\nimport { ICoreFormSection } from '../../core-form/core-form/enum-interfaces';\r\nimport { EnumFormBaseContolType } from '../../../enum/EnumFormBaseContolType';\r\nimport { EnumTranslateKey } from 'alpha-global-constants';\r\nimport { FormControlStatus, FormGroup, Validators } from '@angular/forms';\r\nimport { BaseEditComponent } from '../../base-edit/base-edit/base-edit.component';\r\nimport { BehaviorSubject, catchError, Observable, of } from 'rxjs';\r\nimport { EnumCorePageEditMode } from '../../core-page-edit/EnumCorePageEditMode';\r\nimport { CorePageHeaderComponent } from '../../core-page-header/core-page-header/core-page-header.component';\r\nimport { TranslatePipe } from '../../../app-pipes/translate.pipe';\r\nimport { EnumCoreButtonVNSCode } from '../../core-button-group-vns/core-button-group-vns/EnumCoreButtonVNSCode';\r\nimport { CoreButtonGroupVnsComponent } from '../../core-button-group-vns/core-button-group-vns/core-button-group-vns.component';\r\nimport { SaveLiveJsonComponent } from '../save-live-json/save-live-json.component';\r\nimport { ICoreChecklistOption } from '../../core-checklist/core-checklist/core-checklist.component';\r\nimport { ICoreButtonVNS } from '../../core-button-group-vns/core-button-group-vns/ICoreButtonVNS';\r\nimport { AlertService } from '../../alert/alert.service';\r\nimport { alertOptions, noneAutoClosedAlertOptions } from '../../../constants/alertOptions';\r\nimport { DialogService } from '../../../services/dialog.service';\r\nimport { MultiLanguageService } from '../../../services/multi-language.service';\r\n\r\nconst URL_PATTERN: string = '^(https?:\\\\/\\\\/[^\\\\s]+|\\\\/api(\\\\/[-\\\\w._]+)+)$';\r\n\r\n@Component({\r\n selector: 'form-metadata',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n TranslatePipe,\r\n CorePageHeaderComponent,\r\n CoreFormComponent,\r\n SaveLiveJsonComponent,\r\n CoreButtonGroupVnsComponent\r\n ],\r\n templateUrl: './form-metadata.component.html',\r\n styleUrl: './form-metadata.component.scss'\r\n})\r\nexport class FormMetadataComponent extends BaseEditComponent implements AfterViewInit {\r\n\r\n coreFormDesignService = inject(CoreFormDesignService);\r\n cdr = inject(ChangeDetectorRef);\r\n alertService = inject(AlertService);\r\n $loading: WritableSignal<boolean> = signal(false);\r\n\r\n checkError$ = new BehaviorSubject<boolean>(false);\r\n\r\n @HostListener('document:keydown.escape', ['$event'])\r\n onEscape() {\r\n this.coreFormDesignService.$showFormMetadata.set(false);\r\n }\r\n\r\n @HostListener('window:click', ['$event'])\r\n onWindowClick(_: MouseEvent) {\r\n /*\r\n Trigger\tWhat Happens\r\n 🖱️ First Click:\tOpens checklist overlay, but Angular hasn’t re-checked the DOM yet → markForCheck() is called, but view not updated yet\r\n🖱️ Second Click:\tNow DOM is updated, click is registered inside the actual rendered checklist, interaction works\r\n */\r\n //This lets Angular finish updating the DOM before running change detection.\r\n setTimeout(() => this.cdr.markForCheck());\r\n }\r\n\r\n mode$ = new BehaviorSubject<EnumCorePageEditMode>(EnumCorePageEditMode.UPDATE)\r\n\r\n formStatus!: FormControlStatus;\r\n\r\n customButtonChecklistOptions$ = new BehaviorSubject<ICoreChecklistOption[]>([]);\r\n\r\n constructor(\r\n public override dialogService: DialogService,\r\n private mls: MultiLanguageService\r\n ) {\r\n super(dialogService);\r\n effect(() => {\r\n if (this.coreFormDesignService.$shouldPatchMetadataForm()) {\r\n this.patchFormFromInstance();\r\n this.coreFormDesignService.$shouldPatchMetadataForm.set(false); // ✅ reset\r\n }\r\n });\r\n }\r\n\r\n patchFormFromInstance(): void {\r\n const instance = this.coreFormDesignService.$afInstance();\r\n \r\n this.form.patchValue({\r\n name: instance.name,\r\n captionCode: instance.captionCode,\r\n entityTable: instance.entityTable ?? '',\r\n \r\n submitApi: instance.submitApi,\r\n postSubmitRoute: instance.postSubmitRoute ?? '',\r\n postCancelRoute: instance.postCancelRoute ?? '',\r\n \r\n normalMode: instance.normalMode ?? false,\r\n autoGetByIdOff: instance.autoGetByIdOff ?? false,\r\n hasIdOfStringType: instance.hasIdOfStringType ?? false,\r\n \r\n customFormButtonItems: instance.customFormButtonItems ?? [],\r\n \r\n crudCreate: instance.crud?.c ?? '',\r\n crudRead: instance.crud?.r ?? '',\r\n crudUpdate: instance.crud?.u ?? '',\r\n crudDelete: instance.crud?.d ?? '',\r\n crudReadChildren: instance.crud?.rChildren ?? '',\r\n \r\n entityUniqueIndexesJson: JSON.stringify(instance.entityUniqueIndexes ?? [])\r\n });\r\n }\r\n\r\n $sections = signal<ICoreFormSection[]>([\r\n {\r\n caption: 'Primary properties',\r\n rows: [\r\n [\r\n {\r\n field: 'id',\r\n flexSize: 0,\r\n hidden: true,\r\n value: null,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n label: 'ID'\r\n },\r\n {\r\n field: 'name',\r\n flexSize: 4,\r\n value: '',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n label: 'Form Name',\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(5),\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n }\r\n ]\r\n },\r\n {\r\n field: 'captionCode',\r\n flexSize: 4,\r\n value: '',\r\n hint: 'Helps to display form caption in multi languages',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n label: 'Caption Code',\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(10),\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n }\r\n ]\r\n },\r\n {\r\n field: 'entityTable',\r\n flexSize: 4,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n value: '',\r\n hint: \"The primary table name related to the form\",\r\n label: 'Entity Table Name',\r\n type: 'string'\r\n },\r\n ],\r\n [\r\n {\r\n field: 'submitApi',\r\n flexSize: 4,\r\n value: '',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n label: 'Submit API URL',\r\n hint: 'This is an API endpoint with [HttpPost] verb',\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(10),\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n },\r\n {\r\n name: 'pattern',\r\n validator: Validators.pattern(URL_PATTERN),\r\n errorMessage: 'UI_FORM_CONTROL_ERROR_PATTERN'\r\n }\r\n ]\r\n },\r\n {\r\n field: 'postSubmitRoute',\r\n flexSize: 4,\r\n value: '',\r\n hint: 'After success submition, the App will redirect to this route (full URL)',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n label: 'Post Submit Route',\r\n type: 'string',\r\n validators: [\r\n {\r\n name: 'pattern',\r\n validator: Validators.pattern(URL_PATTERN),\r\n errorMessage: 'UI_FORM_CONTROL_ERROR_PATTERN'\r\n }\r\n ]\r\n },\r\n {\r\n field: 'postCancelRoute',\r\n flexSize: 4,\r\n value: '',\r\n hint: 'After cancelation, the App will redirect to this route (full URL)',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n label: 'Post Cancel Route',\r\n type: 'string',\r\n validators: [\r\n {\r\n name: 'pattern',\r\n validator: Validators.pattern(URL_PATTERN),\r\n errorMessage: 'UI_FORM_CONTROL_ERROR_PATTERN'\r\n }\r\n ]\r\n }\r\n ],\r\n [\r\n {\r\n field: 'normalMode',\r\n flexSize: 4,\r\n value: false,\r\n controlType: EnumFormBaseContolType.CHECKBOX,\r\n hint: 'If normal mode is set to false, the form will be displayed as a modal popup',\r\n label: 'Normal Display Mode',\r\n type: 'boolean'\r\n },\r\n {\r\n field: 'autoGetByIdOff',\r\n flexSize: 4,\r\n value: false,\r\n hint: \"If checked, the form won't call the GetById API ayt its startup\",\r\n controlType: EnumFormBaseContolType.CHECKBOX,\r\n label: 'Disable Auto Get By ID',\r\n type: 'checkbox'\r\n },\r\n {\r\n field: 'hasIdOfStringType',\r\n flexSize: 4,\r\n value: false,\r\n controlType: EnumFormBaseContolType.CHECKBOX,\r\n label: 'ID is String?',\r\n type: 'checkbox'\r\n }\r\n\r\n ],\r\n ]\r\n },\r\n {\r\n caption: 'CRUD',\r\n rows: [\r\n [\r\n {\r\n field: 'crudCreate',\r\n value: '',\r\n label: 'Create Endpoint',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n flexSize: 4,\r\n type: 'string',\r\n hint: 'POST endpoint for creating new records',\r\n validators: [\r\n {\r\n name: 'pattern',\r\n validator: Validators.pattern(URL_PATTERN),\r\n errorMessage: 'UI_FORM_CONTROL_ERROR_PATTERN'\r\n }\r\n ]\r\n },\r\n {\r\n field: 'crudRead',\r\n label: 'Read (GetById) Endpoint',\r\n value: '',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n flexSize: 4,\r\n type: 'string',\r\n hint: 'GET endpoint to retrieve by ID',\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(5),\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n },\r\n {\r\n name: 'pattern',\r\n validator: Validators.pattern(URL_PATTERN),\r\n errorMessage: 'UI_FORM_CONTROL_ERROR_PATTERN'\r\n }\r\n ]\r\n },\r\n {\r\n field: 'crudUpdate',\r\n label: 'Update Endpoint',\r\n value: '',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n flexSize: 4,\r\n type: 'string',\r\n hint: 'POST endpoint for updates',\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(5),\r\n errorMessage: EnumTranslateKey.UI_FORM_CONTROL_ERROR_MIN_LENGTH\r\n },\r\n {\r\n name: 'pattern',\r\n validator: Validators.pattern(URL_PATTERN),\r\n errorMessage: 'UI_FORM_CONTROL_ERROR_PATTERN'\r\n }\r\n ]\r\n },\r\n ],\r\n [\r\n {\r\n field: 'crudReadChildren',\r\n value: '',\r\n label: 'Read Children Endpoint',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n flexSize: 4,\r\n type: 'string',\r\n hint: 'Optional endpoint to fetch related child records',\r\n validators: [\r\n {\r\n name: 'pattern',\r\n validator: Validators.pattern(URL_PATTERN),\r\n errorMessage: 'UI_FORM_CONTROL_ERROR_PATTERN'\r\n }\r\n ]\r\n },\r\n {\r\n field: 'crudDelete',\r\n value: '',\r\n label: 'Delete Endpoint',\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n flexSize: 4,\r\n type: 'string',\r\n hint: 'Optional DELETE endpoint',\r\n validators: [\r\n {\r\n name: 'pattern',\r\n validator: Validators.pattern(URL_PATTERN),\r\n errorMessage: 'UI_FORM_CONTROL_ERROR_PATTERN'\r\n }\r\n ]\r\n },\r\n ]\r\n ]\r\n },\r\n {\r\n caption: 'Buttons & Actions',\r\n rows: [\r\n [\r\n {\r\n field: 'customFormButtonItems',\r\n flexSize: 8,\r\n controlType: EnumFormBaseContolType.CHECKLIST,\r\n hint: \"If you want to replace the default [Cancel, Submit] buttons\",\r\n checklistOptions$: this.customButtonChecklistOptions$,\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n shownFrom: '_',\r\n value: null,\r\n label: 'Custom Buttons',\r\n type: 'string[]'\r\n },\r\n {\r\n field: 'width',\r\n flexSize: 4,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n hint: \"Width of the form\",\r\n value: null,\r\n label: 'Width',\r\n type: 'number'\r\n },\r\n /*\r\n // Simply ignored for now\r\n {\r\n field: 'entityUniqueIndexesJson',\r\n flexSize: 4,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n textareaRows: 1,\r\n hint: \"It helps to detect duplicated values if needed\",\r\n value: '',\r\n label: 'Entity Unique Indexes (JSON)',\r\n type: 'string'\r\n }\r\n */\r\n ]\r\n ]\r\n }\r\n ]);\r\n\r\n customButtons: EnumCoreButtonVNSCode[] = [\r\n EnumCoreButtonVNSCode.NONE_HEADER_SAVE,\r\n ]\r\n\r\n\r\n onButtonClick(e: ICoreButtonVNS): void {\r\n if (e.code === EnumCoreButtonVNSCode.NONE_HEADER_SAVE) {\r\n if (this.form.valid) {\r\n this.$loading.set(true);\r\n\r\n const apiObject: Observable<any> = this.coreFormDesignService.editMode$.value === EnumCorePageEditMode.CREATE ?\r\n this.coreFormDesignService.createFormInstance(this.coreFormDesignService.$afInstance()) :\r\n this.coreFormDesignService.updateFormInstance(this.coreFormDesignService.$afInstance())\r\n const apiObservable = apiObject.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\r\n this.alertService.error(msg, noneAutoClosedAlertOptions);\r\n return of(msg);\r\n })\r\n )\r\n\r\n apiObservable.subscribe(x => {\r\n\r\n this.$loading.set(false);\r\n\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n //this.alertService.success('Success!', alertOptions)\r\n }\r\n\r\n })\r\n } else {\r\n this.checkError$.next(!this.checkError$.value);\r\n setTimeout(() => this.cdr.markForCheck())\r\n }\r\n }\r\n }\r\n\r\n onClose(): void {\r\n this.coreFormDesignService.$showFormMetadata.set(false);\r\n }\r\n\r\n onSave(e: any): void {\r\n\r\n }\r\n\r\n onFormCreated(event: { formName: string; formGroup: FormGroup }) {\r\n const form = event.formGroup;\r\n\r\n /*form.valueChanges.subscribe(value => {\r\n const current = this.coreFormDesignService.$afInstance();\r\n\r\n const safeKeys = Object.keys(value).filter(key => !key.endsWith('$'));\r\n const safeUpdate = Object.fromEntries(\r\n safeKeys.map(key => [key, value[key]])\r\n );\r\n\r\n this.coreFormDesignService.$afInstance.set({\r\n ...current,\r\n ...safeUpdate\r\n });\r\n });*/\r\n\r\n form.get('customFormButtonItems')?.valueChanges.subscribe(x => {\r\n if (Array.isArray(x)) {\r\n this.coreFormDesignService.$customFormButtonItems.set(x)\r\n } else {\r\n this.coreFormDesignService.$customFormButtonItems.set(undefined)\r\n }\r\n })\r\n\r\n form.valueChanges.subscribe(value => {\r\n\r\n const current = this.coreFormDesignService.$afInstance();\r\n \r\n const {\r\n crudCreate,\r\n crudRead,\r\n crudUpdate,\r\n crudDelete,\r\n crudReadChildren,\r\n // ES6 destructuring: Pull id out of the object and throw it away under the name _ignored — don’t include it in rest\r\n id: _ignored,\r\n ...rest\r\n } = value;\r\n \r\n const updatedCrud = {\r\n ...current.crud,\r\n ...(crudCreate !== undefined ? { c: crudCreate } : {}),\r\n ...(crudRead !== undefined ? { r: crudRead } : {}),\r\n ...(crudUpdate !== undefined ? { u: crudUpdate } : {}),\r\n ...(crudDelete !== undefined ? { d: crudDelete } : {}),\r\n ...(crudReadChildren !== undefined ? { rChildren: crudReadChildren } : {})\r\n };\r\n \r\n const next = {\r\n ...current,\r\n ...rest,\r\n crud: updatedCrud\r\n };\r\n \r\n this.coreFormDesignService.$afInstance.set(next);\r\n });\r\n\r\n form.statusChanges.subscribe(status => {\r\n // Optional: Save status if you want to show error summary, disable save button, etc.\r\n this.formStatus = status; // string: 'VALID' | 'INVALID' | 'PENDING' | 'DISABLED'\r\n });\r\n\r\n this.form = form;\r\n\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // Defer to next tick to avoid ExpressionChangedAfterItHasBeenCheckedError\r\n setTimeout(() => {\r\n\r\n const allButtons = Object.values(EnumCoreButtonVNSCode);\r\n\r\n const noneHeaderOptions: ICoreChecklistOption[] = allButtons\r\n .filter(value => value.startsWith('NONE_HEADER_') && value !== 'NONE_HEADER_IMPORT_OPTION')\r\n .map(value => ({\r\n value,\r\n text: this.mls.trans(value),\r\n checked: false\r\n }));\r\n\r\n this.customButtonChecklistOptions$.next(noneHeaderOptions);\r\n\r\n\r\n const sections = this.coreFormDesignService.$placeholderSections();\r\n\r\n // 🔥 DO NOT READ this.$afInstance()\r\n this.coreFormDesignService.$afInstance.update(instance => ({\r\n ...instance,\r\n formDesignSections: sections\r\n }));\r\n\r\n // Inform Angular to re-check since values arrived late\r\n this.cdr.markForCheck();\r\n });\r\n }\r\n\r\n\r\n}\r\n","<div class=\"form-metadata-container\">\r\n <div class=\"header-wrapper\">\r\n <core-page-header [title]=\"'FORM OVERVIEW'\" [hideButtonGroup]=\"true\"></core-page-header>\r\n <div class=\"close-wrapper\" (click)=\"onClose()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n\r\n <div class=\"af-instance\">\r\n\r\n <div class=\"af-instance-left\">\r\n <core-form \r\n [inputSections]=\"$sections()\" \r\n [width]=\"800\" [mode$]=\"mode$\" \r\n [checkError$]=\"checkError$\" \r\n [hideButtons]=\"true\"\r\n (onFormCreated)=\"onFormCreated($event)\"></core-form>\r\n </div>\r\n <div class=\"af-instance-right\">\r\n <save-live-json></save-live-json>\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n\r\n <div class=\"h15\"></div>\r\n <div class=\"d-flex d-flex-end w-100 pr1rem\">\r\n <core-button-group-vns [showCaption]=\"true\" [forHeader]=\"false\"\r\n (buttonClick)=\"onButtonClick($event)\" [shownItems]=\"customButtons\"\r\n class=\"buttonGroupCustom\"></core-button-group-vns>\r\n </div>\r\n\r\n\r\n\r\n</div>","import { Injectable } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces'; \r\nimport { EnumFormBaseContolType } from '../../../../../enum/EnumFormBaseContolType';\r\nimport { IFormDesignRow } from '../../../interfaces';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AttachmentFieldHelperService {\r\n\r\n static isAttachment(control: IFormBaseControl): boolean {\r\n return control.controlType === 'ATTACHMENT';\r\n }\r\n\r\n static autoGenerateAttachmentNames(baseName: string): {\r\n field: string;\r\n assignTo: string;\r\n } {\r\n return {\r\n field: baseName + 'Buffer',\r\n assignTo: baseName\r\n };\r\n }\r\n\r\n static buildHiddenAssignToField(baseFieldName: string): IFormBaseControl {\r\n return {\r\n field: baseFieldName,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'string',\r\n label: '',\r\n value: '',\r\n hidden: true,\r\n flexSize: 0\r\n };\r\n }\r\n\r\n static injectAssignToFieldIntoRow(row: IFormDesignRow, assignToField: IFormBaseControl): void {\r\n row.cells.push({ flexSize: assignToField.flexSize ?? 12, control: assignToField });\r\n }\r\n\r\n /**\r\n * Called when user edits the \"field\" of an ATTACHMENT control\r\n */\r\n static handleFieldNameChangeForAttachment(\r\n control: IFormBaseControl,\r\n form: IFormBaseControl[],\r\n typedFieldName: string\r\n ): void {\r\n const { field, assignTo } = this.autoGenerateAttachmentNames(typedFieldName);\r\n control.field = field;\r\n control.assignTo = assignTo;\r\n }\r\n\r\n /**\r\n * Called in drop handler when user drops a new ATTACHMENT\r\n */\r\n static setupAttachmentOnDrop(\r\n newControl: IFormBaseControl,\r\n form: IFormBaseControl[]\r\n ): void {\r\n if (this.isAttachment(newControl)) {\r\n const baseName = newControl.field.replace(/Buffer$/, '');\r\n const { field, assignTo } = this.autoGenerateAttachmentNames(baseName);\r\n newControl.field = field;\r\n newControl.assignTo = assignTo;\r\n }\r\n }\r\n\r\n}","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, inject } from '@angular/core';\r\nimport { CoreFormDesignService } from '../../core-form-design.service';\r\nimport { IFormBaseControl } from '../../../core-form/core-form/enum-interfaces';\r\nimport { BaseComponent } from '../../../base-component/base/base.component';\r\n\r\n@Component({\r\n selector: 'base-props',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: './base-props.component.html'\r\n})\r\nexport abstract class BasePropsComponent extends BaseComponent {\r\n coreFormDesignService = inject(CoreFormDesignService);\r\n $selectedCell = this.coreFormDesignService.$selectedCell;\r\n $formContext = this.coreFormDesignService.$formContext;\r\n form = this.coreFormDesignService.formDesign;\r\n patchControl = this.coreFormDesignService.patchControl.bind(this.coreFormDesignService);\r\n normalize = this.coreFormDesignService.normalize.bind(this.coreFormDesignService);\r\n cdr = inject(ChangeDetectorRef);\r\n\r\n setControlProp = this.coreFormDesignService.setControlProp.bind(this.coreFormDesignService);\r\n\r\n $control = computed<IFormBaseControl>(() => {\r\n const cell = this.$selectedCell();\r\n if (!cell?.control) throw new Error('No control selected!');\r\n return this.normalize(cell.control);\r\n });\r\n\r\n}","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { AttachmentFieldHelperService } from '../type-specific/attachment-props/attachment-field-helper.service';\r\nimport { BasePropsComponent } from '../base-props/base-props.component';\r\nimport { CoreFormDesignService } from '../../core-form-design.service';\r\n\r\n@Component({\r\n selector: 'mandatory-props',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FormsModule],\r\n templateUrl: './mandatory-props.component.html',\r\n styleUrls: ['../type-specific.scss']\r\n})\r\nexport class MandatoryPropsComponent extends BasePropsComponent {\r\n \r\n afs = inject(CoreFormDesignService)\r\n\r\n $typedField = computed(() => {\r\n const control = this.$control();\r\n return AttachmentFieldHelperService.isAttachment(control)\r\n ? control.assignTo || ''\r\n : control.field;\r\n });\r\n\r\n setTypedField(val: string): void {\r\n const control = this.$control();\r\n const context = this.$formContext();\r\n\r\n const toCamelCase = (input: string) => {\r\n return input\r\n .replace(/[^a-zA-Z0-9 ]/g, ' ') // remove special characters\r\n .replace(/([a-z])([A-Z])/g, '$1 $2') // split camelCase\r\n .replace(/\\s+/g, ' ') // collapse multiple spaces\r\n .trim()\r\n .split(' ')\r\n .map((word, index) =>\r\n index === 0\r\n ? word.toLowerCase()\r\n : word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()\r\n )\r\n .join('');\r\n }\r\n\r\n const corrected = toCamelCase(val);\r\n const current = AttachmentFieldHelperService.isAttachment(control)\r\n ? control.assignTo || ''\r\n : control.field;\r\n\r\n if (current === corrected) return;\r\n\r\n if (AttachmentFieldHelperService.isAttachment(control)) {\r\n AttachmentFieldHelperService.handleFieldNameChangeForAttachment(control, context, corrected);\r\n } else {\r\n control.field = corrected;\r\n }\r\n\r\n this.patchControl(control);\r\n }\r\n\r\n}\r\n","<div class=\"setting-group mandatory-group\">\r\n\r\n <div class=\"setting-row\">\r\n <label>Field</label>\r\n <input class=\"form-control\" type=\"text\" [ngModel]=\"$typedField()\" (ngModelChange)=\"setControlProp('field', $event)\" />\r\n </div>\r\n\r\n <!-- Label -->\r\n <div class=\"setting-row\">\r\n <label>Label</label>\r\n <input class=\"form-control\" type=\"text\" [ngModel]=\"$control()?.label\" (ngModelChange)=\"setControlProp('label', $event)\" />\r\n </div>\r\n\r\n <!-- Flex Size -->\r\n <div class=\"setting-row\">\r\n <label>Flex Size</label>\r\n <input class=\"form-control\" type=\"number\" [ngModel]=\"$control()?.flexSize\" (ngModelChange)=\"setControlProp('flexSize', $event)\" />\r\n </div>\r\n\r\n <!-- Default -->\r\n <div class=\"setting-row\">\r\n <label>Default</label>\r\n <input class=\"form-control\" type=\"text\" [ngModel]=\"$control()?.value\" (ngModelChange)=\"setControlProp('value', $event)\" />\r\n </div>\r\n\r\n</div>","import { Component, ChangeDetectionStrategy } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { EnumCoreTablePipeType } from '../../../core-table/EnumCoreTablePipeType';\r\nimport { ICoreDropdownOption } from '../../../../interfaces/ICoreDropdownOption';\r\nimport { BasePropsComponent } from '../base-props/base-props.component';\r\nimport { CoreCheckboxComponent } from '../../../core-checkbox/core-checkbox/core-checkbox.component';\r\nimport { CoreDropdownComponent } from '../../../core-dropdown/core-dropdown/core-dropdown.component';\r\n\r\n@Component({\r\n selector: 'optional-props',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n CoreCheckboxComponent,\r\n CoreDropdownComponent\r\n ],\r\n templateUrl: './optional-props.component.html',\r\n styleUrls: ['../type-specific.scss']\r\n})\r\nexport class OptionalPropsComponent extends BasePropsComponent {\r\n\r\n pipeOptions = Object.values(EnumCoreTablePipeType);\r\n\r\n pipeOptions$ = new BehaviorSubject<ICoreDropdownOption[]>(\r\n Object.values(EnumCoreTablePipeType).map(x => ({ value: x, text: x }))\r\n )\r\n\r\n}","<div class=\"setting-group optional-group\">\r\n\r\n <!-- 🔘 Boolean flags -->\r\n <div class=\"setting-row optional-bool\">\r\n <label>Readonly</label>\r\n <core-checkbox ngModel ngDefaultControl [ngModel]=\"$control().readonly\" (ngModelChange)=\"setControlProp('readonly', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row optional-bool\">\r\n <label>Hidden</label>\r\n <core-checkbox [ngModel]=\"$control().hidden\" (ngModelChange)=\"setControlProp('hidden', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row optional-bool\">\r\n <label>Disabled</label>\r\n <core-checkbox [ngModel]=\"$control().disabled\" (ngModelChange)=\"setControlProp('disabled', $event)\" /> \r\n </div>\r\n\r\n <!-- 💡 Hint -->\r\n <div class=\"setting-row\">\r\n <label>Hint</label>\r\n <input class=\"form-control\" type=\"text\" [ngModel]=\"$control().hint\" (ngModelChange)=\"setControlProp('hint', $event)\" />\r\n </div>\r\n\r\n <div class=\"setting-row\">\r\n <label>Pipe</label>\r\n <div class=\"control-wrapper\">\r\n <core-dropdown [ngModel]=\"$control().pipe\" (ngModelChange)=\"setControlProp('pipe', $event)\"\r\n [paramMode]=\"true\"\r\n [options$]=\"pipeOptions$\"\r\n >\r\n </core-dropdown>\r\n </div>\r\n </div>\r\n\r\n</div>","import { ChangeDetectionStrategy, Component, ComponentRef, inject, Input, OnInit, Type, ViewContainerRef } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'props-host',\r\n standalone: true,\r\n template: '',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PropsHostComponent implements OnInit {\r\n @Input() loadComponent!: () => Promise<Type<any>>;\r\n\r\n private _props!: any;\r\n @Input()\r\n set props(value: any) {\r\n this._props = value;\r\n this.assignInputs();\r\n }\r\n\r\n private vcRef = inject(ViewContainerRef);\r\n private componentRef?: ComponentRef<any>;\r\n\r\n async ngOnInit() {\r\n if (this.loadComponent) {\r\n const componentType = await this.loadComponent();\r\n this.componentRef = this.vcRef.createComponent(componentType);\r\n this.assignInputs();\r\n }\r\n }\r\n\r\n private assignInputs(): void {\r\n if (this.componentRef && this._props) {\r\n Object.assign(this.componentRef.instance, this._props);\r\n this.componentRef.changeDetectorRef.markForCheck();\r\n }\r\n }\r\n}\r\n","import { Component, computed } from '@angular/core';\r\nimport { BasePropsComponent } from '../../base-props/base-props.component';\r\nimport { AttachmentFieldHelperService } from './attachment-field-helper.service';\r\n\r\n\r\n@Component({\r\n selector: 'attachment-props',\r\n imports: [],\r\n templateUrl: './attachment-props.component.html',\r\n styleUrls: ['../../type-specific.scss']\r\n})\r\nexport class AttachmentPropsComponent extends BasePropsComponent {\r\n\r\n $typedField = computed(() => {\r\n const control = this.$control();\r\n return AttachmentFieldHelperService.isAttachment(control)\r\n ? control.assignTo || ''\r\n : control.field;\r\n });\r\n\r\n setTypedField(val: string): void {\r\n const control = this.$control();\r\n const context = this.$formContext();\r\n\r\n if (AttachmentFieldHelperService.isAttachment(control)) {\r\n AttachmentFieldHelperService.handleFieldNameChangeForAttachment(control, context, val);\r\n } else {\r\n control.field = val;\r\n }\r\n\r\n this.patchControl(control);\r\n }\r\n\r\n}","<p>attachment-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'checklist-props',\r\n imports: [],\r\n templateUrl: './checklist-props.component.html',\r\n styleUrl: './checklist-props.component.scss'\r\n})\r\nexport class ChecklistPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>checklist-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'datepicker-props',\r\n imports: [],\r\n templateUrl: './datepicker-props.component.html',\r\n styleUrl: './datepicker-props.component.scss'\r\n})\r\nexport class DatepickerPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>datepicker-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'dropdown-props',\r\n imports: [],\r\n templateUrl: './dropdown-props.component.html',\r\n styleUrl: './dropdown-props.component.scss'\r\n})\r\nexport class DropdownPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>dropdown-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'grid-buffer-props',\r\n imports: [],\r\n templateUrl: './grid-buffer-props.component.html',\r\n styleUrl: './grid-buffer-props.component.scss'\r\n})\r\nexport class GridBufferPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>grid-buffer-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'list-props',\r\n imports: [],\r\n templateUrl: './list-props.component.html',\r\n styleUrl: './list-props.component.scss'\r\n})\r\nexport class ListPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>list-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'mcc-props',\r\n imports: [],\r\n templateUrl: './mcc-props.component.html',\r\n styleUrl: './mcc-props.component.scss'\r\n})\r\nexport class MccPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>mcc-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'number-props',\r\n imports: [],\r\n templateUrl: './number-props.component.html',\r\n styleUrl: './number-props.component.scss'\r\n})\r\nexport class NumberPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>number-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'radio-group-props',\r\n imports: [],\r\n templateUrl: './radio-group-props.component.html',\r\n styleUrl: './radio-group-props.component.scss'\r\n})\r\nexport class RadioGroupPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>radio-group-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'seeker-props',\r\n imports: [],\r\n templateUrl: './seeker-props.component.html',\r\n styleUrl: './seeker-props.component.scss'\r\n})\r\nexport class SeekerPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>seeker-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'textarea-props',\r\n imports: [],\r\n templateUrl: './textarea-props.component.html',\r\n styleUrl: './textarea-props.component.scss'\r\n})\r\nexport class TextareaPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>textarea-props works!</p>\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { IFormBaseControl } from '../../../../core-form/core-form/enum-interfaces';\r\n\r\n@Component({\r\n selector: 'uploader-props',\r\n imports: [],\r\n templateUrl: './uploader-props.component.html',\r\n styleUrl: './uploader-props.component.scss'\r\n})\r\nexport class UploaderPropsComponent {\r\n @Input() control!: IFormBaseControl;\r\n @Output() controlChange = new EventEmitter<IFormBaseControl>();\r\n\r\n update(): void {\r\n this.controlChange.emit(this.control);\r\n }\r\n}\r\n","<p>uploader-props works!</p>\r\n","import { AfterViewInit, ChangeDetectionStrategy, Component, computed, effect, inject, OnInit, signal } from '@angular/core';\r\nimport { BasePropsComponent } from '../base-props/base-props.component';\r\nimport { EnumSupportedRuntimeValidator } from '../../enums/EnumSupportedRuntimeValidator';\r\nimport { CoreFormDesignService } from '../../core-form-design.service';\r\nimport { CoreCheckboxComponent } from '../../../core-checkbox/core-checkbox/core-checkbox.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TranslatePipe } from '../../../../app-pipes/translate.pipe';\r\nimport { TooltipDirective } from '../../../tooltip/tooltip.directive';\r\nimport { IValidator } from '../../../core-form/core-form/enum-interfaces';\r\nimport { MultiLanguageService } from '../../../../services/multi-language.service';\r\n\r\n@Component({\r\n selector: 'validator-editor',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n TranslatePipe,\r\n TooltipDirective,\r\n CoreCheckboxComponent\r\n ],\r\n templateUrl: './validator-editor.component.html',\r\n styleUrls: ['../type-specific.scss']\r\n})\r\nexport class ValidatorEditorComponent extends BasePropsComponent {\r\n\r\n // 🔹 Computed list based on controlType\r\n $availableValidators = computed(() =>\r\n this.coreFormDesignService.getSupportedValidators(this.$control())\r\n );\r\n\r\n // 🔹 Signal for selected validators with their values\r\n $selectedValidators = signal<Partial<Record<EnumSupportedRuntimeValidator, IValidator>>>({});\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n effect(() => {\r\n const c = this.$control(); // will re-run when selection changes\r\n this.syncFromControl();\r\n });\r\n }\r\n\r\n // ✅ Check if a validator is enabled\r\n isChecked(v: EnumSupportedRuntimeValidator): boolean {\r\n return this.$selectedValidators()[v] !== undefined;\r\n }\r\n\r\n private syncFromControl(): void {\r\n const control = this.$control();\r\n const validators = control.validators ?? [];\r\n \r\n const validatorMap: Partial<Record<EnumSupportedRuntimeValidator, IValidator>> = {};\r\n \r\n for (const v of validators) {\r\n validatorMap[v.name as EnumSupportedRuntimeValidator] = v;\r\n }\r\n \r\n this.$selectedValidators.set(validatorMap);\r\n }\r\n\r\n toggleValidator(v: EnumSupportedRuntimeValidator): void {\r\n const current = { ...this.$selectedValidators() };\r\n\r\n const requiresValue = ['minLength', 'maxLength', 'min', 'max', 'pattern'];\r\n const isAlreadyChecked = !!current[v];\r\n\r\n if (isAlreadyChecked) {\r\n delete current[v]; // ❌ Remove validator\r\n } else {\r\n const validator: IValidator = {\r\n name: v,\r\n errorMessage: this.coreFormDesignService.getErrorMessageFor(v),\r\n validator: this.coreFormDesignService.getValidatorFn(v, null), // stub until value is filled\r\n value: requiresValue.includes(v) ? '' : true\r\n };\r\n\r\n current[v] = validator;\r\n }\r\n\r\n this.$selectedValidators.set(current);\r\n\r\n // ✅ Skip update if validator requires value but it's still empty\r\n const shouldSkip =\r\n !isAlreadyChecked &&\r\n requiresValue.includes(v) &&\r\n current[v]?.value === '';\r\n\r\n if (shouldSkip) return;\r\n\r\n const validatorArray = this.coreFormDesignService.toIValidatorArray(current);\r\n this.setControlProp('validators', validatorArray);\r\n }\r\n\r\n updateValidatorValue(v: EnumSupportedRuntimeValidator, raw: any): void {\r\n const value = raw?.toString().trim();\r\n\r\n const updated = { ...this.$selectedValidators() };\r\n\r\n if (value === '') {\r\n // 👇 Remove the validator if it was cleared\r\n delete updated[v];\r\n } else {\r\n updated[v] = value;\r\n }\r\n\r\n this.$selectedValidators.set(updated);\r\n\r\n // ✅ Only update the control if it's valid or fully removed\r\n const validatorArray = this.coreFormDesignService.toIValidatorArray(updated);\r\n this.setControlProp('validators', validatorArray);\r\n }\r\n\r\n isReadOnlyValidator(v: EnumSupportedRuntimeValidator): boolean {\r\n return this.$selectedValidators()[v]?.readOnly === true;\r\n }\r\n\r\n\r\n}","<div class=\"setting-group validator-group\">\r\n @for (v of $availableValidators(); track v) {\r\n <div class=\"setting-row\">\r\n\r\n <label>\r\n {{ v }}\r\n @if (isReadOnlyValidator(v)) {\r\n <i class=\"feather-lock tiny-lock\" title=\"Read-only system validator\"></i>\r\n }\r\n </label>\r\n\r\n <div class=\"control-wrapper\">\r\n <core-checkbox ngModel ngDefaultControl [ngModel]=\"isChecked(v)\" [disabled]=\"isReadOnlyValidator(v)\"\r\n [appTooltip]=\"isReadOnlyValidator(v) ? 'System validator' : ''\" (ngModelChange)=\"toggleValidator(v)\" />\r\n\r\n @if (isChecked(v) && ['minLength', 'maxLength', 'min', 'max'].includes(v)) {\r\n <input class=\"form-control validator-value\" [type]=\"'number'\"\r\n [value]=\"$selectedValidators()[v]?.value || ''\"\r\n (input)=\"updateValidatorValue(v, $any($event.target).value)\"\r\n [placeholder]=\"'Enter value' | translate: lang\" [disabled]=\"isReadOnlyValidator(v)\"\r\n [appTooltip]=\"isReadOnlyValidator(v) ? 'Default validator — cannot be modified' : ''\" />\r\n }\r\n\r\n @else if (isChecked(v) && v === 'pattern') {\r\n <input class=\"form-control validator-value\" type=\"text\" [value]=\"$selectedValidators()[v]?.value || ''\"\r\n (input)=\"updateValidatorValue(v, $any($event.target).value)\" [placeholder]=\"'Enter regex'\"\r\n [disabled]=\"isReadOnlyValidator(v)\"\r\n [appTooltip]=\"isReadOnlyValidator(v) ? 'Default validator — cannot be modified' : ''\" />\r\n }\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, inject, Renderer2, Type } from '@angular/core';\r\nimport { IFormBaseControl } from '../../core-form/core-form/enum-interfaces';\r\nimport { EnumFormBaseContolType } from '../../../enum/EnumFormBaseContolType';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MandatoryPropsComponent } from './mandatory-props/mandatory-props.component';\r\nimport { OptionalPropsComponent } from './optional-props/optional-props.component';\r\nimport { PropsHostComponent } from '../props-host/props-host.component';\r\nimport { AttachmentPropsComponent } from './type-specific/attachment-props/attachment-props.component';\r\nimport { ChecklistPropsComponent } from './type-specific/checklist-props/checklist-props.component';\r\nimport { DatepickerPropsComponent } from './type-specific/datepicker-props/datepicker-props.component';\r\nimport { DropdownPropsComponent } from './type-specific/dropdown-props/dropdown-props.component';\r\nimport { GridBufferPropsComponent } from './type-specific/grid-buffer-props/grid-buffer-props.component';\r\nimport { ListPropsComponent } from './type-specific/list-props/list-props.component';\r\nimport { MccPropsComponent } from './type-specific/mcc-props/mcc-props.component';\r\nimport { NumberPropsComponent } from './type-specific/number-props/number-props.component';\r\nimport { RadioGroupPropsComponent } from './type-specific/radio-group-props/radio-group-props.component';\r\nimport { SeekerPropsComponent } from './type-specific/seeker-props/seeker-props.component';\r\nimport { TextareaPropsComponent } from './type-specific/textarea-props/textarea-props.component';\r\nimport { UploaderPropsComponent } from './type-specific/uploader-props/uploader-props.component';\r\nimport { CoreFormDesignService } from '../core-form-design.service';\r\nimport { ValidatorEditorComponent } from './validator-editor/validator-editor.component';\r\nimport { BaseComponent } from '../../base-component/base/base.component';\r\n\r\n@Component({\r\n selector: 'field-setting',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n FormsModule,\r\n MandatoryPropsComponent,\r\n OptionalPropsComponent,\r\n ValidatorEditorComponent,\r\n PropsHostComponent,\r\n AttachmentPropsComponent,\r\n ChecklistPropsComponent,\r\n DatepickerPropsComponent,\r\n DropdownPropsComponent,\r\n GridBufferPropsComponent,\r\n ListPropsComponent,\r\n MccPropsComponent,\r\n NumberPropsComponent,\r\n RadioGroupPropsComponent,\r\n SeekerPropsComponent,\r\n TextareaPropsComponent,\r\n UploaderPropsComponent\r\n ],\r\n templateUrl: './field-setting.component.html',\r\n styleUrl: './field-setting.component.scss'\r\n})\r\nexport class FieldSettingComponent extends BaseComponent implements AfterViewInit {\r\n\r\n public coreFormDesignService = inject(CoreFormDesignService)\r\n\r\n enumControlType = EnumFormBaseContolType;\r\n\r\n listenerFn!: () => void;\r\n renderer = inject(Renderer2);\r\n cdr = inject(ChangeDetectorRef);\r\n\r\n // 🔹 Reactive normalized control (always derived from selected cell)\r\n readonly $control = computed<IFormBaseControl>(() => {\r\n const cell = this.coreFormDesignService.$selectedCell();\r\n if (!cell?.control) throw new Error('No control selected!');\r\n return this.coreFormDesignService.normalize(cell.control);\r\n });\r\n\r\n // 🔹 Context (flat control list)\r\n readonly $formContext = computed(() => this.coreFormDesignService.$formContext());\r\n\r\n // 🔹 Optional trigger for downstream side-effects (no longer emits)\r\n onControlParamsChange(): void {\r\n const updated = this.$control();\r\n this.coreFormDesignService.patchControl(updated);\r\n }\r\n\r\n componentLoaderMap: Record<string, () => Promise<Type<any>>> = {\r\n 'number-props': () => import('./type-specific/number-props/number-props.component').then(m => m.NumberPropsComponent),\r\n 'email-props': () => import('./type-specific/email-props/email-props.component').then(m => m.EmailPropsComponent),\r\n // etc...\r\n };\r\n\r\n getFriendlyControlLabel(control: IFormBaseControl | undefined): string {\r\n if (!control) return 'Control';\r\n \r\n // 🧠 Detailed mapping: \"controlType:type\" → Friendly Name\r\n const fullTypeMap: Record<string, string> = {\r\n 'TEXTBOX:string': 'String Box',\r\n 'TEXTBOX:number': 'Number Box',\r\n 'TEXTBOX:email': 'Email Field',\r\n \r\n 'DROPDOWN': 'Dropdown',\r\n 'CHECKLIST': 'Checklist',\r\n 'SEEKER': 'Seeker',\r\n 'DATEPICKER': 'Date Picker',\r\n 'TEXTAREA': 'Text Area',\r\n 'CHECKBOX': 'Checkbox'\r\n // Add more mappings as needed\r\n };\r\n \r\n const controlType = control.controlType?.toUpperCase() ?? '';\r\n const inputType = control.type?.toLowerCase();\r\n \r\n const fullKey = inputType ? `${controlType}:${inputType}` : controlType;\r\n \r\n return fullTypeMap[fullKey] ?? this.camelToTitle(control.controlType ?? 'Control');\r\n }\r\n\r\n camelToTitle(input: string): string {\r\n return input\r\n .replace(/([a-z])([A-Z])/g, '$1 $2')\r\n .replace(/^./, str => str.toUpperCase());\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n\r\n this.listenerFn = this.renderer.listen('window', 'click', (e: Event) => {\r\n\r\n this.cdr.markForCheck();\r\n\r\n });\r\n\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}\r\n","<div class=\"field-setting-container\">\r\n\r\n @if (!!$control()) {\r\n\r\n <div class=\"panel-caption\">\r\n Editing: {{ $control()?.controlType }} - {{ $control()?.field || 'Unnamed' }}\r\n </div>\r\n\r\n <div class=\"group-title mandatory\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"feather-lock\"></i>\r\n </div>\r\n <div class=\"group-name\">Mandatory</div>\r\n </div>\r\n <mandatory-props></mandatory-props>\r\n\r\n <div class=\"setting-divider\"></div>\r\n\r\n <div class=\"group-title optional\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"feather-sliders\"></i>\r\n </div>\r\n <div class=\"group-name\">Optional</div>\r\n </div>\r\n <optional-props></optional-props>\r\n\r\n <div class=\"setting-divider\"></div>\r\n\r\n <div class=\"group-title validators\">\r\n <div class=\"icon-wrapper\">\r\n <i class=\"feather-check-square\"></i>\r\n </div>\r\n <div class=\"group-name\">Validators</div>\r\n </div>\r\n <validator-editor></validator-editor>\r\n\r\n @if (!($control().controlType === 'TEXTBOX' && ['string', 'text', 'email'].includes(($control().type || '').toLowerCase()))) {\r\n\r\n <div class=\"setting-divider\">\r\n {{ getFriendlyControlLabel($control()) }} Settings\r\n </div>\r\n \r\n <props-host [loadComponent]=\"componentLoaderMap[coreFormDesignService.$currentPropsComponent()]\"\r\n [props]=\"{ control: $control(), controlChange: onControlParamsChange.bind(this) }\">\r\n </props-host>\r\n }\r\n\r\n }\r\n\r\n</div>","export enum EnumLeftPanelMode {\r\n FieldCollection = \"FieldCollection\",\r\n SelectedFieldJson = \"SelectedFieldJson\"\r\n}","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, ElementRef, inject, Renderer2, signal, ViewChild, WritableSignal } from '@angular/core';\r\nimport { slideFromTopFadeIn } from '../animations/slide-animations';\r\nimport { CoreAttachmentComponent } from '../core-attachment/core-attachment/core-attachment.component';\r\nimport { CoreCheckboxComponent } from '../core-checkbox/core-checkbox/core-checkbox.component';\r\nimport { CoreChecklistComponent, ICoreChecklistOption } from '../core-checklist/core-checklist/core-checklist.component';\r\nimport { CoreCurrencyInputComponent } from '../core-currency-input/core-currency-input/core-currency-input.component';\r\nimport { CoreDatePickerComponent } from '../core-date-picker/core-date-picker/core-date-picker.component';\r\nimport { CoreDropdownComponent } from '../core-dropdown/core-dropdown/core-dropdown.component';\r\nimport { CoreFormControlSeekerComponent } from '../core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component';\r\nimport { CoreMonthSelectorComponent } from '../core-month-selector/core-month-selector/core-month-selector.component';\r\nimport { CoreRadioGroupComponent } from '../core-radio-group/core-radio-group/core-radio-group.component';\r\nimport { TooltipDirective } from '../tooltip/tooltip.directive';\r\nimport { BaseComponent } from '../base-component/base/base.component';\r\nimport { ICoreFormSection, IFormBaseControl, IValidator } from '../core-form/core-form/enum-interfaces';\r\nimport { CoreControlComponent } from '../core-control/core-control/core-control.component';\r\nimport { TranslatePipe } from '../../app-pipes/translate.pipe';\r\nimport { EnumFormBaseContolType } from '../../enum/EnumFormBaseContolType';\r\nimport { EnumCoreFormControlSeekerSourceType } from '../core-form-control-seeker/EnumCoreFormControlSeekerSourceType';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { NgStyle, NgTemplateOutlet } from '@angular/common';\r\nimport { BehaviorSubject, catchError, of } from 'rxjs';\r\nimport { IFormDesignCell, IFormDesignRow } from './interfaces';\r\nimport { FormMetadataComponent } from './form-metadata/form-metadata.component';\r\nimport { ICoreDropdownOption } from '../../interfaces/ICoreDropdownOption';\r\nimport { CorePageHeaderComponent } from '../core-page-header/core-page-header/core-page-header.component';\r\nimport { ICoreButtonVNS } from '../core-button-group-vns/core-button-group-vns/ICoreButtonVNS';\r\nimport { EnumCoreButtonVNSCode } from '../core-button-group-vns/core-button-group-vns/EnumCoreButtonVNSCode';\r\nimport { CoreFormComponent } from '../core-form/core-form/core-form.component';\r\nimport { FieldSettingComponent } from './field-setting/field-setting.component';\r\nimport { EnumFormDesignMode } from './enums/EnumFormDesignMode';\r\nimport { EnumLeftPanelMode } from './enums/EnumLeftPanelMode';\r\nimport { CoreFormDesignService } from './core-form-design.service';\r\nimport { AttachmentFieldHelperService } from './field-setting/type-specific/attachment-props/attachment-field-helper.service';\r\nimport { MultiLanguageService } from '../../services/multi-language.service';\r\nimport { TableCellPipe } from '../pipes/table-cell.pipe';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { EnumCorePageEditMode } from '../core-page-edit/EnumCorePageEditMode';\r\nimport { EnumTranslateKey } from 'alpha-global-constants';\r\nimport { AlertService } from '../alert/alert.service';\r\nimport { noneAutoClosedAlertOptions } from '../../constants/alertOptions';\r\nimport { FullscreenModalLoaderComponent } from '../fullscreen-modal-loader/fullscreen-modal-loader.component';\r\nimport { LiveFormComponent } from './live-form/live-form.component' \r\n\r\n@Component({\r\n selector: 'core-form-design',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n NgStyle,\r\n NgTemplateOutlet,\r\n FullscreenModalLoaderComponent,\r\n CorePageHeaderComponent,\r\n FormMetadataComponent,\r\n ReactiveFormsModule,\r\n TranslatePipe,\r\n TableCellPipe,\r\n TooltipDirective,\r\n CoreFormComponent,\r\n CoreControlComponent,\r\n CoreDropdownComponent,\r\n CoreChecklistComponent,\r\n CoreFormControlSeekerComponent,\r\n CoreCheckboxComponent,\r\n CoreAttachmentComponent,\r\n CoreDatePickerComponent,\r\n CoreRadioGroupComponent,\r\n CoreMonthSelectorComponent,\r\n TooltipDirective,\r\n CoreCurrencyInputComponent,\r\n FieldSettingComponent,\r\n LiveFormComponent,\r\n ],\r\n templateUrl: './core-form-design.component.html',\r\n styleUrls: [\r\n './core-form-design.component.scss',\r\n '../core-form/core-form/core-form.component.scss',\r\n '../core-button-group-vns/core-button-vns/core-button-vns.component.scss',\r\n ],\r\n animations: [slideFromTopFadeIn]\r\n})\r\nexport class CoreFormDesignComponent extends BaseComponent {\r\n\r\n @ViewChild('settingPanel') settingPanel!: ElementRef;\r\n\r\n enumType = EnumFormDesignMode;\r\n enumLeftPanelMode = EnumLeftPanelMode;\r\n $leftPanelMode = computed(() => {\r\n if (this.coreFormDesignService.$fieldSettingPanelOpen()) {\r\n return this.enumLeftPanelMode.SelectedFieldJson\r\n } else {\r\n return this.enumLeftPanelMode.FieldCollection\r\n }\r\n })\r\n\r\n previewMode$ = new BehaviorSubject<EnumCorePageEditMode>(EnumCorePageEditMode.CREATE);\r\n\r\n $loading: WritableSignal<boolean> = signal(false);\r\n\r\n public coreFormDesignService = inject(CoreFormDesignService);\r\n renderer = inject(Renderer2);\r\n cdr = inject(ChangeDetectorRef);\r\n route = inject(ActivatedRoute);\r\n alertService = inject(AlertService);\r\n\r\n listenerFn!: () => void;\r\n\r\n formDesign = this.coreFormDesignService.formDesign;\r\n\r\n setControlProp = this.coreFormDesignService.setControlProp.bind(this.coreFormDesignService);\r\n\r\n isDragOverMap: Record<string, boolean> = {};\r\n\r\n constructor(public override mls: MultiLanguageService) {\r\n super(mls);\r\n this.coreFormDesignService.resetFormDesignState();\r\n effect(() => {\r\n const _ = this.coreFormDesignService.$placeholderSections();\r\n this.syncFormDesignWithSections();\r\n });\r\n }\r\n\r\n form: FormGroup = new FormGroup({\r\n stringBox: new FormControl(),\r\n email: new FormControl(),\r\n textarea: new FormControl(),\r\n number: new FormControl(),\r\n currency: new FormControl(),\r\n dropdown: new FormControl(),\r\n employeeSeeker: new FormControl(),\r\n checklist: new FormControl(),\r\n employeeSeekerMultiple: new FormControl(),\r\n datePicker: new FormControl(),\r\n monthSelector: new FormControl(),\r\n attachment: new FormControl(),\r\n attachmentBuffer: new FormControl(),\r\n checkbox: new FormControl(),\r\n })\r\n\r\n // 🔹 Computed signal for live preview\r\n /*$sections = computed(() => {\r\n return this.coreFormDesignService.sanitizeSectionsForSaving(this.coreFormDesignService.$placeholderSections());\r\n });*/\r\n\r\n $sections = computed<ICoreFormSection[]>(() => {\r\n const hydrated = this.coreFormDesignService.rehydrateSections(\r\n this.coreFormDesignService.$placeholderSections()\r\n );\r\n let sections = this.coreFormDesignService.toCoreFormSections(hydrated);\r\n\r\n // ✅ Inject hidden \"id\" field into the first cell row of the first section\r\n sections = this.coreFormDesignService.injectSystemControls(sections, this.coreFormDesignService.$afInstance().hasIdOfStringType ?? false);\r\n\r\n return sections;\r\n\r\n });\r\n\r\n checkError$ = new BehaviorSubject<boolean>(false);\r\n\r\n controlCategories: { name: string, controls: IFormBaseControl[] }[] = [\r\n {\r\n name: 'Text',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'string',\r\n field: 'stringBox',\r\n label: '',\r\n value: '',\r\n placeholder: 'String box',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'email',\r\n field: 'email',\r\n label: '',\r\n value: '',\r\n placeholder: 'Email',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTAREA,\r\n type: 'string',\r\n field: 'textarea',\r\n label: '',\r\n value: '',\r\n textareaRows: 2,\r\n placeholder: 'Text area',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Numerical',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.TEXTBOX,\r\n type: 'number',\r\n field: 'number',\r\n label: '',\r\n value: 100,\r\n placeholder: 'Number',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CURRENCY,\r\n type: 'number',\r\n field: 'currency',\r\n label: '',\r\n value: '',\r\n placeholder: 'Currency',\r\n headless: true,\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Single selection',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.DROPDOWN,\r\n type: 'any',\r\n field: 'dropdown',\r\n label: '',\r\n value: '',\r\n dropdownOptions$: new BehaviorSubject<ICoreDropdownOption[]>([]),\r\n shownFrom: 'name',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Dropdown',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n type: 'any[]',\r\n field: 'employeeSeeker',\r\n label: '',\r\n value: ['Nguyễn A'],\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Employee seeker',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Multiple Selection',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CHECKLIST,\r\n type: 'any[]',\r\n field: 'checklist',\r\n label: '',\r\n value: [],\r\n checklistOptions$: new BehaviorSubject<ICoreChecklistOption[]>([]),\r\n shownFrom: 'name',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n placeholder: 'Check list',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.SEEKER,\r\n seekerSourceType: EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK,\r\n multiMode: true,\r\n type: 'any[]',\r\n field: 'employeeSeekerMultiple',\r\n label: '',\r\n value: [],\r\n objectList$: new BehaviorSubject<any[]>([]),\r\n boundFrom: 'id',\r\n shownFrom: 'fullname',\r\n getByIdObject$: new BehaviorSubject<any>({}),\r\n multiModeTableHeight: 100,\r\n placeholder: 'Employee seeker (multi mode)',\r\n headless: true,\r\n }\r\n ]\r\n },\r\n {\r\n name: 'Date',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.DATEPICKER,\r\n type: 'date',\r\n field: 'datePicker',\r\n label: '',\r\n value: '',\r\n placeholder: 'Date picker',\r\n showPlaceholder: true,\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.MONTHSELECTOR,\r\n type: 'string',\r\n field: 'monthSelector',\r\n label: '',\r\n value: '',\r\n placeholder: 'Month selector',\r\n headless: true,\r\n },\r\n ]\r\n },\r\n {\r\n name: 'Other',\r\n controls: [\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.ATTACHMENT,\r\n type: 'string',\r\n field: 'attachment',\r\n label: '',\r\n value: '',\r\n assignTo: 'unknown',\r\n placeholder: 'Attachment',\r\n headless: true,\r\n },\r\n {\r\n flexSize: 12,\r\n controlType: EnumFormBaseContolType.CHECKBOX,\r\n type: 'boolean',\r\n field: 'checkbox',\r\n label: '',\r\n value: '',\r\n placeholder: 'Checkbox',\r\n headless: true,\r\n },\r\n ]\r\n }\r\n ]\r\n\r\n onDragStart(event: DragEvent, control: IFormBaseControl) {\r\n this.coreFormDesignService.beginDragTemplate(control);\r\n }\r\n\r\n onDragOver(event: DragEvent) {\r\n event.preventDefault(); // necessary to allow drop\r\n }\r\n\r\n onDragEnter(placeholderId: string): void {\r\n //if (this.coreFormDesignService.$isDragging()) {\r\n this.isDragOverMap[placeholderId] = true;\r\n //}\r\n }\r\n\r\n onDragLeave(placeholderId: string): void {\r\n this.isDragOverMap[placeholderId] = false;\r\n }\r\n\r\n onDropIntoCell(event: DragEvent, sectionIndex: number, rowIndex: number, colIndex: number): void {\r\n event.preventDefault();\r\n const template = this.coreFormDesignService.$currentControlTemplate();\r\n if (!template) return;\r\n\r\n const normalized = this.coreFormDesignService.normalize({\r\n ...template,\r\n field: this.generateFieldNameFor(template),\r\n label: this.generateLabelNameFor(template),\r\n value: null\r\n });\r\n\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n const section = sections[sectionIndex];\r\n const row = section?.rows[rowIndex];\r\n if (!row || row.cells.length <= colIndex) return sections;\r\n\r\n const usedFlex = row.cells.reduce((sum, cell) => sum + (cell?.control?.flexSize ?? 0), 0);\r\n const remainingFlex = 12 - usedFlex;\r\n const flexSize = Math.max(1, remainingFlex);\r\n normalized.flexSize = flexSize;\r\n\r\n const previous = row.cells[colIndex]?.control;\r\n\r\n if (previous && previous.flexSize !== undefined) {\r\n /*\r\n AttachmentFieldHelperService.handleAttachmentOverwrite(\r\n previous as IFormBaseControl,\r\n this.coreFormDesignService.getAllControlsFromSections()\r\n );\r\n */\r\n }\r\n\r\n const previousField = row.cells[colIndex]?.control?.field ?? null;\r\n this.coreFormDesignService.replaceControl(previousField, normalized);\r\n\r\n // 🔹 INSERT FIRST\r\n row.cells[colIndex] = { ...row.cells[colIndex], control: normalized };\r\n this.coreFormDesignService.$selectedCell.set(row.cells[colIndex]);\r\n\r\n // 🔹 THEN CALL setup\r\n if (AttachmentFieldHelperService.isAttachment(normalized)) {\r\n const assignToField = AttachmentFieldHelperService.buildHiddenAssignToField(normalized.field);\r\n normalized.field = `${normalized.field}Buffer`\r\n normalized.assignTo = assignToField.field;\r\n AttachmentFieldHelperService.injectAssignToFieldIntoRow(row, assignToField);\r\n }\r\n\r\n\r\n setTimeout(() => {\r\n this.coreFormDesignService.setControlPropDirectly(\r\n 'validators',\r\n normalized.validators ?? [],\r\n normalized\r\n );\r\n });\r\n\r\n return sections;\r\n });\r\n\r\n this.triggerUpdateSections();\r\n this.isDragOverMap[sectionIndex + '_' + rowIndex + '_' + colIndex] = false;\r\n this.coreFormDesignService.endDrag();\r\n }\r\n\r\n generateFieldNameFor = this.coreFormDesignService.generateFieldNameFor.bind(this.coreFormDesignService);\r\n\r\n generateLabelNameFor = this.coreFormDesignService.generateLabelNameFor.bind(this.coreFormDesignService);\r\n\r\n getAllControlsFromSections = this.coreFormDesignService.getAllControlsFromSections.bind(this.coreFormDesignService);\r\n\r\n\r\n // isAnyDragging(): boolean {\r\n // return this.coreFormDesignService.$isDragging();\r\n // }\r\n\r\n addSection(): void {\r\n this.coreFormDesignService.$placeholderSections.update(sections => [\r\n ...sections,\r\n {\r\n caption: `Section ${sections.length + 1}`,\r\n rows: [{ cells: [{ flexSize: 12 }] }]\r\n }\r\n ]);\r\n }\r\n\r\n /*deleteRow(sectionIndex: number, rowIndex: number): void {\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n const section = sections[sectionIndex];\r\n if (section) {\r\n section.rows = section.rows.filter((x, index) => index !== rowIndex);\r\n }\r\n return sections;\r\n });\r\n }*/\r\n\r\n deleteSection(sectionIndex: number): void {\r\n const sections = this.coreFormDesignService.$placeholderSections();\r\n const section = sections[sectionIndex];\r\n\r\n const hasControls = section?.rows?.some(row =>\r\n row?.cells?.some(cell => !!cell?.control)\r\n );\r\n\r\n if (hasControls) {\r\n const confirmed = confirm('This section contains controls. Are you sure you want to delete it?');\r\n if (!confirmed) return;\r\n }\r\n\r\n this.coreFormDesignService.$placeholderSections.update(prev =>\r\n prev.filter((_, idx) => idx !== sectionIndex)\r\n );\r\n }\r\n\r\n deleteRow(sectionIndex: number, rowIndex: number): void {\r\n\r\n const sections = this.coreFormDesignService.$placeholderSections();\r\n\r\n const section = sections[sectionIndex];\r\n const row = section?.rows?.[rowIndex];\r\n\r\n if (!row) return; // safety check\r\n\r\n const hasControls = row.cells?.some(cell => !!cell?.control);\r\n\r\n if (hasControls) {\r\n const confirmed = confirm('This row contains controls. Are you sure you want to delete it?');\r\n if (!confirmed) return; // user canceled\r\n }\r\n\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n return sections.map((section, sIdx) => {\r\n if (sIdx !== sectionIndex) return section;\r\n\r\n return {\r\n ...section,\r\n rows: (section.rows ?? []).filter((_, rIdx) => rIdx !== rowIndex)\r\n };\r\n });\r\n });\r\n }\r\n\r\n addRow(sectionIndex: number): void {\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n const section = sections[sectionIndex];\r\n if (section) {\r\n section.rows.push({ cells: [{ flexSize: 12 }] });\r\n }\r\n return sections;\r\n });\r\n }\r\n\r\n addColumn(row: IFormDesignRow | undefined): void {\r\n if (!row || row.cells.length >= 4) return;\r\n\r\n const usedFlex = row.cells.reduce((sum, c) => sum + (c.flexSize ?? 0), 0);\r\n\r\n // ✅ Case 1: Normal case – still space available\r\n if (usedFlex < 12) {\r\n const remaining = 12 - usedFlex;\r\n row.cells.push({ flexSize: Math.min(3, remaining) });\r\n return;\r\n }\r\n\r\n // 💥 Case 2: Full row — try to rebalance\r\n if (usedFlex === 12) {\r\n const count = row.cells.length;\r\n\r\n if (count === 1) {\r\n // 12 → 6 + 6\r\n row.cells[0].flexSize = 6;\r\n row.cells.push({ flexSize: 6 });\r\n return;\r\n }\r\n\r\n if (count === 2) {\r\n // 6 + 6 → 4 + 4 + 4\r\n row.cells.forEach(c => (c.flexSize = 4));\r\n row.cells.push({ flexSize: 4 });\r\n return;\r\n }\r\n\r\n if (count === 3) {\r\n // 4 + 4 + 4 → 3 + 3 + 3 + 3\r\n row.cells.forEach(c => (c.flexSize = 3));\r\n row.cells.push({ flexSize: 3 });\r\n return;\r\n }\r\n\r\n // ❌ Already 4 cells, each 3 — can’t split further\r\n return;\r\n }\r\n\r\n // 🔧 Optional fallback logic for unknown edge cases\r\n const maxIndex = row.cells.reduce((maxI, c, i, arr) =>\r\n (c.flexSize ?? 0) > (arr[maxI]?.flexSize ?? 0) ? i : maxI, 0\r\n );\r\n\r\n const maxCell = row.cells[maxIndex];\r\n if ((maxCell?.flexSize ?? 0) <= 3) return; // nothing to shrink\r\n\r\n maxCell.flexSize -= 3;\r\n row.cells.push({ flexSize: 3 });\r\n }\r\n\r\n onCorePageHeaderButtonClicked(e: ICoreButtonVNS): void {\r\n if (e.code === EnumCoreButtonVNSCode.HEADER_SWITCH_VIEW) {\r\n this.coreFormDesignService.$mode.set(this.coreFormDesignService.$mode() === EnumFormDesignMode.Preview ? EnumFormDesignMode.Default : EnumFormDesignMode.Preview)\r\n } else if (e.code === EnumCoreButtonVNSCode.HEADER_SAVE) {\r\n\r\n }\r\n }\r\n\r\n closePreview() {\r\n this.coreFormDesignService.$mode.set(EnumFormDesignMode.Default)\r\n }\r\n\r\n onPreviewSubmit(e: any): void {\r\n alert(JSON.stringify(e, null, 2))\r\n }\r\n\r\n onCellClicked(sectionIndex: number, rowIndex: number, colIndex: number): void {\r\n const row = this.coreFormDesignService.$placeholderSections()[sectionIndex].rows[rowIndex];\r\n\r\n if (!!row) {\r\n // Toggle selection\r\n if (!!row.cells && row.cells.length > colIndex) {\r\n row.cells[colIndex].selected = !row.cells[colIndex].selected;\r\n }\r\n\r\n\r\n // Only allow max 2 selections\r\n const selected = row.cells.filter(c => c?.selected);\r\n if (selected.length > 2) {\r\n row.cells.forEach(c => c && (c.selected = false));\r\n row[colIndex].selected = true;\r\n }\r\n }\r\n\r\n }\r\n\r\n canMergeCells(sectionIndex: number, rowIndex: number): boolean {\r\n const row = this.coreFormDesignService.$placeholderSections()[sectionIndex].rows[rowIndex];\r\n const selected = row?.cells.map((c, i) => ({ c, i })).filter(x => x.c?.selected);\r\n\r\n if (selected?.length !== 2) return false;\r\n\r\n const [a, b] = selected;\r\n\r\n if (a.c.control || b.c.control) return false;\r\n\r\n return Math.abs(a.i - b.i) === 1; // Must be neighbors\r\n }\r\n\r\n mergeCells(sectionIndex: number, rowIndex: number): void {\r\n const row = this.coreFormDesignService.$placeholderSections()[sectionIndex].rows[rowIndex];\r\n if (!row) return;\r\n\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n const selected = row.cells\r\n .map((c, i) => ({ c, i }))\r\n .filter(x => x.c?.selected);\r\n\r\n if (selected.length !== 2) return sections;\r\n\r\n const [a, b] = selected.sort((a, b) => a.i - b.i);\r\n\r\n const mergedFlex =\r\n (typeof a.c.flexSize === 'number' ? a.c.flexSize : 3) +\r\n (typeof b.c.flexSize === 'number' ? b.c.flexSize : 3);\r\n\r\n const mergedCell: IFormDesignCell = {\r\n //control: { ...a.c.control, flexSize: mergedFlex }, // keep control data\r\n flexSize: mergedFlex,\r\n selected: false\r\n };\r\n\r\n row.cells.splice(a.i, 2, mergedCell); // replace both cells with one\r\n\r\n return sections;\r\n });\r\n }\r\n\r\n getControl = this.coreFormDesignService.getControl.bind(this.coreFormDesignService);\r\n\r\n openSettingsForCell(cell: IFormDesignCell): void {\r\n this.coreFormDesignService.$selectedCell.set({ ...cell });\r\n }\r\n\r\n deleteField(row: IFormDesignRow | undefined, colIndex: number): void {\r\n if (!row || !row.cells[colIndex]) return;\r\n const cellToDelete = row.cells[colIndex];\r\n if (!cellToDelete.control) return;\r\n\r\n if (confirm('Are you sure to remove the field?')) {\r\n\r\n // 🧠 Check if it's selected\r\n const selectedCell = this.coreFormDesignService.$selectedCell();\r\n const shouldClearSelection = selectedCell === cellToDelete;\r\n let deletedControl: IFormBaseControl | null = null;\r\n\r\n // ✅ Update the reactive state\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n for (const section of sections) {\r\n for (const r of section.rows) {\r\n if (r === row) {\r\n const control = r.cells[colIndex].control;\r\n if (control && control.field && control.flexSize !== undefined) {\r\n deletedControl = control as IFormBaseControl; // ✅ Save before removing\r\n }\r\n r.cells[colIndex].control = undefined; // ❌ Clear after\r\n break;\r\n }\r\n }\r\n }\r\n return sections;\r\n });\r\n\r\n if (deletedControl) {\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n for (const section of sections) {\r\n for (const row of section.rows) {\r\n if (!!row) {\r\n row.cells = row.cells.filter(cell =>\r\n cell.control?.field !== deletedControl?.assignTo\r\n );\r\n }\r\n }\r\n }\r\n return sections;\r\n });\r\n }\r\n\r\n // ❌ Clear selection if needed\r\n if (shouldClearSelection) {\r\n this.coreFormDesignService.$selectedCell.set(null);\r\n }\r\n\r\n this.triggerUpdateSections();\r\n }\r\n }\r\n\r\n onCaptionEditEnd(index: number, event: any): void {\r\n const newCaption = (event.target as HTMLElement).innerText.trim();\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n sections[index].caption = newCaption;\r\n return sections;\r\n });\r\n }\r\n\r\n onFieldCaptionEditEnd(cell: IFormDesignCell, event: Event): void {\r\n const element = event.target as HTMLElement;\r\n const newLabel = element.innerText.trim();\r\n\r\n // Fallback if empty\r\n cell.control!.label = newLabel || 'Unnamed Field';\r\n\r\n this.triggerUpdateSections();\r\n }\r\n\r\n insertSection(): void {\r\n }\r\n\r\n insertRow(sectionIndex: number, rowIndex: number): void {\r\n\r\n const sections = this.coreFormDesignService.$placeholderSections();\r\n const section = sections[sectionIndex];\r\n if (!section) return;\r\n\r\n const newRow: IFormDesignRow = {\r\n cells: [\r\n { flexSize: 12 },\r\n ]\r\n };\r\n\r\n section.rows.splice(rowIndex + 1, 0, newRow);\r\n\r\n this.coreFormDesignService.$placeholderSections.set([...sections]);\r\n\r\n }\r\n\r\n\r\n ngAfterViewInit(): void {\r\n this.listenerFn = this.renderer.listen('window', 'click', (e: Event) => {\r\n const target = e.target as HTMLElement;\r\n\r\n if (!this.settingPanel?.nativeElement.contains(target) &&\r\n !target.closest('.feather-settings') && !target.closest('.json-preview')) {\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(false);\r\n this.coreFormDesignService.$selectedCell.set(null);\r\n this.coreFormDesignService.$currentControlTemplate.set(null);\r\n this.coreFormDesignService.$currentControl.set(null);\r\n }\r\n\r\n this.cdr.markForCheck();\r\n\r\n });\r\n\r\n setTimeout(() => {\r\n this.subscriptions.push(\r\n this.route.params.subscribe(x => {\r\n let id: string = '0';\r\n try {\r\n id = atob(x['id']);\r\n this.coreFormDesignService.$afInstance.update(instance => ({\r\n ...instance,\r\n id\r\n }))\r\n } catch { return }\r\n\r\n if (id !== '0') {\r\n this.coreFormDesignService.editMode$.next(EnumCorePageEditMode.UPDATE);\r\n this.coreFormDesignService.$submitText.set(EnumTranslateKey.UI_EDIT_FORM_BUTTON_SAVE);\r\n this.$loading.set(true);\r\n\r\n this.subscriptions.push(\r\n this.coreFormDesignService.getById(id)\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\r\n this.alertService.error(msg, noneAutoClosedAlertOptions);\r\n return of(err);\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.coreFormDesignService.$afInstance.set(\r\n this.coreFormDesignService.mapFromAfInstanceDTO(x.body.innerBody)\r\n )\r\n this.coreFormDesignService.syncPlaceholderSectionsFromInstance();\r\n\r\n this.coreFormDesignService.$shouldPatchMetadataForm.set(true);\r\n\r\n }\r\n })\r\n )\r\n } else {\r\n\r\n }\r\n\r\n })\r\n )\r\n })\r\n }\r\n\r\n onControlParamsChange(updated: IFormBaseControl): void {\r\n this.coreFormDesignService.$placeholderSections.update(sections => {\r\n const cell = this.coreFormDesignService.$selectedCell();\r\n if (!cell) return sections;\r\n\r\n // Patch the selected cell\r\n Object.assign(cell.control!, updated);\r\n return sections;\r\n });\r\n }\r\n\r\n get normalizedSelectedControl(): IFormBaseControl {\r\n const cell = this.coreFormDesignService.$selectedCell();\r\n\r\n if (!cell?.control) {\r\n throw new Error('No control is currently selected.');\r\n }\r\n\r\n return this.coreFormDesignService.normalize(cell.control);\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 triggerUpdateSections(): void {\r\n this.coreFormDesignService.$placeholderSections.set([...this.coreFormDesignService.$placeholderSections()]);\r\n }\r\n\r\n syncFormDesignWithSections(): void {\r\n const existingControls = Object.keys(this.formDesign.controls);\r\n const expectedControls: string[] = [];\r\n\r\n for (const section of this.coreFormDesignService.$placeholderSections()) {\r\n for (const row of section.rows) {\r\n for (const cell of row?.cells || []) {\r\n const control = cell?.control;\r\n if (control?.field) {\r\n expectedControls.push(control.field);\r\n\r\n if (!this.formDesign.contains(control.field)) {\r\n this.formDesign.addControl(\r\n control.field,\r\n new FormControl(control.value ?? null)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 🧹 Remove controls that no longer exist\r\n for (const field of existingControls) {\r\n if (!expectedControls.includes(field)) {\r\n this.formDesign.removeControl(field);\r\n }\r\n }\r\n }\r\n\r\n isRequired(control: IFormBaseControl | undefined | null): boolean {\r\n if (!control || !control.validators) return false;\r\n\r\n return control.validators.some((v: IValidator) => v.name === 'required' || v.name === 'requiredTrue');\r\n }\r\n\r\n filteredCells(row: IFormDesignRow | undefined): IFormDesignCell[] {\r\n if (!row) return [];\r\n return row.cells.filter(cell => (cell?.flexSize ?? 0) > 0);\r\n }\r\n\r\n onFormDesignCreated(e: any) {\r\n console.log(\"onFormDesignCreated\", e)\r\n }\r\n\r\n onLiveFormCreated(e: any) {\r\n console.log(\"onLiveFormCreated\", e)\r\n }\r\n\r\n}\r\n","<div class=\"core-form-design-container fs-13\">\r\n\r\n <core-page-header title=\"UI.COMPONENT_TITLE.WORKFLOW_FORM_DESIGN\" (buttonClick)=\"onCorePageHeaderButtonClicked($event)\"></core-page-header>\r\n\r\n <ng-template #formMetadata>\r\n <form-metadata></form-metadata>\r\n </ng-template>\r\n\r\n <aside class=\"af-metadata-overlay\" [@slideFromTopFadeIn]=\"coreFormDesignService.$showFormMetadata() ? 'in' : 'out'\"\r\n [class.shown]=\"coreFormDesignService.$showFormMetadata()\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"formMetadata\"></ng-container>\r\n </aside>\r\n\r\n <div class=\"field-setting-panel\" [class.open]=\"coreFormDesignService.$fieldSettingPanelOpen()\" #settingPanel>\r\n @if (!!(this.coreFormDesignService.$selectedCell())) {\r\n <field-setting></field-setting>\r\n }\r\n </div>\r\n\r\n <div class=\"form-design-left\">\r\n\r\n @switch ($leftPanelMode()) {\r\n @case (enumLeftPanelMode.FieldCollection) {\r\n @for (category of controlCategories; track $index) {\r\n <div class=\"category-name\">\r\n {{ category.name }}\r\n </div>\r\n <ul>\r\n @for (control of category.controls; track $index) {\r\n <li draggable=\"true\" (dragstart)=\"onDragStart($event, control)\" [class.full-width]=\"control.controlType === 'SEEKER' || control.controlType === 'ATTACHMENT'\">\r\n <core-control [control]=\"control\" [form]=\"form\" [checkError$]=\"checkError$\"></core-control>\r\n </li>\r\n <div class=\"space\"></div>\r\n }\r\n </ul>\r\n }\r\n }\r\n @case (enumLeftPanelMode.SelectedFieldJson) {\r\n <pre class=\"json-preview\">{{ coreFormDesignService.$currentControlJson() | tableCell : 'TRIM' : lang }}</pre>\r\n }\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"form-design-right\">\r\n\r\n @if (coreFormDesignService.$mode() === enumType.Default) {\r\n <div class=\"form-wrapper\">\r\n <form [formGroup]=\"formDesign\" autocomplete=\"off\">\r\n <div class=\"form-cells\">\r\n\r\n <div class=\"form-tool-bar\">\r\n <button class=\"core-button-vns-container\" (click)=\"addSection()\">+ Add Section</button>\r\n </div>\r\n \r\n @for (section of coreFormDesignService.$placeholderSections(); track $index; let sectionIndex = $index) {\r\n <div class=\"form-section-placeholder\">\r\n\r\n <div class=\"section-header\">\r\n\r\n <div class=\"section-img-wrapper\">\r\n <div class=\"section-img\"></div>\r\n </div>\r\n\r\n <label contenteditable=\"true\"\r\n (blur)=\"onCaptionEditEnd(sectionIndex, $event)\"\r\n (keydown.enter)=\"onCaptionEditEnd(sectionIndex, $event); $event.preventDefault()\"\r\n >{{ section.caption }}</label>\r\n\r\n <div class=\"section-tool pointer\" (click)=\"deleteSection(sectionIndex)\" [appTooltip]=\"'Delete section'\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n \r\n </div>\r\n \r\n @for (row of section.rows; track $index; let rowIndex = $index) {\r\n\r\n <div class=\"form-row-wrapper\">\r\n <div class=\"form-row\">\r\n @for (cell of filteredCells(row); track $index; let colIndex = $index) {\r\n <div class=\"form-cell drop-target\" \r\n [ngStyle]=\"{ flex: (cell.flexSize ?? 3) + ' 1 0%' }\"\r\n (drop)=\"onDropIntoCell($event, sectionIndex, rowIndex, colIndex)\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragenter)=\"onDragEnter(sectionIndex + '_' + rowIndex + '_' + colIndex)\"\r\n (dragleave)=\"onDragLeave(sectionIndex + '_' + rowIndex + '_' + colIndex)\"\r\n [class.selected]=\"cell?.selected\"\r\n [class.dragging-over]=\"isDragOverMap[sectionIndex + '_' + rowIndex + '_' + colIndex]\"\r\n [class.has-control]=\"!!cell && !!cell.control && !!getControl(cell)\"\r\n (click)=\"onCellClicked(sectionIndex, rowIndex, colIndex)\"\r\n >\r\n\r\n\r\n @if (!isDragOverMap[sectionIndex + '_' + rowIndex + '_' + colIndex]) {\r\n\r\n @if (!!cell && !!cell.control && !!getControl(cell)) {\r\n <label contenteditable=\"true\"\r\n (blur)=\"onFieldCaptionEditEnd(cell, $event)\"\r\n (keydown.enter)=\"onFieldCaptionEditEnd(cell, $event); $event.preventDefault()\"\r\n [class.d-none]=\"!!getControl(cell)?.hidden\"\r\n [class.required]=\"!!cell && !!cell.control && !!getControl(cell) && isRequired(getControl(cell))\"\r\n >{{ cell.control.label || 'label' }}</label>\r\n <core-control \r\n [control]=\"getControl(cell)!\" \r\n [form]=\"formDesign\"\r\n [checkError$]=\"checkError$\" />\r\n \r\n <div class=\"field-toolbar\">\r\n <ul>\r\n <li>\r\n <div class=\"field-tool pointer\" (click)=\"openSettingsForCell(cell)\" [appTooltip]=\"'Show settings'\">\r\n <i class=\"feather-settings\"></i>\r\n </div>\r\n </li>\r\n <li>\r\n <div class=\"field-tool pointer\" (click)=\"deleteField(row, colIndex)\" [appTooltip]=\"'Remove field from cell'\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n \r\n } @else {\r\n <div class=\"placeholder\">Drop here</div>\r\n }\r\n\r\n @if (cell?.selected && canMergeCells(sectionIndex, rowIndex)) {\r\n <div class=\"merge-toolbar\">\r\n <button (click)=\"mergeCells(sectionIndex, rowIndex)\">🔗 Merge</button>\r\n </div>\r\n }\r\n \r\n }\r\n\r\n </div>\r\n }\r\n </div>\r\n <div class=\"row-tool-bar\">\r\n <div class=\"icon-wrapper\" (click)=\"deleteRow(sectionIndex, rowIndex)\" [appTooltip]=\"'Delete row'\"><i class=\"feather-x\"></i></div>\r\n <div class=\"icon-wrapper\" (click)=\"addRow(sectionIndex)\" [appTooltip]=\"'Add row'\"><i class=\"feather-arrow-down\"></i></div>\r\n <div class=\"icon-wrapper\" (click)=\"insertRow(sectionIndex, rowIndex)\" [appTooltip]=\"'Insert row'\"><i class=\"feather-corner-right-down\"></i></div>\r\n <div class=\"icon-wrapper\" (click)=\"addColumn(row)\" [appTooltip]=\"'Add column'\"><i class=\"feather-arrow-right\"></i></div>\r\n </div>\r\n </div>\r\n\r\n }\r\n </div>\r\n }\r\n \r\n \r\n </div>\r\n </form>\r\n </div>\r\n } @else if (!!$sections()) {\r\n\r\n\r\n @if (!!coreFormDesignService.$afInstance().normalMode) {\r\n\r\n <live-form\r\n [$normalMode]=\"true\"\r\n [$sections]=\"$sections()\"\r\n ></live-form>\r\n\r\n <!-- <div class=\"form-wrapper live-form\" [ngStyle]=\"{\r\n width: !!coreFormDesignService.$afInstance().width ? coreFormDesignService.$afInstance().width + 'px' : 'unset'\r\n }\">\r\n <div class=\"live-form-header\">\r\n <core-page-header [title]=\"coreFormDesignService.$afInstance().captionCode | translate : lang\" [hideButtonGroup]=\"true\"></core-page-header>\r\n </div>\r\n <core-form \r\n [submitText]=\"'Kickoff'\" \r\n [inputSections]=\"$sections()\" \r\n [showCaptionButton]=\"true\"\r\n [customFormButtonItems]=\"coreFormDesignService.$customFormButtonItems()!\" \r\n (onSubmit)=\"onPreviewSubmit($event)\" \r\n [mode$]=\"previewMode$\"\r\n (onFormCreated)=\"onLiveFormCreated($event)\"\r\n ></core-form>\r\n </div> -->\r\n } @else {\r\n\r\n <live-form\r\n [$normalMode]=\"false\"\r\n [$sections]=\"$sections()\"\r\n ($onClose)=\"closePreview()\"\r\n ></live-form>\r\n\r\n <!-- <div class=\"modal-container\">\r\n <div class=\"modal-content-root no-padding\">\r\n\r\n <div class=\"form-wrapper live-form\" [ngStyle]=\"{\r\n width: !!coreFormDesignService.$afInstance().width ? coreFormDesignService.$afInstance().width + 'px' : 'unset'\r\n }\">\r\n <div class=\"live-form-header\">\r\n <core-page-header [title]=\"coreFormDesignService.$afInstance().captionCode | translate : lang\" [hideButtonGroup]=\"true\"></core-page-header>\r\n <div class=\"preview-close-icon\" (click)=\"closePreview()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n <core-form \r\n [submitText]=\"'Kickoff'\" \r\n [inputSections]=\"$sections()\" \r\n [showCaptionButton]=\"true\"\r\n [customFormButtonItems]=\"coreFormDesignService.$customFormButtonItems()!\" \r\n (onSubmit)=\"onPreviewSubmit($event)\" \r\n [mode$]=\"previewMode$\"\r\n (onFormCreated)=\"onFormDesignCreated($event)\" \r\n ></core-form>\r\n </div>\r\n \r\n </div>\r\n </div> -->\r\n }\r\n\r\n\r\n } @else {\r\n <h2>$sections() empty / null / undefined</h2>\r\n }\r\n\r\n\r\n \r\n </div>\r\n @if ($loading()) {\r\n <app-fullscreen-modal-loader></app-fullscreen-modal-loader>\r\n }\r\n \r\n</div>"],"names":["i1.DialogService","i2.MultiLanguageService","i1.MultiLanguageService","i2"],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import * as i0 from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { y as CoreWorkflowListComponent, c as CorePageHeaderComponent, j as TooltipDirective, z as DragReorderDirective, F as FullscreenModalLoaderComponent } from './ngx-histaff-alpha-ngx-histaff-alpha-B6dYCMll.mjs';
4
+ import { RouterOutlet } from '@angular/router';
5
+ import { catchError, of, debounceTime, distinctUntilChanged, switchMap } from 'rxjs';
6
+
7
+ class CoreWorkflowConsumeComponent extends CoreWorkflowListComponent {
8
+ sendRequest(flow) {
9
+ if (flow.afInstanceId) {
10
+ this.$loading.set(true);
11
+ this.subscriptions.push(this.coreWorkflowService.loadAfInstance(flow.afInstanceId).pipe(catchError(err => {
12
+ this.$loading.set(false);
13
+ return of(err);
14
+ })).subscribe(x => {
15
+ this.$loading.set(false);
16
+ if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
17
+ const afInstance = x.body.innerBody;
18
+ this.coreFormDesignService.$afInstance.set(afInstance);
19
+ if (!!afInstance.normalMode) {
20
+ this.router.navigate(['/root/workflow/workflow-consume', btoa(flow.id)]);
21
+ }
22
+ else {
23
+ this.router.navigate([
24
+ '/root/workflow/workflow-consume',
25
+ { outlets: { workflowConsume: [btoa(flow.id)] } }
26
+ ]);
27
+ }
28
+ }
29
+ }));
30
+ }
31
+ }
32
+ ngAfterViewInit() {
33
+ requestAnimationFrame(() => {
34
+ this.coreWorkflowService.refresh('/api/WfWorkflowGroup/GetAllAvailableWithWorkflows');
35
+ this.subscriptions.push(this.orderChanges$
36
+ .pipe(debounceTime(800), // wait 800ms after last change
37
+ distinctUntilChanged((a, b) => JSON.stringify(a.map(x => ({ id: x.id, orderNum: x.orderNum }))) ===
38
+ JSON.stringify(b.map(x => ({ id: x.id, orderNum: x.orderNum })))), switchMap(newOrder => this.coreWorkflowService.updateGroupOrder(newOrder)), catchError(err => {
39
+ console.error('🚨 Backend update failed:', err);
40
+ return of({ ok: false, status: 500, body: { statusCode: 500 } });
41
+ }))
42
+ .subscribe(x => {
43
+ if (x.ok && x.status === 200 && x.body?.statusCode === 200) {
44
+ // no need to send any UI alert
45
+ }
46
+ }));
47
+ });
48
+ }
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreWorkflowConsumeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
50
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreWorkflowConsumeComponent, isStandalone: true, selector: "core-workflow-consume", usesInheritance: true, ngImport: i0, template: "<div class=\"core-workflow-list-container\">\r\n\r\n <core-page-header title=\"\" [hideButtonGroup]=\"true\"></core-page-header>\r\n <div class=\"container-fluid\">\r\n <div class=\"row gx-5 gy-5\" [class.sort-mode]=\"$sortMode()\">\r\n <div class=\"col-md-12 no-padding\">\r\n <div class=\"WorkflowList_operations d-flex d-flex-between\">\r\n <div class=\"WorkflowList_operationsLeft\">\r\n <input type=\"text\" placeholder=\"Search\" class=\"form-control\" [class.d-none]=\"$sortMode()\">\r\n </div>\r\n <div class=\"WorkflowList_operationsRight\">\r\n <button class=\"btn btn-secondary\" (click)=\"togglerSortMode()\">{{ $sortMode() ? 'Expand' : 'Sort'\r\n }}</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"group-list p-relative\">\r\n\r\n @for (group of coreWorkflowService.$allGroups(); track group.id) {\r\n\r\n @if ($sortMode()) {\r\n\r\n <div class=\"WorkflowGroup card sort-mode\"\r\n [attr.data-id]=\"group.id\"\r\n dragReorder\r\n (updateList)=\"onListReorderUpdate($event)\"\r\n >\r\n \r\n <div class=\"WorkflowGroup_header d-flex d-flex-between\">\r\n <div class=\"WorkflowGroup_headerTitle\">\r\n {{ group?.name }}\r\n </div>\r\n \r\n <div class=\"WorkflowGroup_nameOperations d-flex d-flex-end\">\r\n \r\n <div class=\"WorkflowGroup_itemEdit pointer\">\r\n <i class=\"feather-move\"></i>\r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n\r\n } @else {\r\n\r\n <div class=\"WorkflowGroup card\">\r\n \r\n <div class=\"WorkflowGroup_header d-flex d-flex-between\">\r\n\r\n <div class=\"WorkflowGroup_headerTitle\">\r\n {{ group?.name }}\r\n </div>\r\n \r\n </div>\r\n \r\n \r\n <div class=\"Workflows\">\r\n @for (flow of group.wfWorkflows; track $index) {\r\n <div class=\"Workflow\">\r\n <div class=\"Workflow_code\">\r\n\r\n <span [appTooltip]=\"flow.description\" [position]=\"'right'\" [showAnyway]=\"true\">{{ flow.name\r\n }}</span>\r\n </div>\r\n <div class=\"Workflow_operationsRight\">\r\n <div class=\"Workflow_basicInfoEdit pointer\" (click)=\"editWorkflow(flow)\"\r\n [appTooltip]=\"'Send request'\">\r\n <i class=\"feather-mail\" (click)=\"sendRequest(flow)\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n \r\n </div>\r\n\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <router-outlet name=\"workflowConsume\"></router-outlet>\r\n\r\n @if ($loading()) {\r\n <app-fullscreen-modal-loader/>\r\n }\r\n\r\n</div>", styles: [".group-list{padding:0}\n", ".core-workflow-list-container .container-fluid{max-width:1000px}.core-workflow-list-container .row.sort-mode{--bs-gutter-y: 1rem}.core-workflow-list-container .WorkflowList_operations .WorkflowList_operationsLeft{width:50%}.core-workflow-list-container .WorkflowList_operations .WorkflowList_operationsLeft input{width:100%}.core-workflow-list-container .WorkflowList_operations .WorkflowList_operationsRight button{margin-left:12px;border-radius:0}.core-workflow-list-container .WorkflowGroup{padding-left:0!important;padding-right:0!important;border-radius:0;margin-bottom:15px}.core-workflow-list-container .WorkflowGroup .WorkflowGroup_header{height:50px;color:#fff;background-color:gray}.core-workflow-list-container .WorkflowGroup .WorkflowGroup_header .WorkflowGroup_headerTitle{padding-left:15px}.core-workflow-list-container .WorkflowGroup .WorkflowGroup_header .WorkflowGroup_nameOperations>div{width:25px;height:25px;margin-left:8px}.core-workflow-list-container .WorkflowGroup .WorkflowGroup_header .WorkflowGroup_nameOperations>div>i{font-size:18px;color:#fff}.core-workflow-list-container .WorkflowGroup .Workflows .Workflow{display:flex;align-items:center;justify-content:space-between;height:50px}.core-workflow-list-container .WorkflowGroup .Workflows .Workflow:hover{background-color:#d3d3d3}.core-workflow-list-container .WorkflowGroup .Workflows .Workflow .Workflow_code{display:flex;align-items:center;justify-content:flex-start;padding-left:15px}.core-workflow-list-container .WorkflowGroup .Workflows .Workflow .Workflow_code i{display:inline-block;color:gray;font-size:18px;margin-right:8px}.core-workflow-list-container .WorkflowGroup .Workflows .Workflow .Workflow_code i.af-form-assigned{color:#dd5f2a}.core-workflow-list-container .WorkflowGroup .Workflows .Workflow .Workflow_operationsRight{display:flex;align-items:center;justify-content:flex-end;color:gray}.core-workflow-list-container .WorkflowGroup .Workflows .Workflow .Workflow_operationsRight>div{width:25px;height:25px;margin-left:8px}.core-workflow-list-container .WorkflowGroup .Workflows .Workflow .Workflow_operationsRight>div>i{font-size:18px}.core-workflow-list-container .WorkflowGroup.sort-mode{height:50px;cursor:grab}.core-workflow-list-container .WorkflowGroup.sort-mode .WorkflowGroup_header{background-color:#fff;color:gray}.core-workflow-list-container .pointer-none{pointer-events:none}.core-workflow-list-container .p-relative{position:relative}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: CorePageHeaderComponent, selector: "core-page-header", inputs: ["instanceNumber", "shownItems", "title", "hideButtonGroup"], outputs: ["buttonClick"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["color", "backgroundColor", "appTooltip", "showAnyway", "position"] }, { kind: "directive", type: DragReorderDirective, selector: "[dragReorder]", inputs: ["item"], outputs: ["updateList"] }, { kind: "component", type: FullscreenModalLoaderComponent, selector: "app-fullscreen-modal-loader", inputs: ["content"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
51
+ }
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreWorkflowConsumeComponent, decorators: [{
53
+ type: Component,
54
+ args: [{ selector: 'core-workflow-consume', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
55
+ RouterOutlet,
56
+ CorePageHeaderComponent,
57
+ TooltipDirective,
58
+ DragReorderDirective,
59
+ FullscreenModalLoaderComponent
60
+ ], template: "<div class=\"core-workflow-list-container\">\r\n\r\n <core-page-header title=\"\" [hideButtonGroup]=\"true\"></core-page-header>\r\n <div class=\"container-fluid\">\r\n <div class=\"row gx-5 gy-5\" [class.sort-mode]=\"$sortMode()\">\r\n <div class=\"col-md-12 no-padding\">\r\n <div class=\"WorkflowList_operations d-flex d-flex-between\">\r\n <div class=\"WorkflowList_operationsLeft\">\r\n <input type=\"text\" placeholder=\"Search\" class=\"form-control\" [class.d-none]=\"$sortMode()\">\r\n </div>\r\n <div class=\"WorkflowList_operationsRight\">\r\n <button class=\"btn btn-secondary\" (click)=\"togglerSortMode()\">{{ $sortMode() ? 'Expand' : 'Sort'\r\n }}</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"group-list p-relative\">\r\n\r\n @for (group of coreWorkflowService.$allGroups(); track group.id) {\r\n\r\n @if ($sortMode()) {\r\n\r\n <div class=\"WorkflowGroup card sort-mode\"\r\n [attr.data-id]=\"group.id\"\r\n dragReorder\r\n (updateList)=\"onListReorderUpdate($event)\"\r\n >\r\n \r\n <div class=\"WorkflowGroup_header d-flex d-flex-between\">\r\n <div class=\"WorkflowGroup_headerTitle\">\r\n {{ group?.name }}\r\n </div>\r\n \r\n <div class=\"WorkflowGroup_nameOperations d-flex d-flex-end\">\r\n \r\n <div class=\"WorkflowGroup_itemEdit pointer\">\r\n <i class=\"feather-move\"></i>\r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n\r\n } @else {\r\n\r\n <div class=\"WorkflowGroup card\">\r\n \r\n <div class=\"WorkflowGroup_header d-flex d-flex-between\">\r\n\r\n <div class=\"WorkflowGroup_headerTitle\">\r\n {{ group?.name }}\r\n </div>\r\n \r\n </div>\r\n \r\n \r\n <div class=\"Workflows\">\r\n @for (flow of group.wfWorkflows; track $index) {\r\n <div class=\"Workflow\">\r\n <div class=\"Workflow_code\">\r\n\r\n <span [appTooltip]=\"flow.description\" [position]=\"'right'\" [showAnyway]=\"true\">{{ flow.name\r\n }}</span>\r\n </div>\r\n <div class=\"Workflow_operationsRight\">\r\n <div class=\"Workflow_basicInfoEdit pointer\" (click)=\"editWorkflow(flow)\"\r\n [appTooltip]=\"'Send request'\">\r\n <i class=\"feather-mail\" (click)=\"sendRequest(flow)\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n \r\n </div>\r\n\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <router-outlet name=\"workflowConsume\"></router-outlet>\r\n\r\n @if ($loading()) {\r\n <app-fullscreen-modal-loader/>\r\n }\r\n\r\n</div>", styles: [".group-list{padding:0}\n", ".core-workflow-list-container .container-fluid{max-width:1000px}.core-workflow-list-container .row.sort-mode{--bs-gutter-y: 1rem}.core-workflow-list-container .WorkflowList_operations .WorkflowList_operationsLeft{width:50%}.core-workflow-list-container .WorkflowList_operations .WorkflowList_operationsLeft input{width:100%}.core-workflow-list-container .WorkflowList_operations .WorkflowList_operationsRight button{margin-left:12px;border-radius:0}.core-workflow-list-container .WorkflowGroup{padding-left:0!important;padding-right:0!important;border-radius:0;margin-bottom:15px}.core-workflow-list-container .WorkflowGroup .WorkflowGroup_header{height:50px;color:#fff;background-color:gray}.core-workflow-list-container .WorkflowGroup .WorkflowGroup_header .WorkflowGroup_headerTitle{padding-left:15px}.core-workflow-list-container .WorkflowGroup .WorkflowGroup_header .WorkflowGroup_nameOperations>div{width:25px;height:25px;margin-left:8px}.core-workflow-list-container .WorkflowGroup .WorkflowGroup_header .WorkflowGroup_nameOperations>div>i{font-size:18px;color:#fff}.core-workflow-list-container .WorkflowGroup .Workflows .Workflow{display:flex;align-items:center;justify-content:space-between;height:50px}.core-workflow-list-container .WorkflowGroup .Workflows .Workflow:hover{background-color:#d3d3d3}.core-workflow-list-container .WorkflowGroup .Workflows .Workflow .Workflow_code{display:flex;align-items:center;justify-content:flex-start;padding-left:15px}.core-workflow-list-container .WorkflowGroup .Workflows .Workflow .Workflow_code i{display:inline-block;color:gray;font-size:18px;margin-right:8px}.core-workflow-list-container .WorkflowGroup .Workflows .Workflow .Workflow_code i.af-form-assigned{color:#dd5f2a}.core-workflow-list-container .WorkflowGroup .Workflows .Workflow .Workflow_operationsRight{display:flex;align-items:center;justify-content:flex-end;color:gray}.core-workflow-list-container .WorkflowGroup .Workflows .Workflow .Workflow_operationsRight>div{width:25px;height:25px;margin-left:8px}.core-workflow-list-container .WorkflowGroup .Workflows .Workflow .Workflow_operationsRight>div>i{font-size:18px}.core-workflow-list-container .WorkflowGroup.sort-mode{height:50px;cursor:grab}.core-workflow-list-container .WorkflowGroup.sort-mode .WorkflowGroup_header{background-color:#fff;color:gray}.core-workflow-list-container .pointer-none{pointer-events:none}.core-workflow-list-container .p-relative{position:relative}\n"] }]
61
+ }] });
62
+
63
+ export { CoreWorkflowConsumeComponent };
64
+ //# sourceMappingURL=ngx-histaff-alpha-core-workflow-consume.component-5bEZHFsi.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-histaff-alpha-core-workflow-consume.component-5bEZHFsi.mjs","sources":["../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/core-workflow-consume/core-workflow-consume.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/core-workflow-consume/core-workflow-consume.component.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, signal, WritableSignal } from '@angular/core';\r\nimport { CoreWorkflowListComponent } from '../core-workflow-list/core-workflow-list.component'\r\nimport { RouterOutlet } from '@angular/router';\r\nimport { DragReorderDirective } from '../../../directives/drag-reorder.directive';\r\nimport { CorePageHeaderComponent } from '../../core-page-header/core-page-header/core-page-header.component';\r\nimport { TooltipDirective } from '../../tooltip/tooltip.directive';\r\nimport { catchError, debounceTime, distinctUntilChanged, of, switchMap } from 'rxjs';\r\nimport { IWfWorkflow } from '../interfaces/IWfWorkflow';\r\nimport { FullscreenModalLoaderComponent } from '../../fullscreen-modal-loader/fullscreen-modal-loader.component';\r\nimport { IAfInstance } from '../../core-form-design/interfaces';\r\n\r\n@Component({\r\n selector: 'core-workflow-consume',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n RouterOutlet,\r\n CorePageHeaderComponent,\r\n TooltipDirective,\r\n DragReorderDirective,\r\n FullscreenModalLoaderComponent\r\n ],\r\n templateUrl: './core-workflow-consume.component.html',\r\n styleUrls: [\r\n './core-workflow-consume.component.scss',\r\n '../core-workflow-list/core-workflow-list.component.scss'\r\n ]\r\n})\r\nexport class CoreWorkflowConsumeComponent extends CoreWorkflowListComponent {\r\n\r\n sendRequest(flow: IWfWorkflow): void {\r\n\r\n if (flow.afInstanceId) {\r\n this.$loading.set(true);\r\n this.subscriptions.push(\r\n this.coreWorkflowService.loadAfInstance(flow.afInstanceId).pipe(\r\n catchError(err => {\r\n this.$loading.set(false);\r\n return of(err)\r\n })\r\n ).subscribe(x => {\r\n this.$loading.set(false);\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n const afInstance: IAfInstance = x.body.innerBody;\r\n this.coreFormDesignService.$afInstance.set(afInstance)\r\n\r\n if (!!afInstance.normalMode) {\r\n this.router.navigate(\r\n ['/root/workflow/workflow-consume', btoa(flow.id)]\r\n );\r\n } else {\r\n this.router.navigate(\r\n [\r\n '/root/workflow/workflow-consume',\r\n { outlets: { workflowConsume: [btoa(flow.id)] } }\r\n ]\r\n );\r\n }\r\n\r\n }\r\n })\r\n )\r\n }\r\n\r\n }\r\n\r\n override ngAfterViewInit(): void {\r\n requestAnimationFrame(() => {\r\n this.coreWorkflowService.refresh('/api/WfWorkflowGroup/GetAllAvailableWithWorkflows');\r\n\r\n this.subscriptions.push(\r\n this.orderChanges$\r\n .pipe(\r\n debounceTime(800), // wait 800ms after last change\r\n distinctUntilChanged((a, b) =>\r\n JSON.stringify(a.map(x => ({ id: x.id, orderNum: x.orderNum }))) ===\r\n JSON.stringify(b.map(x => ({ id: x.id, orderNum: x.orderNum })))\r\n ),\r\n switchMap(newOrder => this.coreWorkflowService.updateGroupOrder(newOrder)),\r\n catchError(err => {\r\n console.error('🚨 Backend update failed:', err);\r\n return of({ ok: false, status: 500, body: { statusCode: 500 } });\r\n })\r\n )\r\n .subscribe(x => {\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n // no need to send any UI alert \r\n }\r\n })\r\n )\r\n })\r\n }\r\n\r\n}\r\n","<div class=\"core-workflow-list-container\">\r\n\r\n <core-page-header title=\"\" [hideButtonGroup]=\"true\"></core-page-header>\r\n <div class=\"container-fluid\">\r\n <div class=\"row gx-5 gy-5\" [class.sort-mode]=\"$sortMode()\">\r\n <div class=\"col-md-12 no-padding\">\r\n <div class=\"WorkflowList_operations d-flex d-flex-between\">\r\n <div class=\"WorkflowList_operationsLeft\">\r\n <input type=\"text\" placeholder=\"Search\" class=\"form-control\" [class.d-none]=\"$sortMode()\">\r\n </div>\r\n <div class=\"WorkflowList_operationsRight\">\r\n <button class=\"btn btn-secondary\" (click)=\"togglerSortMode()\">{{ $sortMode() ? 'Expand' : 'Sort'\r\n }}</button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"group-list p-relative\">\r\n\r\n @for (group of coreWorkflowService.$allGroups(); track group.id) {\r\n\r\n @if ($sortMode()) {\r\n\r\n <div class=\"WorkflowGroup card sort-mode\"\r\n [attr.data-id]=\"group.id\"\r\n dragReorder\r\n (updateList)=\"onListReorderUpdate($event)\"\r\n >\r\n \r\n <div class=\"WorkflowGroup_header d-flex d-flex-between\">\r\n <div class=\"WorkflowGroup_headerTitle\">\r\n {{ group?.name }}\r\n </div>\r\n \r\n <div class=\"WorkflowGroup_nameOperations d-flex d-flex-end\">\r\n \r\n <div class=\"WorkflowGroup_itemEdit pointer\">\r\n <i class=\"feather-move\"></i>\r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n\r\n } @else {\r\n\r\n <div class=\"WorkflowGroup card\">\r\n \r\n <div class=\"WorkflowGroup_header d-flex d-flex-between\">\r\n\r\n <div class=\"WorkflowGroup_headerTitle\">\r\n {{ group?.name }}\r\n </div>\r\n \r\n </div>\r\n \r\n \r\n <div class=\"Workflows\">\r\n @for (flow of group.wfWorkflows; track $index) {\r\n <div class=\"Workflow\">\r\n <div class=\"Workflow_code\">\r\n\r\n <span [appTooltip]=\"flow.description\" [position]=\"'right'\" [showAnyway]=\"true\">{{ flow.name\r\n }}</span>\r\n </div>\r\n <div class=\"Workflow_operationsRight\">\r\n <div class=\"Workflow_basicInfoEdit pointer\" (click)=\"editWorkflow(flow)\"\r\n [appTooltip]=\"'Send request'\">\r\n <i class=\"feather-mail\" (click)=\"sendRequest(flow)\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n \r\n </div>\r\n\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <router-outlet name=\"workflowConsume\"></router-outlet>\r\n\r\n @if ($loading()) {\r\n <app-fullscreen-modal-loader/>\r\n }\r\n\r\n</div>"],"names":[],"mappings":"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"}