ngx-t-forms 2.0.21 → 2.0.22

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 (49) hide show
  1. package/fesm2022/{ngx-t-forms-calculated-field-rules.component-B2YIcoUu.mjs → ngx-t-forms-calculated-field-rules.component-C_64f1LO.mjs} +3 -3
  2. package/fesm2022/{ngx-t-forms-calculated-field-rules.component-B2YIcoUu.mjs.map → ngx-t-forms-calculated-field-rules.component-C_64f1LO.mjs.map} +1 -1
  3. package/fesm2022/{ngx-t-forms-chip-options-creator-editor.component-DwpTxw1V.mjs → ngx-t-forms-chip-options-creator-editor.component-Bt3aFR_M.mjs} +2 -2
  4. package/fesm2022/{ngx-t-forms-chip-options-creator-editor.component-DwpTxw1V.mjs.map → ngx-t-forms-chip-options-creator-editor.component-Bt3aFR_M.mjs.map} +1 -1
  5. package/fesm2022/{ngx-t-forms-config-mscoa-additional-inputs.component-BgS1g7ix.mjs → ngx-t-forms-config-mscoa-additional-inputs.component-D9ViNgwt.mjs} +2 -2
  6. package/fesm2022/{ngx-t-forms-config-mscoa-additional-inputs.component-BgS1g7ix.mjs.map → ngx-t-forms-config-mscoa-additional-inputs.component-D9ViNgwt.mjs.map} +1 -1
  7. package/fesm2022/{ngx-t-forms-data-source-picker.component-ctmzo51S.mjs → ngx-t-forms-data-source-picker.component-Dxwhl2-a.mjs} +5 -5
  8. package/fesm2022/{ngx-t-forms-data-source-picker.component-ctmzo51S.mjs.map → ngx-t-forms-data-source-picker.component-Dxwhl2-a.mjs.map} +1 -1
  9. package/fesm2022/{ngx-t-forms-document-list-label-config-editor.component-B1ouOnk1.mjs → ngx-t-forms-document-list-label-config-editor.component-GB_9b-4L.mjs} +3 -3
  10. package/fesm2022/{ngx-t-forms-document-list-label-config-editor.component-B1ouOnk1.mjs.map → ngx-t-forms-document-list-label-config-editor.component-GB_9b-4L.mjs.map} +1 -1
  11. package/fesm2022/{ngx-t-forms-form-input-selector.component-Dqru3fNh.mjs → ngx-t-forms-form-input-selector.component-C5Amatf0.mjs} +2 -2
  12. package/fesm2022/{ngx-t-forms-form-input-selector.component-Dqru3fNh.mjs.map → ngx-t-forms-form-input-selector.component-C5Amatf0.mjs.map} +1 -1
  13. package/fesm2022/{ngx-t-forms-form-json-view.component-70kAIKgZ.mjs → ngx-t-forms-form-json-view.component-CQg4E5ba.mjs} +2 -2
  14. package/fesm2022/{ngx-t-forms-form-json-view.component-70kAIKgZ.mjs.map → ngx-t-forms-form-json-view.component-CQg4E5ba.mjs.map} +1 -1
  15. package/fesm2022/{ngx-t-forms-form-section-stepper.component-BQBmaKv_.mjs → ngx-t-forms-form-section-stepper.component-C0kP-AiW.mjs} +4 -4
  16. package/fesm2022/{ngx-t-forms-form-section-stepper.component-BQBmaKv_.mjs.map → ngx-t-forms-form-section-stepper.component-C0kP-AiW.mjs.map} +1 -1
  17. package/fesm2022/{ngx-t-forms-forms-builder-menu.component-DrOUX-zW.mjs → ngx-t-forms-forms-builder-menu.component-CbaZ8wSc.mjs} +4 -4
  18. package/fesm2022/{ngx-t-forms-forms-builder-menu.component-DrOUX-zW.mjs.map → ngx-t-forms-forms-builder-menu.component-CbaZ8wSc.mjs.map} +1 -1
  19. package/fesm2022/{ngx-t-forms-input-editor.component-BBvl6AEn.mjs → ngx-t-forms-input-editor.component-DyVAn2Pd.mjs} +2 -2
  20. package/fesm2022/{ngx-t-forms-input-editor.component-BBvl6AEn.mjs.map → ngx-t-forms-input-editor.component-DyVAn2Pd.mjs.map} +1 -1
  21. package/fesm2022/{ngx-t-forms-mat-chip-list-editor.component-Bqwo6PW5.mjs → ngx-t-forms-mat-chip-list-editor.component-Bl1xoQAO.mjs} +2 -2
  22. package/fesm2022/{ngx-t-forms-mat-chip-list-editor.component-Bqwo6PW5.mjs.map → ngx-t-forms-mat-chip-list-editor.component-Bl1xoQAO.mjs.map} +1 -1
  23. package/fesm2022/{ngx-t-forms-mat-slider-editor.component-BZWy7sKx.mjs → ngx-t-forms-mat-slider-editor.component-CW5hzpi3.mjs} +2 -2
  24. package/fesm2022/{ngx-t-forms-mat-slider-editor.component-BZWy7sKx.mjs.map → ngx-t-forms-mat-slider-editor.component-CW5hzpi3.mjs.map} +1 -1
  25. package/fesm2022/{ngx-t-forms-mat-slider-toggle-editor.component-J8LET3HI.mjs → ngx-t-forms-mat-slider-toggle-editor.component-uh7fK-kw.mjs} +2 -2
  26. package/fesm2022/{ngx-t-forms-mat-slider-toggle-editor.component-J8LET3HI.mjs.map → ngx-t-forms-mat-slider-toggle-editor.component-uh7fK-kw.mjs.map} +1 -1
  27. package/fesm2022/{ngx-t-forms-missing-form-configs.component-BgrZn2dM.mjs → ngx-t-forms-missing-form-configs.component-DXauybu2.mjs} +2 -2
  28. package/fesm2022/{ngx-t-forms-missing-form-configs.component-BgrZn2dM.mjs.map → ngx-t-forms-missing-form-configs.component-DXauybu2.mjs.map} +1 -1
  29. package/fesm2022/{ngx-t-forms-mscoa-segment-config.component-C8Vnyf0v.mjs → ngx-t-forms-mscoa-segment-config.component-Cat-o3zD.mjs} +2 -2
  30. package/fesm2022/{ngx-t-forms-mscoa-segment-config.component-C8Vnyf0v.mjs.map → ngx-t-forms-mscoa-segment-config.component-Cat-o3zD.mjs.map} +1 -1
  31. package/fesm2022/{ngx-t-forms-ngx-t-forms-zYBCwTI4.mjs → ngx-t-forms-ngx-t-forms-CHdFFTXs.mjs} +22 -16
  32. package/fesm2022/ngx-t-forms-ngx-t-forms-CHdFFTXs.mjs.map +1 -0
  33. package/fesm2022/{ngx-t-forms-pipeline-generator.component-B2mJBxEI.mjs → ngx-t-forms-pipeline-generator.component-bqBbOv1s.mjs} +3 -3
  34. package/fesm2022/{ngx-t-forms-pipeline-generator.component-B2mJBxEI.mjs.map → ngx-t-forms-pipeline-generator.component-bqBbOv1s.mjs.map} +1 -1
  35. package/fesm2022/{ngx-t-forms-required-inputs.component-Dk1IsAgn.mjs → ngx-t-forms-required-inputs.component-pBuYge0L.mjs} +2 -2
  36. package/fesm2022/{ngx-t-forms-required-inputs.component-Dk1IsAgn.mjs.map → ngx-t-forms-required-inputs.component-pBuYge0L.mjs.map} +1 -1
  37. package/fesm2022/{ngx-t-forms-rest-api-call-setup.component-B90hJQlL.mjs → ngx-t-forms-rest-api-call-setup.component-o2RDNMBk.mjs} +2 -2
  38. package/fesm2022/{ngx-t-forms-rest-api-call-setup.component-B90hJQlL.mjs.map → ngx-t-forms-rest-api-call-setup.component-o2RDNMBk.mjs.map} +1 -1
  39. package/fesm2022/{ngx-t-forms-section-report.component-CGLiAw8J.mjs → ngx-t-forms-section-report.component-5c0zmsRd.mjs} +2 -2
  40. package/fesm2022/{ngx-t-forms-section-report.component-CGLiAw8J.mjs.map → ngx-t-forms-section-report.component-5c0zmsRd.mjs.map} +1 -1
  41. package/fesm2022/{ngx-t-forms-selection-options-editor.component-C0il9Xf5.mjs → ngx-t-forms-selection-options-editor.component-B0mVpnCm.mjs} +2 -2
  42. package/fesm2022/{ngx-t-forms-selection-options-editor.component-C0il9Xf5.mjs.map → ngx-t-forms-selection-options-editor.component-B0mVpnCm.mjs.map} +1 -1
  43. package/fesm2022/{ngx-t-forms-t-workflow-picker.component-DH7hjTyE.mjs → ngx-t-forms-t-workflow-picker.component-CxUoYxE3.mjs} +2 -2
  44. package/fesm2022/{ngx-t-forms-t-workflow-picker.component-DH7hjTyE.mjs.map → ngx-t-forms-t-workflow-picker.component-CxUoYxE3.mjs.map} +1 -1
  45. package/fesm2022/{ngx-t-forms-validators-config.component-BfnTGXA_.mjs → ngx-t-forms-validators-config.component-OIfd1D8o.mjs} +3 -3
  46. package/fesm2022/{ngx-t-forms-validators-config.component-BfnTGXA_.mjs.map → ngx-t-forms-validators-config.component-OIfd1D8o.mjs.map} +1 -1
  47. package/fesm2022/ngx-t-forms.mjs +1 -1
  48. package/package.json +1 -1
  49. package/fesm2022/ngx-t-forms-ngx-t-forms-zYBCwTI4.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"ngx-t-forms-ngx-t-forms-zYBCwTI4.mjs","sources":["../../../projects/ngx-t-forms/src/lib/ngx-t-forms.service.ts","../../../projects/ngx-t-forms/src/lib/ngx-t-forms.component.ts","../../../projects/ngx-t-forms/src/lib/shared/functions/migrationCheck.ts","../../../projects/ngx-t-forms/src/lib/injection-tokens/index.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-environment-injection/functions/provideNgxTforms.ts","../../../projects/ngx-t-forms/src/lib/shared/modules/stringJsonValidator/getObjectValidations.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-section-controller/Functions/commonFormOperations.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-section-controller/Functions/formGenerator.ts","../../../projects/ngx-t-forms/src/lib/shared/functions/isEqual.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/startTowerFormChangesEventListener.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/getAllFunctionTypes.ts","../../../projects/ngx-t-forms/src/lib/shared/functions/textIconsForUserHints.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-controller/function/calculateInputValue.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-section-controller/Functions/errorResolver.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-controller/function/validateMinInputForPostRequest.ts","../../../projects/ngx-t-forms/src/lib/shared/functions/evaluateArrayAccessRules.ts","../../../projects/ngx-t-forms/src/lib/shared/functions/getDeepObject.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-section-controller/Functions/getValueFromPathMap.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-controller/function/multipleFormInputsMapValueToFormInputId.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-controller/function/postApiDataFetching.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/selectFormSteps.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/allFormInputs.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/getSubmissionStatus.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/setControlTempErrors.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/setInputError.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/updateFormInputConfig.ts","../../../projects/ngx-t-forms/src/lib/components/forms/functions/findFormInput.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/updateValue.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/setInputAsTouchedAndDirty.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/setSectionAsSeen.ts","../../../projects/ngx-t-forms/src/lib/shared/functions/assignDeepPropertyToObject.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/getFormValue.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/updateChangeHistory.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/extractInitFunctions.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-controller/function/getApiDataFetching.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/setInputStatus.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/multipleInputRowIDControllInput.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/toggleMultipleInput.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/handleStepChange.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/saveMultipleInputForm.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/createEmptyForm.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/functions/prePoPulateForm.ts","../../../projects/ngx-t-forms/src/lib/shared/functions/createFileUploadSample.ts","../../../projects/ngx-t-forms/src/lib/shared/functions/getformInputsSampleValue.ts","../../../projects/ngx-t-forms/src/lib/shared/functions/replaceUrlVariables.ts","../../../projects/ngx-t-forms/src/lib/components/forms/functions/formHttpSubmissions.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-tower-controller/form-tower-controller.service.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/functions/testData.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-builder/functions/inputElementEditorConfigs.ts","../../../projects/ngx-t-forms/src/lib/shared/modules/mat-modules.module.ts","../../../projects/ngx-t-forms/src/lib/components/dialog-template/dialog-template.component.ts","../../../projects/ngx-t-forms/src/lib/components/dialog-template/dialog-template.component.html","../../../projects/ngx-t-forms/src/lib/shared/functions/daysAgoTransform.ts","../../../projects/ngx-t-forms/src/lib/components/forms/store/Forms-selectors.ts","../../../projects/ngx-t-forms/src/lib/components/forms/store/Forms-Actions.ts","../../../projects/ngx-t-forms/src/lib/components/forms/store/Forms-Effects.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-builder/functions/formCanSave.ts","../../../projects/ngx-t-forms/src/lib/components/forms/store/Form-selectors-FormBuilder.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-builder/functions/sectionDrop.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-builder/functions/moveFormInput.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-builder/functions/addNewSection.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-builder/functions/stepTitleChangeStep.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-builder/functions/removeItem.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-builder/functions/multipleInputToggleLabel.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-builder/functions/addMultipleInputFunction.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-builder/functions/deleteSection.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-builder/functions/moveInputToDiffSection.ts","../../../projects/ngx-t-forms/src/lib/components/forms/functions/cloneCopyFormInput.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-builder/functions/addFormInputToForm.ts","../../../projects/ngx-t-forms/src/lib/components/forms/functions/selectInputTemplate.ts","../../../projects/ngx-t-forms/src/lib/components/forms/functions/elementConfigurationChanged.ts","../../../projects/ngx-t-forms/src/lib/shared/functions/camelize.ts","../../../projects/ngx-t-forms/src/lib/components/forms/functions/elementBlur.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-form-builder/functions/addScoaExtensionInput.ts","../../../projects/ngx-t-forms/src/lib/components/forms/store/Form-actions-formBuilder.ts","../../../projects/ngx-t-forms/src/lib/components/forms/store/forms-store.service.ts","../../../projects/ngx-t-forms/src/lib/components/form-builder/form-builder.component.ts","../../../projects/ngx-t-forms/src/lib/components/form-builder/form-builder.component.html","../../../projects/ngx-t-forms/src/lib/shared/functions/getAvatar.ts","../../../projects/ngx-t-forms/src/lib/shared/pipes/date/days-ago.pipe.ts","../../../projects/ngx-t-forms/src/lib/components/forms/forms.component.ts","../../../projects/ngx-t-forms/src/lib/components/forms/forms.component.html","../../../projects/ngx-t-forms/src/lib/shared/pipes/list-search.pipe.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/api-value-access-rules/functions/validateExpression.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/api-value-access-rules/functions/extractNodeFromTree.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/api-value-access-rules/functions/convertDataToTree.ts","../../../projects/ngx-t-forms/src/lib/shared/functions/searchArray.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/api-value-access-rules/elements/data-tree/data-tree.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/api-value-access-rules/elements/data-tree/data-tree.component.html","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/postman-collections/functions/convertPostmanCollectionToTree.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/api-value-access-rules/api-value-access-rules.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/api-value-access-rules/api-value-access-rules.component.html","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/api-value-access-rules/elements/validation-expressio-creator/validation-expressio-creator.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/elements/api-value-access-rules/elements/validation-expressio-creator/validation-expressio-creator.component.html","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/t-dynamic-data-edit.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-edit/t-dynamic-data-edit.component.html","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-view/t-dynamic-data-view.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-dynamic-data-view/t-dynamic-data-view.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input-status/t-form-input-status.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input-status/t-form-input-status.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/store/mscoa-selectors.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/store/mscoa-actions.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/store/mscoa-effects.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/store/mscoa-component-store.service.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/store/accountConstants.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/elements/scoa-input/scoa-input.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/elements/scoa-input/scoa-input.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/elements/account-value/account-value.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/elements/account-value/account-value.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/elements/scoa-account-table/scoa-account-table.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/elements/scoa-account-table/scoa-account-table.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/elements/mscoa-computation/mscoa-computation.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/elements/mscoa-computation/mscoa-computation.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/elements/mscoa-chart/mscoa-chart.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/elements/mscoa-chart/mscoa-chart.component.html","../../../projects/ngx-t-forms/src/lib/services/core/t-input-controller/functions/baseCustomInput.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/elements/mscoa-reactive-form-field/mscoa-reactive-form-field.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/elements/mscoa-reactive-form-field/mscoa-reactive-form-field.component.html","../../../projects/ngx-t-forms/src/lib/services/core/t-input-controller/functions/inputErrorMessage.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/mscoa-form-input.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/mscoa-form-input/mscoa-form-input.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/signature-input-element/config/signature.ts","../../../projects/ngx-t-forms/src/lib/shared/functions/enryption.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-input-controller/functions/generateInputSecret.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/signature-input-element/core/signature-pad-input/signature-pad-input.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/signature-input-element/core/signature-pad-input/signature-pad-input.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/signature-input-element/signature-input-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/signature-input-element/signature-input-element.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/section-title/section-title.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/section-title/section-title.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/auto-complete-input-element/core/auto-complet-reactive-input/auto-complet-reactive-input.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/auto-complete-input-element/core/auto-complet-reactive-input/auto-complet-reactive-input.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/auto-complete-input-element/auto-complete-input-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/auto-complete-input-element/auto-complete-input-element.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/toggle-input-element/core/toggle/toggle.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/toggle-input-element/core/toggle/toggle.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/toggle-input-element/toggle-input-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/toggle-input-element/toggle-input-element.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/select-input-element/elements/select-input/select-input.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/select-input-element/elements/select-input/select-input.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/select-input-element/select-input-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/select-input-element/select-input-element.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/textarea-input-element/core/text-area-reactive-input/text-area-reactive-input.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/textarea-input-element/core/text-area-reactive-input/text-area-reactive-input.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/textarea-input-element/textarea-input-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/textarea-input-element/textarea-input-element.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/date-range-picker-input-element/core/date-range-picker-reactive-input/date-range-picker-reactive-input.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/date-range-picker-input-element/core/date-range-picker-reactive-input/date-range-picker-reactive-input.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/date-range-picker-input-element/date-range-picker-input-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/date-range-picker-input-element/date-range-picker-input-element.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/date-picker-input-element/core/date-picker-reactive-input/date-picker-reactive-input.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/date-picker-input-element/core/date-picker-reactive-input/date-picker-reactive-input.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/date-picker-input-element/date-picker-input-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/date-picker-input-element/date-picker-input-element.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/file-upload-input-element/core/file-uploader/file-uploader.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/file-upload-input-element/core/file-uploader/file-uploader.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/file-upload-input-element/file-upload-input-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/file-upload-input-element/file-upload-input-element.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/editor-input-element/core/form-input-rich-text-editor/config.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/editor-input-element/core/editor-js-input/editor-js-input.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/editor-input-element/core/editor-js-input/editor-js-input.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/editor-input-element/editor-input-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/editor-input-element/editor-input-element.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/basic-input-input-element/core/input-custom/input-custom.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/basic-input-input-element/core/input-custom/input-custom.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/basic-input-input-element/basic-input-input-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/basic-input-input-element/basic-input-input-element.component.html","../../../projects/ngx-t-forms/src/lib/services/core/t-input-controller/functions/colorCoding.ts","../../../projects/ngx-t-forms/src/lib/services/core/t-input-controller/functions/configureCols.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table-view/multiple-input-table-view.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table-view/multiple-input-table-view.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table-edit/multiple-input-table-edit.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table-edit/multiple-input-table-edit.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/functions/getListCalculated.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table/multiple-input-table.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/core/multiple-input-table/multiple-input-table.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/multiple-input-input-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/multiple-input-input-element/multiple-input-input-element.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/Geo-location-form-input/functions/getGeoLocation.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/Geo-location-form-input/elements/geo-location-form-input/geo-location-form-input.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/Geo-location-form-input/elements/geo-location-form-input/geo-location-form-input.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/Geo-location-form-input/geo-location.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/Geo-location-form-input/geo-location.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/file-upload-input-element/core/file-uploader/camera-functions.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/image-capture-input-element/core/camera-capture/camera-capture.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/image-capture-input-element/core/camera-capture/camera-capture.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/image-capture-input-element/image-capture-input-element.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/image-capture-input-element/image-capture-input-element.component.html","../../../projects/ngx-t-forms/src/lib/shared/pipes/format-Data.pipe.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/document-picker/core/document-picker-reactive-input/document-picker-reactive-input.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/document-picker/core/document-picker-reactive-input/document-picker-reactive-input.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/document-picker/document-picker.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/document-picker/document-picker.component.html","../../../projects/ngx-t-forms/src/lib/shared/functions/getInputIllustration.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/workflow-adjudication/elements/points-creation/points-creation.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/workflow-adjudication/elements/points-creation/points-creation.component.html","../../../projects/ngx-t-forms/src/lib/shared/functions/mapColors.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/workflow-adjudication/elements/submission-review/submission-review.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/workflow-adjudication/elements/submission-review/submission-review.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/workflow-adjudication/elements/workflow-adjudication-reactive-input/workflow-adjudication-reactive-input.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/workflow-adjudication/elements/workflow-adjudication-reactive-input/workflow-adjudication-reactive-input.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/workflow-adjudication/workflow-adjudication.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/workflow-adjudication/workflow-adjudication.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/t-form-input.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/t-form-input.component.html","../../../projects/ngx-t-forms/src/lib/services/core/tour/tour-manager.service.ts","../../../projects/ngx-t-forms/src/lib/components/user-form-stepper/user-form-stepper.component.ts","../../../projects/ngx-t-forms/src/lib/components/user-form-stepper/user-form-stepper.component.html","../../../projects/ngx-t-forms/src/public-api.ts","../../../projects/ngx-t-forms/src/ngx-t-forms.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgxTFormsService {\r\n\r\n constructor() { \r\n \r\n }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-ngx-t-forms',\r\n standalone: true,\r\n imports: [],\r\n template: `\r\n <p>\r\n ngx-t-forms works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class NgxTFormsComponent {\r\n\r\n}\r\n","import { FormColumnInputs, FormInterface, FormSubmissionHandleInterface, IAllInputs, OLD_FormInterface } from 'ngx-t-forms-types';\r\nimport { APIDataFetchingConfigurationInterface } from \"ngx-t-forms-types\";\r\nimport { DataSources } from \"ngx-t-forms-types\"\r\nimport { FormSlideInterface } from \"ngx-t-forms-types\"\r\nimport { formColumnInputsSchema } from \"ngx-t-forms-types\"\r\n\r\nconst emptyForm: FormInterface = {\r\n slides: [],\r\n submissionHandle: undefined as any,\r\n formId: undefined,\r\n formTitle: ''\r\n}\r\n\r\nconst initFormConfigToV2: (formConfig: OLD_FormInterface) => FormInterface = (formConfig: OLD_FormInterface) => {\r\n try {\r\n if (!formConfig) return emptyForm;\r\n if (itsOldFormConfig(formConfig)) {\r\n const { formId, formTitle, } = formConfig;\r\n const newForm: FormInterface = {\r\n slides: transformSlides(formConfig),\r\n submissionHandle: transformOldSubmissionHandle(formConfig),\r\n formId,\r\n formTitle,\r\n }\r\n return newForm;\r\n\r\n }\r\n return formConfig;\r\n } catch (error) {\r\n console.error('Error in initFormConfigToV2', error);\r\n return emptyForm;\r\n\r\n\r\n }\r\n\r\n}\r\n\r\n\r\nfunction transformOldSubmissionHandle(config: OLD_FormInterface):FormSubmissionHandleInterface {\r\n try {\r\n const { submisionHandle } = config;\r\n const canSubmitAPI:Array<APIDataFetchingConfigurationInterface> =submisionHandle.canSubmitAPI ? [{\r\n _id: submisionHandle.canSubmitAPI._id,\r\n name: 'No Name',\r\n httpEndPoint: submisionHandle.canSubmitAPI.httpEndPoint,\r\n inputSourceId: '',\r\n httpMethod:submisionHandle.canSubmitAPI.httpMethod,\r\n postFormData: submisionHandle.canSubmitAPI.httpMethod === 'POST',\r\n backEndConfig: {\r\n minimumInputRequired: [] \r\n },\r\n valueAccessRules: [],\r\n \r\n source:DataSources.Api,\r\n \r\n }] : []\r\n const submissionAPI:APIDataFetchingConfigurationInterface[] = [{\r\n _id: submisionHandle.submissionId._id,\r\n name: 'No Name',\r\n httpEndPoint: submisionHandle.submissionId.httpEndPoint,\r\n inputSourceId: '',\r\n httpMethod:submisionHandle.submissionId.httpMethod,\r\n postFormData: submisionHandle.submissionId.httpMethod === 'POST',\r\n backEndConfig: {\r\n minimumInputRequired: [] \r\n },\r\n valueAccessRules: [],\r\n \r\n source:DataSources.Api,\r\n \r\n }]\r\n return {\r\n innerComponentShowSubmitButton: submisionHandle?.innerComponentShowSubmitButton,\r\n canSubmitAPI ,\r\n submissionAPI,\r\n submissionMessage: submisionHandle.handle.submissionMessage\r\n }\r\n } catch (error) {\r\n return {\r\n\r\n } as any\r\n }\r\n \r\n}\r\nfunction transformSlides(config: OLD_FormInterface): Array<FormSlideInterface> {\r\n\r\n const { slides, formSectionSteps } = config\r\n return (slides||[]).map((slide) => {\r\n const step = (formSectionSteps|| []).find((section) => section.sectionId === slide.sectionId);\r\n return {\r\n label: step?.label || '',\r\n sectionId: slide.sectionId,\r\n columns: transformOldInputs(slide.slideContentRows[0]?.columns||[]),\r\n }\r\n })\r\n\r\n}\r\nfunction transformOldInputs(columns: Array<IAllInputs>): Array<FormColumnInputs> {\r\n const c = (columns||[]).map((column) => formColumnInputsSchema\r\n .validate(column, { stripUnknown: true,\r\n presence: 'required',\r\n abortEarly: false }).value\r\n\r\n\r\n\r\n )\r\n return c;\r\n\r\n\r\n}\r\nconst itsOldFormConfig = (formConfig: OLD_FormInterface): formConfig is OLD_FormInterface => {\r\n if (typeof formConfig !== 'object') return false;\r\n const hasOldPrimaryKeys = ['formSectionSteps', 'activeSlideNumber'].every((key: any) => (formConfig as any)[key] !== undefined);\r\n if (hasOldPrimaryKeys) return true;\r\n const hasSlideContentRows = formConfig.slides.some((slide) => slide.slideContentRows !== undefined);\r\n return hasSlideContentRows;\r\n\r\n}\r\nexport { initFormConfigToV2 }","import { InjectionToken } from \"@angular/core\";\r\nimport { FormInterface, InClassFormUtilsInterface, NgxTFormsConfig,IWorkflowDocumentPicker } from \"ngx-t-forms-types\";\r\n\r\nimport { IFileUploadInput, IDateRangePickerInput, ITextareaProperties, IToggleInput, IMatrixInput, IMultiple, IBasicFormInput, IGetTreeResponse } from\"ngx-t-forms-types\"\r\nimport { FormSlideInterface } from \"ngx-t-forms-types\";\r\nimport { IFormActions } from\"ngx-t-forms-types\";\r\nimport { Observable } from \"rxjs\";\r\nexport const FORM_ACTIONS_TOKEN = new InjectionToken<IFormActions>('FORM_ACTIONS');\r\nexport const FORM_CONFIG_TOKEN = new InjectionToken<FormInterface>('FORM_CONFIG');\r\nexport const FORM_SLIDES_TOKEN = new InjectionToken<FormSlideInterface>('FORM_SLIDES');\r\n\r\nexport const UTILS_OBJECT_TOKEN = new InjectionToken<InClassFormUtilsInterface>('UTILS_OBJECT_TOKEN');\r\nexport const FORM_INPUTS_TOKEN = new InjectionToken<IWorkflowDocumentPicker & IBasicFormInput& IFileUploadInput & IDateRangePickerInput \r\n& ITextareaProperties & IToggleInput & IMatrixInput & IMultiple>('FORM_INPUTS_TOKEN');\r\nexport const MULTIPLE_FORM_INPUT_TOKEN = new InjectionToken<IMultiple>('MULTIPLE_FORM_INPUT_TOKEN');\r\nexport const MSCOA_TREE_PROVIDER = new InjectionToken<() => Observable<IGetTreeResponse>>(\r\n 'MSCOA_TREE_PROVIDER'\r\n );\r\nexport const NGX_T_FORMS_CONFIG_TOKEN = new InjectionToken<NgxTFormsConfig>('NGX_T_FORMS_CONFIG');","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\r\nimport { NgxTFormsConfig } from 'ngx-t-forms-types';\r\nimport { NGX_T_FORMS_CONFIG_TOKEN } from '../../../../injection-tokens';\r\n\r\n\r\nexport function provideNgxTForms(config: NgxTFormsConfig): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n { provide: NGX_T_FORMS_CONFIG_TOKEN, useValue: config }\r\n ]);\r\n}","/**\r\n * Validates an object against a validation expression.\r\n *\r\n * @param {string} expression - The validation expression to evaluate.\r\n * @param {object} object - The object to validate.\r\n * @returns {boolean} - A boolean indicating whether the object is valid according to the expression.\r\n *\r\n * This function is designed to handle a variety of cases for validating objects based on a given expression. It can:\r\n * 1. Evaluate an expression part with a single comparison operator, for example: 'a === 1' or '(a === 1)'.\r\n * 2. Evaluate an expression with multiple comparison operators, including: '===', '==', '!==', '!=', '>', '<', '>=', and '<='.\r\n * 3. Group expression parts considering bracket enclosures and logical operators.\r\n * 4. Evaluate an expression with multiple logical operators, such as 'a === 1 && b === 2 || c === 3'.\r\n */\r\n\r\ntype Operator = '===' | '==' | '!==' | '!=' | '>' | '<' | '>=' | '<=';\r\n//type LogicalOperator = '&&' | '||' | '!';\r\n\r\nconst validateObjectAgainstString = (expression: string, object: any): boolean => {\r\n\r\n /**\r\n * Removes enclosing brackets from a string.\r\n * @param expression The string to remove brackets from.\r\n * @returns The string without enclosing brackets.\r\n */\r\n function removeEnclosingBrackets(exp: string): string {\r\n exp = exp.trim();\r\n if (exp.startsWith('(') && exp.endsWith(')')) {\r\n // remove the first and last characters from the string\r\n return exp.slice(1, -1);\r\n }\r\n return exp;\r\n }\r\n\r\n /**\r\n * Evaluates a validation string against an object.\r\n * @param validationString The validation string to evaluate.\r\n * @param data The object to validate.\r\n * @returns A boolean indicating whether the object is valid according to the validation string.\r\n */\r\n function evaluateValidationString(validationString: string, data: Record<string, any>): boolean {\r\n //const operators: Operator[] = ['===', '==', '!==', '!=', '>', '<', '>=', '<='];\r\n const evaluationExpression = removeEnclosingBrackets(validationString)\r\n\r\n /**\r\n * Parses an operand from a string.\r\n * @param operand The string to parse.\r\n * @returns The parsed operand.\r\n */\r\n function parseOperand(operand: string | undefined): any {\r\n if (!operand) {\r\n throw new Error(`Invalid operand: ${operand}`);\r\n }\r\n if (operand in data) {\r\n return data[operand];\r\n } else if (operand === 'true') {\r\n return true;\r\n } else if (operand === 'false') {\r\n return false;\r\n } else if (!isNaN(Number(operand))) {\r\n return Number(operand);\r\n } else if (typeof operand === 'string') {\r\n return operand.replace(/['\"]+/g, '');\r\n }\r\n\r\n else {\r\n throw new Error(`Invalid operand: ${operand}`);\r\n }\r\n }\r\n\r\n /**\r\n * Evaluates a comparison expression.\r\n * @param expression The expression to evaluate.\r\n * @returns A boolean indicating whether the expression is true or false.\r\n */\r\n function evaluateExpression(expression: string): boolean {\r\n const operators: Operator[] = ['===', '==', '!==', '!=', '>', '<', '>=', '<='];\r\n const parts = (expression || '').split(' ');\r\n if (parts.length !== 3) {\r\n throw new Error(`Invalid expression: ${expression}`);\r\n }\r\n const [leftOperand, operator, rightOperand] = parts;\r\n const leftValue = parseOperand(leftOperand);\r\n const rightValue = parseOperand(rightOperand);\r\n if (!operators.includes(operator as Operator)) {\r\n throw new Error(`Invalid operator: ${operator}`);\r\n }\r\n switch (operator) {\r\n case '===':\r\n return leftValue === rightValue;\r\n case '==':\r\n return leftValue == rightValue;\r\n case '!==':\r\n return leftValue !== rightValue;\r\n case '!=':\r\n return leftValue != rightValue;\r\n case '>':\r\n console.log(data, leftValue, rightValue, \"TTTTTTTTTTTTTTTTTTTTT\")\r\n return leftValue > rightValue;\r\n case '<':\r\n return leftValue < rightValue;\r\n case '>=':\r\n return leftValue >= rightValue;\r\n case '<=':\r\n return leftValue <= rightValue;\r\n default:\r\n throw new Error(`Invalid operator: ${operator}`);\r\n }\r\n }\r\n return evaluateExpression(evaluationExpression);\r\n }\r\n\r\n /**\r\n * Evaluates a conjunction expression.\r\n * @param conjunctionExpression The conjunction expression to evaluate.\r\n * @param object The object to validate.\r\n * @returns A boolean indicating whether the object is valid according to the conjunction expression.\r\n */\r\n function evaluateConjunction(conjunctionExpression: string, object: any): boolean {\r\n if (typeof conjunctionExpression !== 'string') {\r\n return false\r\n }\r\n const parts = (conjunctionExpression || '').split(\"&&\") //conjunctions\r\n return parts.every((part) => {\r\n const hasDisjunction = part.split(\"||\").length > 1\r\n const hasConjunction = part.split(\"&&\").length > 1\r\n const strippedPart = removeEnclosingBrackets(part)\r\n if (hasDisjunction) {\r\n return evaluateDisjunctions(strippedPart, object)\r\n }\r\n if (hasConjunction) {\r\n return evaluateConjunction(strippedPart, object)\r\n }\r\n if (!hasConjunction && !hasDisjunction) {\r\n return evaluateValidationString(strippedPart, object)\r\n }\r\n\r\n return false\r\n\r\n })\r\n\r\n }\r\n\r\n /**\r\n * Evaluates a disjunction expression.\r\n * @param disjunctionExpression The disjunction expression to evaluate.\r\n * @param object The object to validate.\r\n * @returns A boolean indicating whether the object is valid according to the disjunction expression.\r\n */\r\n function evaluateDisjunctions(disjunctionExpression: string, object: any): boolean {\r\n let evaluationResult = false\r\n if (typeof disjunctionExpression !== 'string') {\r\n return false\r\n }\r\n const parts = disjunctionExpression.split(\"||\") //disjunctions\r\n for (let part of parts) {\r\n const hasDisjunction = part.split(\"||\").length > 1\r\n const hasConjunction = part.split(\"&&\").length > 1\r\n const strippedPart = removeEnclosingBrackets(part)\r\n if (hasDisjunction) {\r\n evaluationResult = evaluateDisjunctions(strippedPart, object)\r\n } else if (hasConjunction) {\r\n evaluationResult = evaluateConjunction(strippedPart, object)\r\n } else if (!hasConjunction && !hasDisjunction) {\r\n evaluationResult = evaluateValidationString(strippedPart, object)\r\n }\r\n\r\n if (evaluationResult) {\r\n break\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n\r\n return evaluationResult\r\n }\r\n\r\n return evaluateDisjunctions(expression, object)\r\n\r\n}\r\n\r\nfunction validateExpressionSyntax(expression: string): string | null {\r\n expression = expression.trim();\r\n\r\n // Rule 1: Expression cannot be empty. An empty string is not a valid expression.\r\n if (typeof expression !== 'string') {\r\n throw new Error(\"Expression must be a string.\");\r\n }\r\n if (expression === '') {\r\n throw new Error(\"The expression cannot be blank. Please enter a condition.\");\r\n }\r\n\r\n // Rule 2: Check for balanced parentheses.\r\n // This ensures that every opening parenthesis has a corresponding closing one, and vice-versa.\r\n let balance = 0;\r\n for (let i = 0; i < expression.length; i++) {\r\n if (expression[i] === '(') {\r\n balance++;\r\n } else if (expression[i] === ')') {\r\n balance--;\r\n }\r\n // If balance drops below zero, it means an unmatched closing parenthesis appeared prematurely.\r\n if (balance < 0) {\r\n throw new Error(\"It looks like you have an extra closing parenthesis ')'. Please check your expression.\");\r\n }\r\n }\r\n // If balance is not zero at the end, it means there are unmatched opening parentheses.\r\n if (balance !== 0) {\r\n throw new Error(\"It looks like you're missing a closing parenthesis ')'. Make sure every opening parenthesis has a matching closing one.\");\r\n }\r\n\r\n // Rule 3: Handle outermost parentheses if they truly enclose the entire logical expression.\r\n // This recursive step simplifies the expression for further validation,\r\n // ensuring we only validate the \"core\" logical unit at each level.\r\n let isFullyEnclosed = false;\r\n if (expression.startsWith('(') && expression.endsWith(')')) {\r\n let openCount = 0;\r\n isFullyEnclosed = true;\r\n // Iterate through the content *inside* the potential outermost parentheses (from index 1 to length-2)\r\n // to check if any top-level logical operators exist within them.\r\n for (let i = 1; i < expression.length - 1; i++) {\r\n if (expression[i] === '(') {\r\n openCount++;\r\n } else if (expression[i] === ')') {\r\n openCount--;\r\n }\r\n // If we find a top-level logical operator (&& or ||) within the content\r\n // (i.e., openCount is 0, meaning not inside nested parentheses),\r\n // then the outer parentheses are just for grouping a sub-expression, not the entire expression.\r\n if (openCount === 0 && (expression.substring(i, i + 2) === '&&' || expression.substring(i, i + 2) === '||')) {\r\n isFullyEnclosed = false;\r\n break; // Found a top-level operator, so outer parentheses don't enclose the whole.\r\n }\r\n }\r\n }\r\n // If truly fully enclosed and balanced, recursively validate the inner expression.\r\n if (isFullyEnclosed) {\r\n return validateExpressionSyntax(expression.slice(1, -1).trim());\r\n }\r\n\r\n // Rule 4: Check for logical operators (|| then &&, respecting precedence).\r\n // We iterate to find the lowest precedence operator ('||') first, then '&&'.\r\n // This mirrors the parsing logic in `validateObjectAgainstString`.\r\n const logicalOperators = ['||', '&&'];\r\n\r\n for (const op of logicalOperators) {\r\n let openParenCount = 0;\r\n for (let i = 0; i < expression.length; i++) {\r\n if (expression[i] === '(') {\r\n openParenCount++;\r\n } else if (expression[i] === ')') {\r\n openParenCount--;\r\n }\r\n // If a top-level logical operator is found (outside any parentheses)\r\n if (openParenCount === 0 && expression.substring(i, i + op.length) === op) {\r\n // Split the expression into two parts around the operator.\r\n const part1 = expression.substring(0, i).trim();\r\n const part2 = expression.substring(i + op.length).trim();\r\n\r\n // Rule 4a: Logical operators cannot be at the beginning or end of an expression\r\n // (i.e., parts cannot be empty). This catches cases like \"&& b\" or \"a &&\".\r\n if (part1 === '' || part2 === '') {\r\n throw new Error(`The expression seems incomplete. A connector like '${op}' must have a condition on both sides.`);\r\n\r\n }\r\n // Rule 4b: Recursively validate both parts of the logical expression.\r\n // If both parts are syntactically valid, then this logical expression is valid.\r\n return validateExpressionSyntax(part1) && validateExpressionSyntax(part2);\r\n }\r\n }\r\n }\r\n\r\n // Rule 5: If no top-level logical operators were found, it must be a simple comparison.\r\n // Use regex to validate the format of a simple comparison: `operand operator operand`.\r\n\r\n // Regex for valid identifiers (e.g., object keys like 'age', 'name').\r\n const identifierRegex = `[a-zA-Z_][a-zA-Z0-9_]*`;\r\n // Regex for valid number literals (e.g., '10', '3.14').\r\n const numberRegex = `\\\\d+(?:\\\\.\\\\d+)?`;\r\n // Regex for valid boolean literals.\r\n const booleanRegex = `true|false`;\r\n // Regex for valid string literals (enclosed in single or double quotes, handles escaped quotes).\r\n const stringLiteralRegex = `(['\"])(?:(?=(\\\\\\\\?))\\\\2.)*?\\\\1`;\r\n\r\n // Combined regex for any valid operand type. This covers object keys, booleans, numbers, and strings.\r\n const operandRegex = `(?:${identifierRegex}|${booleanRegex}|${numberRegex}|${stringLiteralRegex})`;\r\n\r\n // Regex for valid comparison operators (sorted by length descending for correct matching).\r\n const comparisonOperators = `===|==|!==|!=|>=|<=|>|<`;\r\n\r\n // Full regex pattern for a simple comparison, allowing for flexible whitespace around operands and operators.\r\n const simpleComparisonPattern = new RegExp(`^\\\\s*(${operandRegex})\\\\s*(${comparisonOperators})\\\\s*(${operandRegex})\\\\s*$`);\r\n\r\n const match = expression.match(simpleComparisonPattern);\r\n\r\n // Rule 5a: If the expression doesn't match the simple comparison pattern, it's invalid.\r\n // This catches malformed comparisons or unrecognized characters.\r\n if (!match) {\r\n throw new Error(`The expression '${expression}' seems invalid. A condition should look like 'value > 10' or 'status == \"active\"'.`);\r\n\r\n }\r\n\r\n // Rule 5b: Although regex matches, ensure operands are not just empty strings if the regex allowed it.\r\n // (The `operandRegex` is already designed to prevent truly empty matches, but this adds robustness).\r\n const [, leftRaw, , rightRaw] = match;\r\n if (leftRaw?.trim() === '' || rightRaw?.trim() === '') {\r\n throw new Error(`A value seems to be missing in your expression '${expression}'. Please check both sides of the operator.`);\r\n }\r\n\r\n // If all checks pass for this level of the expression, it is considered syntactically valid.\r\n return null;\r\n}\r\n\r\nexport { validateObjectAgainstString, validateExpressionSyntax }\r\n\r\n\r\n\r\n\r\n","import { AbstractControlOptions, ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\n\r\nimport { Validators } from '@angular/forms';\r\n\r\n\r\nimport { ElementTypes, FormControlCustomValidatorsInterface } from 'ngx-t-forms-types';\r\n\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';\r\nimport { validateObjectAgainstString } from \"../../../../shared/modules/stringJsonValidator/getObjectValidations\";\r\n\r\n\r\n\r\n\r\n/**\r\n * Generates a form group based on the provided inputs and optional validator.\r\n * \r\n * @param inputs - An array of form inputs. Each input can be of type IBasicFormInput, IMultiple, ITableSelectionInput, IFileUploadInput, or IMatrixInput.\r\n * @param validator - An optional object containing validation rules for the form group.\r\n * \r\n * @returns A FormGroup instance. If a validator is provided, it is applied to the form group.\r\n * \r\n * @throws Will throw an error if an error occurs while crwhile postingeating the form group.\r\n */\r\n\r\n\r\n\r\nexport interface FormObject {\r\n [key: string]: [{ value: any, disabled: boolean }, AbstractControlOptions];\r\n}\r\n\r\nexport function compileInputValidators(input: FormColumnInputs,getFormValue:()=>Record<string, any>): AbstractControlOptions {\r\n\r\n const isRequired = !!input.required;\r\n let inputValidators = input.validators ? [...input.validators] : [];\r\n if (isRequired && !inputValidators.includes('required')) {\r\n inputValidators = [...inputValidators, 'required'];\r\n } else if (!isRequired && inputValidators.includes('required')) {\r\n inputValidators = inputValidators.filter((validator) => validator !== 'required');\r\n }\r\n if (input.type === 'email' && !inputValidators.includes('email')) {\r\n inputValidators = [...inputValidators, 'email'];\r\n }\r\n \r\n const formControlOptions: AbstractControlOptions = { validators: returnValidator(inputValidators,getFormValue,input) };\r\n \r\n // Set updateOn to 'change' if custom validation functions are present\r\n \r\n formControlOptions.updateOn = 'change';\r\n \r\n \r\n return formControlOptions;\r\n}\r\n\r\n\r\n\r\nexport function returnValidator(validators: Array<string | FormControlCustomValidatorsInterface>,formValue:()=>Record<string,any>,input: FormColumnInputs): ValidatorFn[] {\r\n const Val: ValidatorFn[] = [];\r\n validators.forEach(validate => {\r\n if (typeof validate === 'object') {\r\n // return a custom validator based on a function that takes validation expression and form values\r\n \r\n Val.push(createCustomValidator(validate,formValue));\r\n }else{\r\n switch (validate) {\r\n case 'required':\r\n if(input.element === ElementTypes.Toggle) {\r\n Val.push(toggleRequiredValidator);\r\n break;\r\n }\r\n if(input.element === ElementTypes.MultipleInput){\r\n Val.push(multipleInPutRequiredValidator);\r\n break;\r\n }\r\n if(input.element === ElementTypes.DateRangePicker){\r\n console.error(\"Date Range Picker Validation is not implemented yet\",input)\r\n \r\n }\r\n\r\n Val.push(Validators.required);\r\n break;\r\n case 'email':\r\n Val.push(Validators.email);\r\n break;\r\n }\r\n }\r\n \r\n });\r\n\r\n return Val;\r\n}\r\n\r\nconst multipleInPutRequiredValidator = (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n if (value === null || value === undefined || value === '') {\r\n return { 'required': true };\r\n }\r\nif (Array.isArray(value) === false) {\r\n return { 'required': true };\r\n }\r\n \r\n \r\n return value.length === 0 ? { 'required': true } : null;\r\n}\r\n\r\nconst toggleRequiredValidator = (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n \r\n if (value === null || value === undefined || value === '') {\r\n return { 'required': true };\r\n }\r\n if(typeof value !== 'boolean'){\r\n return { 'required': true };\r\n }\r\n \r\n \r\n return null;\r\n}\r\nfunction createCustomValidator(config:FormControlCustomValidatorsInterface,formValue:()=>Record<string,any>): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const formGroup = control.parent;\r\n const {message,expression, canOverride, inputsObservedForChanges} = config\r\n if (!formGroup && !formValue()) {\r\n return null;\r\n }\r\n \r\n try{\r\n const scope = getValidationScopeFromFormValue(inputsObservedForChanges,formValue());\r\n const isInvalid = validateObjectAgainstString(expression,scope)\r\n const ev =isInvalid ? { [config.id]: { message ,canOverride} } : null;\r\n if(isInvalid){\r\n control.markAsTouched()\r\n control.markAsDirty()\r\n }\r\n\r\n \r\n return ev\r\n }catch(error:unknown){\r\n console.error(error)\r\n return { [config.id]: { message,canOverride,error} } \r\n }\r\n\r\n\r\n \r\n };\r\n }\r\n\r\n\r\n \r\n// Rewritten to avoid potential recursion issues\r\nconst getValidationScopeFromFormValue = (\r\n inputsObservedForChanges: { inputId: string; variable: string }[],\r\n formData: Record<string, any>\r\n): Record<string, any> => {\r\n // Create a new object directly instead of using reduce with spread operator\r\n const result: Record<string, any> = {};\r\n \r\n // Simple loop instead of reduce to avoid deep recursion\r\n for (let i = 0; i < inputsObservedForChanges.length; i++) {\r\n const { inputId, variable } = inputsObservedForChanges[i] || {};\r\n if(!inputId || !variable) continue;\r\n result[variable] = formData[inputId];\r\n }\r\n \r\n return result;\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n ","import { FormGroup, AbstractControl, FormControl } from \"@angular/forms\";\r\n\r\n\r\nimport {compileInputValidators } from \"./commonFormOperations\";\r\nimport { ElementTypes, FormColumnInputs, } from \"ngx-t-forms-types\";\r\n\r\n\r\n\r\n/**\r\n * Generates a hierarchical form with nested FormGroups based on section IDs.\r\n * Parent form listens to all descendant changes, with validation cascading upward.\r\n * \r\n * @param inputs Array of form inputs with their configurations\r\n * @param getFormValue Record of form values used for custom validation\r\n * @returns A FormGroup with nested FormGroups for each section\r\n */\r\nexport function formGenerator(inputs: Array<FormColumnInputs>,getFormValue:()=>Record<string, any>): FormGroup {\r\n \r\n \r\n // Group inputs by sectionId using a more functional approach\r\n const sectionInputsMap = inputs.reduce<Record<string, FormColumnInputs[]>>((sections, input) => {\r\n // Skip section titles as they don't need form controls and multiple inputs in edit mode\r\n if (input.element === ElementTypes.SectionTitle || input.multipleInputInEditId) {\r\n return sections;\r\n }\r\n \r\n // Use a default section ID if none provided\r\n const sectionId = input.sectionId || 'default';\r\n \r\n // Initialize section array if it doesn't exist\r\n if (!sections[sectionId]) {\r\n sections[sectionId] = [];\r\n }\r\n \r\n sections[sectionId].push(input);\r\n return sections;\r\n }, {});\r\n\r\n // Transform the input map into section FormGroups\r\n const sectionControls = Object.entries(sectionInputsMap).reduce<Record<string, FormGroup>>((formGroups, [sectionId, sectionInputs]) => {\r\n // Skip if section has no inputs\r\n if (sectionInputs.length === 0) {\r\n return formGroups;\r\n }\r\n \r\n // Create controls for each input in the section\r\n const controls = sectionInputs.reduce<Record<string, FormControl>>((formControls, input) => {\r\n // Create explicit FormControl with initial value, disabled state, and validators\r\n const value = getDefaultValue(input);\r\n \r\n formControls[input.id] = new FormControl({\r\n value: value,\r\n disabled: !!input.disabled\r\n }, compileInputValidators(input, getFormValue));\r\n \r\n return formControls;\r\n }, {});\r\n \r\n // Create FormGroup for this section with the controls\r\n formGroups[sectionId] = new FormGroup(controls);\r\n \r\n return formGroups;\r\n }, {});\r\n\r\n // Create parent FormGroup containing all section FormGroups\r\n return new FormGroup(sectionControls);\r\n}\r\n/**\r\n * Retrieves a section FormGroup from the parent form\r\n * \r\n * @param form The parent FormGroup\r\n * @param sectionId The ID of the section to retrieve\r\n * @returns The section FormGroup or null if not found\r\n */\r\nexport function getSectionForm(form: FormGroup | undefined, sectionId: string): FormGroup | null {\r\n if (!form) {\r\n return null;\r\n }\r\n return form.get(sectionId) as FormGroup || form.controls[sectionId];\r\n}\r\n\r\n/**\r\n * Retrieves a specific control from a section\r\n * \r\n * @param form The parent FormGroup\r\n * @param sectionId The ID of the section containing the control\r\n * @param controlId The ID of the control to retrieve\r\n * @returns The form control or null if not found\r\n */\r\nexport function getSectionControl(form: FormGroup, sectionId: string, controlId: string): AbstractControl | null {\r\n const sectionForm = getSectionForm(form, sectionId);\r\n if (!sectionForm) {\r\n return null;\r\n }\r\n return sectionForm.get(controlId) || sectionForm.controls[controlId] as any;\r\n}\r\n\r\nexport function generateControlsForTheseInputs(inputs: FormColumnInputs[], getFormValue:any): Record<string, FormControl> {\r\n const filteredInputs = inputs.filter(input => input.element !== ElementTypes.SectionTitle);\r\n const controls = filteredInputs.reduce<Record<string, FormControl>>((formControls, input) => {\r\n \r\n const controlName = input.multipleInputInEditId? `${input.multipleInputInEditId}.${input.id}` : input.id;\r\n // Create explicit FormControl with initial value, disabled state, and validators\r\n const value = getDefaultValue(input);\r\n formControls[controlName] = new FormControl({\r\n value: value,\r\n disabled: !!input.disabled\r\n }, compileInputValidators(input, getFormValue()));\r\n \r\n return formControls;\r\n }, {});\r\n\r\n return controls\r\n}\r\nconst getDefaultValue = (input: FormColumnInputs): any => {\r\n try { \r\n const { value, element } = input;\r\n if(element === ElementTypes.Toggle){\r\n return Boolean(value) \r\n }\r\n if (element === ElementTypes.MultipleInput) {\r\n if(!Array.isArray(value)){\r\n return []\r\n }\r\n return value\r\n }\r\n \r\n \r\n return value ||''\r\n \r\n } catch (error) {\r\n const msg = error instanceof Error ? error.message : 'Unknown error';\r\n console.error('Error in getDefaultValue:', msg);\r\n throw new Error('Error in getDefaultValue: ' + msg);\r\n \r\n }\r\n}","/**\r\n * Compares previous and current objects, returning only properties that changed.\r\n * - Properties in prev but not in current: set to undefined\r\n * - Properties in current but not in prev: included with current value\r\n * - Properties in both with different values: included with current value\r\n * \r\n * @example\r\n * // prev = {a: 8, b: 0}, current = {b: 5}\r\n * // result = {b: 5, a: undefined}\r\n */\r\nexport function getChangedProperties<T extends Record<string, any>>(\r\n prevPassed: T | null | undefined, \r\n currentPassed: T | null | undefined\r\n ): Partial<T> {\r\n // Handle edge cases\r\n // remove undefined in prev \r\n const prev = prevPassed ? Object.keys(prevPassed).reduce((acc, key) => {\r\n if (prevPassed[key] !== undefined) {\r\n (acc as any)[key] = prevPassed[key];\r\n }\r\n return acc;\r\n }, {} as Partial<T>) : undefined;\r\n // remove undefined in current\r\n const current = currentPassed ? Object.keys(currentPassed).reduce((acc, key) => {\r\n if (currentPassed[key] !== undefined) {\r\n (acc as any)[key] = currentPassed[key];\r\n }\r\n return acc;\r\n }, {} as Partial<T>) : undefined;\r\n // if both are undefined return empty object\r\n\r\n if (!prev && !current) return {};\r\n if (!prev) return { ...current } as Partial<T>;\r\n if (!current) {\r\n return Object.keys(prev).reduce((acc, key) => {\r\n (acc as any)[key] = undefined;\r\n return acc;\r\n }, {} as Partial<T>);\r\n }\r\n \r\n const changedProperties: Partial<T> = {};\r\n \r\n // Check properties from prev\r\n for (const key in prev) {\r\n if (!(key in current)) {\r\n // Property removed in current\r\n changedProperties[key] = undefined;\r\n } else if (!_isEqual(prev[key], current[key])) {\r\n // Property value changed\r\n changedProperties[key] = current[key];\r\n }\r\n }\r\n \r\n // Check for new properties in current\r\n for (const key in current) {\r\n if (!(key in prev)) {\r\n // New property added\r\n changedProperties[key] = current[key];\r\n }\r\n }\r\n \r\n return changedProperties;\r\n }\r\n \r\nexport function _isEqual(prev: any, next: any): boolean {\r\n if (prev === next) return true;\r\n\r\n const prevType = typeof prev;\r\n const nextType = typeof next;\r\n\r\n if (prevType !== nextType) return false;\r\n\r\n if (prevType === 'number') {\r\n return (prev === next) || (Number.isNaN(prev) && Number.isNaN(next));\r\n }\r\n\r\n if (prevType === 'string' || prevType === 'boolean') {\r\n return prev === next;\r\n }\r\n\r\n if (Array.isArray(prev) && Array.isArray(next)) {\r\n if (prev.length !== next.length) return false;\r\n for (let i = 0; i < prev.length; i++) {\r\n if (!_isEqual(prev[i], next[i])) return false;\r\n }\r\n return true;\r\n }\r\n\r\n if (prevType === 'object' && prev !== null && next !== null) {\r\n const prevConstructor = prev.constructor;\r\n const nextConstructor = next.constructor;\r\n\r\n if (prevConstructor !== nextConstructor) return false;\r\n\r\n if (prevConstructor === Date) {\r\n return prev.getTime() === next.getTime();\r\n }\r\n\r\n if (prevConstructor === RegExp) {\r\n return prev.source === next.source && prev.flags === next.flags;\r\n }\r\n\r\n const prevKeys = Object.keys(prev);\r\n const nextKeys = Object.keys(next);\r\n\r\n if (prevKeys.length !== nextKeys.length) return false;\r\n\r\n for (const key of prevKeys) {\r\n if (!Object.prototype.hasOwnProperty.call(next, key)) return false;\r\n if (!_isEqual(prev[key], next[key])) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n return prev === null && next === null;\r\n}","import {\r\n EMPTY,\r\n Observable,\r\n Subject,\r\n\r\n catchError,\r\n debounceTime,\r\n distinctUntilChanged,\r\n\r\n map,\r\n\r\n pairwise,\r\n\r\n startWith,\r\n\r\n switchMap,\r\n takeUntil,\r\n\r\n throwError,\r\n} from 'rxjs';\r\n\r\nimport { FormGroup } from '@angular/forms';\r\nimport { _isEqual, getChangedProperties } from '../../../../shared/functions/isEqual';\r\n\r\n/**\r\n * Starts an event listener for form changes.\r\n * \r\n * @param sections - An object containing the form sections.\r\n * @param functionMonitor - A function that monitors the form sections.\r\n * @returns A subscription to the form changes event.\r\n */\r\nexport function startTowerFormChangesEventListener(\r\n formGroup: FormGroup,\r\n destroy$: Subject<void>,\r\n monitorFunction: (value: any) => Observable<any>\r\n) {\r\n return formGroup.valueChanges\r\n .pipe(\r\n takeUntil(destroy$),\r\n debounceTime(500),\r\n distinctUntilChanged(),\r\n startWith(undefined),\r\n map((value) => {\r\n if (!value) return undefined;\r\n // Combine all nested objects into single object\r\n return Object.values(value).reduce((acc, section) => ({\r\n ...(acc as any),\r\n ...(section as object)\r\n }), {} as any);\r\n }),\r\n // Use pairwise to compare previous and current values\r\n pairwise(),\r\n map(([previous, current]) => (getChangedProperties( previous as any,current as any))),\r\n \r\n switchMap((value: any) => monitorFunction(value).pipe(\r\n catchError(error => {\r\n console.error('Error in monitor function:', error);\r\n return EMPTY;\r\n })\r\n )),\r\n catchError((error) => {\r\n console.error('Error in form changes event listener:', error);\r\n return throwError(() => error);\r\n })\r\n )\r\n .subscribe();\r\n}\r\n\r\n","import { validateCalculatedFieldRules, MinimumInputRequiredInterface } from 'ngx-t-forms-types';\r\nimport {FormColumnInputs} from \"ngx-t-forms-types\";\r\n\r\nimport { APIDataFetchingConfigurationInterface, DataSources } from \"ngx-t-forms-types\";\r\nimport { MinInputMapInput } from \"ngx-t-forms-types\";\r\nexport enum FunctionTypes{\r\n ValueCalculation = 'ValueCalculation',\r\n ValuePostMethodAPI = 'ValuePostMethodAPI',\r\n ValuePostMethodAPIWithAllDefaultParams = 'ValuePostMethodAPIWithAllDefaultParams',\r\n OptionsPostMethodAPI = 'OptionsPostMethodAPI',\r\n OptionsPostMethodAPIWithAllDefaultParams = 'OptionsPostMethodAPIWithAllDefaultParams',\r\n ValueGetMethodAPI = 'ValueGetMethodAPI',\r\n OptionsGetMethodAPI = 'OptionsGetMethodAPI',\r\n InputSourcedValue = 'InputSourcedValue',\r\n ManualValueValidation = 'ManualValueValidation',\r\n}\r\n\r\n\r\nexport function getAllFunctionTypes(inputConfig: FormColumnInputs): Partial<Record<FunctionTypes, boolean>>{\r\n const functionTypes: Partial<Record<FunctionTypes, boolean>> = {};\r\n\r\n try {\r\n \r\n // Check for each function type\r\n functionTypes[FunctionTypes.ValueCalculation] = Boolean(!!validateCalculatedFieldRules(inputConfig.calculatedFieldRules).value)\r\n functionTypes[FunctionTypes.ValuePostMethodAPI] = Boolean(inputConfig.matOptions?.fetch?.value?.source === 'api' && (inputConfig.matOptions?.fetch.value as APIDataFetchingConfigurationInterface)?.httpMethod === 'POST')\r\n functionTypes[FunctionTypes.ValuePostMethodAPIWithAllDefaultParams] = Boolean(\r\n inputConfig.matOptions?.fetch.value?.source === 'api' \r\n && (inputConfig.matOptions?.fetch?.value as APIDataFetchingConfigurationInterface)?.httpMethod === 'POST')\r\n && (inputConfig.matOptions?.fetch?.value as APIDataFetchingConfigurationInterface).backEndConfig.minimumInputRequired.every(\r\n (minIn: MinimumInputRequiredInterface) => minIn.type === 'default'\r\n )\r\n functionTypes[FunctionTypes.OptionsPostMethodAPI] = Boolean(inputConfig.matOptions?.fetch?.options?.source === 'api' && (inputConfig.matOptions?.fetch.options as APIDataFetchingConfigurationInterface)?.httpMethod === 'POST')\r\n functionTypes[FunctionTypes.OptionsPostMethodAPIWithAllDefaultParams] = Boolean(\r\n inputConfig.matOptions?.fetch?.options?.source === 'api' \r\n && (inputConfig.matOptions?.fetch?.options as APIDataFetchingConfigurationInterface)?.httpMethod === 'POST')\r\n && (inputConfig.matOptions?.fetch?.options as APIDataFetchingConfigurationInterface).backEndConfig.minimumInputRequired.every(\r\n (minIn: MinimumInputRequiredInterface) => minIn.type === 'default'\r\n )\r\n \r\n \r\n functionTypes[FunctionTypes.ValueGetMethodAPI] = Boolean(inputConfig.matOptions?.fetch?.value?.source === 'api' && (inputConfig.matOptions?.fetch.value as APIDataFetchingConfigurationInterface)?.httpMethod === 'GET')\r\n functionTypes[FunctionTypes.OptionsGetMethodAPI] = Boolean(inputConfig.matOptions?.fetch?.options?.source === 'api' && (inputConfig.matOptions?.fetch.options as APIDataFetchingConfigurationInterface)?.httpMethod === 'GET')\r\n functionTypes[FunctionTypes.InputSourcedValue] = Boolean(inputConfig.matOptions?.fetch.value?.source === DataSources.Local && !!inputConfig.matOptions?.fetch.value?.source)\r\n functionTypes[FunctionTypes.ManualValueValidation] = Boolean(inputConfig.validators?.filter(validator => typeof validator === 'object' && validator !== null).length !== 0)\r\n \r\n return functionTypes;\r\n } catch (error) {\r\n console.error('Error in getAllFunctionTypes:', error);\r\n return {} as any\r\n }\r\n}\r\n\r\nexport function createInputChangeDependency(inputConfig: FormColumnInputs): Partial<Record<FunctionTypes,Record<string,boolean>>> {\r\n \r\n try {\r\n const tree:Partial<Record<FunctionTypes,Record<string,boolean>>>= {}\r\n tree[FunctionTypes.ValueCalculation] = (inputConfig.calculatedFieldRules?.variables\r\n ?.map(variable =>variable.parentInputId ? [\r\n variable.parentInputId,\r\n variable.inputId\r\n ] :[variable.inputId]) || [])\r\n .flat().reduce((acc, inputId) => ({...acc, [inputId]: true}), {})\r\n tree[FunctionTypes.ValuePostMethodAPI] = (inputConfig.matOptions?.fetch.value as APIDataFetchingConfigurationInterface )\r\n ?.backEndConfig?.minimumInputRequired\r\n .flatMap(minIn=>\r\n Array.isArray(minIn.mapTo)? \r\n (minIn.mapTo as MinInputMapInput[] )\r\n .map(mapTo=>mapTo.inputId):\r\n minIn.mapTo?.inputId )\r\n .filter(Boolean)\r\n .reduce((acc, inputId) => \r\n ({...acc, [inputId!]: true}), {})\r\n\r\n tree[FunctionTypes.OptionsPostMethodAPI] = (inputConfig.matOptions?.fetch.options as APIDataFetchingConfigurationInterface )\r\n ?.backEndConfig?.minimumInputRequired\r\n .flatMap(minIn=>\r\n Array.isArray(minIn.mapTo)? \r\n (minIn.mapTo as MinInputMapInput[] )\r\n .map(mapTo=>mapTo.inputId):\r\n minIn.mapTo?.inputId )\r\n .filter(Boolean)\r\n .reduce((acc, inputId) => \r\n ({...acc, [inputId!]: true}), {})\r\n\r\n\r\n tree[FunctionTypes.ManualValueValidation] = inputConfig.validators\r\n ?.filter(validator => typeof validator === 'object' && validator !== null)\r\n .reduce((acc, validator) => {\r\n validator.inputsObservedForChanges.forEach(input => {\r\n acc[input.inputId] = true;\r\n });\r\n return acc;\r\n }, {} as Record<string, boolean>)\r\n \r\n\r\n return tree\r\n } catch (error) {\r\n console.error('Error in createInputChangeDependency:', error);\r\n return {}\r\n }\r\n}","export enum HintType {\r\n WARNING = 'warning',\r\n ERROR = 'error',\r\n SUCCESS = 'success',\r\n LOADING = 'loading',\r\n INFO = 'info',\r\n QUESTION = 'question',\r\n CRITICAL = 'critical',\r\n PENDING = 'pending',\r\n BLOCKED = 'blocked',\r\n COMPLETED = 'completed',\r\n CANCELLED = 'cancelled',\r\n DEFAULT = 'default',\r\n QUERY_SUCCESS = 'query_success',\r\n DB_LOAD = 'db_load',\r\n CALCULATED = 'calculated',\r\n TAG = 'tag',\r\n DOCUMENT = 'document',\r\n HISTORY = 'history',\r\n\r\n}\r\n\r\nexport function textIconsForUserHints(hint: string, type: HintType): string {\r\n switch (type.toLowerCase()) {\r\n case HintType.WARNING:\r\n return `⚠️ ${hint}`;\r\n case HintType.ERROR:\r\n return `❌ ${hint}`;\r\n case HintType.SUCCESS:\r\n return `✅ ${hint}`;\r\n case HintType.LOADING:\r\n return `🔄 ${hint}`;\r\n case HintType.INFO:\r\n return `💡 ${hint}`;\r\n case HintType.QUESTION:\r\n return `❓ ${hint}`;\r\n case HintType.CRITICAL:\r\n return `🔴 ${hint}`;\r\n case HintType.PENDING:\r\n return `⏱️ ${hint}`;\r\n case HintType.BLOCKED:\r\n return `🚫 ${hint}`;\r\n case HintType.COMPLETED:\r\n return `🏁 ${hint}`;\r\n case HintType.CANCELLED:\r\n return `🚮 ${hint}`;\r\n case HintType.QUERY_SUCCESS:\r\n return `✨ ${hint}`;\r\n case HintType.DB_LOAD:\r\n return `🗃️ ${hint}`;\r\n case HintType.CALCULATED:\r\n return `📊 ${hint}`;\r\n case HintType.TAG:\r\n return `🏷️ ${hint}`;\r\n case HintType.DOCUMENT:\r\n return `📄 ${hint}`;\r\n case HintType.HISTORY:\r\n return `🕰️ ${hint}`;\r\n case HintType.DEFAULT:\r\n default:\r\n return `ℹ️ ${hint}`;\r\n }\r\n}\r\n\r\n// Usage example:\r\n// const message = textIconsForUserHints(\"Operation completed\", HintType.SUCCESS);","\r\n\r\n\r\n\r\nimport { evaluate } from \"mathjs\";\r\n\r\nimport { CalculationFunctions, calculationVariableInterface } from \"ngx-t-forms-types\";\r\n\r\nimport { CalculatedFieldRules } from \"ngx-t-forms-types\";\r\n\r\nimport { HintType } from \"../../../../shared/functions/textIconsForUserHints\";\r\nimport { ElementTypes, FormColumnInputs } from \"ngx-t-forms-types\";\r\nimport { Observable, of, throwError } from \"rxjs\";\r\nimport { IFunctionUtils } from \"../../t-form-tower-controller/form-tower-controller.service\";\r\n\r\n\r\nexport function calculateInput(\r\n inputConfig: FormColumnInputs,\r\n formValue: ()=>Record<string, any>,\r\n utils: IFunctionUtils\r\n):Observable<void> {\r\n try {\r\n //1) check if all variables values are valid\r\n\r\n const areValid = (inputConfig.calculatedFieldRules?.variables || []).every(\r\n (Variable: calculationVariableInterface) => {\r\n let inputId;\r\n if (Variable.parentInputId && !!Variable.applyFunctionToCol) {\r\n \r\n inputId = Variable.parentInputId;\r\n } else if (Variable.parentInputId && !inputId && !Variable.applyFunctionToCol) {\r\n inputId = Variable.inputId;\r\n\r\n } else {\r\n inputId = Variable.inputId;\r\n }\r\n let inputValue = formValue()[inputId as string];\r\n const valid = !!inputValue ? inputValue !== '' : false;\r\n \r\n if (!valid) {\r\n utils.setTemporaryHint(\r\n inputConfig.id,\r\n `Cannot complete calculation: Please provide a valid value for \"${Variable.label}\".`,\r\n HintType.INFO\r\n )\r\n }\r\n return valid;\r\n }\r\n );\r\n\r\n utils.setInputStatus( inputConfig.id,\"59565b2a-7deb-4b6b-a762-1cbb2465f55a\", 'Calculating...');\r\n if (areValid) {\r\n\r\n \r\n\r\n\r\n const scope: { [key: string]: number } = configureCalculationScope(\r\n inputConfig,\r\n formValue()\r\n );\r\n\r\n const calculationRules = inputConfig.calculatedFieldRules;\r\n\r\n const inputCalculatedValue = evaluateFormulaAgainstScope(\r\n calculationRules,\r\n scope\r\n );\r\n \r\n if (inputCalculatedValue || inputCalculatedValue == 0) {\r\n \r\n\r\n utils.updateValue( inputConfig.id,inputCalculatedValue);\r\n utils.setTemporaryHint(\r\n inputConfig.id,\r\n `Successfully calculated value`,\r\n HintType.CALCULATED\r\n )\r\n }\r\n }\r\n utils.removeInputStatus( inputConfig.id,\"59565b2a-7deb-4b6b-a762-1cbb2465f55a\");\r\n return of(void 0); // Return Observable that completes with void\r\n } catch (error) {\r\n utils.removeInputStatus( inputConfig.id,\"59565b2a-7deb-4b6b-a762-1cbb2465f55a\");\r\n utils.setTemporaryHint(\r\n inputConfig.id,\r\n error instanceof Error ? error.message : 'Failed to calculate input value', HintType.ERROR\r\n )\r\n return throwError(() => error instanceof Error ? error.message : 'Failed to calculate input value');\r\n }\r\n}\r\n\r\nexport function configureCalculationScope(\r\n input: FormColumnInputs,\r\n formValue: Record<string, any>,\r\n): Record<string, number> {\r\n let scope: Record<string, number> = {};\r\n const variables = input.calculatedFieldRules\r\n ? input.calculatedFieldRules?.variables\r\n : [];\r\n\r\n\r\n for (let index = 0; index < variables.length; index++) {\r\n const rule = variables[index];\r\n if (!rule) continue;\r\n\r\n if (rule.function) {\r\n const inputId = rule.parentInputId\r\n ? rule.parentInputId\r\n : rule.inputId;\r\n\r\n // Because the input is a multiple input, we need to filter the values by a column\r\n const formInputValues: Record<string, any>[] = formValue[inputId as string] || [];\r\n if (!Array.isArray(formInputValues)) continue;\r\n let arrayValues = [];\r\n\r\n if (rule.filterValuesByCol) {\r\n\r\n arrayValues = formInputValues\r\n .filter(\r\n (v: { [x: string]: any }) => v[rule.filterValuesByCol as string]\r\n )\r\n .map((v: { [x: string]: any }) =>\r\n Number(v[rule.applyFunctionToCol as string])\r\n )\r\n\r\n\r\n } else {\r\n if (input.element === ElementTypes.MultipleInput) {\r\n arrayValues = formInputValues.map((v: { [x: string]: any }) =>\r\n Number(v[ rule.inputId as string])\r\n )\r\n\r\n } else {\r\n\r\n\r\n arrayValues = formInputValues\r\n ? formInputValues.map((v: { [x: string]: any }) =>\r\n Number(v[ rule.inputId as string])\r\n )\r\n : [];\r\n }\r\n }\r\n\r\n scope[rule.variable] = calculateListOveralFunctions(rule.function, arrayValues)\r\n\r\n } else {\r\n\r\n scope[rule.variable] = Number(formValue[rule.inputId]);\r\n }\r\n }\r\n return scope;\r\n}\r\n\r\nexport function evaluateFormulaAgainstScope(\r\n rules: CalculatedFieldRules | undefined,\r\n scope: { [key: string]: number }\r\n): number | undefined {\r\n\r\n try {\r\n\r\n if (rules) {\r\n const allVariablesAreInScope =\r\n Object.keys(scope).length === rules.variables.length;\r\n for (const key of Object.keys(scope)) {\r\n if (scope[key] === undefined || scope[key] === null) scope[key] = 0;\r\n isNaN(scope[key] || 0) ? (scope[key] = 0) : '';\r\n }\r\n\r\n\r\n if (allVariablesAreInScope && !!rules?.formula\r\n ) {\r\n\r\n return evaluate(rules.formula\r\n , scope);\r\n } else {\r\n if (!rules?.formula\r\n ) {\r\n console.error(\"no calculation equation\")\r\n }\r\n return undefined;\r\n }\r\n } else {\r\n return undefined;\r\n }\r\n } catch (error) {\r\n console.error(error)\r\n return undefined\r\n }\r\n\r\n}\r\n\r\nexport function calculateListOveralFunctions(rule: CalculationFunctions, arrayValues: any): number {\r\n try {\r\n const len = arrayValues.length;\r\n let sum = arrayValues.reduce((a: any, b: any) => a + b, 0);\r\n switch (rule) {\r\n case CalculationFunctions.Avg:\r\n let avg = len == 0 ? sum : Number(sum / len);\r\n return avg;\r\n\r\n case CalculationFunctions.Sum:\r\n return sum;\r\n\r\n case CalculationFunctions.Max:\r\n return Math.max(...arrayValues);\r\n\r\n case CalculationFunctions.Min:\r\n return Math.min(...arrayValues);\r\n default:\r\n return 0\r\n\r\n }\r\n\r\n } catch (error) {\r\n return 0\r\n }\r\n\r\n}","\r\n\r\n\r\ninterface HttpError extends Error {\r\n status?: number;\r\n error?: any;\r\n}\r\n\r\nexport function errorResolver(err: HttpError | undefined):string|undefined {\r\n if(!err) return undefined\r\n let errorMessage = ''\r\n switch (err?.status) {\r\n case 0:\r\n errorMessage =\r\n 'Oops, something went wrong. Please check your internet connection and try again.';\r\n break;\r\n case 500:\r\n errorMessage = err?.error.errors\r\n ? err?.error.errors.message\r\n : 'Sorry, an unknown error occurred. Please try again later.';\r\n break;\r\n case 400:\r\n err?.error.hasOwnProperty('validation')\r\n ? (errorMessage = err?.error.validation.body.message)\r\n : (errorMessage =\r\n 'Sorry, your request was invalid. Please try again.');\r\n break;\r\n case 401:\r\n errorMessage =\r\n 'Sorry, you are not authorized to access this resource. Please login again.';\r\n break;\r\n case 404: \r\n errorMessage = 'Sorry, the resource you are looking for was not found.';\r\n break;\r\n case 403:\r\n errorMessage = 'Sorry, you do not have permission to access this resource.';\r\n break;\r\n case 405:\r\n errorMessage = 'Sorry, the requested method is not allowed for this resource.';\r\n break;\r\n case 408:\r\n errorMessage = 'Sorry, the request timed out. Please try again.';\r\n break;\r\n case 409:\r\n errorMessage = 'Sorry, there was a conflict with the current state of the resource.';\r\n break;\r\n case 503:\r\n errorMessage = 'Sorry, the service is currently unavailable. Please try again later.';\r\n break;\r\n default:\r\n errorMessage =\r\n 'Sorry, an unknown error occurred. Please try again later.';\r\n break;\r\n }\r\nreturn errorMessage\r\n}\r\n\r\nexport function resolveErrorString(error: Error | any) {\r\n const validation = error.hasOwnProperty('validation');\r\n\r\n if (validation) {\r\n const errMsg = error.validation.body.message;\r\n \r\n return errMsg\r\n } else {\r\n return error\r\n }\r\n };","\r\nimport { ElementTypes, InputDataTypes, MinimumInputRequiredInterface, MinInputMapInput, MinInputTypes } from\"ngx-t-forms-types\";\r\n\r\n\r\n/**\r\n * Validates the minimum input required for a post request.\r\n * @param input - The minimum input required.\r\n * @param formValues - The form values.\r\n * @returns A boolean indicating whether the minimum input is valid or not.\r\n */\r\nexport function validateMinInput(input: MinimumInputRequiredInterface, formValues: any): boolean {\r\n switch (input.type) {\r\n case MinInputTypes.Default:\r\n return true;\r\n case MinInputTypes.MapTo:\r\n const inputValue = getMinInputValue(input, formValues);\r\n const dataType = (input.mapTo as MinInputMapInput).dataType;\r\n const matchType = dataType === InputDataTypes.Date ? InputDataTypes.Object : dataType\r\n const mapToIsValid = inputValue !==undefined && inputValue !==null && inputValue !== '' && typeof inputValue === matchType;\r\n if (!mapToIsValid) {\r\n let typeText = matchType === 'string' ? 'text' :\r\n matchType === 'number' ? 'numeric value' :\r\n matchType === 'object' ? 'valid date' :\r\n matchType === 'boolean' ? 'true/false value' : matchType;\r\n \r\n throw new Error(`Please provide a valid ${typeText} for ${input.name}. The current value (${inputValue}) is not acceptable.`);\r\n }\r\n return mapToIsValid\r\n case MinInputTypes.MapDocFilter:\r\n const mapDocFilterIsValid = (input.mapTo as MinInputMapInput[]).every(mapInput => {\r\n const value = formValues[mapInput.inputId];\r\n return value !== undefined && value !==null && value !== '' && typeof value === (mapInput as MinInputMapInput).dataType\r\n });\r\n if (!mapDocFilterIsValid) {\r\n throw new Error(`Please provide valid values for ${input.name}.`);\r\n }1\r\n return mapDocFilterIsValid;\r\n default:\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Retrieves the minimum input value from the form values based on the provided input configuration.\r\n * @param input - The minimum input configuration.\r\n * @param formValues - The form values object.\r\n * @returns The minimum input value from the form values.\r\n */\r\n function getMinInputValue(input:MinimumInputRequiredInterface, formValues:any): any {\r\n \r\n if (input.mapTo) {\r\n const mapTo = input.mapTo as MinInputMapInput;\r\n if (mapTo.element === ElementTypes.DateRangePicker) {\r\n return formValues[input.name];\r\n }\r\n return formValues[mapTo.inputId];\r\n }\r\n return input.mapTo;\r\n }","\r\n\r\nimport { IArrayFunction } from \"ngx-t-forms-types\"\r\nimport { validateObjectAgainstString } from \"../modules/stringJsonValidator/getObjectValidations\";\r\n\r\n\r\nexport enum FunctionTypes {\r\n Filter = \"filter\",\r\n Find = \"find\",\r\n Map = \"map\",\r\n // Add more function types here as needed\r\n}\r\n\r\n\r\ninterface IRuleFunctions {\r\n [key: string]: <T>(array: T[], expression: string) => T[] | T | undefined;\r\n}\r\n\r\n/**\r\n * Applies the specified array access function based on the provided rule.\r\n * @param array The input array to operate on\r\n * @param rule The rule specifying the function and expression to apply\r\n * @returns The result of applying the specified function\r\n * @throws Error if invalid arguments are provided\r\n */\r\nexport function arrayAccessFunctions<T>(array: T[], rule: IArrayFunction[]): T[] | T | undefined {\r\n // Input validation\r\n if (!Array.isArray(array)) {\r\n throw new Error(\"First argument must be an array\");\r\n }\r\n if (!rule || !Array.isArray(rule) || !rule.every(r=>typeof r.expression === 'string') ) {\r\n throw new Error(\"Rule must have a valid function and expression\");\r\n }\r\n const hasCorrectFunctionType = rule.every((r) => Object.values(FunctionTypes).includes(r.function as FunctionTypes));\r\n if (!hasCorrectFunctionType) {\r\n throw new Error(`Invalid function type`);\r\n }\r\n\r\n\r\n // Apply the specified function\r\n\r\n return rule.reduce((acc: T[] | T | undefined, item: IArrayFunction) => {\r\n if (Array.isArray(acc)) {\r\n return ruleFunctions[item.function]?.(acc, item.expression);\r\n }\r\n return acc;\r\n }, array);\r\n\r\n\r\n\r\n}\r\n\r\n// Define the rule functions\r\nconst ruleFunctions: IRuleFunctions = {\r\n [FunctionTypes.Filter]: <T>(array: T[], expression: string): T[] => {\r\n\r\n return array.filter((item) => {\r\n try {\r\n const ev = validateObjectAgainstString(expression, item as T[])\r\n return ev\r\n } catch (error) {\r\n return false\r\n \r\n }\r\n \r\n \r\n\r\n });\r\n },\r\n [FunctionTypes.Find]: <T>(array: T[], expression: string): T | undefined => {\r\n return array.find((item) => validateObjectAgainstString(expression, item as T[],));\r\n },\r\n [FunctionTypes.Map]: <T>(array: T[], expression: string): T[] => {\r\n \r\n return array.map((item) => {\r\n let obj\r\n\r\n try {\r\n obj = destructureObject(item,expression)\r\n } catch (error) {\r\n\r\n obj = undefined\r\n }\r\n console.warn(obj,expression)\r\n return obj\r\n });\r\n },\r\n // Add more rule functions here as needed\r\n};\r\n\r\nfunction destructureObject(obj: any, keysString: string): any {\r\n // Split the keys string into an array of keys\r\n const keys = keysString.split(',').map(key => key.trim()) || [];\r\n\r\n // Create a new object with the desired keys\r\n const result: any = {};\r\n keys.forEach(key => {\r\n if (key in obj) {\r\n result[key] = obj[key];\r\n\r\n }\r\n // Check if the key is a binding key and extract the value from the object\r\n if(key.includes('{') && key.includes('}') && key.includes(':')){\r\n const properties = key.split(':')\r\n const keyName = properties[0]\r\n if(!keyName ) return\r\n const bindKey = properties[1]?.replace('{','').replace('}','')||''\r\n\r\n if ( bindKey in obj) {\r\n result[keyName] = obj[bindKey];\r\n }\r\n }\r\n });\r\n\r\n return result;\r\n}","import { IArrayFunction } from\"ngx-t-forms-types\"\r\nimport { arrayAccessFunctions } from \"./evaluateArrayAccessRules\";\r\n\r\n\r\ntype DeepPropertyValue = any;\r\nexport type PropertyPath = (string | number | IArrayFunction[])[];\r\n/**\r\n * Custom error class for property access errors in deep object traversal.\r\n * \r\n * @class PropertyAccessError\r\n * @extends Error\r\n * \r\n * @property {PropertyPath} path - The path segment where the error occurred.\r\n * @property {string | number | symbol} segment - The specific path segment that caused the error.\r\n * \r\n * @description\r\n * This error is thrown when there's an issue accessing a property during deep object traversal.\r\n * It provides detailed information about where in the path the error occurred and what caused it.\r\n * \r\n * @example\r\n * try {\r\n * const result = returnDeepProperty(obj, ['a', 'b', 'c']);\r\n * } catch (error) {\r\n * if (error instanceof PropertyAccessError) {\r\n * console.log(`Error at path: ${error.path.join('.')}`);\r\n * console.log(`Problem segment: ${String(error.segment)}`);\r\n * console.log(`Error message: ${error.message}`);\r\n * }\r\n * }\r\n */\r\nclass PropertyAccessError extends Error {\r\n constructor(message: string, public path: PropertyPath, public segment: string | number | IArrayFunction[]) {\r\n super(message);\r\n this.name = 'PropertyAccessError';\r\n }\r\n}\r\n/**\r\n * Retrieves a deeply nested property from an object using a path array.\r\n * \r\n * @function returnDeepProperty\r\n * \r\n * @param {any} item - The object to traverse.\r\n * @param {(string|number|symbol)[]} path - An array representing the path to the desired property.\r\n * Each element in the array can be a string (for object properties), \r\n * a number (for array indices), or a symbol.\r\n * \r\n * @returns {any} The value of the deep property if it exists, otherwise undefined.\r\n * \r\n * @throws {Error} If the input item is null or undefined, or if the path is not a non-empty array.\r\n * \r\n * @example\r\n * const obj = {\r\n * a: {\r\n * b: [\r\n * { c: 1 },\r\n * { c: 2 }\r\n * ]\r\n * }\r\n * };\r\n * \r\n * returnDeepProperty(obj, ['a', 'b', 1, 'c']); // Returns 2\r\n * returnDeepProperty(obj, ['a', 'x']); // Returns undefined\r\n * \r\n * @description\r\n * This function allows for safe traversal of nested objects and arrays.\r\n * It can handle various types of keys including strings, numbers, and symbols.\r\n * The function is optimized for performance and can handle very deep object structures.\r\n * \r\n * Key features:\r\n * - Iterative approach for better performance with deep structures\r\n * - Handles array indices (both as numbers and strings)\r\n * - Supports symbol keys\r\n * - Safely returns undefined for non-existent paths without throwing errors\r\n * - Type-safe with TypeScript\r\n * \r\n * Performance considerations:\r\n * - Efficient for very deep object structures (tested up to 1000 levels deep)\r\n * - Faster than naive recursive approaches for deep traversal\r\n * \r\n * Error handling:\r\n * - Returns undefined for non-existent paths or when trying to access properties of non-objects\r\n * - Throws an error if the input item is null/undefined or if the path is invalid\r\n * \r\n * @see safeReturnDeepProperty for a version that never throws and returns an object with value and error properties\r\n */\r\nconst returnDeepProperty = (item: any, path: PropertyPath): DeepPropertyValue => {\r\n // Input validation\r\n if (item == null) {\r\n throw new Error('Item cannot be null or undefined');\r\n }\r\n if (!Array.isArray(path) || path.length === 0) {\r\n throw new Error('Path must be a non-empty array');\r\n }\r\n\r\n let current = item;\r\n for (let i = 0; i < path.length; i++) {\r\n const key = path[i];\r\n if(!key) return undefined\r\n\r\n // Check if we've hit undefined or null\r\n if (current == null) {\r\n return new PropertyAccessError(`Cannot access property '${key}' of ${current}`, path.slice(0, i), key);\r\n }\r\n\r\n if (typeof key === 'object' && Array.isArray(key) && key.every(k=>'function' in k)) {\r\n // Handle array operations\r\n if (!Array.isArray(current)) {\r\n return new PropertyAccessError(`Cannot apply array operation to non-array`, path.slice(0, i), key);\r\n }\r\n current = arrayAccessFunctions(current, key);\r\n continue;\r\n }\r\n\r\n if (Array.isArray(current)) {\r\n if (typeof key === 'string') {\r\n const index = parseInt(key, 10);\r\n if (!isNaN(index) && index.toString() === key) {\r\n // Valid numeric index\r\n current = current[index];\r\n } else if (current.length > 0 && typeof current[0] === 'object' && key in current[0]) {\r\n // Valid property access on array elements\r\n current = current.map(item => item && typeof item === 'object' ? item[key] : undefined);\r\n } else {\r\n // Invalid key for array\r\n return new PropertyAccessError(`Invalid array access key: '${key}'`, path.slice(0, i + 1), key);\r\n }\r\n } else if (typeof key === 'number') {\r\n current = current[key];\r\n } else {\r\n return new PropertyAccessError(`Invalid array access key: '${key}'`, path.slice(0, i + 1), key);\r\n }\r\n continue;\r\n }\r\n\r\n // Handle regular object property access\r\n if (typeof current !== 'object' && typeof current !== 'function') {\r\n return new PropertyAccessError(`Cannot access property '${key}' of ${typeof current}`, path.slice(0, i), key);\r\n }\r\n\r\n if ((key as any) in current) {\r\n current = current[key as string | number];\r\n } else {\r\n return new PropertyAccessError(`Property '${String(key)}' does not exist`, path.slice(0, i + 1), key);\r\n }\r\n }\r\n\r\n return current;\r\n}\r\n\r\n/**\r\n * Safely retrieves a deeply nested property from an object using a path array.\r\n * \r\n * @function safeReturnDeepProperty\r\n * \r\n * @param {any} item - The object to traverse.\r\n * @param {(string|number|symbol)[]} path - An array representing the path to the desired property.\r\n * Each element in the array can be a string (for object properties), \r\n * a number (for array indices), or a symbol.\r\n * \r\n * @returns {{value: any, error: string|null}} An object containing:\r\n * - value: The value of the deep property if found, otherwise undefined.\r\n * - error: A string describing the error if one occurred, otherwise null.\r\n * \r\n * @example\r\n * const obj = {\r\n * a: {\r\n * b: [\r\n * { c: 1 },\r\n * { c: 2 }\r\n * ]\r\n * }\r\n * };\r\n * \r\n * safeReturnDeepProperty(obj, ['a', 'b', 1, 'c']); \r\n * // Returns { value: 2, error: null }\r\n * \r\n * safeReturnDeepProperty(obj, ['a', 'x']); \r\n * // Returns { value: undefined, error: \"Property 'x' does not exist\" }\r\n * \r\n * safeReturnDeepProperty(null, ['a']); \r\n * // Returns { value: undefined, error: \"Item cannot be null or undefined\" }\r\n * \r\n * @description\r\n * This function is a wrapper around returnDeepProperty that never throws exceptions.\r\n * Instead, it returns an object with both the retrieved value and any error message.\r\n * This makes it suitable for use in situations where you want to handle all possible\r\n * errors without try/catch blocks.\r\n * \r\n * Key features:\r\n * - Never throws exceptions\r\n * - Provides both the retrieved value and error information\r\n * - Handles the same range of inputs as returnDeepProperty\r\n * \r\n * Use this function when you need to:\r\n * - Safely traverse objects without worrying about exceptions\r\n * - Get detailed error information along with the result\r\n * - Implement error handling in a functional programming style\r\n * \r\n * @see returnDeepProperty for the core implementation that this function wraps\r\n */\r\n\r\nconst safeReturnDeepProperty = (item: any, path: PropertyPath): { value: DeepPropertyValue, error: string | null } => {\r\n try {\r\n const result = returnDeepProperty(item, path);\r\n if (result instanceof PropertyAccessError) {\r\n return { value: undefined, error: result.message };\r\n }\r\n return { value: result, error: null };\r\n } catch (error) {\r\n return { value: undefined, error: error instanceof Error ? error.message : String(error) };\r\n }\r\n}\r\n\r\n\r\nexport { returnDeepProperty, safeReturnDeepProperty, PropertyAccessError };","\r\n\r\n\r\n\r\nimport { FormInputBasicOptionInterface, TreeNode } from 'ngx-t-forms-types';\r\nimport { PropertyPath, safeReturnDeepProperty } from '../../../../../lib/shared/functions/getDeepObject';\r\n\r\n\r\nconst returnMappedPathValue = (pathMap: TreeNode[], obj: any) => {\r\n if (typeof pathMap === 'string') {\r\n \r\n return safeReturnDeepProperty(obj, [pathMap]);\r\n }\r\n\r\n if (!Array.isArray(pathMap)) {\r\n throw new Error('Invalid pathMap: expected array or string');\r\n } \r\n const extractionPath:PropertyPath = pathMap.map(a => {\r\n const keyIsArrayIndex = typeof a.key === 'number' || a.keyIsArrayIndex || !isNaN(Number(a.key))\r\n const isValidNodeFunction = Array.isArray(a.functions) && a.functions.length > 0 && a.functions.every(f => 'function' in f && 'expression' in f)\r\n if (!keyIsArrayIndex || !isValidNodeFunction) {\r\n return a.key\r\n }\r\n return a.functions\r\n })\r\n\r\n const { value} = safeReturnDeepProperty(obj, extractionPath );\r\n\r\n return value\r\n\r\n}\r\n\r\nconst getValueFromValueAccessor = (valueAccessRules: FormInputBasicOptionInterface | TreeNode[] | Record<string, TreeNode[]>, data: any) => {\r\n try {\r\n const hasValueAccess = !!valueAccessRules;\r\n if (!hasValueAccess) {\r\n return data;\r\n }\r\n const isMultipleControlBind = !Array.isArray(valueAccessRules) && typeof valueAccessRules === 'object' && Object.keys(valueAccessRules).length > 1\r\n if (isMultipleControlBind) {\r\n let v: any = {}\r\n for (let key in valueAccessRules) {\r\n v[key] = returnMappedPathValue((valueAccessRules as any)[key] as TreeNode[], data)\r\n }\r\n return v\r\n\r\n }\r\n const isNotLegacyValueAccess = Array.isArray(valueAccessRules) && valueAccessRules.length > 0 && 'functions' in (valueAccessRules?.[0]||{})\r\n if (isNotLegacyValueAccess) {\r\n\r\n return returnMappedPathValue(valueAccessRules as TreeNode[], data)\r\n }\r\n\r\n const isLegacyValueAccess = !Array.isArray(valueAccessRules) && valueAccessRules['value'] && typeof valueAccessRules['value'] === 'string'\r\n if (isLegacyValueAccess) {\r\n return data[valueAccessRules['value'] as string]\r\n }\r\n return undefined\r\n } catch (error) {\r\n throw error instanceof Error ? error : new Error('Failed to get value ');\r\n }\r\n}\r\nexport { returnMappedPathValue, getValueFromValueAccessor } ","import { ElementTypes, FormColumnInputs } from \"ngx-t-forms-types\";\r\n\r\nexport function multipleFormInputMapValueToInputsId (\r\n input: FormColumnInputs,\r\n value: any,\r\n){\r\n try {\r\n if(input.element !== ElementTypes.MultipleInput ) return value;\r\n if(!Array.isArray(value)) return value;\r\n return value.map((val) => Object.entries(val).reduce((acc, [key, value]) => {\r\n const inputId = input.formInputs?.find((input) => input.formControlName === key)?.id\r\n if(!inputId) return acc\r\n return {\r\n ...acc,\r\n [`${input.id}.${inputId}`]: value\r\n }\r\n }, {}))\r\n \r\n } catch (error) {\r\n const msg = error instanceof Error ? error.message : \"Error mapping value to input\"\r\n console\r\n .error(msg)\r\n throw new Error(msg)\r\n \r\n }\r\n}","\r\nimport { HintType } from \"../../../../shared/functions/textIconsForUserHints\";\r\nimport { ElementTypes, FormColumnInputs } from \"ngx-t-forms-types\";\r\nimport { catchError, Observable, of, tap, throwError } from \"rxjs\";\r\nimport { errorResolver, resolveErrorString } from \"../../t-form-section-controller/Functions/errorResolver\";\r\n\r\nimport { APIDataFetchingConfigurationInterface } from \"ngx-t-forms-types\";\r\nimport { validateMinInput } from \"./../../../../services/core/t-form-controller/function/validateMinInputForPostRequest\";\r\nimport { MinimumInputRequiredInterface, MinInputMapInput, MinInputTypes } from \"ngx-t-forms-types\";\r\nimport { IFunctionUtils } from \"../../t-form-tower-controller/form-tower-controller.service\";\r\nimport { getValueFromValueAccessor } from \"../../t-form-section-controller/Functions/getValueFromPathMap\";\r\nimport { multipleFormInputMapValueToInputsId } from \"./multipleFormInputsMapValueToFormInputId\";\r\n\r\n/**\r\n * Retrieves the input data for a POST request.\r\n * @param minRequiredInputs - An array of TInputControllerService objects representing the minimum required inputs.\r\n * @param inputClass - The TInputControllerService object representing the input class requesting the data.\r\n * @param formValues - An object containing the entire form's values.\r\n * @param section - The TFormSectionControllerService object representing the form section.\r\n * @param minInputs - An array of MinimumInputRequiredInterface objects representing the minimum required inputs.\r\n * @param dataFor - A string indicating whether the data is for \"options\" or \"value\".\r\n * @param httpPostDataFunction - A function that performs the HTTP POST request.\r\n */\r\nexport function inputGetApiPostData(\r\n inputConfig: FormColumnInputs,\r\n formValues: any,\r\n dataFor: \"options\" | \"value\",\r\n utils :IFunctionUtils\r\n\r\n\r\n) :Observable<void>{\r\n \r\n try {\r\n const fetchOptions: APIDataFetchingConfigurationInterface | undefined = inputConfig.matOptions?.fetch?.[dataFor] as any\r\n if (fetchOptions?.source !== \"api\"){\r\n utils.setInputTemporaryError(inputConfig.id, `Cannot fetch data. Source is not\r\n from an API`)\r\n return of();\r\n }\r\n const minInputs = fetchOptions.backEndConfig.minimumInputRequired\r\n if (minInputs.length === 0) {\r\n \r\n utils.setInputTemporaryError(inputConfig.id, `Cannot fetch data. No minimum inputs provided`)\r\n return of()\r\n }\r\n //1) Check if all required inputs have a valid value as required\r\n \r\n const AreValid = minInputs.every(input => {\r\n try {\r\n return validateMinInput(input, formValues())\r\n } catch (error) {\r\n const errorMessage = error instanceof Error ? error.message :`Invalid minimum input=${input.name}`;\r\n utils.setInputTemporaryError(inputConfig.id, errorMessage)\r\n return false\r\n }\r\n });\r\n if (!AreValid) {\r\n return of()\r\n }\r\n const endpoint = (inputConfig.matOptions?.fetch?.[dataFor] as APIDataFetchingConfigurationInterface)?.httpEndPoint as string\r\n\r\n const submissionParameters= {\r\n handleId: (inputConfig.matOptions?.fetch?.[dataFor] as APIDataFetchingConfigurationInterface)?._id,\r\n handle: {\r\n submissionMessage: `fetching ${inputConfig.label} options from database`,\r\n },\r\n data: returnMappedData(formValues(), minInputs, endpoint),\r\n httpHeaderOptions: (inputConfig.matOptions?.fetch?.[dataFor] as APIDataFetchingConfigurationInterface)?.httpHeaderOptions,\r\n refresh: false,\r\n httpEndPoint: endpoint\r\n ,\r\n };\r\n\r\n\r\n utils.setInputStatus(inputConfig.id, 'd19be9ca-ceda-4388-9f7b-3fcb5f12d921', 'Fetching data...');\r\n utils.setTemporaryHint(inputConfig.id, 'Fetching data...', HintType.LOADING);\r\n\r\n return utils.httpPostDataFunction( submissionParameters.httpEndPoint, submissionParameters.data,submissionParameters.httpHeaderOptions).pipe(\r\n tap(\r\n (response: any) => {\r\n utils.removeInputStatus(inputConfig.id, 'd19be9ca-ceda-4388-9f7b-3fcb5f12d921');\r\n const valueAccessRules = (fetchOptions as APIDataFetchingConfigurationInterface)?.valueAccessRules;\r\n \r\n const results = !valueAccessRules ? response : getValueFromValueAccessor(valueAccessRules||[], response);\r\n\r\n if (dataFor !== \"options\") {\r\n const mappedData = multipleFormInputMapValueToInputsId(inputConfig,results) \r\n console.error(mappedData,results,\"-------\",valueAccessRules,\"dddddddddd\",response,\"ddddddddddddd\")\r\n utils.updateValue(inputConfig.id,mappedData,)\r\n utils.setTemporaryHint(inputConfig.id, 'Data fetched successfully', HintType.SUCCESS);\r\n \r\n return\r\n }\r\n const matOptions = {\r\n ... inputConfig.matOptions,\r\n options: results\r\n }\r\n utils.updateFormInputConfig(inputConfig.id, { matOptions} as any)\r\n utils.setTemporaryHint(inputConfig.id, 'Data options fetched successfully', HintType.DOCUMENT);\r\n utils.removeInputStatus(inputConfig.id, 'd19be9ca-ceda-4388-9f7b-3fcb5f12d921');\r\n \r\n }\r\n ),\r\n catchError((error) => {\r\n utils.removeInputStatus(inputConfig.id, 'd19be9ca-ceda-4388-9f7b-3fcb5f12d921');\r\n const errorMessage = errorResolver(error);\r\n const err = resolveErrorString(errorMessage);\r\n utils.setInputTemporaryError(inputConfig.id, err)\r\n console.error(`[getPostInputData] while posting\r\n ${inputConfig.label} data, an error occurred:`, error\r\n );\r\n return throwError(() => error instanceof Error ? error.message : 'Failed to fetch data');\r\n })\r\n )\r\n\r\n\r\n\r\n\r\n\r\n \r\n\r\n\r\n } catch (error: any) {\r\n const errorMessage = errorResolver(error as unknown as any);\r\n const err = resolveErrorString(errorMessage);\r\n utils.setInputTemporaryError(inputConfig.id, err)\r\n utils.removeInputStatus(inputConfig.id, 'd19be9ca-ceda-4388-9f7b-3fcb5f12d921');\r\n console.error(`[getPostInputData] while posting\r\n ${inputConfig.label} data, an error occurred:`, error\r\n );\r\n return throwError(() => error instanceof Error ? error.message : 'Failed to fetch data');\r\n }\r\n\r\n\r\n}\r\n\r\nexport function returnMappedData(\r\n formValues: any,\r\n minInputs: MinimumInputRequiredInterface[],\r\n endpoint: string\r\n) {\r\ntry {\r\n const newData: any = {\r\n data:{}\r\n };\r\n for (let index = 0; index < minInputs.length; index++) {\r\n const minInput = minInputs[index];\r\n if (!minInput) continue;\r\n const isPrimary = minInput.primaryKey\r\n if (minInput.type === MinInputTypes.Default) {\r\n const v = typeof minInput.defaultValue === \"string\" && minInput.defaultValue.startsWith(\"{\") &&\r\n minInput.defaultValue.endsWith(\"}\") ? JSON.parse(minInput.defaultValue) : minInput.defaultValue\r\n isPrimary ? newData[minInput.name] = v :\r\n newData.data[minInput.name] = v\r\n } else if (minInput.type === MinInputTypes.MapTo && minInput.mapTo) {\r\n if ((minInput.mapTo as MinInputMapInput).element === ElementTypes.DateRangePicker) {\r\n isPrimary ? newData[minInput.name] = formValues[minInput.name] :\r\n newData.data[minInput.name] = formValues[minInput.name]\r\n } else {\r\n isPrimary ? newData[minInput.name] = formValues[(minInput.mapTo as MinInputMapInput)\r\n .inputId] : newData.data[minInput.name]\r\n = formValues[(minInput.mapTo as MinInputMapInput)\r\n .inputId]\r\n }\r\n\r\n } else if (minInput.type === MinInputTypes.MapDocFilter) {\r\n isPrimary ? newData['docFilter'] = (minInput.mapTo as MinInputMapInput[]).map((mappedInput) => {\r\n return {\r\n key: mappedInput.inputId,\r\n filterValue: formValues[mappedInput.inputId]\r\n }\r\n }) :\r\n newData.data['docFilter'] = (minInput.mapTo as MinInputMapInput[]).map((mappedInput) => {\r\n return {\r\n key: mappedInput.inputId,\r\n filterValue: formValues[mappedInput.inputId]\r\n }\r\n })\r\n }\r\n }\r\n // budget depleted \r\n\r\n\r\n if (endpoint === \"/api/internal/getListBudgetData\") {\r\n const { startPeriod, endPeriod, searchFilter } = newData\r\n const payload = { ...newData, startPeriod: undefined, endPeriod: undefined, searchFilter: undefined }\r\n payload['data']['filter'] = {}\r\n\r\n return {\r\n startPeriod, endPeriod, searchFilter,\r\n\r\n ...payload\r\n }\r\n }\r\n if (Object.keys(newData.data||{}).length === 0) {\r\n newData.data = undefined\r\n }\r\n return newData;\r\n} catch (error) {\r\n console.error(`[returnMappedData] an error occurred:`, error)\r\n const msg = error instanceof Error ? error.message : 'Failed to fetch data';\r\n throw new Error(msg);\r\n}\r\n\r\n}\r\n","import { FormColumnInputs, ITowerStepColumn } from \"ngx-t-forms-types\";\r\nimport { getSectionForm } from \"../../t-form-section-controller/Functions/formGenerator\";\r\nimport { FormTowerControllerService } from \"../form-tower-controller.service\";\r\nimport { ElementTypes, ITowerFormSteps } from 'ngx-t-forms-types'\r\nimport { take } from \"rxjs\";\r\nimport { IStepOption } from \"ngx-ui-tour-md-menu\";\r\nexport interface IFormTour extends IStepOption{\r\n sectionId: string;\r\n \r\n}\r\nexport const sectionFormErrorMessage = (self: FormTowerControllerService, sectionId: string) => {\r\n const sectionInputs = self.allFormInputs()?.filter(input => input.sectionId === sectionId && !input.multipleInputInEditId &&\r\n\r\n input.element !== ElementTypes.SectionTitle\r\n ) || []\r\n const sectionForm = getSectionForm(self.mainForm, sectionId)\r\n const allInputsWithErrors = sectionInputs.filter(input => {\r\n const control = sectionForm?.controls[input.id]\r\n if (!control) {\r\n return false\r\n }\r\n return !!control?.invalid\r\n })\r\n\r\n const firstError = allInputsWithErrors[0]\r\n if (!firstError) return ''\r\n const numberOfAllOtherErrors = allInputsWithErrors.length - 1\r\n if (numberOfAllOtherErrors === 0) return `${firstError?.label} is invalid`\r\n\r\n return ` ${allInputsWithErrors[0]?.label} and ${allInputsWithErrors.length - 1} other are invalid`\r\n}\r\nexport function selectFormSteps(self: FormTowerControllerService): ITowerFormSteps[] {\r\n try {\r\n const slides = self.form?.slides\r\n\r\n if (!slides) return []\r\n return slides.map((slide) => {\r\n\r\n const activeSectionHasTour = slide.columns.some((column) => column.tourContent)\r\n const tourOptions = slide.columns.map((column) => column.tourContent)\r\n const sectionForm = getSectionForm(self.mainForm, slide.sectionId)\r\n const errMsg = sectionFormErrorMessage(self, slide.sectionId)\r\n\r\n return {\r\n label: slide.label,\r\n sectionId: slide.sectionId,\r\n sectionForm,\r\n sectionIsInvalid: sectionForm?.invalid,\r\n sectionIsSeen: slide.sectionIsSeen,\r\n sectionFormErrorMessage: errMsg,\r\n activeSectionHasTour,\r\n tourOptions,\r\n columns: slide.columns.map((col) => ({\r\n ...col,\r\n canReload: getReloadFunction(self, col),\r\n } as ITowerStepColumn)),\r\n isActive: slide.isActive,\r\n }\r\n })\r\n }\r\n catch (error) {\r\n console.error('Error in selectFormSteps:', error);\r\n return [];\r\n }\r\n}\r\nexport const selectAllFormTours = (self: FormTowerControllerService): IFormTour[] => {\r\n const steps = selectFormSteps(self);\r\n return steps.flatMap((step) => {\r\n return step.columns.filter(c=>!!c.tourContent).map((column) => ({\r\n \r\n anchorId: column.id,\r\n title: step.label,\r\n content: column.tourContent || '',\r\n sectionId: step.sectionId,\r\n \r\n }))\r\n })\r\n\r\n}\r\n\r\n\r\nconst getReloadFunction = (self: FormTowerControllerService, column: FormColumnInputs): {\r\n canReload: boolean;\r\n emit: () => void;\r\n} | undefined => {\r\n const canReload = Object.keys(self.inputFunctionsCollection[column.id] || {}).length > 0\r\n if (!canReload) {\r\n return undefined;\r\n }\r\n return {\r\n emit: () => {\r\n\r\n Object.entries(self.inputFunctionsCollection[column.id] || {}).forEach(f => {\r\n const [key, fn] = f\r\n fn.pipe(take(1)).subscribe()\r\n console.error(`Reloading input with id: ${column.id} using function:`, key);\r\n })\r\n },\r\n canReload: true\r\n }\r\n}","import { ElementTypes, FormColumnInputs, FormInterface } from \"ngx-t-forms-types\";\r\n\r\n\r\nexport const allFormInputs= (form: FormInterface | undefined) : FormColumnInputs[] | undefined=> {\r\n \r\n return form?.slides.flatMap((slide) => slide.columns.flatMap((column) => {\r\n const isMultipleFormInput = Boolean(column.formInputs)\r\n const isDateRange = column.element === ElementTypes.DateRangePicker\r\n if (isDateRange) {\r\n const start = {\r\n ...column,\r\n id: `${column.id}.${column.startDateControl}`,\r\n label: `${column.label} Start Date`,\r\n formControlName: column.startDateControl,\r\n min: column.startMinDate,\r\n value: !!(column.value as any)?.start ?\r\n new Date((column.value as any).start) : undefined,\r\n max: column.startMaxDate,\r\n } as FormColumnInputs\r\n const end = {\r\n ...column,\r\n id: `${column.id}.${column.endDateControl}`,\r\n label: `${column.label} End Date`,\r\n formControlName: column.endDateControl,\r\n min: column.endMinDate,\r\n value: !!(column.value as any)?.end ?new Date((column.value as any).end) : undefined,\r\n max: column.endMaxDate,\r\n } as FormColumnInputs\r\n return [start, end]\r\n }\r\n if(isMultipleFormInput ){\r\n const mInputs = column.formInputs?.map((input) => ({...input, id: `${column.id}.${input.id}`,originalId: input.id})) ||[]\r\n \r\n return [column,...mInputs]\r\n }\r\n \r\n const isScoaInput = column.element === ElementTypes.MscoaSelection\r\n if(isScoaInput){\r\n const scoaInputs = column.mscoaConfig.inputs?.map((input) => ({...input, id: `${column.id}.${input.id}`,originalId: input.id})) ||[]\r\n return [column,...scoaInputs]\r\n }\r\n\r\n\r\n return [column]\r\n }))\r\n}","\r\nimport { ElementTypes, FormSubmissionStatus, ITowerFormSteps } from 'ngx-t-forms-types';\r\nimport { FormTowerControllerService } from '../form-tower-controller.service';\r\nimport { MatStepper } from '@angular/material/stepper';\r\nimport { HintType, textIconsForUserHints } from '../../../../shared/functions/textIconsForUserHints';\r\nimport { FormGroup } from '@angular/forms';\r\nexport function formProgress(self: FormTowerControllerService) {\r\ntry {\r\n const requiredInputs =self.allFormInputs()?.filter(c=>c.required && !c.multipleInputInEditId&& c.element !== ElementTypes.SectionTitle)||[];\r\n\r\n \r\n const allValidRequiredInputs = requiredInputs.filter(c => {\r\n return !!(self.mainForm?.controls[c.sectionId] as FormGroup<any> )?.controls[c.id]?.valid === true || \r\n !!(self.mainForm?.controls[c.sectionId] as FormGroup<any> )?.controls[c.id]?.invalid === false \r\n })\r\n \r\n\r\n const valid = allValidRequiredInputs.length;\r\n const total = requiredInputs.length;\r\n return Math.round((valid/total)*100);\r\n} catch (error) {\r\n console.error(error)\r\n return 0\r\n}\r\n \r\n \r\n \r\n}\r\n\r\nexport const formSubmissionMessage = (self: FormTowerControllerService)=>{\r\n const buttonLabel = self.form?.submissionHandle?.submissionMessage||'Continue to submit'\r\n const submissionStatus = self?.submittingStatus\r\n if(submissionStatus === FormSubmissionStatus.SUBMITTING) return 'Submitting form...'\r\n if(submissionStatus === FormSubmissionStatus.UPLOADING) return 'Uploading files...'\r\n if(submissionStatus === FormSubmissionStatus.VALIDATING) return 'Validating form...'\r\n if(submissionStatus === FormSubmissionStatus.FAILED) return 'Failed to submitting form'\r\n return buttonLabel\r\n }\r\n\r\nexport function getSubmissionStatusFn(stepper: MatStepper | undefined,mainForm:FormGroup|undefined,formProgress:number,steps:ITowerFormSteps[],loading:boolean): string {\r\n const progress = formProgress || 0;\r\n\r\n \r\n if (loading === true) {\r\n return '⏳ Loading form...';\r\n }\r\n \r\n if (!!mainForm?.valid && progress === 100) {\r\n return textIconsForUserHints(`Form complete (${progress.toFixed(0)}%)`, HintType.SUCCESS);\r\n }\r\n \r\n if (stepper === undefined) return ''\r\n const currentStep = steps[stepper?.selectedIndex];\r\n const invalidSteps = steps.filter((step: { sectionIsInvalid: any; }) => step.sectionIsInvalid);\r\n const incompleteSteps = steps.filter((step: { sectionIsSeen: any; }) => !step.sectionIsSeen);\r\n \r\n if (currentStep?.sectionIsInvalid) {\r\n return textIconsForUserHints(\r\n `Please fix errors in current section (${progress.toFixed(0)}% complete)`,\r\n HintType.WARNING\r\n );\r\n }\r\n \r\n if (invalidSteps.length > 0) {\r\n return textIconsForUserHints(\r\n `${invalidSteps.length} section${invalidSteps.length > 1 ? 's' : ''} need${invalidSteps.length === 1 ? 's' : ''} attention (${progress.toFixed(0)}% complete)`,\r\n HintType.ERROR\r\n );\r\n }\r\n \r\n if (incompleteSteps.length > 0) {\r\n return textIconsForUserHints(\r\n `${incompleteSteps.length} section${incompleteSteps.length > 1 ? 's' : ''} left (${progress.toFixed(0)}% complete)`,\r\n HintType.WARNING\r\n );\r\n }\r\n \r\n return textIconsForUserHints(\r\n `Progress: ${progress.toFixed(0)}%`,\r\n HintType.INFO\r\n );\r\n }","import { FormTowerControllerService } from \"../form-tower-controller.service\";\r\n\r\nexport function setControlTempErrors(self: FormTowerControllerService, inputId: string, message: string): void {\r\n try {\r\n if (!self?.mainForm) return;\r\n const input =self.allFormInputs()?.find(input => input.id === inputId);\r\n if (!input) return;\r\n\r\n \r\n const control = self?.mainForm.get(inputId);\r\n const touched = control?.touched;\r\n input.onlySetTempErrorOnTouch\r\n\r\n if (!control|| !touched && !!input.onlySetTempErrorOnTouch) return;\r\n\r\n // Create new errors object explicitly\r\n const currentErrors = control.errors ? {...control.errors} : {};\r\n currentErrors[\"temporaryError\"] = message;\r\n \r\n // Set errors and mark as touched\r\n control.markAsTouched();\r\n control.markAsDirty();\r\n control.setErrors(currentErrors);\r\n\r\n // Force control update in form\r\n self.mainForm!.controls[inputId] = control;\r\n \r\n // Force form validation\r\n self.mainForm!.updateValueAndValidity();\r\n\r\n // Debug log\r\n console.log('Set temporary error:', control.errors);\r\n\r\n setTimeout(() => {\r\n // Get fresh control reference\r\n const currentControl = self.mainForm?.get(inputId);\r\n if (!currentControl) return;\r\n\r\n // Create new errors object\r\n const remainingErrors = currentControl.errors ? {...currentControl.errors} : {};\r\n delete remainingErrors[\"temporaryError\"];\r\n\r\n // Set remaining errors or null\r\n currentControl.setErrors(Object.keys(remainingErrors).length > 0 ? remainingErrors : null);\r\n \r\n // Update form control\r\n self.mainForm!.controls[inputId] = currentControl;\r\n \r\n // Force validation\r\n self.mainForm!.updateValueAndValidity();\r\n \r\n }, calculateReadDelay(message));\r\n\r\n } catch (error) {\r\n console.error('Error in setControlTempErrors:', error);\r\n }\r\n}\r\n\r\nexport function calculateReadDelay(message: string): number {\r\n const WORDS_PER_MINUTE = 200; // Average reading speed\r\n const MIN_DELAY = 4000; // Minimum 4 seconds\r\n const MILLISECONDS_PER_MINUTE = 60000;\r\n \r\n // Count words (split by spaces)\r\n const wordCount = message.split(' ').length;\r\n \r\n // Calculate reading time in milliseconds\r\n const readingTime = (wordCount / WORDS_PER_MINUTE) * MILLISECONDS_PER_MINUTE;\r\n \r\n // Return max of minimum delay or calculated reading time\r\n return Math.max(MIN_DELAY, readingTime);\r\n}\r\n\r\n","import { FormColumnInputs } from \"ngx-t-forms-types\";\r\nimport { FormTowerControllerService } from \"../form-tower-controller.service\";\r\nimport { calculateReadDelay } from \"./setControlTempErrors\";\r\nimport { HintType, textIconsForUserHints } from \"../../../../shared/functions/textIconsForUserHints\";\r\n\r\n export const setInputTemporaryError = (self: FormTowerControllerService ,inputId: string, message: string) => {\r\n // Clear any existing timeout\r\n\r\n if (self._errorTimeoutIds[inputId]) {\r\n clearTimeout(self._errorTimeoutIds[inputId]);\r\n }\r\n\r\n self.setInputError({ temporaryError: message } as any, inputId);\r\n // Set more descriptive emojis/icons based on hint type\r\n // Clear the hint after 5 seconds\r\n self._errorTimeoutIds[inputId] = setTimeout(() => {\r\n self.setInputError({ temporaryError: null } as any, inputId);\r\n self._errorTimeoutIds[inputId] = undefined\r\n }, calculateReadDelay(message));\r\n }\r\n\r\n export const setTemporaryHint = (self: FormTowerControllerService ,inputId: string, hint: string, type: HintType) => {\r\n // Clear any existing timeout\r\n if (self._hintTimeoutIds[inputId]) {\r\n clearTimeout(self._hintTimeoutIds[inputId]);\r\n }\r\n // Set the temporary hint\r\n const newHint = textIconsForUserHints(hint, type);\r\n self.updateFormInputConfig(inputId, { temporaryHint: newHint } as any);\r\n // Set more descriptive emojis/icons based on hint type\r\n // Clear the hint after 5 seconds\r\n self._hintTimeoutIds[inputId] = setTimeout(() => {\r\n self.updateFormInputConfig(inputId, { temporaryHint: undefined } as any);\r\n \r\n \r\n self._hintTimeoutIds[inputId] = undefined\r\n }, calculateReadDelay(hint));\r\n }\r\n\r\n export const setInputError = (self: FormTowerControllerService ,err: Record<string, any>, inputId: string) => {\r\n if (!self.mainForm) return;\r\n const input:FormColumnInputs|undefined = self.allFormInputs()?.find(input => input.id === inputId);\r\n \r\n if (!input?.sectionId) return;\r\n const control = self.mainForm.get(input.sectionId)?.get(inputId);\r\n if(!control){\r\n console.error(`Control with ID ${inputId} not found in form`);\r\n return\r\n }\r\n \r\n // Store the current validation state\r\n\r\n const previousErrors = { ...(control.errors || {}) };\r\n\r\n // Handle clearing temporary error\r\n if (err['temporaryError'] === null) {\r\n if (previousErrors['temporaryError']) {\r\n const { temporaryError, ...remainingErrors } = previousErrors;\r\n\r\n if (Object.keys(remainingErrors).length === 0) {\r\n control.setErrors(null);\r\n } else {\r\n // Force update by setting to null first\r\n control.setErrors(null);\r\n // Then set the remaining errors\r\n control.setErrors(remainingErrors);\r\n }\r\n }\r\n } else {\r\n // Add the new error(s)\r\n const mergedErrors = { ...previousErrors, ...err };\r\n // Ensure the control is marked as invalid if errors exist\r\n if (Object.keys(mergedErrors).length > 0\r\n ) {\r\n // If somehow still valid despite errors, force invalid state\r\n control.markAsDirty();\r\n control.markAsTouched();\r\n\r\n }\r\n // Force update by setting to null first\r\n control.setErrors(null);\r\n // Then set the merged errors\r\n control.setErrors(mergedErrors);\r\n\r\n }\r\n\r\n // Debug logs to verify what's happening\r\n console.error(`Previous errors:`, previousErrors);\r\n console.error(`New errors set:`, err);\r\n console.error(`Final errors:`, control.errors);\r\n console.error(`Control valid state: ${control.valid}`);\r\n\r\n // Update form validity\r\n self.mainForm.updateValueAndValidity();\r\n \r\n }","import { FormColumnInputs } from \"ngx-t-forms-types\";\r\nimport { FormTowerControllerService } from \"../form-tower-controller.service\";\r\n\r\n/**\r\n * Deeply merges two objects\r\n * @param target The target object\r\n * @param source The source object to merge into the target\r\n * @returns A new object with properties from both objects deeply merged\r\n */\r\nfunction deepMerge(target: any, source: any): any {\r\n // Handle null/undefined cases\r\n if (source === null || source === undefined) {\r\n return target;\r\n }\r\n if (target === null || target === undefined) {\r\n return source;\r\n }\r\n\r\n // Create a new object to avoid modifying the target\r\n const result = { ...target };\r\n // Iterate through source properties\r\n Object.keys(source).forEach(key => {\r\n const sourceValue = source[key];\r\n const targetValue = target[key];\r\n\r\n // If both values are objects (and not null), merge them recursively\r\n if (\r\n sourceValue && targetValue &&\r\n typeof sourceValue === 'object' && typeof targetValue === 'object'\r\n ) {\r\n // Handle arrays specially\r\n if (Array.isArray(sourceValue) && Array.isArray(targetValue)) {\r\n result[key] = [...sourceValue]; // Replace arrays by default\r\n } else {\r\n // For objects, recursively merge\r\n result[key] = deepMerge(targetValue, sourceValue);\r\n }\r\n } else {\r\n // For non-objects or if only one side is an object, use the source value\r\n result[key] = sourceValue;\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * Updates a form input configuration with deep merge support\r\n */\r\nexport const updateFormInputConfig = (\r\n self: FormTowerControllerService,\r\n inputId: string,\r\n config: FormColumnInputs\r\n) => {\r\n const form = self.form;\r\n\r\n if (!form) {\r\n throw new Error('Form not initialized');\r\n }\r\n\r\n\r\n self.form = {\r\n ...form,\r\n slides: form.slides.map((slide) => ({\r\n ...slide,\r\n columns: slide.columns.map((column) => {\r\n if (column.id === inputId) {\r\n return deepMerge(column, config);\r\n }\r\n if (column.formInputs) {\r\n return {\r\n ...column,\r\n formInputs: column.formInputs.map((input) => {\r\n if (input.id === inputId || input.id === inputId.split('.')[1]) {\r\n return deepMerge(input, config);\r\n }\r\n return input;\r\n })\r\n }\r\n \r\n }\r\n return column;\r\n }\r\n\r\n\r\n )\r\n }))\r\n };\r\n};","import { ElementTypes, FormColumnInputs, FormInterface } from \"ngx-t-forms-types\";\r\n\r\nexport const returnAnyFormInputFromForm = (form: FormInterface, id: string): FormColumnInputs | undefined => {\r\n try {\r\n const [mainInputId, nestedInputId] = id.split(\".\");\r\n \r\n if (!mainInputId) return undefined;\r\n \r\n // Flatten all form inputs from the structure\r\n const allInputs = form.slides.flatMap(slide => \r\n slide.columns.flatMap(column => {\r\n if(column.element === ElementTypes.MultipleInput ) {\r\n return [column, ...(column?.formInputs || [])] \r\n }\r\n if(column.element === ElementTypes.MscoaSelection){\r\n return [column, ...(column?.mscoaConfig.inputs || [])]\r\n }\r\n return [column] // return only the\r\n \r\n }\r\n \r\n )\r\n );\r\n \r\n // Find the main input by ID\r\n const mainInput = allInputs.find(input => input.id === mainInputId);\r\n \r\n if (!mainInput) return undefined;\r\n \r\n // If it's a multiple input and we have a nested ID, find the nested input\r\n if (mainInput.element === ElementTypes.MultipleInput && nestedInputId) {\r\n return mainInput.formInputs?.find(input => input.id === nestedInputId);\r\n }\r\n if(mainInput.element === ElementTypes.DateRangePicker && nestedInputId) {\r\n const isStartDate = nestedInputId === mainInput.startDateControl;\r\n return {\r\n ...mainInput,\r\n id,\r\n value: isStartDate ? (mainInput.value as any)?.start: (mainInput.value as any)?.end,\r\n \r\n }\r\n }\r\n\r\n // If it's a mscoa input and we have a nested ID, find the nested input\r\n if (mainInput.element === ElementTypes.MscoaSelection && nestedInputId) {\r\n return mainInput.mscoaConfig.inputs?.find(input => input.id === nestedInputId);\r\n }\r\n \r\n // Otherwise return the main input\r\n return mainInput;\r\n \r\n } catch (error) {\r\n throw new Error(error instanceof Error ? error.message : 'Failed to find form input');\r\n }\r\n };","import { ElementTypes } from \"ngx-t-forms-types\";\r\nimport { returnAnyFormInputFromForm } from \"../../../../components/forms/functions/findFormInput\";\r\nimport { getSectionControl } from \"../../t-form-section-controller/Functions/formGenerator\";\r\nimport { FormTowerControllerService } from \"../form-tower-controller.service\";\r\nimport { FormGroup } from \"@angular/forms\";\r\n\r\n export const updateValue = (self:FormTowerControllerService,inputId: string, value: any) => {\r\n const input = returnAnyFormInputFromForm(self.form!, inputId);\r\n console.error(`Input with ID ******************** ${inputId} `,input);\r\n \r\n if(!input) {\r\n \r\n throw new Error(`Input cant be found.Failed to set value`)\r\n \r\n }\r\n \r\n const sectionId = input?.sectionId\r\n if(!sectionId) {\r\n throw new Error(`Input is missing a section. Failed to set value`)\r\n \r\n }\r\n const isDateRangePicker = input?.element === ElementTypes.DateRangePicker;\r\n if(isDateRangePicker){\r\n const alreadyHasCompoundedKey = inputId.includes('.');\r\n if(!alreadyHasCompoundedKey){\r\n throw new Error(`Input ID ${inputId} does not have a compounded key for date range picker. Failed to set value`);\r\n }\r\n const sectionControl =(self.mainForm?.controls[sectionId] as FormGroup).controls[inputId];\r\n const isStartDate = inputId.split('.')?.[1] === input.startDateControl\r\n const valueIsDate = !Number.isNaN(Date.parse(value));\r\n if(valueIsDate){\r\n sectionControl?.setValue(value);\r\n return;\r\n }\r\n sectionControl?.setValue(isStartDate ? value.start : value.end);\r\n return\r\n \r\n \r\n }\r\n \r\n \r\n const sectionControl = getSectionControl(self.mainForm!, sectionId,inputId);\r\n if(!sectionControl){\r\n console.error(\r\n sectionControl,\r\n sectionId,\r\n self.mainForm\r\n )\r\n throw new Error('Missing FormControl. Failed to set value')\r\n \r\n }\r\n sectionControl?.setValue(value);\r\n\r\n }","import { getSectionControl } from \"../../t-form-section-controller/Functions/formGenerator\";\r\nimport { FormTowerControllerService } from \"../form-tower-controller.service\";\r\n\r\n export const setInputAsTouchedAndDirty = (self: FormTowerControllerService,inputId: string) => {\r\n \r\n const input = self.allFormInputs()?.find(input => input.id === inputId);\r\n if (!input?.sectionId) {\r\n\r\n return;\r\n }\r\n const inputSectionIsSeen = !!self.mainForm?.controls[input.sectionId]?.touched && !!self.mainForm?.controls[input.sectionId]?.dirty;\r\n if(!inputSectionIsSeen){\r\n return\r\n }\r\n const control = getSectionControl(self.mainForm!, input.sectionId, inputId);\r\n control?.markAsTouched();\r\n control?.markAsDirty();\r\n control?.updateValueAndValidity({emitEvent: true});\r\n self.mainForm?.updateValueAndValidity({emitEvent: true});\r\n }","import { getSectionForm } from \"../../t-form-section-controller/Functions/formGenerator\";\r\nimport { FormTowerControllerService } from \"../form-tower-controller.service\";\r\n\r\n export const setSectionAsSeen = (self: FormTowerControllerService,sectionId: string) => {\r\n const control = getSectionForm(self.mainForm!, sectionId);\r\n control?.markAsTouched()\r\n control?.markAsDirty()\r\n\r\n }\r\n\r\n export const setSectionAsActive = (self: FormTowerControllerService,sectionId: string) => {\r\n\r\n if ( !self.form ) return\r\n\r\n self.form = {\r\n ...self.form,\r\n slides:self.form.slides.map((slide) => {\r\n \r\n return {\r\n ...slide,\r\n isActive: slide.sectionId === sectionId\r\n }\r\n })\r\n }\r\n const control = getSectionForm(self.mainForm!, sectionId);\r\n const touched = control?.touched\r\n if(touched&& control.controls){\r\n Object.keys(control.controls).forEach(key => {\r\n control.controls[key]?.markAsTouched()\r\n control.controls[key]?.markAsDirty()\r\n control.controls[key]?.updateValueAndValidity()\r\n })\r\n\r\n }\r\n\r\n }","export function assignDeepPropertyToObject(item: any, path: Array<string>, value: any) {\r\n let obj: any = new Object(item);\r\n path.reduce((acc, key, index) => {\r\n acc[key] = acc[key] || {};\r\n if (index === path.length - 1) {\r\n acc[key] = value;\r\n }\r\n return acc[key];\r\n }, obj);\r\n item = obj;\r\n return obj\r\n}","import { ElementTypes, FormColumnInputs, FormInterface } from \"ngx-t-forms-types\";\r\nimport { returnAnyFormInputFromForm } from \"../../../../components/forms/functions/findFormInput\";\r\nimport { FormTowerControllerService } from \"../form-tower-controller.service\";\r\nimport { assignDeepPropertyToObject } from \"../../../../shared/functions/assignDeepPropertyToObject\";\r\n\r\nexport const getFormValue = (self: FormTowerControllerService,): Record<string, any> => {\r\n if (!self.mainForm?.value) return {}\r\n // Combine all nested objects into single object\r\n return Object.values(self.mainForm?.value).reduce((acc, section) => ({\r\n ...(acc as any),\r\n ...(section as object)\r\n }), {} as any) as Record<string, any>;\r\n\r\n}\r\nexport const getFormValueAsFormControlBasedObject = (\r\n self: FormTowerControllerService,\r\n): Record<string, any> => {\r\n try {\r\n // Validate essential inputs exist\r\n if ((!!self.mainForm?.controls && !!self.form) === false) {\r\n console.warn('Missing form or controls in getFormValueAsFormControlBasedObject');\r\n return {};\r\n }\r\n\r\n const formValues = getFormValue(self);\r\n if (!formValues || typeof formValues !== 'object') {\r\n return {};\r\n }\r\n // First, find all MultipleInput elements to handle them specially\r\n const multipleInputs = findAllMultipleInputs(self.form!);\r\n const multipleInputIds = multipleInputs.map(input => input.id);\r\n\r\n return Object.entries(formValues).reduce((result, [key, value]) => {\r\n // Skip null/undefined values\r\n if (value === undefined || value === null) {\r\n return result;\r\n }\r\n\r\n // Skip individual fields within MultipleInput controls as they'll be handled with the array values\r\n const keyParts = key.split('.');\r\n if (keyParts.length > 1 && keyParts[0] && multipleInputIds.includes(keyParts[0])) {\r\n return result;\r\n }\r\n\r\n const input = returnAnyFormInputFromForm(self.form!, key);\r\n if (!input || !input.formControlName) {\r\n return result;\r\n }\r\n\r\n // Handle MultipleInput elements (array values with nested inputs)\r\n if (input.element === ElementTypes.MultipleInput) {\r\n result[input.formControlName] = processMultipleInputValue(input, value, formValues);\r\n return result;\r\n }\r\n\r\n // Handle DateRangePicker elements (dot notation for start/end)\r\n if (input.element === ElementTypes.DateRangePicker) {\r\n processDateRangePickerValue(result, key, value);\r\n return result;\r\n }\r\n\r\n if (input.element === ElementTypes.MscoaSelection) {// FIXME: this is a temporary fix for MSCOA inputs, we need to find a better way to handle this\r\n const inputs = input.mscoaConfig?.inputs || [];\r\n const mscoaInputsValue = inputs.reduce((acc, mscoaInput) => {\r\n acc[mscoaInput.formControlName] = formValues[`${input.id}.${mscoaInput.id}`];\r\n return acc;\r\n }, {} as Record<string, any>);\r\n result[input.formControlName] = {\r\n ... value,\r\n ... mscoaInputsValue\r\n }\r\n return result;\r\n }\r\n // Handle all other input types - map to formControlName\r\n result[input.formControlName] = value;\r\n return result;\r\n }, {} as Record<string, any>);\r\n } catch (error) {\r\n const msg = error instanceof Error ? `Error in getFormValueAsFormControlBasedObject: ${error.message}` : \"Error in getFormValueAsFormControlBasedObject\";\r\n console.error(msg);\r\n throw new Error(msg);\r\n }\r\n};\r\n\r\n/**\r\n * Find all MultipleInput elements in the form\r\n */\r\nconst findAllMultipleInputs = (form: FormInterface): FormColumnInputs[] => {\r\n return form.slides.flatMap(slide =>\r\n slide.columns.filter(column =>\r\n column.element === ElementTypes.MultipleInput\r\n )\r\n );\r\n};\r\n\r\n/**\r\n * Process a MultipleInput value (array of objects with their own form inputs)\r\n */\r\nconst processMultipleInputValue = (\r\n input: FormColumnInputs,\r\n value: any,\r\n allFormValues: Record<string, any>\r\n): any[] => {\r\n // Validate value is an array\r\n if (!value || !Array.isArray(value)) {\r\n return [];\r\n }\r\n\r\n const inputId = input.id;\r\n\r\n // Transform each item in the multiple input array\r\n return value.map((item: Record<string, any>) => {\r\n if (!item || typeof item !== 'object') {\r\n return {};\r\n }\r\n\r\n const result: Record<string, any> = {};\r\n const itemId = item[\"id\"] || '';\r\n\r\n // Process each form input within the multiple input\r\n ([...(input.formInputs || []), {\r\n id: \"id\",\r\n formControlName: \"id\",\r\n } as any])?.forEach(formInput => {\r\n if (!formInput?.id || !formInput.formControlName) return;\r\n\r\n // Different possible key formats for the input value\r\n const possibleKeys = [\r\n // Format in the item object directly\r\n formInput.id,\r\n // Format with parent.child structure in the main form\r\n `${inputId}.${formInput.id}`,\r\n // Format with parent.child.rowId to target specific row\r\n `${inputId}.${formInput.id}.${itemId}`\r\n ];\r\n\r\n // Try to find the value using the different possible key formats\r\n let found = false;\r\n\r\n // First check if the value exists in the item directly\r\n for (const key of possibleKeys) {\r\n if (typeof item[key] !== 'undefined') {\r\n result[formInput.formControlName] = item[key];\r\n found = true;\r\n break;\r\n }\r\n }\r\n\r\n // Then check in the overall form values (for parent.child notation)\r\n if (!found) {\r\n for (const key of possibleKeys) {\r\n if (typeof allFormValues[key] !== 'undefined') {\r\n result[formInput.formControlName] = allFormValues[key];\r\n found = true;\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n\r\n return result;\r\n });\r\n};\r\n\r\n/**\r\n * Process a DateRangePicker value (dot notation keys for start/end dates)\r\n */\r\nconst processDateRangePickerValue = (\r\n result: Record<string, any>,\r\n key: string,\r\n value: any\r\n): void => {\r\n const parts = key.split(\".\");\r\n\r\n // DateRangePicker keys should have format: \"dateRangePickerId.controlName\"\r\n if (parts.length !== 2 || !parts[1]) {\r\n return;\r\n }\r\n\r\n const controlName = parts[1];\r\n // Only map known control types for date ranges (typically start/end)\r\n if (controlName) {\r\n result[controlName] = value;\r\n }\r\n};\r\nexport const unFlattenFormValue = (value: Record<string, any>): Record<string, any> => {\r\n return Object.entries(value).reduce((acc, [key, val]) => {\r\n const dotNotationRegex = /^[^.]+(\\.[^.]+)+$/;\r\n if(!dotNotationRegex.test(key)) {\r\n acc[key] = val; // If no dot notation, keep as is\r\n return acc;\r\n }\r\n const keys = key.split('.');\r\n assignDeepPropertyToObject(acc, keys, val);\r\n return acc;\r\n }, {} as any);\r\n}","import { IFormChangeHistory } from \"ngx-t-forms-types\";\r\nimport { FormTowerControllerService } from \"../form-tower-controller.service\";\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nexport const updateChangeHistory =async (self: FormTowerControllerService, changes:Record<string,any>) => {\r\n // change history is limited to 20 changes\r\n if(Object.keys(changes).length ===0) return;\r\n if(self.changeHistory.length >= 20) {\r\n self.changeHistory.shift()\r\n }\r\n const newChange :IFormChangeHistory = {\r\n date: new Date(),\r\n changes: changes,\r\n id: uuidv4()\r\n }\r\n self.changeHistory.push(newChange)\r\n const allChangedInputIds = Object.keys(changes)\r\n if(self.form === undefined) return;\r\n self.form = {\r\n ...self.form,\r\n slides: self.form.slides.map(slide => {\r\n return {\r\n ...slide,\r\n columns: slide.columns.map(column => {\r\n return {\r\n ...column,\r\n valueUpdatedAt: allChangedInputIds.includes(column.id) ? new Date() : column.valueUpdatedAt\r\n \r\n }\r\n })\r\n }\r\n })\r\n }\r\n\r\n}","\r\nimport { Observable } from \"rxjs\";\r\nimport { FunctionTypes } from \"./getAllFunctionTypes\";\r\n\r\n/**\r\n * Extracts ValueGetMethodAPI and OptionsGetMethodAPI observables from the input collection\r\n * @param inputCollection The collection of functions to extract from\r\n * @returns Array of extracted observables\r\n */\r\nexport function extractSpecificFunctionTypes(\r\n inputCollection: Record<string, Partial<Record<FunctionTypes, Observable<void>>>>\r\n ): Observable<void>[] {\r\n const result:Observable<void>[] = [];\r\n \r\n // Log what we're examining\r\n console.info(\"Examining collection for init functions:\", \r\n Object.keys(inputCollection).length, \"inputs\");\r\n \r\n // Extract all API functions that should run on init\r\n Object.entries(inputCollection).forEach(([inputId, functions]) => {\r\n // Make sure to check ALL function types including API types\r\n console.info(`Input ${inputId} functions:`, Object.keys(functions));\r\n \r\n // Add ALL function types that need to run on init\r\n [FunctionTypes.ValueGetMethodAPI, \r\n FunctionTypes.OptionsGetMethodAPI,\r\n FunctionTypes.OptionsPostMethodAPIWithAllDefaultParams,\r\n FunctionTypes.ValuePostMethodAPIWithAllDefaultParams,\r\n ].forEach(fnType => {\r\n if (functions[fnType]) {\r\n console.info(`Adding ${fnType} function for ${inputId}`);\r\n result.push(functions[fnType]);\r\n }\r\n });\r\n });\r\n \r\n console.info(`Found ${result.length} functions to run on init`);\r\n return result;\r\n}","import { APIDataFetchingConfigurationInterface, FormColumnInputs } from \"ngx-t-forms-types\";\r\nimport { IFunctionUtils } from \"../../t-form-tower-controller/form-tower-controller.service\";\r\nimport { catchError, Observable, of, tap ,} from \"rxjs\";\r\nimport { getValueFromValueAccessor } from \"../../t-form-section-controller/Functions/getValueFromPathMap\";\r\nimport { HintType } from \"../../../../../lib/shared/functions/textIconsForUserHints\";\r\nimport { multipleFormInputMapValueToInputsId } from \"./multipleFormInputsMapValueToFormInputId\";\r\n\r\n\r\nexport function getApiDataFetching( inputConfig: FormColumnInputs,\r\n dataFor: \"options\" | \"value\",\r\n utils :IFunctionUtils) :Observable<void>{\r\n try {\r\n const fetchOptions = inputConfig.matOptions?.fetch?.[dataFor]\r\n const source = fetchOptions?.source\r\n if(source !== \"api\"){\r\n utils.setInputTemporaryError(inputConfig.id, `Cannot fetch data. Source is not from an API`)\r\n return of()\r\n }\r\n const {httpEndPoint,httpHeaderOptions} = (fetchOptions as APIDataFetchingConfigurationInterface)\r\n utils.setInputStatus(inputConfig.id, '2135bc6a-d957-4af1-9148-e104363afa30', 'Fetching data...');\r\n return utils.httpGetDataFunction(httpEndPoint,httpHeaderOptions).\r\n pipe(\r\n tap((data) => {\r\n utils.removeInputStatus(inputConfig.id, '2135bc6a-d957-4af1-9148-e104363afa30', );\r\n const valueAccessRules = (fetchOptions as APIDataFetchingConfigurationInterface)?.valueAccessRules;\r\n \r\n const results = getValueFromValueAccessor(valueAccessRules||[], data);\r\n \r\n if (dataFor !== \"options\") {\r\n utils.updateValue(inputConfig.id,multipleFormInputMapValueToInputsId(inputConfig, results))\r\n utils.setTemporaryHint(inputConfig.id, `Data fetched successfully`, HintType.SUCCESS)\r\n return\r\n }\r\n const matOptions = {\r\n ... inputConfig.matOptions,\r\n options: results\r\n }\r\n \r\n utils.updateFormInputConfig(inputConfig.id, { matOptions} as any)\r\n utils.setTemporaryHint(inputConfig.id, `Data options fetched successfully`, HintType.DOCUMENT)\r\n\r\n }),\r\n catchError((error) => {\r\n utils.removeInputStatus(inputConfig.id, '2135bc6a-d957-4af1-9148-e104363afa30', );\r\n utils.setInputTemporaryError(inputConfig.id, `Error fetching data from API`)\r\n console.error(`Error fetching data fromAPI: ${error}`)\r\n return of()\r\n }),\r\n )\r\n } catch (error) {\r\n utils.removeInputStatus(inputConfig.id, '2135bc6a-d957-4af1-9148-e104363afa30', );\r\n throw new Error(`Error fetching data from API: ${error}`)\r\n \r\n }\r\n}","import { FormTowerControllerService } from \"../form-tower-controller.service\";\r\nexport const setInputStatus=(self: FormTowerControllerService, inputId: string,statusId:string, statusMessage: string) =>{\r\n try {\r\n const input = self.allFormInputs()?.find(input => input.id === inputId);\r\n if (!input) return;\r\n const status = {\r\n ...input.status,\r\n [statusId]: statusMessage\r\n }\r\n self.updateFormInputConfig(inputId, { status } as any)\r\n\r\n } catch (error) {\r\n console.error(`Error setting status for input ${inputId}: ${error}`)\r\n const errorMessage = error instanceof Error ? error.message : 'Failed to set status';\r\n throw new Error(errorMessage)\r\n \r\n }\r\n\r\n}\r\n\r\nexport const removeInputStatus=(self: FormTowerControllerService, inputId: string,statusId:string) =>{\r\n try {\r\n const input = self.allFormInputs()?.find(input => input.id === inputId);\r\n if (!input) return;\r\n const status = {\r\n ...input.status,\r\n [statusId]: undefined\r\n }\r\n self.updateFormInputConfig(inputId, { status } as any)\r\n\r\n } catch (error) {\r\n console.error(`Error setting status for input ${inputId}: ${error}`)\r\n const errorMessage = error instanceof Error ? error.message : 'Failed to set status';\r\n throw new Error(errorMessage)\r\n \r\n }\r\n\r\n}","import { ElementTypes, FormColumnInputs, InputDataTypes } from \"ngx-t-forms-types\";\r\n\r\nexport const multipleInputRowIDControlInput=(value:string|undefined,multipleInputInEditId:string):FormColumnInputs =>({\r\n id:\"id\",\r\n element:ElementTypes.Input,\r\n value,\r\n formControlName:\"id\",\r\n label:\"ID\",\r\n required:false,\r\n dataType:InputDataTypes.String,\r\n appearance:\"outline\",\r\n multipleInputInEditId\r\n} as any)","import { ElementTypes } from \"ngx-t-forms-types\";\r\nimport { FormTowerControllerService } from \"../form-tower-controller.service\";\r\nimport { AbstractControl, FormGroup } from \"@angular/forms\";\r\nimport { generateControlsForTheseInputs } from \"../../t-form-section-controller/Functions/formGenerator\";\r\nimport { HintType } from \"../../../../shared/functions/textIconsForUserHints\";\r\nimport { multipleInputRowIDControlInput } from \"./multipleInputRowIDControllInput\";\r\n\r\nexport const toggleMultipleInput = (\r\n self: FormTowerControllerService,\r\n mainForm: FormGroup | undefined,\r\n inputId: string,\r\n open: boolean,\r\n rowInEditId?: string\r\n) => {\r\n\r\n // Find and validate the input is a MultipleInput\r\n const input = self.allFormInputs()?.find(input => input.id === inputId);\r\n if (!input) {\r\n console.warn(`Input with ID ${inputId} not found`);\r\n return false;\r\n }\r\n\r\n if (input.element !== ElementTypes.MultipleInput) {\r\n console.warn(`Input with ID ${inputId} is not a MultipleInput`);\r\n return false;\r\n }\r\n\r\n\r\n const sectionGroup = mainForm?.get(input.sectionId) as FormGroup;\r\n if (!sectionGroup) {\r\n self.setInputTemporaryError(inputId, 'Failed to find section group');\r\n return false;\r\n }\r\n try {\r\n // Generate controls from input's formInputs (defensive programming)\r\n const formInputs = input.formInputs || [];\r\n let controls: Record<string, AbstractControl> = {};\r\n\r\n if (open === true) {\r\n try {\r\n const idInput = multipleInputRowIDControlInput(rowInEditId, inputId)\r\n controls = generateControlsForTheseInputs(idInput ? [...formInputs, idInput] : formInputs, self.getFormValue.bind(this));\r\n } catch (error) {\r\n console.error(`Failed to generate controls for input ${inputId}:`, error);\r\n self.setInputTemporaryError(inputId, 'Failed to generate controls');\r\n return false;\r\n }\r\n\r\n Object.entries(controls).forEach(([key, control]) => {\r\n const controlExists = !!sectionGroup.get(key);\r\n\r\n if (open && !controlExists) {\r\n // Add control if we're opening and control doesn't exist\r\n sectionGroup.addControl(key, control);\r\n }\r\n });\r\n\r\n } else {\r\n const subFormControlNames = [...formInputs.map(i => `${inputId}.${i.id}`), `${inputId}.id`]\r\n // Remove controls if we're closing and control exists\r\n subFormControlNames.forEach(controlName => {\r\n const control = sectionGroup.controls[controlName];\r\n if (control) {\r\n sectionGroup.removeControl(controlName);\r\n } else {\r\n console.error(`Control ${controlName} not found in section group`);\r\n }\r\n });\r\n\r\n // \r\n }\r\n\r\n // Toggle controls based on new state\r\n\r\n\r\n\r\n\r\n // Update the input configuration with new state\r\n self.updateFormInputConfig(inputId, { ...input, formIsOpen: open });\r\n if (!!open && sectionGroup.controls[`${inputId}.id`] && rowInEditId) {\r\n sectionGroup.controls[`${inputId}.id`]?.setValue(rowInEditId);\r\n }\r\n if (open) {\r\n // Log if needed for debugging, but use appropriate log level\r\n console.log(`Opened multiple input for ${inputId}`);\r\n self.setTemporaryHint(inputId, 'Multiple input opened', HintType.DB_LOAD);\r\n }\r\n\r\n return true;\r\n } catch (error) {\r\n console.error(`Error toggling multiple input for ${inputId}:`, error);\r\n self.setInputTemporaryError(inputId, 'Failed to toggle multiple input')\r\n return false;\r\n }\r\n}\r\n\r\n\r\nexport const multipleInputEditRow = (self: FormTowerControllerService, mainForm: FormGroup | undefined, inputId: string, rowId: string) => {\r\n\r\n try {\r\n const toggled = toggleMultipleInput(self, mainForm, inputId, true, rowId);\r\n if (!toggled) {\r\n return false;\r\n }\r\n\r\n const input = self.allFormInputs()?.find(input => input.id === inputId);\r\n\r\n if (!input) {\r\n console.warn(`Input with ID ${inputId} not found`);\r\n return false;\r\n }\r\n const sectionGroup = mainForm?.get(input.sectionId) as FormGroup;\r\n if (!sectionGroup) {\r\n self.setInputTemporaryError(inputId, 'Failed to find section group');\r\n return false;\r\n }\r\n \r\n const row = sectionGroup.controls[inputId]?.value?.find((row: any) => row[`${inputId}.id`] === rowId);\r\n\r\n if (!row) {\r\n console.warn(`Row with ID ${rowId} not found in input ${inputId}`);\r\n self.setInputTemporaryError(inputId,\"Could not find row to duplicate\");\r\n return false;\r\n }\r\n Object.entries(row).forEach(([key, value]) => {\r\n self.updateValue(key,value)\r\n })\r\n\r\n return true;\r\n\r\n } catch (error) {\r\n console.error(`Error editing multiple input row for ${inputId}:`, error);\r\n const errorMessage = error instanceof Error ? error.message : 'Failed to edit multiple input row';\r\n self.setInputTemporaryError(inputId, errorMessage);\r\n return false;\r\n\r\n }\r\n}\r\n\r\nexport const multipleInputDuplicateRow = (self: FormTowerControllerService, mainForm: FormGroup | undefined, inputId: string, rowId: string) => {\r\n\r\n try {\r\n const toggled = toggleMultipleInput(self, mainForm, inputId, true);\r\n\r\n if (!toggled) {\r\n return false;\r\n }\r\n const input = self.allFormInputs()?.find(input => input.id === inputId);\r\n\r\n if (!input) {\r\n console.warn(`Input with ID ${inputId} not found`);\r\n return false;\r\n }\r\n const sectionGroup = mainForm?.get(input.sectionId) as FormGroup;\r\n if (!sectionGroup) {\r\n self.setInputTemporaryError(inputId, 'Failed to find section group');\r\n return false;\r\n }\r\n sectionGroup.controls[`${inputId}.id`]?.setValue(undefined);\r\n const row = sectionGroup.controls[inputId]?.value?.find((row: any) => row[`${inputId}.id`] === rowId);\r\n\r\n if (!row) {\r\n console.warn(`Row with ID ${rowId} not found in input ${inputId}`);\r\n self.setInputTemporaryError(inputId,\"Could not find row to duplicate\");\r\n return false;\r\n }\r\n const newRow = { ...row, id: undefined };\r\n Object.entries(newRow).forEach(([key, value]) => {\r\n self.updateValue(key,value)\r\n })\r\n console.error('New row:', sectionGroup.controls,row);\r\n return true;\r\n\r\n } catch (error) {\r\n console.error(`Error duplicating multiple input row for ${inputId}:`, error);\r\n const errorMessage = error instanceof Error ? error.message : 'Failed to duplicate multiple input row';\r\n self.setInputTemporaryError(inputId, errorMessage);\r\n return false;\r\n\r\n }\r\n}","import { StepperSelectionEvent } from '@angular/cdk/stepper';import { FormTowerControllerService } from '../form-tower-controller.service';\r\n\r\nexport const handleStepChange = (self: FormTowerControllerService,event: StepperSelectionEvent) => {\r\n \r\n const slides = self.form?.slides\r\n \r\n\r\n const sectionId = slides?.[event.selectedIndex]?.sectionId\r\n if(!sectionId) return\r\n self.setSectionAsActive(sectionId)\r\n self.setSectionAsSeen(sectionId)\r\n\r\n const previousSectionId = slides?.[event.previouslySelectedIndex]?.sectionId\r\n if(!previousSectionId) return\r\n self.setSectionAsSeen(previousSectionId)\r\n\r\n }","import { AbstractControl, FormGroup } from \"@angular/forms\";\r\n\r\nimport { ElementTypes, FormColumnInputs } from \"ngx-t-forms-types\";\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { FormTowerControllerService } from \"../form-tower-controller.service\";\r\nimport { HintType } from \"../../../../shared/functions/textIconsForUserHints\";\r\n\r\n\r\n/**\r\n * Saves data from a multiple input form component\r\n * @param self The form controller service instance\r\n * @param mainForm The main form group\r\n * @param inputId The ID of the multiple input component\r\n * @returns true if save was successful, false otherwise\r\n */\r\nexport const saveMultipleInputForm = (\r\n self: FormTowerControllerService,\r\n mainForm: FormGroup | undefined,\r\n inputId: string\r\n): boolean => {\r\n // Early validation to ensure required objects exist\r\n if (!mainForm) {\r\n self.setInputTemporaryError(inputId, 'Form not initialized');\r\n return false;\r\n }\r\n // Find and validate the input is a MultipleInput\r\n const input = self.allFormInputs()?.find(input => input.id === inputId);\r\n if (!input) {\r\n self.setInputTemporaryError(inputId, `Input with ID ${inputId} not found`);\r\n return false;\r\n }\r\n\r\n if (input.element !== ElementTypes.MultipleInput) {\r\n self.setInputTemporaryError(inputId, `Input with ID ${inputId} is not a MultipleInput`);\r\n return false;\r\n }\r\n \r\n // Get the section group containing this input\r\n const sectionGroup = mainForm.get(input.sectionId) as FormGroup;\r\n if (!sectionGroup) {\r\n self.setInputTemporaryError(inputId, `Section with ID ${input.sectionId} not found`);\r\n return false;\r\n }\r\n\r\n // Get the main multiple input control\r\n const mainInput = sectionGroup.get(inputId);\r\n if (!mainInput) {\r\n self.setInputTemporaryError(inputId, 'Could not find main input. Check your configuration');\r\n return false;\r\n }\r\n\r\n // Collect all inner inputs for the multiple input\r\n const innerInputs = self.allFormInputs()?.filter(input => \r\n input.id.includes('.') && \r\n !!input.originalId && \r\n input.id.split('.')[0] === inputId\r\n ) || [];\r\n\r\n // First, validate all inner inputs\r\n const validationResult = validateInnerInputs(self, sectionGroup, inputId, innerInputs);\r\n if (!validationResult.isValid) {\r\n return false;\r\n }\r\n\r\n try {\r\n // Collect values from all inner inputs\r\n const innerInputsValues = collectInnerInputValues(self, sectionGroup, innerInputs);\r\n \r\n // Check if we're editing an existing row or adding a new one\r\n const rowInEditId = sectionGroup.controls[`${inputId}.id`]?.value;\r\n console.error('Row in edit:', rowInEditId);\r\n if (rowInEditId) {\r\n // Update existing row\r\n return updateExistingRow(self, mainInput, rowInEditId, innerInputsValues, inputId);\r\n } else {\r\n // Add new row\r\n return addNewRow(self, mainInput, innerInputsValues, inputId);\r\n }\r\n } catch (error) {\r\n const errorMessage = error instanceof Error \r\n ? `Error saving multiple input: ${error.message}` \r\n : 'Failed to save multiple input';\r\n \r\n self.setInputTemporaryError(inputId, errorMessage);\r\n console.error(`Error in saveMultipleInputForm for ${inputId}:`, error);\r\n return false;\r\n }\r\n};\r\n\r\n/**\r\n * Validates all inner inputs within a multiple input component\r\n */\r\nconst validateInnerInputs = (\r\n self: FormTowerControllerService,\r\n sectionGroup: FormGroup,\r\n inputId: string,\r\n innerInputs: FormColumnInputs[]\r\n): { isValid: boolean; invalidInputs?: FormColumnInputs[] } => {\r\n const invalidInnerInputs = innerInputs.filter(innerInput => {\r\n const control = sectionGroup.get(innerInput.id);\r\n return control?.invalid;\r\n });\r\n\r\n if (invalidInnerInputs.length > 0) {\r\n const firstInvalidInput = invalidInnerInputs[0];\r\n const remainingCount = invalidInnerInputs.length - 1;\r\n const errorMessage = `'${firstInvalidInput?.label || firstInvalidInput?.id}' ${\r\n remainingCount > 0 ? `and ${remainingCount} other field${remainingCount > 1 ? 's' : ''}` : ''\r\n } ${remainingCount > 0 ? 'are' : 'is'} invalid`;\r\n \r\n self.setInputTemporaryError(inputId, errorMessage);\r\n return { isValid: false, invalidInputs: invalidInnerInputs };\r\n }\r\n\r\n return { isValid: true };\r\n};\r\n\r\n/**\r\n * Collects values from all inner inputs\r\n */\r\nconst collectInnerInputValues = (\r\n self: FormTowerControllerService,\r\n sectionGroup: FormGroup,\r\n innerInputs: FormColumnInputs[]\r\n): Record<string, any> => {\r\n\r\n return innerInputs?.reduce((values, innerInput) => {\r\n const control = sectionGroup?.controls[innerInput.id]\r\n values[innerInput.id] = control?.value;\r\n if (control?.value === null || control?.value === undefined) {\r\n self.setInputTemporaryError(innerInput.id, `Please fill all fields`);\r\n }\r\n\r\n return values;\r\n }\r\n , {} as Record<string, any>);\r\n\r\n\r\n};\r\n\r\n/**\r\n * Updates an existing row in the multiple input\r\n */\r\nconst updateExistingRow = (\r\n self: FormTowerControllerService,\r\n mainInput: AbstractControl,\r\n rowInEditId: string,\r\n innerInputsValues: Record<string, any>,\r\n inputId: string\r\n): boolean => {\r\n const currentValue = mainInput.value;\r\n \r\n if (!Array.isArray(currentValue)) {\r\n self.setInputTemporaryError(inputId, 'Invalid data structure. Expected array');\r\n return false;\r\n }\r\n\r\n // Find the row to be updated\r\n console.error('Current value:', currentValue,inputId);\r\n const rowIndex = currentValue.findIndex((row: any) => row[`${inputId}.id`] === rowInEditId);\r\n if (rowIndex === -1) {\r\n self.setInputTemporaryError(inputId, 'Could not find row to update');\r\n return false;\r\n }\r\n\r\n // Update the existing row with new values\r\n const updatedValue = [...currentValue];\r\n // Add this line to preserve the row ID\r\n innerInputsValues[`${inputId}.id`] = rowInEditId;\r\n updatedValue[rowIndex] = innerInputsValues;\r\n \r\n // Set the updated value back to the main input\r\n mainInput.setValue(updatedValue);\r\n self.setTemporaryHint(inputId, 'Record updated successfully', HintType.DB_LOAD);\r\n //Ensure to pass the rowInEditId to the toggleMultipleInput function\r\n // to close the edit mode for the row\r\n self.toggleMultipleInput(inputId, false,rowInEditId);\r\n \r\n return true;\r\n};\r\n\r\n/**\r\n * Adds a new row to the multiple input\r\n */\r\nconst addNewRow = (\r\n self: FormTowerControllerService,\r\n mainInput: AbstractControl,\r\n innerInputsValues: Record<string, any>,\r\n inputId: string\r\n): boolean => {\r\n // Generate a unique ID for the new row\r\n innerInputsValues[`${inputId}.id`] = uuidv4();\r\n \r\n // Get current value or initialize empty array\r\n const currentValue = mainInput.value || [];\r\n if (!Array.isArray(currentValue)) {\r\n self.setInputTemporaryError(inputId, 'Invalid data structure. Expected array');\r\n return false;\r\n }\r\n \r\n // Add new row to the array\r\n mainInput.setValue([...currentValue, innerInputsValues]);\r\n console.error('New value:', mainInput.value);\r\n \r\n self.setTemporaryHint(inputId, 'New record added to your list', HintType.DB_LOAD);\r\n self.toggleMultipleInput(inputId, false);\r\n \r\n return true;\r\n};","import { FormInterface } from \"ngx-t-forms-types\";\r\n\r\nexport const createEmptyForm = (): FormInterface => ({\r\n slides: [],\r\n submissionHandle: undefined as any,\r\n formId: '',\r\n formTitle: '',\r\n\r\n })\r\n\r\n ","import { ElementTypes, FormInterface } from \"ngx-t-forms-types\";\r\nimport { createEmptyForm } from \"./createEmptyForm\";\r\nimport { safeReturnDeepProperty } from \"../../../../shared/functions/getDeepObject\";\r\n\r\nexport const prepPopulateForm = (form: FormInterface, initValue: Record<string, any>): FormInterface => {\r\n try {\r\n if (!form || !form.slides || !form.slides.length) {\r\n return createEmptyForm()\r\n }\r\n\r\n return {\r\n ...form,\r\n slides: form.slides.map(slide => {\r\n return {\r\n ...slide,\r\n columns: slide.columns.map(column => {\r\n const deepValue = column.formControlName ? safeReturnDeepProperty(initValue, column.formControlName?.split('.')).value : undefined;\r\n\r\n if (column.element === ElementTypes.SectionTitle) {\r\n return column\r\n }\r\n if (column.element === ElementTypes.Toggle) {\r\n return {\r\n ...column,\r\n value: Boolean(deepValue || initValue[column.formControlName ||''] || column.value || false)\r\n }\r\n }\r\n if (column.element === ElementTypes.DateRangePicker) {\r\n const startValue= safeReturnDeepProperty(initValue, column.startDateControl?.split('.')||[]).value;\r\n const endValue = safeReturnDeepProperty(initValue, column.endDateControl?.split('.')||[]).value;\r\n return {\r\n ...column,\r\n value: {\r\n start: startValue||initValue[column.startDateControl!],\r\n end: endValue || initValue[column.endDateControl!]\r\n }\r\n }\r\n }\r\n if (column.element === ElementTypes.MultipleInput) {\r\n const newM = {\r\n ...column,\r\n value: (deepValue || initValue[column.formControlName||''] || column.value || []).map((item: any) => {\r\n\r\n return Object.entries(item).reduce((acc, [key, value]) => {\r\n const inputId = column.formInputs?.find(input => input.formControlName === key)?.id\r\n if (key === 'id') {\r\n return {\r\n ...acc,\r\n [`${column.id}.id`]: value || ''\r\n }\r\n }\r\n if (!inputId) {\r\n return acc\r\n }\r\n return {\r\n ...acc,\r\n [`${column.id}.${inputId}`]: value || ''\r\n }\r\n }, {})\r\n })\r\n }\r\n return newM\r\n }\r\n\r\n\r\n return {\r\n ...column,\r\n value: deepValue || initValue[column.formControlName||''] || column.value || ''\r\n }\r\n })\r\n }\r\n })\r\n }\r\n\r\n } catch (error) {\r\n const msg = error instanceof Error ? error.message : String(error)\r\n console.error(`Error prepopulating form:`, msg, form);\r\n\r\n throw new Error(msg);\r\n\r\n }\r\n}\r\n\r\n\r\n\r\n","import { FileUploadInputValueInterface } from \"ngx-t-forms-types\";\r\n\r\n\r\nconst b64toBlob = (b64Data: string, contentType = '', sliceSize = 512): Blob => {\r\n const byteCharacters = atob(b64Data);\r\n const byteArrays = [];\r\n\r\n for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n const slice = byteCharacters.slice(offset, offset + sliceSize);\r\n const byteNumbers = new Array(slice.length);\r\n for (let i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n const byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n\r\n const blob = new Blob(byteArrays, { type: contentType });\r\n return blob;\r\n};\r\n\r\n/**\r\n * Creates a file upload data object from a Base64 string.\r\n *\r\n * @param fileName The desired name for the file (e.g., 'my-image.png').\r\n * @param contentType The MIME type of the file (e.g., 'image/png').\r\n * @param base64Content The raw Base64 encoded content of the file.\r\n * @returns A populated FileUploadInputValueInterface object.\r\n */\r\nexport const createFileFromBase64 = (\r\n fileName: string,\r\n contentType: string,\r\n base64Content: string\r\n): FileUploadInputValueInterface => {\r\n // Create the Blob from the Base64 string\r\n const fileBlob = b64toBlob(base64Content, contentType);\r\n\r\n // Extract the file extension from the file name\r\n const fileExtension = fileName.split('.').pop() || '';\r\n\r\n // Construct the full Base64 data URI\r\n const fullBase64 = `data:${contentType};base64,${base64Content}`;\r\n\r\n const fileData: FileUploadInputValueInterface = {\r\n fileName: fileName,\r\n type: contentType as any, // Cast to 'any' or your specific InputFileType\r\n base64: fullBase64,\r\n blob: fileBlob,\r\n fileExtension: fileExtension\r\n };\r\n\r\n return fileData;\r\n};","import { AdjudicationSteps, ElementTypes, FileUploadInputValueInterface, FormColumnInputs, InputDataTypes, InputTypes, WorkflowAdjudicationMicroFlowReviewValue, WorkflowAdjudicationResponseElectedSupplierSelectionValue, WorkflowAdjudicationScoreSheetValue } from \"ngx-t-forms-types\";\r\nimport { createFileFromBase64 } from \"./createFileUploadSample\";\r\nimport { BasicPoint } from \"signature_pad\";\r\nimport { OutputData } from \"@editorjs/editorjs\";\r\n\r\n\r\n// A mock definition for an MSCOA account for demonstration purposes.\r\n const sampleFileName = \"red_dot_image.png\";\r\nconst sampleContentType = 'image/png';\r\n// Sample Base64 encoded string for a small red PNG image\r\nconst redDotBase64 = \"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==\";\r\n\r\nconst mscoaaccount = {\r\n\r\n \"_id\": \"67f3cc80e5109efe61dbf7e7\",\r\n \"SCOAid\": \"ac97d0b1-d32f-4077-947c-f147177f7bfb\",\r\n \"ParentSCOAId\": \"3b60c880-756e-42e6-b609-778569e8d219\",\r\n \"DefinitionDescription\": \"Funding source used for Opening Balances. Where no funding source are utilised\",\r\n \"SCOAFile\": \"FUND\",\r\n \"SCOAAccount\": \"Fund:Non-funding Transactions\",\r\n \"SCOALevel\": \"1\",\r\n \"ShortDescription\": \"Non-funding Transactions\",\r\n \"VATStatus\": \"N/a\",\r\n \"BreakDownAllowed\": \"N\",\r\n \"Principle\": \"N/a\",\r\n \"ApplicableTo\": \"All\",\r\n \"PostingLevel\": \"Y\",\r\n \"AccountNumber\": \"FD003000000000000000000000000000000000\",\r\n \"AccountNumberPrefix\": \"FD\",\r\n \"AccountNumber1\": \"003\",\r\n \"AccountNumber2\": \"000\",\r\n \"AccountNumber3\": \"000\",\r\n \"AccountNumber4\": \"000\",\r\n \"AccountNumber5\": \"000\",\r\n \"AccountNumber6\": \"000\",\r\n \"AccountNumber7\": \"000\",\r\n \"AccountNumber8\": \"000\",\r\n \"AccountNumber9\": \"000\",\r\n \"AccountNumber10\": \"000\",\r\n \"AccountNumber11\": \"000\",\r\n \"AccountNumber12\": \"000\",\r\n \"version\": {\r\n \"versionNumber\": \"6.9\",\r\n \"description\": \"6.9\",\r\n \"updatedAt\": \"2025-04-07T12:59:58.920Z\"\r\n },\r\n \"previousVersion\": [\r\n {\r\n \"versionNumber\": \"6.9\",\r\n \"description\": \"6.9\"\r\n }\r\n ],\r\n \"AccountNumberShortened\": \"FD003\"\r\n\r\n}\r\n\r\n// Interface for a single form input configuration.\r\n\r\n\r\n// --- SAMPLE VALUE GENERATION LOGIC ---\r\n\r\n/**\r\n * A record mapping each input type to a function that generates a sample value.\r\n * This approach avoids a large switch statement and is easier to extend.\r\n */\r\nconst INPUT_TYPE_SAMPLE_GENERATORS: Record<InputTypes, () => any> = {\r\n [InputTypes.Text]: () => 'Sample Text',\r\n [InputTypes.Number]: () => 42,\r\n [InputTypes.Color]: () => '#ff0000',\r\n [InputTypes.Date]: () => new Date().toISOString().split('T')[0], // YYYY-MM-DD\r\n [InputTypes.Email]: () => 'example@email.com',\r\n [InputTypes.Password]: () => 'samplePassword123',\r\n [InputTypes.Tel]: () => '123-456-7890',\r\n [InputTypes.Url]: () => 'https://example.com',\r\n [InputTypes.DateTimeLocal]: () => new Date().toISOString().slice(0, 16), // YYYY-MM-DDTHH:MM\r\n [InputTypes.Month]: () => new Date().toISOString().slice(0, 7), // YYYY-MM\r\n [InputTypes.Week]: () => `${new Date().getFullYear()}-W${Math.ceil((new Date().getDate() + new Date().getDay() + 1) / 7)}`,\r\n [InputTypes.Time]: () => '14:30',\r\n [InputTypes.Search]: () => 'Search Query',\r\n};\r\n\r\n/**\r\n * Generates a sample value for a standard input element based on its type or data type.\r\n * This function serves as the default handler.\r\n * @param {FormColumnInputs} input - The input configuration object.\r\n * @returns {any} A generated sample value.\r\n */\r\nconst getDefaultSampleValue = (input: FormColumnInputs): any => {\r\n // Priority:\r\n // 1. A provided default value.\r\n // 2. A value based on the specific input.type (e.g., 'email', 'date').\r\n // 3. A value based on the generic input.dataType (e.g., 'number', 'boolean').\r\n // 4. An empty string as a final fallback.\r\n\r\n if (input.value !== undefined && input.value !== null) {\r\n return input.value;\r\n }\r\n\r\n if (input.type && INPUT_TYPE_SAMPLE_GENERATORS[input.type]) {\r\n return INPUT_TYPE_SAMPLE_GENERATORS[input.type]();\r\n }\r\n\r\n switch (input.dataType) {\r\n case InputDataTypes.Number:\r\n case InputDataTypes.NumberOrString:\r\n return 100;\r\n case InputDataTypes.Boolean:\r\n return false;\r\n case InputDataTypes.Date:\r\n return new Date();\r\n case InputDataTypes.Array:\r\n return [];\r\n case InputDataTypes.Object:\r\n return {};\r\n case InputDataTypes.String:\r\n default:\r\n return 'Default String';\r\n }\r\n};\r\n\r\n/**\r\n * A record mapping each element type to a function that generates a sample value.\r\n * This makes the main function clean and delegates logic appropriately.\r\n */\r\nconst ELEMENT_SAMPLE_GENERATORS: Record<ElementTypes, (input: FormColumnInputs) => any> = {\r\n [ElementTypes.MultipleInput]: (input) => {\r\n const oneEntry = input.formInputs?.reduce((acc, formInput) => {\r\n // Recursively generate sample values for sub-inputs\r\n if (formInput.element === ElementTypes.DateRangePicker) {\r\n acc = {\r\n ...acc,\r\n ...getSampleValueForInput(formInput)\r\n }\r\n return acc;\r\n }\r\n acc[formInput.formControlName] = getSampleValueForInput(formInput);\r\n return acc;\r\n }, {} as Record<string, any>) || {};\r\n\r\n // MultipleInput typically returns an array of objects\r\n return [{\r\n ...oneEntry,\r\n id: input.id || `entry-${Math.random().toString(36).substr(2, 9)}`,\r\n }];\r\n },\r\n [ElementTypes.DatePicker]: () => new Date(),\r\n [ElementTypes.DateRangePicker]: (input) => ({\r\n [input.startDateControl || 'startDate']: new Date(new Date().setDate(new Date().getDate() - 7)),\r\n [input.endDateControl || 'endDate']: new Date(),\r\n }),\r\n [ElementTypes.Toggle]: () => false,\r\n [ElementTypes.MscoaSelection]: (input) => {\r\n return input.mscoaConfig?.segments?.reduce((acc, segment) => {\r\n if (segment.segment) {\r\n acc[segment.segment] = {\r\n debit: mscoaaccount,\r\n credit: mscoaaccount,\r\n };\r\n }\r\n return acc;\r\n }, {} as Record<string, any>) || {};\r\n },\r\n // These elements fall back to the default handler\r\n [ElementTypes.Input]: getDefaultSampleValue,\r\n [ElementTypes.Textarea]: getDefaultSampleValue,\r\n [ElementTypes.Select]: getDefaultSampleValue,\r\n [ElementTypes.Location]: () => {\r\n const v:GeolocationPosition = {\r\n coords: {\r\n accuracy: 0,\r\n altitude: 53.2734,\r\n altitudeAccuracy: 0,\r\n heading: 0,\r\n latitude: -7.77832031,\r\n longitude: 0,\r\n speed: 33,\r\n toJSON: function () {\r\n throw new Error(\"Function not implemented.\");\r\n }\r\n },\r\n timestamp: Date.now(),\r\n toJSON: function () {\r\n throw new Error(\"Function not implemented.\");\r\n }\r\n }\r\n return v\r\n },\r\n [ElementTypes.AutoCompleteInput]: getDefaultSampleValue,\r\n [ElementTypes.IconSelect]: getDefaultSampleValue,\r\n [ElementTypes.FileUpload]: function (input: FormColumnInputs) {\r\n\r\n\r\n return createFileFromBase64(sampleFileName, sampleContentType, redDotBase64);\r\n },\r\n [ElementTypes.Signature]: function (input: FormColumnInputs) {\r\n const p:BasicPoint = {\r\n x: 0,\r\n y: 0,\r\n pressure: 0,\r\n time: 0\r\n }\r\n return {\r\n points: [p],\r\n }\r\n },\r\n [ElementTypes.ImageCapture]: function (input: FormColumnInputs) {\r\n const file = createFileFromBase64(sampleFileName, sampleContentType, redDotBase64);\r\n const image:FileUploadInputValueInterface = {\r\n fileName: \"\",\r\n type: undefined,\r\n base64: null,\r\n blob: file.blob,\r\n fileExtension: \"\"\r\n }\r\n return image;\r\n },\r\n [ElementTypes.SectionTitle]: getDefaultSampleValue,\r\n [ElementTypes.Editor]: function (input: FormColumnInputs) {\r\n const rixhText:OutputData = {\r\n blocks: []\r\n }\r\n return rixhText;\r\n },\r\n [ElementTypes.WorkflowDocumentPicker]: getDefaultSampleValue,\r\n [ElementTypes.WorkflowAdjudication]: (input: FormColumnInputs) => {\r\n if(input.adjudicationStep === AdjudicationSteps.SubMissionReview){\r\n const review: WorkflowAdjudicationMicroFlowReviewValue = {\r\n id: \"\",\r\n adj_microFlow_review: false,\r\n nameOfBidder: \"\",\r\n supplierNumber: \"\",\r\n createdAt: new Date(),\r\n updatedAt: new Date(),\r\n adjudicationPricePreferenceCalculation: 0,\r\n reference: \"\"\r\n }\r\n return review;\r\n \r\n }\r\n if(input.adjudicationStep === AdjudicationSteps.ScoreCreation){\r\n const scoreSheet:WorkflowAdjudicationScoreSheetValue[] =[{\r\n id: \"\",\r\n formControlName: \"\",\r\n totalPoints: 0,\r\n description: \"\",\r\n pointType: input.adjudicationPointTypes[0] || \"\",\r\n inputId: undefined,\r\n isEditRow: true\r\n }];\r\n return scoreSheet;\r\n }\r\n if(input.adjudicationStep === AdjudicationSteps.SupplierSelection){\r\n const c:WorkflowAdjudicationResponseElectedSupplierSelectionValue = {\r\n id: \"\",\r\n supplierNumber: \"\",\r\n resolutionNotes: \"\",\r\n resolutionAttachment: \"\"\r\n }\r\n return c;\r\n }\r\n return {};\r\n\r\n }\r\n};\r\n\r\n\r\n/**\r\n * Creates a sample value for a given form input configuration.\r\n * It determines the value based on the input's element type, specific input type (e.g., email, number),\r\n * or data type, with a fallback to a default value.\r\n *\r\n * @param {FormColumnInputs} input - The configuration object for the form input.\r\n * @returns {any} A sample value appropriate for the input type.\r\n */\r\nexport function getSampleValueForInput(input: FormColumnInputs): any {\r\n // Find the appropriate generator function for the element type, or use the default.\r\n const generator = ELEMENT_SAMPLE_GENERATORS[input.element] || getDefaultSampleValue;\r\n return generator(input);\r\n}\r\n\r\n","import { NgxTFormsConfig } from 'ngx-t-forms-types';\r\n\r\nexport function getUrl(url: string,variables: NgxTFormsConfig): string {\r\n const hasVariables = url.includes('{{') && url.includes('}}');\r\n if (hasVariables) {\r\n const newUrl = replaceEnvironmentVariables(url,variables);\r\n console.log(newUrl,variables)\r\n return newUrl \r\n }\r\n return `${variables.base_url}/${url}`\r\n }\r\nfunction replaceEnvironmentVariables(url: string,variables: NgxTFormsConfig): string {\r\n return url.replace(/\\{\\{(\\$?)(.+?)\\}\\}/g, (match, dollar, p1) => {\r\n const key = p1.trim();\r\n \r\n if (!key) {\r\n return match; // Return original if the key is empty\r\n }\r\n \r\n const envVar = (variables as any)[key];\r\n \r\n if (envVar === undefined) {\r\n console.warn(`Environment variable ${key} not found`);\r\n return match; // Return original if not found\r\n }\r\n \r\n return envVar;\r\n });\r\n }","import { catchError, EMPTY, filter, forkJoin, map, Observable, of, switchMap, tap} from \"rxjs\"\r\n\r\n\r\nimport { assignDeepPropertyToObject } from \"../../../shared\";\r\nimport { APIDataFetchingConfigurationInterface, InClassFormUtilsInterface, FormInterface, FormSubmissionStatus } from 'ngx-t-forms-types';\r\ninterface FileData {\r\n \r\n base64: string;\r\n fileName: string;\r\n type: any,\r\n id:string,\r\n fileExtension?: string\r\n }\r\n \r\n\r\n export type FileUploadFn = (\r\n file: string,\r\n fileName: string,\r\n fileType: string,\r\n ) => Observable<{ url: string }>;\r\n \r\n /**\r\n * Checks if a value is a FileData object\r\n */\r\n const isFileData = (value: any): value is FileData => {\r\n return (\r\n value &&\r\n typeof value === 'object' &&\r\n 'base64' in value &&\r\n 'fileName' in value &&\r\n 'fileExtension' in value\r\n );\r\n };\r\n \r\n /**\r\n * Recursively finds all file objects in the form data\r\n */\r\n const findFileControls = (\r\n data: any,\r\n path: string[] = [],\r\n result: { path: string[]; fileData: FileData }[] = []\r\n ): { path: string[]; fileData: FileData }[] => {\r\n if (!data || typeof data !== 'object') {\r\n return result;\r\n }\r\n \r\n if (Array.isArray(data)) {\r\n data.forEach((item, index) => {\r\n findFileControls(item, [...path, index.toString()], result);\r\n });\r\n return result;\r\n }\r\n \r\n Object.entries(data).forEach(([key, value]) => {\r\n if (isFileData(value)) {\r\n result.push({ path: [...path, key], fileData: value });\r\n } else if (typeof value === 'object') {\r\n findFileControls(value, [...path, key], result);\r\n }\r\n });\r\n \r\n return result;\r\n };\r\n \r\n /**\r\n * Sets a deeply nested value in an object using a path array\r\n */\r\n const setNestedValue = (obj: any, path: string[], value: any): any => {\r\n \r\n return assignDeepPropertyToObject({ ...obj }, path, value) \r\n };\r\n \r\n /**\r\n * Uploads form files to server with support for nested objects and arrays\r\n */\r\n const uploadFormFilesToServer = (\r\n formData: any,\r\n fileUpload: FileUploadFn\r\n ): Observable<any> => {\r\n // 1) Check Required Params\r\n if (typeof fileUpload !== 'function') {\r\n return of(formData);\r\n }\r\n \r\n // 2) Check if data is an object\r\n if (typeof formData !== 'object') {\r\n return of(formData);\r\n }\r\n \r\n // 3) Find all files in the form data (including nested)\r\n const fileControls = findFileControls(formData);\r\n \r\n if (fileControls.length === 0) {\r\n return of(formData);\r\n }\r\n \r\n // 4) Create observables for file uploads\r\n const uploads = fileControls.map(({ path, fileData }) => \r\n fileUpload(\r\n fileData.base64,\r\n fileData.fileName,\r\n fileData.type,\r\n ).pipe(\r\n map(result => ({ path, result }))\r\n )\r\n );\r\n \r\n // 5) Upload all files and update form data\r\n return forkJoin(uploads).pipe(\r\n map(results => {\r\n let updatedFormData = { ...formData };\r\n \r\n results.forEach(({ path, result }) => {\r\n updatedFormData = setNestedValue(updatedFormData, path, { ...result});\r\n });\r\n \r\n return updatedFormData;\r\n }),\r\n catchError(error => {\r\n console.error('Error uploading files:', error);\r\n throw error;\r\n })\r\n );\r\n };\r\n \r\nconst createQueryString = (data: Record<string, any>): string => {\r\n const params = new URLSearchParams(\r\n Object.entries(data || {}).map(([key, value]) => [key, String(value)])\r\n );\r\n return params.toString();\r\n};\r\n\r\nconst makeApiCall = (\r\n api: APIDataFetchingConfigurationInterface,\r\n formData: any,\r\n Utils: InClassFormUtilsInterface\r\n): Observable<any> => {\r\n\r\n const { httpMethod, httpEndPoint } = api;\r\n\r\n if(!httpEndPoint){\r\n console.error('httpEndPoint is not defined in api');\r\n throw new Error('httpEndPoint is not defined in api'); \r\n }\r\n if(typeof Utils.httpPostDataFunction !== 'function' || typeof Utils.httpGetDataFunction !== 'function'){\r\n console.error('httpPostDataFunction or httpGetDataFunction is not defined in Utils');\r\n throw new Error('httpPostDataFunction or httpGetDataFunction is not defined in Utils');\r\n }\r\n return httpMethod === 'POST'\r\n ? Utils.httpPostDataFunction(httpEndPoint, formData,{})\r\n : Utils.httpGetDataFunction(\r\n `${httpEndPoint}?${createQueryString(formData)}`,\r\n {}\r\n );\r\n};\r\n/**\r\n * Extracts specific properties from an object based on a comma-separated string of keys.\r\n * Supports both direct key mapping and binding key notation for property renaming.\r\n * \r\n * @param obj - The source object to extract properties from\r\n * @param keysString - A comma-separated string of keys to extract. \r\n * Supports two formats:\r\n * 1. Direct key: \"propName\"\r\n * 2. Binding key: \"newName:{originalName}\"\r\n * \r\n * @returns A new object containing only the specified properties\r\n * \r\n * @example\r\n * // Direct key usage\r\n * destructureObject({a: 1, b: 2}, \"a,b\") // Returns {a: 1, b: 2}\r\n * \r\n * @example\r\n * // Binding key usage\r\n * destructureObject({orig: 1}, \"new:{orig}\") // Returns {new: 1}\r\n */\r\nfunction destructureObject(obj: any, keysString: string): any {\r\n // Split the keys string into an array of keys\r\n const keys = keysString.split(',').map(key => key.trim()) || [];\r\n\r\n // Create a new object with the desired keys\r\n const result: any = {};\r\n keys.forEach(key => {\r\n if (key in obj) {\r\n result[key] = obj[key];\r\n\r\n }\r\n // Check if the key is a binding key and extract the value from the object\r\n if(key.includes('{') && key.includes('}') && key.includes(':')){\r\n const properties = key.split(':')\r\n const keyName = properties[0]\r\n const bindKey = properties[1]?.replace('{','').replace('}','')\r\n if(!bindKey || !keyName) return;\r\n if ( bindKey in obj) {\r\n result[keyName] = obj[bindKey];\r\n }\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n/**\r\n * Projects and combines form data according to API configuration and additional passed data.\r\n * \r\n * @param api - The API configuration object containing projection settings\r\n * @param formData - The form data to be processed\r\n * @param passData - Additional data to be merged with the form data\r\n * @returns {any} - The projected and combined data object\r\n * \r\n * If api.projectFormData is not present:\r\n * - Returns merged formData and passData if passData is a non-null object\r\n * - Returns formData as-is otherwise\r\n * \r\n * If api.projectFormData is present:\r\n * - Destructures formData according to projection rules\r\n * - Merges with passData if passData is a non-null object\r\n */\r\nconst projectApiData = (api: APIDataFetchingConfigurationInterface, formData: any,passData:any): any => {\r\n\r\n \r\n if(!api?.projectFormData){\r\n if(typeof passData === 'object' && passData !== null){\r\n return {\r\n ...formData,\r\n ...passData\r\n }\r\n }\r\n return formData;\r\n }\r\n\r\n if(typeof passData === 'object' && passData !== null){\r\n return {\r\n ...destructureObject({\"$formValue\":formData}, api.projectFormData),\r\n ...passData\r\n }\r\n }\r\n return destructureObject({\"$formValue\":formData}, api.projectFormData)\r\n\r\n}\r\n\r\nconst executeApiCalls = (\r\n apis: APIDataFetchingConfigurationInterface[],\r\n formData: any,\r\n Utils: InClassFormUtilsInterface,\r\n passData?:any,\r\n): Observable<any[]> => {\r\n\r\n const apiCalls = apis.map(api => makeApiCall(api,projectApiData(api,formData,passData), Utils));\r\n return forkJoin(apiCalls);\r\n};\r\n\r\nconst handleCanSubmitAPI = (form:FormInterface,formData:any, passData:any, Utils: InClassFormUtilsInterface,): Observable<boolean> => {\r\n try {\r\n const { canSubmitAPI } = form.submissionHandle;\r\n if (!canSubmitAPI || canSubmitAPI.length === 0) {\r\n return of(true);\r\n }\r\n Utils.setSubmissionStatusValue(FormSubmissionStatus.VALIDATING);\r\n return executeApiCalls( canSubmitAPI,formData,Utils,passData).pipe(\r\n map(responses => responses.every(response => response === true))\r\n );\r\n } catch (error) {\r\n console.error('Error in handleCanSubmitAPI:', error);\r\n return of(false);\r\n }\r\n};\r\n\r\nconst handleSubmissionAPI = (form:FormInterface,getAllValues:any,passData:any,Utils: InClassFormUtilsInterface,): Observable<any> => {\r\n const { submissionAPI } = form.submissionHandle;\r\n if (!submissionAPI) {\r\n return EMPTY;\r\n }\r\n Utils.setSubmissionStatusValue(FormSubmissionStatus.UPLOADING);\r\n\r\n return uploadFormFilesToServer(getAllValues,Utils.fileUpload).pipe(\r\n tap(()=> Utils.setSubmissionStatusValue(FormSubmissionStatus.SUBMITTING)),\r\n switchMap(formData => executeApiCalls( submissionAPI, formData,Utils,passData))\r\n )\r\n \r\n};\r\n\r\nexport const formHttpSubmissions = (form:FormInterface,formData:any,passData:any,Utils: InClassFormUtilsInterface): Observable<any> => {\r\n try {\r\n const { submissionHandle } = form;\r\n if (!submissionHandle) {\r\n return EMPTY;\r\n }\r\n if(typeof Utils.httpPostDataFunction !== 'function' || typeof Utils.httpGetDataFunction !== 'function' || typeof Utils.fileUpload !== 'function'){\r\n console.error('httpPostDataFunction or httpGetDataFunction is not defined in Utils');\r\n throw new Error('httpPostDataFunction or httpGetDataFunction is not defined in Utils');\r\n }\r\n\r\n Utils.setSubmissionStatusValue(FormSubmissionStatus.SUBMITTING);\r\n return handleCanSubmitAPI(form,formData,passData,Utils).pipe(\r\n filter(canSubmit => canSubmit),\r\n switchMap(() => \r\n handleSubmissionAPI(form,formData,passData,Utils).pipe(\r\n catchError(error => {\r\n console.error('Error in formHttpSubmissions:', error);\r\n return EMPTY;\r\n })\r\n )\r\n ),\r\n catchError(error => {\r\n Utils.setSubmissionStatusValue(FormSubmissionStatus.FAILED);\r\n console.error('Error in formHttpSubmissions:', error);\r\n return EMPTY;\r\n })\r\n );\r\n } catch (error) {\r\n throw error;\r\n }\r\n};","import { Directive, inject, Inject, OnDestroy } from '@angular/core';\r\nimport { FormColumnInputs, FormInterface, FormSubmissionStatus, IFormChangeHistory, InClassFormUtilsInterface } from 'ngx-t-forms-types';\r\n\r\n\r\nimport { FormGroup } from '@angular/forms';\r\nimport { formGenerator, } from '../t-form-section-controller/Functions/formGenerator';\r\nimport { startTowerFormChangesEventListener } from './functions/startTowerFormChangesEventListener';\r\nimport { forkJoin, Observable, of, Subject, take, tap } from 'rxjs';\r\nimport { createInputChangeDependency, FunctionTypes, getAllFunctionTypes } from './functions/getAllFunctionTypes';\r\nimport { calculateInput } from '../t-form-controller/function/calculateInputValue';\r\nimport { ElementTypes } from \"ngx-t-forms-types\"\r\nimport { HintType } from '../../../shared/functions/textIconsForUserHints';\r\nimport { inputGetApiPostData } from '../t-form-controller/function/postApiDataFetching';\r\n\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { selectAllFormTours, selectFormSteps } from './functions/selectFormSteps';\r\nimport { allFormInputs } from './functions/allFormInputs';\r\nimport { formProgress, formSubmissionMessage } from './functions/getSubmissionStatus';\r\nimport { setInputError, setInputTemporaryError, setTemporaryHint } from './functions/setInputError';\r\nimport { updateFormInputConfig } from './functions/updateFormInputConfig';\r\nimport { updateValue } from './functions/updateValue';\r\nimport { setInputAsTouchedAndDirty } from './functions/setInputAsTouchedAndDirty';\r\nimport { setSectionAsActive, setSectionAsSeen } from './functions/setSectionAsSeen';\r\nimport { getFormValue, getFormValueAsFormControlBasedObject, unFlattenFormValue } from './functions/getFormValue';\r\nimport { updateChangeHistory } from './functions/updateChangeHistory';\r\nimport { extractSpecificFunctionTypes } from './functions/extractInitFunctions';\r\nimport { getApiDataFetching } from '../t-form-controller/function/getApiDataFetching';\r\nimport { NGX_T_FORMS_CONFIG_TOKEN } from '../../../injection-tokens';\r\nimport { removeInputStatus, setInputStatus } from './functions/setInputStatus';\r\nimport { multipleInputDuplicateRow, multipleInputEditRow, toggleMultipleInput } from './functions/toggleMultipleInput';\r\nimport { handleStepChange } from './functions/handleStepChange';\r\nimport { StepperSelectionEvent } from '@angular/cdk/stepper';\r\nimport { saveMultipleInputForm } from './functions/saveMultipleInputForm';\r\nimport { prepPopulateForm } from './functions/prePoPulateForm';\r\nimport { formHttpSubmissions } from '../../../components/forms/functions/formHttpSubmissions';\r\nimport { safeReturnDeepProperty } from '../../../shared';\r\n\r\n\r\n\r\n\r\ninterface DependentInput {\r\n inputId: string;\r\n functionType: FunctionTypes;\r\n}\r\nexport interface IFunctionUtils {\r\n setInputTemporaryError: (inputId: string, message: string) => void,\r\n setTemporaryHint: (inputId: string, message: string, type: HintType) => void,\r\n setInputStatus: (inputId: string, statusId: string, status: string) => void,\r\n removeInputStatus: (inputId: string, statusId: string) => void,\r\n updateValue: (inputId: string, value: any) => void,\r\n httpPostDataFunction: (url: string, data: any, options?: any) => Observable<any>,\r\n httpGetDataFunction: (url: string, options?: any) => Observable<any>,\r\n updateFormInputConfig: (inputId: string, config: FormColumnInputs) => void,\r\n fileUpload: (file: string, fileName: string, fileType: string) => Observable<{ url: string }>,\r\n}\r\n@Directive()\r\nexport abstract class FormTowerControllerService implements OnDestroy {\r\n readonly NGX_T_FORMS_CONFIG = inject(NGX_T_FORMS_CONFIG_TOKEN)\r\n constructor(@Inject(HttpClient) private _http: HttpClient) { }\r\n\r\n protected _destroyed$ = new Subject<void>();\r\n protected _form: FormInterface | undefined;\r\n protected _mainForm: FormGroup | undefined;\r\n // Keep form record for non-FormControl based operation, like calculations and API calls\r\n protected _formValue: Record<string, any> = {}\r\n protected _initialFormValue: Record<string, any> = {}\r\n // Collection of functions for each input ID and function type\r\n protected _inputFunctionsCollection: Record<string, Partial<Record<FunctionTypes, Observable<void>>>> = {};\r\n // Regular dependency records: inputId -> functionType -> dependencyId -> boolean\r\n protected _inputChangeDependencyRecords: Partial<Record<string, Partial<Record<FunctionTypes, Record<string, boolean>>>>> = {};\r\n // Reverse dependency map: dependencyId -> array of {inputId, functionType}\r\n // This tells us: \"When input X changes, these inputs depend on it and need their functions run\"\r\n protected _reverseDependencyMap: Record<string, DependentInput[]> = {};\r\n protected _changeHistory: IFormChangeHistory[] = [];\r\n // local Status properties \r\n submittingStatus: FormSubmissionStatus | undefined\r\n submittingForm: boolean = false\r\n public get form(): FormInterface | undefined {\r\n return this._form;\r\n }\r\n set form(value: FormInterface | undefined) {\r\n this._form = value;\r\n }\r\n public get mainForm(): FormGroup | undefined {\r\n return this._mainForm;\r\n }\r\n\r\n get changeHistory(): IFormChangeHistory[] {\r\n return this._changeHistory;\r\n }\r\n set changeHistory(value: IFormChangeHistory[]) {\r\n this._changeHistory = value;\r\n }\r\n get inputFunctionsCollection(): Record<string, Partial<Record<FunctionTypes, Observable<void>>>>{\r\n return this._inputFunctionsCollection;\r\n }\r\n ngOnDestroy(): void {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\r\n this.clearFormState();\r\n }\r\n\r\n initialize = async (form: FormInterface) => {\r\n // .1 Clean up for State \r\n this.clearFormState();\r\n // .2 Initialize the form. Create an empty form if none is provided.\r\n\r\n\r\n\r\n this._form = { ...(prepPopulateForm(form,this._initialFormValue) ) };\r\n this.setFirstStepAsActive();\r\n // .3 Create the main form Group\r\n const allFormInputs = this.allFormInputs() || [];\r\n this._mainForm = formGenerator(allFormInputs, this.getFormValue.bind(this));\r\n\r\n // .4 crete change reaction functions\r\n this.createAllInputDependencies();\r\n this.createInputFunctionsCollection();\r\n this.buildReverseDependencyMap();\r\n\r\n // 5. run input composition functions that have no dependencies\r\n\r\n\r\n // .5 Start the form changes event listener from the main form and call the change monitor function.\r\n startTowerFormChangesEventListener(this._mainForm, this._destroyed$, this.changeMonitor.bind(this));\r\n this.executeInputFunctionsWithoutDependencies();\r\n\r\n }\r\n setFirstStepAsActive = () => {\r\n const firstStep = this.selectFormSteps()?.[0];\r\n if (!firstStep) return;\r\n this.setSectionAsActive(firstStep.sectionId);\r\n }\r\n\r\n\r\n getFormValueNames = (): Record<string, any> => getFormValueAsFormControlBasedObject(this)\r\n readonly allFormInputs = () => allFormInputs(this.form!);\r\n // CHANGE MONITOR\r\n prevValue: any;\r\n // CHANGE MONITOR - Improved version\r\n protected changeMonitor = (newFormValue: any): Observable<any> => {\r\n // Find changed inputs by comparing with previous values\r\n updateChangeHistory(this, newFormValue).then();\r\n this.NGX_T_FORMS_CONFIG.formBuilder.saveFormData(this.form?.formId,this.getFormValueNames())\r\n const changedInputIds = Object.keys(newFormValue)\r\n \r\n if (changedInputIds.length === 0) {\r\n return of(null); // No changes detected\r\n }\r\n\r\n\r\n this._formValue = getFormValue(this)\r\n // For each changed input, find and execute dependent functions\r\n const functionsToExecute: Observable<void>[] = [];\r\n const executedFunctions = new Set<string>(); // To prevent duplicate executions\r\n\r\n for (const changedInputId of changedInputIds) {\r\n this.setInputAsTouchedAndDirty(changedInputId);\r\n // Find all dependent inputs\r\n \r\n const dependentInputs = this._reverseDependencyMap[changedInputId] || [];\r\n\r\n\r\n for (const { inputId, functionType } of dependentInputs) {\r\n // Create a unique key to prevent duplicate function executions\r\n const functionKey = `${inputId}:${functionType}`;\r\n\r\n if (!executedFunctions.has(functionKey)) {\r\n executedFunctions.add(functionKey);\r\n\r\n const fn: Observable<void> | undefined = this._inputFunctionsCollection[inputId]?.[functionType]\r\n if (fn) {\r\n functionsToExecute.push(fn);\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n\r\n console.error(`[FormTowerControllerService] Detected ${changedInputIds.length} changed inputs`);\r\n return functionsToExecute.length > 0\r\n ? forkJoin(functionsToExecute).pipe(\r\n tap(() => console.error(`[FormTowerControllerService] Executed ${functionsToExecute.length} functions for changed inputs`))\r\n )\r\n : of(null);\r\n };\r\n\r\n\r\n\r\n createInputFunctionsCollection = () => {\r\n const allInputs = this.allFormInputs()\r\n for (const input of allInputs || []) {\r\n if (input.element === ElementTypes.SectionTitle) continue;\r\n const inputFunctions: Partial<Record<FunctionTypes, boolean>> = getAllFunctionTypes(input);\r\n this._inputFunctionsCollection[input.id] = Object.keys(inputFunctions).reduce((acc, key) => {\r\n if (!!inputFunctions[key as FunctionTypes]) {\r\n // Store the function that RETURNS an Observable, not a function reference\r\n (acc as any)[key as FunctionTypes] = this.getFunctionByType(key as FunctionTypes, input);\r\n }\r\n return acc;\r\n }, {})\r\n }\r\n }\r\n // Build a reverse dependency map for efficient lookups\r\n private buildReverseDependencyMap(): void {\r\n this._reverseDependencyMap = {};\r\n\r\n // For each input in our form\r\n Object.entries(this._inputChangeDependencyRecords).forEach(([inputId, functionDependencies]) => {\r\n // For each function type this input has\r\n Object.entries(functionDependencies || {}).forEach(([functionType, dependencies]) => {\r\n // For each dependency of this input for this function type\r\n Object.keys(dependencies || {}).forEach(dependencyId => {\r\n // Initialize array if needed\r\n if (!this._reverseDependencyMap[dependencyId]) {\r\n this._reverseDependencyMap[dependencyId] = [];\r\n }\r\n\r\n // Add this input as dependent on the dependencyId\r\n this._reverseDependencyMap[dependencyId].push({\r\n inputId,\r\n functionType: functionType as FunctionTypes\r\n });\r\n });\r\n });\r\n });\r\n\r\n console.log('Reverse dependency map built:', this._reverseDependencyMap);\r\n }\r\n\r\n\r\n createAllInputDependencies = () => {\r\n const allInputs = this.allFormInputs();\r\n for (const input of allInputs || []) {\r\n if (input.element === ElementTypes.SectionTitle) continue;\r\n this._inputChangeDependencyRecords[input.id] = createInputChangeDependency(input);\r\n }\r\n }\r\n\r\n\r\n setInputStatus = (inputId: string, statusId: string, status: string) => setInputStatus(this, inputId, statusId, status);\r\n removeInputStatus = (inputId: string, statusId: string) => removeInputStatus(this, inputId, statusId);\r\n updateValue = (inputId: string, value: any) => updateValue(this, inputId, value);\r\n getFunctionByType(fn: FunctionTypes, input: FormColumnInputs): Observable<void> {\r\n return new Observable<void>(observer => {\r\n \r\n const utils: IFunctionUtils = {\r\n setTemporaryHint: this.setTemporaryHint.bind(this),\r\n\r\n updateValue: this.updateValue.bind(this),\r\n httpPostDataFunction: this.httpPostDataFunction.bind(this),\r\n setInputTemporaryError: this.setInputTemporaryError.bind(this),\r\n httpGetDataFunction: this.httpGetDataFunction.bind(this),\r\n updateFormInputConfig: this.updateFormInputConfig.bind(this),\r\n setInputStatus: this.setInputStatus.bind(this),\r\n removeInputStatus: this.removeInputStatus.bind(this),\r\n fileUpload : this.NGX_T_FORMS_CONFIG.formBuilder.fileUpload.bind(this)\r\n }\r\n // Call calculateInput with the latest utils and form value function\r\n // to create a fresh Observable\r\n let obs$: Observable<void> | undefined;\r\n switch (fn) {\r\n case FunctionTypes.ValueCalculation:\r\n obs$ = calculateInput(input, this.getFormValue.bind(this), utils);\r\n break;\r\n case FunctionTypes.ValuePostMethodAPI:\r\n obs$ = inputGetApiPostData(input, this.getFormValue.bind(this), 'value', utils);\r\n break;\r\n case FunctionTypes.ValuePostMethodAPIWithAllDefaultParams:\r\n obs$ = inputGetApiPostData(input, this.getFormValue.bind(this), 'value', utils);\r\n break;\r\n case FunctionTypes.OptionsPostMethodAPI:\r\n obs$ = inputGetApiPostData(input, this.getFormValue.bind(this), 'options', utils);\r\n break;\r\n case FunctionTypes.OptionsPostMethodAPIWithAllDefaultParams:\r\n obs$ = inputGetApiPostData(input, this.getFormValue.bind(this), 'options', utils);\r\n break;\r\n case FunctionTypes.ValueGetMethodAPI:\r\n obs$ = getApiDataFetching(input, 'value', utils);\r\n break;\r\n case FunctionTypes.OptionsGetMethodAPI:\r\n obs$ = getApiDataFetching(input, 'options', utils);\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n if (!obs$) {\r\n observer.next();\r\n observer.complete();\r\n return\r\n }\r\n\r\n obs$.pipe(take(1)).subscribe({\r\n next: () => {\r\n\r\n observer.next();\r\n observer.complete();\r\n },\r\n error: (err) => observer.error(err)\r\n });\r\n\r\n\r\n })\r\n\r\n\r\n }\r\n getFormValue = () => this._formValue;\r\n clearFormState = () => {\r\n this._form = undefined;\r\n this._mainForm = undefined;\r\n this._inputFunctionsCollection = {};\r\n this._inputChangeDependencyRecords = {};\r\n this._reverseDependencyMap = {};\r\n this._destroyed$.next();\r\n };\r\n\r\n executeInputFunctionsWithoutDependencies = () => {\r\n const funcs$: Observable<void>[] = extractSpecificFunctionTypes(this._inputFunctionsCollection)\r\n funcs$.forEach(fn => {\r\n fn.pipe(take(1)).subscribe({\r\n next: () => console.error(`Executed function`),\r\n error: (err) => console.error(`Error executing function`, err)\r\n });\r\n })\r\n }\r\n _hintTimeoutIds: Record<string, any> = {};\r\n setTemporaryHint = (inputId: string, hint: string, type: HintType): void => setTemporaryHint(this, inputId, hint, type);\r\n httpPostDataFunction = (url: string, data: any, options: any) => this.NGX_T_FORMS_CONFIG.formBuilder.httpPostDataFunction(url, data, options) || this._http.post(url, data);\r\n httpGetDataFunction = (url: string, options: any) => this.NGX_T_FORMS_CONFIG.formBuilder.httpGetDataFunction(url, options) || this._http.get(url);\r\n _errorTimeoutIds: Record<string, any> = {};\r\n setInputTemporaryError = (inputId: string, message: string) => setInputTemporaryError(this, inputId, message);\r\n setInputError = (err: Record<string, any>, inputId: string) => setInputError(this, err, inputId);\r\n updateFormInputConfig = (inputId: string, config: FormColumnInputs) => updateFormInputConfig(this, inputId, config);\r\n handleStepChange = (event: StepperSelectionEvent) => handleStepChange(this, event);\r\n selectFormSteps = () => selectFormSteps(this);\r\n selectAllFormTours = () => selectAllFormTours(this);\r\n setSectionAsSeen = (sectionId: string) => setSectionAsSeen(this, sectionId);\r\n setSectionAsActive = (sectionId: string) => setSectionAsActive(this, sectionId);\r\n setInputAsTouchedAndDirty = (inputId: string) => setInputAsTouchedAndDirty(this, inputId);\r\n formProgress = () => formProgress(this);\r\n formSubmissionMessage = () => formSubmissionMessage(this);\r\n setSubmissionStatusValue = (status: FormSubmissionStatus) => this.submittingStatus = status;\r\n initializeFormValues = (initialValues: Record<string, any>) => {\r\n this._initialFormValue = initialValues;\r\n if(this._mainForm === undefined){\r\n return\r\n }\r\n const allInputs = this.allFormInputs();\r\n if(!allInputs) return\r\n for (const input of allInputs || []) {\r\n \r\n const value = safeReturnDeepProperty(initialValues, input.formControlName.split('.')).value || initialValues[input.formControlName];\r\n const isMultipleInput = input.element === ElementTypes.MultipleInput;\r\n \r\n if (value !== undefined && !isMultipleInput) {\r\n this.updateValue(input.id, value);\r\n continue\r\n }\r\n if (isMultipleInput) {\r\n const v = (value || []).map((item: any) => {\r\n return Object.entries(item).reduce((acc, [key, val]) => {\r\n const inp = allInputs.find((i) => i.formControlName === key);\r\n if(key==='id'){\r\n acc[`${input.id}.id`] = val;\r\n \r\n }else{\r\n acc[`${inp?.id}`] = val;\r\n }\r\n \r\n return acc;\r\n }, {} as any);\r\n })\r\n v[`${input.id}.id`] = initialValues[input.id]\r\n console.error(`Setting multiple input value`,v)\r\n this.updateValue(input.id, v);\r\n continue\r\n }\r\n\r\n\r\n this.updateValue(input.id, '');\r\n \r\n }\r\n }\r\n reset(){\r\n const form = this._form\r\n const initialFormValues = this._initialFormValue\r\n this.clearFormState()\r\n this.initialize(form as FormInterface)\r\n this.initializeFormValues(initialFormValues)\r\n \r\n }\r\n revertBackHistory = () => {\r\n console.error(`Reverting back history`,this._changeHistory);\r\n // remove the last change\r\n const lastChange = this._changeHistory.pop();\r\n if (!lastChange) return;\r\n // get the latest record after the last change\r\n const latestRecord = this._changeHistory[this._changeHistory.length - 1];\r\n if (!latestRecord) return;\r\n // update the form value to the latest record\r\n Object.entries(latestRecord).forEach(([key, value]) => {\r\n this.updateValue(key, value);\r\n this.setTemporaryHint(key, 'Reverted back to previous value', HintType.HISTORY);\r\n })\r\n\r\n\r\n }\r\n /**\r\n * Form Submissions\r\n */\r\n submitForm = (passData:Record<string,any>) => {\r\n try {\r\n if(!this.form) return;\r\n const valueAsFormControlNames = this.getFormValueNames();\r\n const transformedForm = {\r\n ...this._initialFormValue,\r\n // Ensure that form values are not overwritten by the initial values\r\n ...unFlattenFormValue(valueAsFormControlNames)\r\n } \r\n\r\n const utils: InClassFormUtilsInterface = {\r\n fileUpload: this.NGX_T_FORMS_CONFIG.formBuilder.fileUpload.bind(this),\r\n\r\n httpGetDataFunction: this.httpGetDataFunction.bind(this),\r\n httpPostDataFunction:this.httpPostDataFunction.bind(this),\r\n setSubmissionStatusValue: this.setSubmissionStatusValue.bind(this),\r\n submitForm: function (): Observable<void> {\r\n throw new Error('Function not implemented.');\r\n },\r\n saveFormData:()=>this.NGX_T_FORMS_CONFIG.formBuilder.saveFormData(this.form?.formId,this.getFormValueNames()),\r\n runPipeLine:this.NGX_T_FORMS_CONFIG.formBuilder.runMongoDbPipeLine.bind(this),\r\n getUserSignature: this.NGX_T_FORMS_CONFIG.formBuilder.getUserSignature.bind(this),\r\n saveUserSignature: this.NGX_T_FORMS_CONFIG.formBuilder.saveUserSignature.bind(this),\r\n }\r\n if(utils.httpGetDataFunction === undefined || utils.httpPostDataFunction === undefined){\r\n\r\n this.NGX_T_FORMS_CONFIG.formBuilder.toastError(\"Http functions not defined\")\r\n return\r\n }\r\n \r\n \r\n formHttpSubmissions(this.form!, transformedForm,passData,utils).pipe(\r\n take(1),\r\n tap(() => {\r\n this.submittingStatus = undefined;\r\n this.submittingForm = false;\r\n this.NGX_T_FORMS_CONFIG.formBuilder.formSubmittedSuccessfully(this.form?.formId);\r\n })\r\n ).subscribe()\r\n } catch (error) {\r\n console.error(`Error submitting form:`, error);\r\n this.submittingStatus = FormSubmissionStatus.FAILED;\r\n this.submittingForm = false;\r\n \r\n }\r\n }\r\n /**\r\n * Toggles a multiple input element and its associated form controls.\r\n * When toggled on, adds controls to the form. When toggled off, removes them.\r\n * \r\n * @param inputId The ID of the multiple input to toggle\r\n * @returns boolean indicating success or failure\r\n */\r\n toggleMultipleInput = (inputId: string,open:boolean,rowInEditId?:string): boolean => toggleMultipleInput(this, this._mainForm, inputId,open,rowInEditId);\r\n saveMultipleInputForm = (inputId: string): boolean => saveMultipleInputForm(this, this._mainForm, inputId);\r\n multipleInputEditRow = (inputId: string, rowId: string) => multipleInputEditRow(this, this._mainForm, inputId, rowId);\r\n multipleInputDuplicateRow = (inputId: string, rowId: string) =>multipleInputDuplicateRow(this, this._mainForm, inputId, rowId);\r\n\r\n}\r\n","import { ConfigurationValidTestInterface } from 'ngx-t-forms-types';\r\n\r\n\r\nimport { safeReturnDeepProperty } from \"../../../shared/functions/getDeepObject\";\r\nimport { validateObjectAgainstString } from '../../../shared/modules/stringJsonValidator/getObjectValidations';\r\nexport function testAgainstItem(test: ConfigurationValidTestInterface, item: any):boolean {\r\n try {\r\n const testValue = test.deepBind ? safeReturnDeepProperty(item, test.deepBind || [])?.value : item\r\n const key = test.deepBind ? test.deepBind[test.deepBind.length - 1] : ''\r\n const objectValue = test.deepBind ? { [key||'']: testValue } : testValue\r\n if (test.expression) {\r\n try {\r\n return validateObjectAgainstString(test.expression, objectValue);\r\n } catch (error) {\r\n console.error(error)\r\n return false\r\n }\r\n \r\n }\r\n if(test.testType === 'exists'){\r\n return test.testType === 'exists' && testValue !== '' && testValue !== undefined;\r\n }\r\n if(test.testType === 'equalTo'){\r\n return testValue === test.valueMatch\r\n }\r\n return false\r\n } catch (error) {\r\n return false\r\n }\r\n }","\r\nimport { FormInterface, getElementEditorConfig } from \"ngx-t-forms-types\";\r\nimport { validateFormColumnInputsWithRequired } from \"ngx-t-forms-types\";\r\nimport { AllFormInputPrimaryKeys, DefaultInputConfig, ElementEditorInnerSectionElementInterface, ElementEditorTypes, FormInputKeys, SpecialElementKeys } from \"ngx-t-forms-types\";\r\nimport { DefaultInputConfigInterface } from \"ngx-t-forms-types\";\r\nimport { FormColumnInputs } from \"ngx-t-forms-types\";\r\nimport { InClassFormUtilsInterface, NgxTFormsConfig } from \"ngx-t-forms-types\";\r\nimport { testAgainstItem } from \"../../../../components/t-dynamic-data-edit/functions/testData\";\r\nimport { ValidationError } from \"ngx-t-forms-types\";;\r\n\r\n\r\nexport function inputElementEditorConfigs(form: FormInterface | undefined, inputInEdit: (FormColumnInputs) | undefined,\r\n NGX_T_FORMS_CONFIG: NgxTFormsConfig, utils: InClassFormUtilsInterface) {\r\n try {\r\n // Get base configuration \r\n const config = getElementEditorConfig\r\n // Get validation errors for the input being edited\r\n const errors = inputInEditValidationErrors(form, inputInEdit)\r\n // Create a completely new configuration object (for change detection)\r\n return {\r\n ...config, // Copy all base properties\r\n // Create new array with new section objects\r\n editorSections: config.editorSections.map(section => {\r\n\r\n const elements = getSectionElements(section.elements, inputInEdit, NGX_T_FORMS_CONFIG, utils, errors) as ElementEditorInnerSectionElementInterface[]\r\n // Check if any element in this section has errors\r\n const hasErrors = section.elements.some(el =>\r\n errors.some(err => err.key === el.deepBind?.join('.')))\r\n return ({\r\n ...section,\r\n elements:[...[],...elements].map(el=>({\r\n ...el,\r\n editType: el.deepBind[0] ===AllFormInputPrimaryKeys.FormControlName && (/^[^.]+(\\.[^.]+)+$/).test(inputInEdit?.formControlName || '') ?\r\n ElementEditorTypes.ChipOptionsCreator: el.editType,\r\n })),\r\n hasErrors\r\n })\r\n })\r\n };\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to configure columns';\r\n throw new Error(message)\r\n\r\n }\r\n}\r\n\r\nexport function getSectionElements(elements: ElementEditorInnerSectionElementInterface[],\r\n inputInEdit: (FormColumnInputs) | undefined, NGX_T_FORMS_CONFIG: NgxTFormsConfig,\r\n utils: InClassFormUtilsInterface, errors: ValidationError[] = []) {\r\n try {\r\n const defaultInputs: DefaultInputConfigInterface = { ...DefaultInputConfig }\r\n if (!inputInEdit) return []\r\n const defaultInput = defaultInputs[inputInEdit?.element]\r\n const processedElements = elements\r\n .map(el => processElement(el, inputInEdit, NGX_T_FORMS_CONFIG, utils, errors))\r\n const filteredElements = processedElements.filter(el => isElementApplicable(inputInEdit, defaultInput?.properties, el as any))\r\n return filteredElements\r\n } catch (err) {\r\n console.error('Error processing section elements:', err);\r\n return [];\r\n }\r\n}\r\n\r\nexport function processElement(element: ElementEditorInnerSectionElementInterface,\r\n inputInEdit: (FormColumnInputs) | undefined, NGX_T_FORMS_CONFIG: NgxTFormsConfig,\r\n utils: InClassFormUtilsInterface, errors: ValidationError[] = []) {\r\n const defaultInputs: DefaultInputConfigInterface = { ...DefaultInputConfig }\r\n if (!inputInEdit) return []\r\n const defaultInput = defaultInputs[inputInEdit?.element]\r\n return {\r\n ...element,\r\n computedErrors: computedErrors(element, errors),\r\n required: defaultInput?.requiredProperties?.includes(element.name as any),\r\n postmanCollectionConfig: getPostmanConfig(element, NGX_T_FORMS_CONFIG),\r\n httpGetDataFunction: utils.httpGetDataFunction.bind(utils),\r\n getWorkflowOptions:NGX_T_FORMS_CONFIG.formBuilder.workflows() ,\r\n getMscoaTree: element.editType === ElementEditorTypes.ConfigMscoaSegments ?\r\n NGX_T_FORMS_CONFIG.formBuilder.getScoaTree() :\r\n undefined\r\n };\r\n};\r\n\r\nexport function getPostmanConfig(element: ElementEditorInnerSectionElementInterface, NGX_T_FORMS_CONFIG: NgxTFormsConfig) {\r\n const validForPostman = [ElementEditorTypes.ApiCall, ElementEditorTypes.ApiValueAccessRules,ElementEditorTypes.DataSourcePicker].includes(element.editType) \r\n \r\n if(!validForPostman) return undefined;\r\n\r\n const config = {\r\n collectionUrl: String(NGX_T_FORMS_CONFIG['POSTMAN_COLLECTION_URL'] || ''),\r\n collectionKey: String(NGX_T_FORMS_CONFIG['POSTMAN_COLLECTION_KEY'] || '')\r\n };\r\n return config\r\n}\r\nexport function isElementApplicable(\r\n input: any,\r\n inputProperties: (FormInputKeys | SpecialElementKeys | AllFormInputPrimaryKeys)[] | undefined,\r\n element: ElementEditorInnerSectionElementInterface\r\n): boolean {\r\n const { name, additionalTest } = element;\r\n const isDefault = name === SpecialElementKeys.Default;\r\n\r\n if (!!isDefault && !additionalTest) return true;\r\n\r\n\r\n // Check property inclusion\r\n const isInputProperty = inputProperties?.includes(name as any);\r\n if (!isInputProperty && !isDefault) return false;\r\n\r\n // Execute additional tests\r\n return additionalTest ?\r\n additionalTest.every(test => testAgainstItem(test, input)) :\r\n !!isInputProperty;\r\n};\r\nexport function inputInEditValidationErrors(form: FormInterface | undefined, inputInEdit: (FormColumnInputs) | undefined) {\r\n try {\r\n const defaultInputs: DefaultInputConfigInterface = { ...DefaultInputConfig }\r\n\r\n let allInputs = form?.slides?.flatMap(slide => slide.columns) || []\r\n const parentInput = allInputs.find(input => input.id === inputInEdit?.multipleInputInEditId)\r\n\r\n if (!inputInEdit || !inputInEdit.element) return []\r\n const editingNewInput = !inputInEdit?.id\r\n if (!editingNewInput) {\r\n return validateFormColumnInputsWithRequired({\r\n data: inputInEdit as any,\r\n requiredKeys: (defaultInputs[inputInEdit.element]?.requiredProperties || []) as any[]\r\n })\r\n }\r\n // Improved duplicate check logic\r\n const isDuplicateFormControl = () => {\r\n if (!inputInEdit.formControlName) return false\r\n if (parentInput) {\r\n return parentInput.formInputs?.some(input =>\r\n input.formControlName === inputInEdit.formControlName\r\n ) || false\r\n }\r\n return allInputs.some(input =>\r\n input.formControlName === inputInEdit.formControlName\r\n )\r\n }\r\n\r\n const duplicateError = isDuplicateFormControl()\r\n ? [{ key: 'formControlName', message: 'Form control name must be unique' }]\r\n : []\r\n\r\n return [...duplicateError, ...validateFormColumnInputsWithRequired({\r\n data: inputInEdit as any,\r\n requiredKeys: (defaultInputs[inputInEdit.element]?.requiredProperties || []) as any[]\r\n })]\r\n\r\n } catch (error) {\r\n const msg = error instanceof Error ? error.message : 'Failed to check form config';\r\n throw new Error(msg)\r\n\r\n }\r\n}\r\n\r\nfunction computedErrors(element: ElementEditorInnerSectionElementInterface, allErrors: ValidationError[]) {\r\n\r\n const errors = allErrors?.filter(error => error.key === element.deepBind?.join('.'))\r\n return [...[], ...errors];\r\n}","import { NgModule } from '@angular/core';\r\n\r\nimport { CdkAccordionModule } from '@angular/cdk/accordion';\r\nimport { ClipboardModule } from '@angular/cdk/clipboard';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { CdkStepperModule } from '@angular/cdk/stepper';\r\nimport { CdkTableModule } from '@angular/cdk/table';\r\nimport { CdkTreeModule } from '@angular/cdk/tree';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatBottomSheetModule } from '@angular/material/bottom-sheet';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatMenuModule, } from '@angular/material/menu';\r\nimport { MatNativeDateModule, MatRippleModule } from '@angular/material/core';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatTreeModule } from '@angular/material/tree';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n\r\n ],\r\n imports: [],\r\n exports: [\r\n CdkAccordionModule,\r\n ClipboardModule,\r\n CdkStepperModule,\r\n CdkTableModule,\r\n CdkTreeModule,\r\n DragDropModule,\r\n MatAutocompleteModule,\r\n MatBadgeModule,\r\n MatBottomSheetModule,\r\n MatButtonModule,\r\n MatButtonToggleModule,\r\n MatCardModule,\r\n MatCheckboxModule,\r\n MatChipsModule,\r\n MatStepperModule,\r\n MatDatepickerModule,\r\n MatDialogModule,\r\n MatDividerModule,\r\n MatExpansionModule,\r\n MatGridListModule,\r\n MatIconModule,\r\n MatListModule,\r\n MatMenuModule,\r\n MatNativeDateModule,\r\n MatPaginatorModule,\r\n MatProgressBarModule,\r\n MatProgressSpinnerModule,\r\n MatRadioModule,\r\n MatRippleModule,\r\n MatSelectModule,\r\n MatSidenavModule,\r\n MatSliderModule,\r\n MatSlideToggleModule,\r\n MatSnackBarModule,\r\n MatSortModule,\r\n MatTableModule,\r\n MatTabsModule,\r\n MatToolbarModule,\r\n MatTooltipModule,\r\n MatTreeModule,\r\n OverlayModule,\r\n PortalModule,\r\n ScrollingModule,\r\n MatFormFieldModule,\r\n MatInputModule\r\n \r\n ],\r\n})\r\nexport class MatModulesModule {}\r\n","import { Component, inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { DialogConfig } from \"ngx-t-forms-types\";\r\nimport { MatModulesModule } from '../../shared/modules/mat-modules.module';\r\n\r\n@Component({\r\n selector: 'lib-dialog-template',\r\n standalone: true,\r\n imports: [MatModulesModule],\r\n templateUrl: './dialog-template.component.html',\r\n styleUrl: './dialog-template.component.css'\r\n})\r\nexport class DialogTemplateComponent {\r\nreadonly dialogRef = inject(MatDialogRef< DialogTemplateComponent>);\r\nreadonly data = inject< DialogConfig>(MAT_DIALOG_DATA);\r\nproceed(){\r\n this.dialogRef.close(true);\r\n}\r\n}\r\n","<h2 mat-dialog-title>\r\n {{data.title}}\r\n</h2>\r\n<mat-dialog-content>\r\n{{data.message}}\r\n</mat-dialog-content>\r\n\r\n<mat-dialog-actions >\r\n <button \r\n color=\"warn\"\r\n mat-flat-button mat-dialog-close>\r\n {{data.noText}}\r\n </button>\r\n <span class=\"spacer\"></span>\r\n <button \r\n (click)=\"proceed()\"\r\n color=\"primary\"\r\n mat-raised-button mat-dialog-close cdkFocusInitial>\r\n {{data.yesText}}\r\n </button>\r\n</mat-dialog-actions>","export function daysAgoTransformDate(value:Date){\r\n if (value) {\r\n const seconds = Math.floor((+new Date() - +new Date(value)) / 1000);\r\n if (seconds < 15)\r\n // less than 30 seconds ago will show as 'Just now'\r\n return 'Just now';\r\n const intervals: any = {\r\n year: 31536000,\r\n month: 2592000,\r\n week: 604800,\r\n day: 86400,\r\n hr: 3600,\r\n min: 60,\r\n sec: 1,\r\n };\r\n let counter;\r\n for (const i in intervals) {\r\n counter = Math.floor(seconds / intervals[i]);\r\n if (counter > 0)\r\n if (counter === 1) {\r\n return counter + ' ' + i + ' ago'; // singular (1 day ago)\r\n } else {\r\n return counter + ' ' + i + 's ago'; // plural (2 days ago)\r\n }\r\n }\r\n }\r\n return value;\r\n}","\r\nimport {LocalFormStateSelectorInterface } from \"ngx-t-forms-types\";\r\nimport { daysAgoTransformDate } from \"../../../shared/functions/daysAgoTransform\"\r\nimport { FormsStoreService } from \"./forms-store.service\"\r\nimport { FormsStoreSelectorsInterface } from \"ngx-t-forms-types\";\r\n\r\n\r\n\r\nexport function formsStoreSelectors(store: FormsStoreService):FormsStoreSelectorsInterface {\r\n const state$ = store.select(state => state)\r\n const selectForms$ = store.select(state => (state.forms || []).map(\r\n form => {\r\n const f: LocalFormStateSelectorInterface = {\r\n _id: form._id,\r\n createdAt: form.createdAt,\r\n errors: form.errors,\r\n updatedAt: form.updatedAt,\r\n archived: form.archive,\r\n busy: form.busy,\r\n ...form.form\r\n }\r\n return f\r\n }\r\n ))\r\n\r\n const selectFormInEdit$ = store.select(state => state.editForm)\r\n const selectInputInEditId$ = store.select(state => state.inputInEdit)\r\n const selectFormBuilderIsBusy$ = store.select(state => state.formBuilderBusy)\r\n const selectSubmittingForm$ = store.select(state => state.submittingForm) \r\n const selectLoadingForm$ = store.select(state => state.loadingForm)\r\n const selectLoadingForms$ = store.select(state => state.loadingForms)\r\n const selectFormId$ = store.select(state => state.formId)\r\n const selectErrors$ = store.select(state => state.errors)\r\n const selectFormListSection$ = store.select(state => state.listSection)\r\n const selectFormUpdated$ = store.select(state => (state.editForm?.updatedAt && daysAgoTransformDate(state.editForm.updatedAt)) || null)\r\n const selectRouterState$ = store.select(state => state.routerState)\r\n const selectFormInitialValues$ = store.select(state => state.initialFormValues)\r\n \r\n //Form Builder\r\n \r\n\r\n return {\r\n state$,\r\n selectForms$,\r\n selectFormInEdit$,\r\n selectFormBuilderIsBusy$,\r\n selectLoadingForm$,\r\n selectLoadingForms$,\r\n selectFormId$,\r\n selectErrors$,\r\n selectFormListSection$,\r\n selectFormUpdated$,\r\n selectRouterState$,\r\n selectSubmittingForm$,\r\n selectFormInitialValues$,\r\n selectInputInEditId$\r\n\r\n }\r\n\r\n}","\r\nimport { ActivatedRouteSnapshot } from \"@angular/router\";\r\nimport { DatabaseFormInterface, FormInterface } from 'ngx-t-forms-types';\r\nimport { FormListSection, FormStateErrors, IFormsInitStateInterface } from 'ngx-t-forms-types';\r\nimport { validateForm } from 'ngx-t-forms-types';\r\nimport { FormsStoreService } from \"./forms-store.service\";\r\n\r\n\r\nconst handleLoadFormListSuccess = (state: IFormsInitStateInterface, { forms }: { forms: DatabaseFormInterface[] }) => ({\r\n ...state,\r\n forms: forms.map((form) => ({ \r\n ...form,\r\n busy: false,\r\n errors: validateForm({\r\n slides: form.form.slides,\r\n submissionHandle: form.form.submissionHandle,\r\n formId: form._id,\r\n formTitle: form.form.formTitle,\r\n })\r\n }))\r\n});\r\n\r\nconst handleToggleFormBuilderBusy = (state: IFormsInitStateInterface) => ({\r\n ...state,\r\n formBuilderBusy: !state.formBuilderBusy\r\n});\r\n\r\nconst handleSetSubmittingForm = (state: IFormsInitStateInterface, { submittingForm }: { submittingForm: boolean }) => ({\r\n ...state,\r\n submittingForm\r\n});\r\nconst handleToggleLoadingForm = (state: IFormsInitStateInterface) => ({\r\n ...state,\r\n loadingForm: !state.loadingForm\r\n});\r\n\r\nconst handleToggleLoadingForms = (state: IFormsInitStateInterface,{loadingForms}:{loadingForms:boolean}) => ({\r\n ...state,\r\n loadingForms: loadingForms\r\n});\r\n\r\nconst handleLoadFormSuccess = (state: IFormsInitStateInterface, { form }: { form: DatabaseFormInterface }) => ({\r\n ...state,\r\n editForm: {\r\n ...state.editForm,\r\n ...form,\r\n }\r\n});\r\n\r\nconst handleToggleFormBusy = (state: IFormsInitStateInterface, { formId }: { formId: string }) => ({\r\n ...state,\r\n forms: state.forms.map(form => form._id === formId ? { ...form, busy: !form.busy } : form)\r\n});\r\nconst handleSetFormInitialValues = (state: IFormsInitStateInterface, { initialFormValues }: { initialFormValues: Record<string, any> }) => ({\r\n ...state,\r\n initialFormValues\r\n});\r\n\r\nconst handleArchivedSuccess = (state: IFormsInitStateInterface, { formId }: { formId: string }) => ({\r\n ...state,\r\n forms: state.forms.filter(form => form._id !== formId)\r\n});\r\nconst handleSetFormId = (state: IFormsInitStateInterface, { formId }: { formId: string }) => ({\r\n ...state,\r\n formId\r\n});\r\nconst handleListSectionChange = (state: IFormsInitStateInterface, { listSection }: { listSection: FormListSection}) => ({\r\n ...state,\r\n listSection: listSection === null || listSection === undefined ? FormListSection.ALL : listSection\r\n});\r\nconst handleSetError = (state: IFormsInitStateInterface, { error, type }: { error: string|undefined, type: FormStateErrors}) => {\r\n const errors = {\r\n ArchiveForm: state.errors?.ArchiveForm,\r\n CreateForm: state.errors?.CreateForm,\r\n UpdateForm: state.errors?.UpdateForm,\r\n GetForm: state.errors?.GetForm,\r\n LoadForms: state.errors?.LoadForms,\r\n [type]: error\r\n };\r\n return { ...state, errors };\r\n}\r\nconst handleEditorUpdateFormInEdit = (state: IFormsInitStateInterface, { form }: { form: FormInterface }) => ({\r\n ...state,\r\n editForm: {\r\n ...state.editForm,\r\n form\r\n } as DatabaseFormInterface\r\n});\r\n\r\nconst handleSetInputInEditId = (state: IFormsInitStateInterface, { inputInEdit }: { inputInEdit: string |null}) => ({\r\n ...state,\r\n inputInEdit\r\n});\r\n\r\nconst handleRouterStateChange = (state: IFormsInitStateInterface, { routerState }: { routerState: ActivatedRouteSnapshot|null }) => ({\r\n ...state,\r\n routerState\r\n})\r\n\r\nexport function formsStoreActions(store:FormsStoreService ) {\r\n\r\n return {\r\n \r\n loadFormListSuccess: store.updater(handleLoadFormListSuccess),\r\n toggleFormBuilderBusy: store.updater(handleToggleFormBuilderBusy),\r\n toggleLoadingForm: store.updater(handleToggleLoadingForm),\r\n toggleLoadingForms: store.updater(handleToggleLoadingForms),\r\n loadFormSuccess: store.updater(handleLoadFormSuccess),\r\n toggleFormBusy: store.updater(handleToggleFormBusy),\r\n archivedSuccess: store.updater(handleArchivedSuccess),\r\n setFormId: store.updater(handleSetFormId),\r\n setError: store.updater(handleSetError),\r\n handleListSectionChange : store.updater(handleListSectionChange),\r\n handleRouterStateChange : store.updater(handleRouterStateChange),\r\n handleSetSubmittingForm: store.updater(handleSetSubmittingForm),\r\n setFormInitialValues: store.updater(handleSetFormInitialValues),\r\n handleEditorUpdateFormInEdit: store.updater(handleEditorUpdateFormInEdit),\r\n setInputInEditId: store.updater(handleSetInputInEditId)\r\n \r\n }\r\n}","import { catchError, EMPTY, map, Observable, of, switchMap, concat, concatMap, finalize,} from \"rxjs\";\r\nimport { FormsStoreService } from \"./forms-store.service\";\r\nimport { DatabaseFormInterface, FormInterface } from \"ngx-t-forms-types\";\r\nimport { initFormConfigToV2 } from \"../../../services\";\r\nimport { FormListSection, FormStateErrors } from \"ngx-t-forms-types\";\r\nimport { HttpErrorResponse } from \"@angular/common/http\";\r\n\r\n\r\n\r\nfunction convertOldFormToNewForm(form: FormInterface): FormInterface {\r\n try {\r\n const newForm = initFormConfigToV2({ ...form } as any)\r\n\r\n return newForm\r\n } catch (error) {\r\n console.error('Failed to convert form to new form', error)\r\n return {\r\n slides: [],\r\n submissionHandle: undefined,\r\n formId: undefined,\r\n formTitle: ''\r\n } as any\r\n }\r\n}\r\n\r\nexport function formsStoreEffects(store: FormsStoreService) {\r\n const createForm$ = store.effect((form$: Observable<FormInterface>) =>\r\n form$.pipe(\r\n concatMap((form) =>\r\n concat(\r\n of(store.actions.toggleFormBuilderBusy()),\r\n of(store.actions.setError({ error: undefined, type: FormStateErrors.CreateForm })),\r\n store.resourceFunctions?.createForm(form).pipe(\r\n map(() => {\r\n store.actions.toggleFormBuilderBusy();\r\n store.resourceFunctions?.toastSuccess('Form created successfully');\r\n store.resourceFunctions?.formBuilderCloseButton.onClick()\r\n return form;\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n store.actions.toggleFormBuilderBusy();\r\n const msg = error.message || error.error?.message || 'An error occurred while creating the form';\r\n store.resourceFunctions?.toastError(msg);\r\n store.actions.setError({ error: msg, type: FormStateErrors.CreateForm });\r\n console.error(msg);\r\n return EMPTY;\r\n })\r\n ) || EMPTY\r\n )\r\n )\r\n )\r\n );\r\n\r\n const loadForms$ = store.effect((trigger$: Observable<void>) =>\r\n trigger$.pipe(\r\n switchMap(() => store.selectors.selectFormListSection$),\r\n switchMap((section) => {\r\n store.actions.toggleLoadingForms({ loadingForms: true });\r\n store.actions.setError({ error: undefined, type: FormStateErrors.LoadForms });\r\n if (section === FormListSection.ARCHIVED) {\r\n return store.resourceFunctions?.loadArchivedForms().pipe(\r\n map((forms) => {\r\n store.actions.loadFormListSuccess({ forms });\r\n\r\n store.resourceFunctions?.toastSuccess('Forms loaded successfully');\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n console.log(error)\r\n const msg = error.message || error.error?.message || 'An error occurred while loading the forms';\r\n store.actions.setError({ error: msg, type: FormStateErrors.LoadForms });\r\n store.actions.setError({ error: msg, type: FormStateErrors.LoadForms });\r\n return EMPTY;\r\n }),\r\n finalize(() => store.actions.toggleLoadingForms({ loadingForms: false }))\r\n ) || EMPTY;\r\n }\r\n\r\n \r\n return store.resourceFunctions?.loadForms().pipe(\r\n map((forms) =>\r\n store.actions.loadFormListSuccess({ forms })\r\n\r\n ),\r\n catchError((error: HttpErrorResponse) => {\r\n console.log(error)\r\n const msg = error.message || error.error?.message || 'An error occurred while loading the forms';\r\n store.actions.setError({ error: msg, type: FormStateErrors.LoadForms });\r\n return EMPTY;\r\n }),\r\n finalize(() => store.actions.toggleLoadingForms({ loadingForms: false }))\r\n ) || EMPTY;\r\n })\r\n )\r\n );\r\n const setListSection$ = store.effect((listSection$: Observable<FormListSection>): Observable<unknown> =>\r\n listSection$.pipe(\r\n switchMap((listSection) =>\r\n concat(\r\n of(store.actions.handleListSectionChange({ listSection })),\r\n of(loadForms$(of(undefined)))\r\n\r\n )\r\n )\r\n )\r\n );\r\n\r\n const loadForm$ = store.effect((formId$: Observable<string>) =>\r\n formId$.pipe(\r\n switchMap((formId) => {\r\n store.actions.setError({ error: undefined, type: FormStateErrors.GetForm });\r\n store.actions.toggleLoadingForm();\r\n const newForm = {\r\n form: {\r\n slides: [],\r\n submissionHandle: undefined,\r\n formId: undefined,\r\n formTitle: ''\r\n } as unknown as FormInterface\r\n } as DatabaseFormInterface\r\n const form$: Observable<DatabaseFormInterface | null> = formId === 'newForm'\r\n ? of(newForm)\r\n : store.resourceFunctions?.getForm(formId) || EMPTY;\r\n\r\n return form$?.pipe(\r\n map((form) => {\r\n\r\n if (form !== null) {\r\n const newForm = {\r\n ...form,\r\n form: {\r\n ...convertOldFormToNewForm(form.form),\r\n \r\n }\r\n }\r\n delete (newForm.form as any)._id\r\n store.actions.loadFormSuccess({ form: newForm});\r\n \r\n store.createFormPlaceHolderFormGroups(form.form)\r\n store.refreshExternalFormStates?.(convertOldFormToNewForm(newForm.form))\r\n \r\n store.resourceFunctions?.toastSuccess('Form loaded successfully');\r\n }\r\n store.actions.toggleLoadingForm();\r\n store.actions.setFormId({ formId });\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n store.actions.toggleLoadingForm();\r\n const msg = error.message || error.error?.message || 'An error occurred while loading the form';\r\n store.resourceFunctions?.toastError(msg);\r\n store.actions.setError({ error: msg, type: FormStateErrors.GetForm });\r\n return EMPTY;\r\n })\r\n );\r\n })\r\n )\r\n );\r\n const updateForm$ = store.effect((form$: Observable<FormInterface>) =>\r\n form$.pipe(\r\n concatMap((form) =>\r\n concat(\r\n of(store.actions.toggleFormBuilderBusy()),\r\n of(store.actions.setError({ error: undefined, type: FormStateErrors.UpdateForm })),\r\n store.resourceFunctions?.updateForm(form).pipe(\r\n map((newForm) => {\r\n store.actions.toggleFormBuilderBusy();\r\n store.actions.loadFormSuccess({ form: newForm });\r\n \r\n store.resourceFunctions?.toastSuccess('Form updated successfully');\r\n return form;\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n store.actions.toggleFormBuilderBusy();\r\n const msg = error.message || error.error?.message || 'An error occurred while updating the form';\r\n store.actions.setError({ error: msg, type: FormStateErrors.UpdateForm });\r\n store.actions.setError({ error: msg, type: FormStateErrors.UpdateForm });\r\n return EMPTY;\r\n })\r\n ) || EMPTY\r\n )\r\n )\r\n )\r\n );\r\n const archiveForm$ = store.effect((formId$: Observable<string>) =>\r\n formId$.pipe(\r\n switchMap((formId) => {\r\n store.actions.setError({ error: undefined, type: FormStateErrors.ArchiveForm });\r\n store.actions.toggleFormBusy({ formId });\r\n return store.resourceFunctions?.archiveForm(formId).pipe(\r\n map((response) => {\r\n store.actions.archivedSuccess({ formId });\r\n store.actions.toggleLoadingForm();\r\n store.resourceFunctions?.toastSuccess(`Form archived successfully`);\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n store.actions.toggleFormBusy({ formId });\r\n const msg = error.message || error.error?.message || 'An error occurred while archiving the form';\r\n store.actions.setError({ error: msg, type: FormStateErrors.ArchiveForm });\r\n store.actions.setError({ error: msg, type: FormStateErrors.ArchiveForm });\r\n return EMPTY;\r\n })\r\n ) || EMPTY;\r\n })\r\n )\r\n );\r\n const unArchiveForm$ = store.effect((formId$: Observable<string>) =>\r\n formId$.pipe(\r\n switchMap((formId) => {\r\n store.actions.setError({ error: undefined, type: FormStateErrors.ArchiveForm });\r\n store.actions.toggleFormBusy({ formId });\r\n return store.resourceFunctions?.unArchiveForm(formId).pipe(\r\n map((response) => {\r\n store.actions.archivedSuccess({ formId });\r\n store.actions.toggleLoadingForm();\r\n store.resourceFunctions?.toastSuccess(`Form restored successfully`);\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n store.actions.toggleFormBusy({ formId });\r\n const msg = error.message || error.error?.message || 'An error occurred while restoring the form';\r\n store.actions.setError({ error: msg, type: FormStateErrors.ArchiveForm });\r\n store.actions.setError({ error: msg, type: FormStateErrors.ArchiveForm });\r\n return EMPTY;\r\n })\r\n ) || EMPTY;\r\n })\r\n )\r\n );\r\n const deleteForm$ = store.effect((formId$: Observable<string>) =>\r\n formId$.pipe(\r\n switchMap((formId) => {\r\n store.actions.setError({ error: undefined, type: FormStateErrors.ArchiveForm });\r\n store.actions.toggleFormBusy({ formId });\r\n return store.resourceFunctions?.deleteForm(formId).pipe(\r\n map((response) => {\r\n store.actions.archivedSuccess({ formId });\r\n store.actions.toggleLoadingForm();\r\n store.resourceFunctions?.toastSuccess(`Form deleted successfully`);\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n store.actions.toggleFormBusy({ formId });\r\n const msg = error.message || error.error?.message || 'An error occurred while deleting the form';\r\n store.actions.setError({ error: msg, type: FormStateErrors.ArchiveForm });\r\n store.actions.setError({ error: msg, type: FormStateErrors.ArchiveForm });\r\n return EMPTY;\r\n })\r\n ) || EMPTY;\r\n })\r\n )\r\n );\r\n // const submitForm$ = store.effect((passData$: Observable<any>) =>\r\n // passData$.pipe(\r\n // withLatestFrom(store.FormBuilderServiceInstance.asObservable()),\r\n // switchMap(([passData,formInstance]) => {\r\n // if (!formInstance) {\r\n // return EMPTY;\r\n // }\r\n // store.actions.handleSetSubmittingForm({ submittingForm: true });\r\n // return formHttpSubmissions(formInstance,passData).pipe(\r\n // tap(() => {\r\n // store.resourceFunctions?.formSubmittedSuccessfully(formInstance.form.formId);\r\n // store.actions.handleSetSubmittingForm({ submittingForm: false });\r\n // }),\r\n // catchError((error) => {\r\n // store.actions.handleSetSubmittingForm({ submittingForm: false });\r\n // console.error('Error in submitForm:', error);\r\n // return EMPTY;\r\n // })\r\n // )\r\n \r\n \r\n \r\n \r\n // })\r\n // )\r\n \r\n // )\r\n\r\n return {\r\n createForm$,\r\n loadForms$,\r\n loadForm$,\r\n updateForm$,\r\n archiveForm$,\r\n setListSection$,\r\n unArchiveForm$,\r\n deleteForm$,\r\n\r\n };\r\n}","import { FormColumnInputs, FormInterface, validateForm } from \"ngx-t-forms-types\";\r\n\r\n\r\n\r\nexport function canSaveNewForm(form:FormInterface): boolean {\r\ntry {\r\n const errors = validateForm(form)\r\n\r\n return errors.length === 0\r\n} catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to check if form can be saved';\r\n throw new Error(message);\r\n}\r\n}\r\nexport function missingConfig(form: FormInterface | undefined): string[] {\r\ntry {\r\n if(!form) return ['Form is missing'];\r\n const inputs = form?.slides.flatMap(slide => slide.columns)||[];\r\n\r\n const findDuplicateControlNames = (inputs: FormColumnInputs[]): string[] => {\r\n const controlNames = new Set<string>();\r\n const duplicates: string[] = [];\r\n\r\n inputs.forEach(input => {\r\n if (controlNames.has(input.formControlName)) {\r\n duplicates.push(input.formControlName);\r\n } else {\r\n controlNames.add(input.formControlName);\r\n }\r\n });\r\n\r\n return duplicates;\r\n };\r\n\r\n const findMissingDataTypes = (inputs: any[]): string[] => \r\n inputs.filter(input => !input.dataType).map(input => `${input.label} is missing dataType`);\r\n\r\n const checkFormTitle = (form:FormInterface): string | null => \r\n !form.formTitle ? 'A Form title is required' : null;\r\n\r\n const checkFormSections = (form: FormInterface): string | null => \r\n form.slides.length === 0 ? 'At least one section in a form is required' : null;\r\n\r\n const checkSectionLabels = (form: FormInterface): string | null => \r\n form.slides.some(slide => !slide.label) ? 'All sections must have a title' : null;\r\n\r\n const checkSubmissionHandle = (form: FormInterface): string | null => \r\n !form.submissionHandle?.submissionAPI ? 'Setup form Submission API. header > config > Submission Config' : null;\r\n\r\n const checkSlidesElements = (form: FormInterface): string | null => \r\n form.slides.some(slide => slide.columns.length === 0) ? 'All sections must have at least one element' : null;\r\n\r\n const duplicateErrors = findDuplicateControlNames(inputs).map(name => {\r\n const duplicates = inputs.filter(input => input.formControlName === name);\r\n return `Error: ${duplicates.map(d => d.label).join(' and ')} have the same control name`;\r\n });\r\n\r\n const missingDataTypeErrors = findMissingDataTypes(inputs);\r\n\r\n const errors = [\r\n checkFormTitle(form),\r\n checkFormSections(form),\r\n checkSectionLabels(form),\r\n checkSubmissionHandle(form),\r\n checkSlidesElements(form),\r\n ...duplicateErrors,\r\n ...missingDataTypeErrors,\r\n ].filter(error => error !== null);\r\n\r\n return errors as string[];\r\n} catch (error) {\r\n const msg = error instanceof Error ? error.message : 'Failed to check form config';\r\n throw new Error(msg);\r\n\r\n}\r\n}\r\n","import { map, of, switchMap } from \"rxjs\";\r\nimport { FormsStoreService } from \"./forms-store.service\";\r\n\r\nimport { DefaultInputConfig, DefaultInputConfigInterface, validateForm } from 'ngx-t-forms-types';;\r\nimport { validateFormColumnInputsWithRequired } from 'ngx-t-forms-types';;\r\nimport { missingConfig } from \"../../../services/core/t-form-builder/functions/formCanSave\";\r\nimport { inputElementEditorConfigs } from \"../../../services/core/t-form-builder/functions/inputElementEditorConfigs\";\r\nimport { validateFormSlide } from \"ngx-t-forms-types\";\r\nimport { returnAnyFormInputFromForm } from \"../functions/findFormInput\";\r\nimport { allFormInputs } from \"../../../services/core/t-form-tower-controller/functions/allFormInputs\";\r\n\r\n\r\nexport function formsFormBuilderStoreSelectors(store: FormsStoreService) {\r\n const defaultInputs :DefaultInputConfigInterface = { ...DefaultInputConfig }\r\n try {\r\n \r\n const selectFormInEdit$ = store.selectors.selectFormInEdit$.pipe(map(form => form?.form))\r\n const selectFormSlides$ = selectFormInEdit$ .pipe(map(form => [...form?.slides||[]]))\r\n const selectFormSlideSections$ = selectFormSlides$.pipe(map(slides => slides.map(slide => ({\r\n ...slide,\r\n inputConfigErrors: validateFormSlide(slide)\r\n }))))\r\n const missingConfig$ =selectFormInEdit$ .pipe(map(form => missingConfig(form)))\r\n const canSaveForm$ = store.selectors.selectFormBuilderIsBusy$.pipe(switchMap(isBusy => isBusy ? of(false) : selectFormInEdit$.pipe(\r\n map(form => form !==undefined ? validateForm(form).length === 0 : false )\r\n )))\r\n const hasMissingConfigs$ = canSaveForm$.pipe(map((canSave) => !canSave))\r\n const isNewForm$ =selectFormInEdit$ .pipe(map((form) => !form?.formId))\r\n const formErrors$ = selectFormInEdit$.pipe(map(form =>form === null ? [{\r\n message: 'Form is empty',\r\n key: 'form'\r\n }] : validateForm(form!)))\r\n const formValidationErrorsMessages$ = formErrors$.pipe(map(formErrors => {\r\n const errors = formErrors || [];\r\n const errorCounts = errors.reduce((acc: { [x: string]: any; }, error: { message: string | number; }) => {\r\n acc[error.message] = (acc[error.message] || 0) + 1;\r\n return acc;\r\n }, {} as Record<string, number>);\r\n return Object.entries(errorCounts).map(([message, count]) =>\r\n count as any > 1 ? `${message} × ( ${count} )` : message\r\n );\r\n }))\r\n const inputInEdit$ = store.selectors.selectInputInEditId$.pipe(\r\n switchMap((inputInEditId) => {\r\n return selectFormInEdit$.pipe(\r\n map(form=>form && inputInEditId !==null? returnAnyFormInputFromForm(form,inputInEditId): undefined)\r\n )\r\n \r\n }),\r\n \r\n );\r\n const defaultInputInEdit$= inputInEdit$.pipe(map((inputInEdit) => (!inputInEdit) ? null : (defaultInputs as any)[(inputInEdit as any).element]))\r\n const inputInEditValidationErrors$ = selectFormInEdit$ .pipe(switchMap(form => {\r\n return inputInEdit$.pipe(map(inputInEdit => {\r\n \r\n const allInputs = form?.slides.flatMap(slide => slide.columns) || []\r\n const parentInput = allInputs.find(input => input.id === inputInEdit?.multipleInputInEditId)\r\n \r\n if (!inputInEdit || !inputInEdit.element) return []\r\n \r\n const editingNewInput = !inputInEdit?.id\r\n if (!editingNewInput) {\r\n return validateFormColumnInputsWithRequired({\r\n data: inputInEdit as any,\r\n requiredKeys: (defaultInputs[inputInEdit.element]?.requiredProperties || []) as any[]\r\n })\r\n }\r\n\r\n // Improved duplicate check logic\r\n const isDuplicateFormControl = () => {\r\n if (!inputInEdit.formControlName) return false\r\n if (parentInput) {\r\n return parentInput.formInputs?.some(input => \r\n input.formControlName === inputInEdit.formControlName\r\n ) || false\r\n }\r\n return allInputs.some(input => \r\n input.formControlName === inputInEdit.formControlName\r\n )\r\n }\r\n\r\n const duplicateError = isDuplicateFormControl() \r\n ? [{ key: 'formControlName', message: 'Form control name must be unique' }] \r\n : []\r\n\r\n return [...duplicateError, ...validateFormColumnInputsWithRequired({\r\n data: inputInEdit as any,\r\n requiredKeys: (defaultInputs[inputInEdit.element]?.requiredProperties || []) as any[]\r\n })]\r\n }))\r\n\r\n })\r\n )\r\n const selectFormTitle$ = selectFormInEdit$ .pipe(map((form) =>form?.formTitle))\r\n const getAllFormInputs$ = selectFormInEdit$ .pipe(map((form) => {\r\n const inputs = allFormInputs(form)\r\n \r\n return inputs\r\n \r\n }))\r\n \r\n\r\n \r\n\r\n const inputElementEditorConfigs$ = inputInEdit$.pipe(switchMap((inputInEdit) =>selectFormInEdit$.pipe(\r\n map(form => inputElementEditorConfigs(form, inputInEdit,store.NGX_T_FORMS_CONFIG,store.utils))\r\n )))\r\n \r\n \r\n return {\r\n \r\n \r\n selectFormSlides$,\r\n missingConfig$,\r\n canSaveForm$,\r\n isNewForm$,\r\n hasMissingConfigs$,\r\n formErrors$,\r\n formValidationErrorsMessages$,\r\n \r\n inputInEdit$,\r\n defaultInputInEdit$,\r\n inputInEditValidationErrors$,\r\n selectFormTitle$,\r\n getAllFormInputs$,\r\n \r\n inputElementEditorConfigs$,\r\n selectFormSlideSections$ \r\n \r\n }\r\n } catch (error) {\r\n console.log(error)\r\n throw error\r\n }\r\n\r\n}","import { CdkDragDrop, } from \"@angular/cdk/drag-drop\";\r\nimport { FormInterface } from \"ngx-t-forms-types\";\r\n\r\n\r\nexport function sectionDrop(event: CdkDragDrop<any>, form:FormInterface): FormInterface | undefined {\r\n try {\r\n let slides = form.slides;\r\n let temp = slides[event.previousIndex];\r\n let current = slides[event.currentIndex];\r\n if (temp && current) {\r\n slides[event.previousIndex] = current;\r\n slides[event.currentIndex] = temp;\r\n \r\n return {\r\n ...form,\r\n slides\r\n }\r\n }\r\n return form\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to drop section';\r\n console.error(message);\r\n throw new Error(message);\r\n }\r\n\r\n\r\n \r\n \r\n}","\r\nimport { CdkDragDrop } from '@angular/cdk/drag-drop';\r\nimport { FormInterface } from 'ngx-t-forms-types';\r\n\r\nexport function moveFormInput(event: CdkDragDrop<any>, sectionId: string, form: FormInterface): FormInterface | undefined {\r\n try {\r\n let slide = form.slides.find((slide) => slide.sectionId === sectionId)\r\n if (!slide) return;\r\n let columns = [...[], ...slide.columns]\r\n if (!columns) return;\r\n\r\n const prevItem = columns[event.previousIndex];\r\n const currItem = columns[event.currentIndex];\r\n\r\n if (prevItem && currItem) {\r\n columns[event.previousIndex] = currItem;\r\n columns[event.currentIndex] = prevItem;\r\n }\r\n const newForm = {\r\n ...form,\r\n slides: form.slides.map((slide) => {\r\n if (slide.sectionId === sectionId) {\r\n return {\r\n ...slide,\r\n columns: columns\r\n }\r\n }\r\n return slide\r\n })\r\n }\r\n return form = {\r\n ...newForm\r\n }\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to move form input';\r\n throw new Error(message);\r\n }\r\n\r\n\r\n}\r\n\r\nexport function moveMultipleInputInput(parentId: string, event: CdkDragDrop<any>, form: FormInterface): FormInterface | undefined {\r\n try {\r\n const parentInput = form.slides.flatMap(slide => slide.columns).find(column => column.id === parentId);\r\n\r\n if (!parentInput) return;\r\n const columns = [...(parentInput.formInputs || [])]\r\n const prevItem = columns[event.previousIndex];\r\n const currItem = columns[event.currentIndex];\r\n if (prevItem && currItem) {\r\n columns[event.previousIndex] = currItem;\r\n columns[event.currentIndex] = prevItem;\r\n }\r\n\r\n return {\r\n ...form,\r\n slides: form.slides.map((slide) => {\r\n if (slide.sectionId === parentInput.sectionId) {\r\n return {\r\n ...slide,\r\n columns: slide.columns.map((column) => {\r\n if (column.id === parentInput.id) {\r\n return {\r\n ...parentInput,\r\n formInputs: [...[], ...columns]\r\n }\r\n\r\n }\r\n return column\r\n })\r\n }\r\n }\r\n return slide\r\n })\r\n }\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to move multiple input';\r\n throw new Error(message);\r\n\r\n }\r\n\r\n}","\r\n\r\nimport { FormInterface, FormSlideInterface } from 'ngx-t-forms-types';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nexport function addNewSection(form:FormInterface): FormInterface {\r\n\r\n try {\r\n const sectionID = uuidv4()\r\n let newSlide: FormSlideInterface= {\r\n sectionId: sectionID,\r\n columns: [],\r\n label: \"\",\r\n \r\n };\r\n\r\n \r\n return {\r\n ...form,\r\n slides: [...form.slides, newSlide]\r\n }\r\n \r\n \r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to add new section';\r\n throw new Error(message);\r\n }\r\n \r\n \r\n}\r\n\r\n","import { FormInterface } from \"ngx-t-forms-types\";\r\n\r\n\r\nexport function stepTitleChangeStepFn(sectionId: string, value: string,form:FormInterface) {\r\n try {\r\n\r\n return {\r\n ...form,\r\n slides: form.slides.map((step) => ({\r\n ...step,\r\n label: step.sectionId === sectionId ? value : step.label\r\n }))\r\n }\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to change step title';\r\n throw new Error(message);\r\n }\r\n}","import { FormColumnInputs, FormInterface } from \"ngx-t-forms-types\";\r\n\r\nexport function removeItem(\r\n item: FormColumnInputs,\r\n form: FormInterface\r\n) {\r\n\r\n try {\r\n\r\n \r\n const newForm = {\r\n ...form,\r\n slides: form.slides.map((slide) => {\r\n if (slide.sectionId === item.sectionId) {\r\n return {\r\n ...slide,\r\n columns: slide.columns.map((column) => {\r\n if(column.id === item?.multipleInputInEditId){\r\n return {\r\n ...column,\r\n formInputs: column.formInputs?.filter((input) => input.id !== (item.originalId || item.id)) || []\r\n }\r\n }\r\n if(column.id === item.id){\r\n return undefined\r\n }\r\n return column\r\n }).filter((column) => column !== undefined)\r\n }\r\n }\r\n return slide\r\n })\r\n \r\n }\r\n \r\n return newForm\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to remove item';\r\n throw new Error(message);\r\n }\r\n\r\n}","import { FormColumnInputs, FormInterface } from \"ngx-t-forms-types\";\r\n\r\n\r\nexport function multipleInputToggleLabelFn(\r\n item: FormColumnInputs,\r\n form: FormInterface\t\r\n): FormInterface| undefined {\r\n // Get parent input that contains the target item\r\n if(!item.sectionId || !item.multipleInputInEditId) return form;\r\n\r\n try {\r\n \r\n return {\r\n ...form,\r\n slides: form.slides.map((slide) =>{\r\n if(slide.sectionId === item.sectionId){\r\n return ({\r\n ...slide,\r\n columns: slide.columns.map((column) => {\r\n if(column.id === item.multipleInputInEditId){\r\n return ({\r\n ...column,\r\n formInputs: column.formInputs?.map((input) => {\r\n if(input.id === (item.originalId || item.id)){\r\n return ({\r\n ...input,\r\n showAsLabel: !input.showAsLabel\r\n })\r\n }\r\n return input\r\n })\r\n })\r\n }\r\n return column\r\n })\r\n })\r\n\r\n }\r\n return slide\r\n\r\n }\r\n \r\n \r\n )\r\n }\r\n \r\n } catch (error) {\r\n throw error;\r\n }\r\n}\r\n","import { ElementTypes, FormColumnInputs, FormInterface, IMultipleInputCal } from \"ngx-t-forms-types\";\r\nimport { returnAnyFormInputFromForm } from \"../../../../components/forms/functions/findFormInput\";\r\n\r\n\r\nexport function addMultipleInputFunction(\r\n calculationFunction: IMultipleInputCal, \r\n multipleInputId: string | undefined, \r\n form: FormInterface\r\n): FormInterface | undefined {\r\n if (!multipleInputId) {\r\n return form; \r\n }\r\n const parentInput = returnAnyFormInputFromForm(form, multipleInputId);\r\n if(!parentInput || parentInput.element !== ElementTypes.MultipleInput) return form;\r\n\r\n \r\n return {\r\n ...form,\r\n slides: form.slides.map((slide) => {\r\n if (slide.sectionId === parentInput?.sectionId) {\r\n return {\r\n ...slide,\r\n columns: slide.columns.map((column) => {\r\n if (column.id === multipleInputId) {\r\n return toggleCalculationFunction(calculationFunction, column);\r\n }\r\n return column;\r\n })\r\n }\r\n }\r\n return slide;\r\n })\r\n }\r\n}\r\n\r\n\r\nfunction toggleCalculationFunction(\r\n calculationFunction: IMultipleInputCal,\r\n parentInput: FormColumnInputs\r\n): FormColumnInputs {\r\n const existingFunction = findExistingCalculationFunction(\r\n calculationFunction,\r\n parentInput\r\n );\r\n\r\n if (existingFunction) {\r\n return removeCalculationFunction(calculationFunction, parentInput);\r\n } else {\r\n return addCalculationFunction(calculationFunction, parentInput);\r\n }\r\n\r\n \r\n}\r\n\r\nfunction findExistingCalculationFunction(\r\n calculationFunction: IMultipleInputCal,\r\n parentInput:FormColumnInputs\r\n): IMultipleInputCal | undefined {\r\n return parentInput.calculateListFunctions.find(\r\n (f) => f.inputId === calculationFunction.inputId && f.func === calculationFunction.func\r\n );\r\n}\r\n\r\nfunction removeCalculationFunction(\r\n calculationFunction: IMultipleInputCal,\r\n parentInput: FormColumnInputs\r\n): FormColumnInputs {\r\n\r\n return {\r\n ...parentInput,\r\n calculateListFunctions : parentInput.calculateListFunctions.filter(\r\n (f) => f.inputId !== calculationFunction.inputId && f.func !== calculationFunction.func\r\n )\r\n }\r\n}\r\n\r\nfunction addCalculationFunction(\r\n calculationFunction: IMultipleInputCal,\r\n parentInput: FormColumnInputs\r\n): FormColumnInputs {\r\n // Create a new array with the existing functions plus the new one\r\n\r\n return{\r\n ...parentInput,\r\n calculateListFunctions:[\r\n ...parentInput.calculateListFunctions,\r\n calculationFunction\r\n ]\r\n }\r\n}","import { FormInterface } from \"ngx-t-forms-types\";\r\n\r\n;\r\n\r\nexport function deleteActiveSection(form:FormInterface,sectionId:string):FormInterface {\r\n try {\r\n \r\n return {\r\n \r\n ...form,\r\n slides: form.slides.filter(slide => slide.sectionId !== sectionId && slide.columns.some(\r\n c=>c.systemDefault === true\r\n ) === false),\r\n }\r\n \r\n \r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to delete section';\r\n throw new Error(message);\r\n }\r\n\r\n}","import { FormColumnInputs, FormInterface } from \"ngx-t-forms-types\";\r\n\r\n\r\nexport function moveInputToSectionFn(\r\n form: FormInterface,\r\n inputId: string,\r\n targetSection: string\r\n): FormInterface {\r\n try {\r\n const input = validateMoveOperation(targetSection, inputId, form);\r\n if(!input) return form;\r\n const sourceSection = input.sectionId;\r\n\r\n return createUpdatedForm(\r\n form,\r\n inputId,\r\n sourceSection,\r\n targetSection,\r\n input\r\n );\r\n \r\n } catch (error) {\r\n \r\n const msg = error instanceof Error ? error.message : 'Failed to move input to section';\r\n throw new Error(msg);\r\n }\r\n\r\n}\r\n\r\nfunction validateMoveOperation(\r\n targetSection: string,\r\n inputId: string,\r\n form: FormInterface\r\n): FormColumnInputs | undefined {\r\n if (!targetSection && !form.slides.find(slide => slide.sectionId === targetSection)) {\r\n throw new Error('Target section not found');\r\n }\r\n const input = form.slides.flatMap(slide => slide.columns).find(input => input.id === inputId);\r\n \r\n if (!input) {\r\n throw new Error('Input not found');\r\n }\r\n\r\n if (!input.sectionId) {\r\n throw new Error('Source section not found');\r\n }\r\n return input;\r\n}\r\n\r\nfunction createUpdatedForm(\r\n currentForm: FormInterface,\r\n inputId: string,\r\n sourceSection: string,\r\n targetSection: string,\r\n inputData: FormColumnInputs\r\n): FormInterface {\r\n return {\r\n ...currentForm,\r\n slides: currentForm.slides.map(slide => {\r\n if (slide.sectionId === sourceSection) {\r\n return {\r\n ...slide,\r\n columns: slide.columns.filter(col => col.id !== inputId)\r\n };\r\n }\r\n if (slide.sectionId === targetSection) {\r\n return {\r\n ...slide,\r\n columns: [...slide.columns, { \r\n ...inputData, \r\n sectionId: targetSection,\r\n formInputs: Array.isArray(inputData.formInputs) ? inputData.formInputs.map(\r\n i=>({\r\n ...i,\r\n sectionId: targetSection\r\n })\r\n ) : inputData.formInputs\r\n }]\r\n };\r\n }\r\n return slide;\r\n })\r\n };\r\n}\r\n\r\n","import { FormColumnInputs, FormInterface } from \"ngx-t-forms-types\";\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { returnAnyFormInputFromForm } from \"./findFormInput\";\r\n\r\nexport const cloneCopyFormInputFn = (form: FormInterface, inputId: string): FormInterface => {\r\n\r\n try {\r\n const inputToClone = form.slides.find(slide => slide.columns\r\n .find(column => column.id === inputId))\r\n ?.columns.find(column => column.id === inputId);\r\n if (!inputToClone) {\r\n return form;\r\n }\r\n const newInput = {\r\n ...inputToClone,\r\n label: inputToClone.label + '_copy',\r\n id: uuidv4()\r\n , formControlName: inputToClone.formControlName + '_copy'\r\n };\r\n return {\r\n ...form,\r\n slides: form.slides.map(slide => {\r\n if (slide.sectionId === inputToClone.sectionId) {\r\n return {\r\n ...slide,\r\n columns: [...slide.columns, newInput]\r\n }\r\n }\r\n return slide;\r\n })\r\n }\r\n\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to clone copy form input';\r\n throw new Error(message);\r\n\r\n }\r\n}\r\nexport const clearInputInEditFn = (form: FormInterface, inputId: string): FormInterface => {\r\n try {\r\n const input = returnAnyFormInputFromForm(form, inputId);\r\n if (!input) {\r\n return form;\r\n }\r\n const sectionId = input.sectionId;\r\n const isInnerInput = input.multipleInputInEditId;\r\n return {\r\n ...form,\r\n slides: form.slides.map(slide => {\r\n if (slide.sectionId !== sectionId) return slide;\r\n return {\r\n ...slide,\r\n columns: slide.columns.map(column => {\r\n if (isInnerInput && column.id === input.multipleInputInEditId) {\r\n return {\r\n ...column,\r\n formInputs: column.formInputs?.map(innerInput => {\r\n if (innerInput.id === inputId) {\r\n return {\r\n id: innerInput.id,\r\n sectionId: innerInput.sectionId,\r\n formControlName: innerInput.formControlName,\r\n multipleInputInEditId: innerInput.multipleInputInEditId,\r\n } as FormColumnInputs\r\n }\r\n return innerInput;\r\n }) || []\r\n }\r\n }\r\n if (column.id === inputId) {\r\n return {\r\n id: column.id,\r\n sectionId: column.sectionId,\r\n formControlName: column.formControlName,\r\n } as FormColumnInputs\r\n }\r\n return column;\r\n })\r\n }\r\n })\r\n }\r\n\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to clear input in edit';\r\n throw new Error(message);\r\n\r\n }\r\n}\r\n\r\n","\r\nimport { FormColumnInputs, FormInterface } from 'ngx-t-forms-types';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n/**\r\n * Adds a form input to the form.\r\n * \r\n * @param FormBuilder - The `TFormBuilderService` instance.\r\n */\r\nexport function addFormInputToForm(form:FormInterface,sectionId:string):FormInterface {\r\ntry {\r\n\r\nif(!form ||!sectionId){\r\n throw new Error('Form and sectionId are required');\r\n}\r\n const newInput = {\r\n\r\n id: uuidv4(),\r\n sectionId,\r\n } as FormColumnInputs\r\n\r\nreturn {\r\n ...form,\r\n slides: form.slides.map((slide) => {\r\n if (slide.sectionId === sectionId) {\r\n return {\r\n ...slide,\r\n columns: [...slide.columns, newInput]\r\n }\r\n }\r\n return slide\r\n })\r\n}\r\n\r\n\r\n} catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to add form input to form';\r\n throw new Error(message);\r\n}\r\n}\r\n\r\nexport function addMultipleFormInputFn(form:FormInterface,sectionId:string,multipleInputInEditId:string):FormInterface {\r\n try {\r\n \r\n if(!form ||!sectionId || !multipleInputInEditId){\r\n throw new Error('Form, sectionId and multipleInputInEditId are required');\r\n }\r\n const newInput = {\r\n \r\n id: uuidv4(),\r\n sectionId, \r\n multipleInputInEditId,\r\n formControlName:\"\"\r\n \r\n } as FormColumnInputs\r\n \r\n return {\r\n ...form,\r\n slides: form.slides.map((slide) => {\r\n if (slide.sectionId === sectionId) {\r\n return {\r\n ...slide,\r\n columns: [...slide.columns].map((col)=>{\r\n if(col.id === multipleInputInEditId){\r\n return {\r\n ...col,\r\n formInputs: [...(col.formInputs||[]),newInput]\r\n }\r\n }\r\n return col\r\n })\r\n }\r\n }\r\n return slide\r\n })\r\n }\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to add form input to form';\r\n throw new Error(message);\r\n }\r\n }","import { DefaultInputConfig, ElementTypes, FormInterface } from \"ngx-t-forms-types\";\r\nimport { returnAnyFormInputFromForm } from \"./findFormInput\";\r\nconst defaultInputConfig = { ...DefaultInputConfig }\r\nexport const getElementTemplate = (element: ElementTypes): any => {\r\n try {\r\n if (!element) {\r\n throw new Error(`Failed to get element template, invalid function arguments provided`);\r\n }\r\n return defaultInputConfig[element];\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to get element template';\r\n throw new Error(message);\r\n }\r\n}\r\nexport const selectInputTemplateFn = (form: FormInterface, inputId: string, element: ElementTypes): FormInterface => {\r\n try {\r\n\r\n if (!form || !inputId) {\r\n throw new Error(`Failed to apply input template, invalid function arguments provided`);\r\n }\r\n const input = returnAnyFormInputFromForm(form, inputId);\r\n console.error('input---------------------', input, inputId);\r\n if (!input) {\r\n throw new Error(`Failed to apply input template, input with id ${inputId} not found`);\r\n }\r\n const elementTemplate = JSON.parse(JSON.stringify(defaultInputConfig[element].elementTemplate))\r\n\r\n const sectionId = input.sectionId;\r\n\r\n\r\n return {\r\n ...form,\r\n slides: form.slides.map(slide => {\r\n if (slide.sectionId !== sectionId) return slide;\r\n return {\r\n ...slide,\r\n columns: slide.columns.map(column => {\r\n\r\n\r\n if (column.element === ElementTypes.MultipleInput) {\r\n\r\n return {\r\n ...column,\r\n formInputs: column.formInputs?.map(innerInput => {\r\n if (innerInput.id === inputId) {\r\n return {\r\n id: innerInput.id,\r\n formControlName: innerInput.formControlName,\r\n sectionId: innerInput.sectionId,\r\n label: innerInput.label,\r\n ...elementTemplate,\r\n multipleInputInEditId: innerInput.multipleInputInEditId\r\n }\r\n }\r\n return innerInput;\r\n }) || []\r\n }\r\n }\r\n if(column.element === ElementTypes.MscoaSelection) {\r\n return {\r\n ...column,\r\n mscoaConfig:{\r\n ...column.mscoaConfig,\r\n inputs: column.mscoaConfig.inputs.map(mscoaInput => {\r\n if(mscoaInput.id === inputId) {\r\n \r\n return {\r\n id: mscoaInput.id,\r\n formControlName: mscoaInput.formControlName,\r\n sectionId: mscoaInput.sectionId,\r\n label: mscoaInput.label,\r\n ...elementTemplate\r\n }\r\n }\r\n return mscoaInput\r\n })\r\n }\r\n }\r\n\r\n }\r\n if (column.id === inputId) {\r\n return {\r\n id: column.id,\r\n formControlName: column.formControlName,\r\n sectionId: column.sectionId,\r\n label: column.label,\r\n\r\n ...elementTemplate\r\n\r\n }\r\n }\r\n \r\n return column\r\n\r\n\r\n })\r\n }\r\n })\r\n }\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to select input template';\r\n throw new Error(message);\r\n }\r\n}","import { ElementEditorInnerSectionElementInterface, ElementTypes, FormInterface } from 'ngx-t-forms-types';\r\nimport { returnAnyFormInputFromForm } from './findFormInput';\r\nimport { assignDeepPropertyToObject } from '../../../shared';\r\nexport const elementConfigurationChangedFn = (form: FormInterface, inputId: string, configuration: ElementEditorInnerSectionElementInterface, value: any): FormInterface => {\r\n try {\r\n if (!form || !inputId || !configuration) {\r\n throw new Error(`Failed to update element configuration, invalid function arguments provided`);\r\n }\r\n const input = {\r\n ...returnAnyFormInputFromForm(form, inputId)\r\n\r\n }\r\n if (!input) {\r\n throw new Error(`Failed to update element configuration, input with id ${inputId} not found`);\r\n }\r\n \r\n if (configuration.clearOnChange) {\r\n configuration.clearOnChange.forEach((clearOnChange) => {\r\n assignDeepPropertyToObject(\r\n input,\r\n clearOnChange,\r\n undefined\r\n );\r\n });\r\n\r\n }\r\n if (configuration.deepBind) {\r\n assignDeepPropertyToObject(\r\n input,\r\n configuration.deepBind,\r\n value\r\n );\r\n }\r\n\r\n const sectionId = input.sectionId;\r\n\r\n const isInnerInput = input.multipleInputInEditId;\r\n return {\r\n ...form,\r\n slides:form.slides.map(slide => {\r\n if(slide.sectionId !== sectionId) return slide;\r\n return {\r\n ...slide,\r\n columns: slide.columns.map(column => {\r\n if(isInnerInput && column.id === input.multipleInputInEditId) {\r\n return {\r\n ...column,\r\n formInputs: column.formInputs?.map(innerInput => {\r\n if(innerInput.id === inputId) {\r\n return {\r\n ...innerInput,\r\n ...input\r\n }\r\n }\r\n return innerInput;\r\n }) || []\r\n }\r\n }\r\n if(column.id === inputId) {\r\n return {\r\n ...column,\r\n ...input\r\n }\r\n }\r\n if(column.element === ElementTypes.MscoaSelection){\r\n return {\r\n ...column,\r\n mscoaConfig: {\r\n ...column.mscoaConfig,\r\n inputs: column.mscoaConfig.inputs?.map(mscoaInput => {\r\n if(mscoaInput.id === inputId) {\r\n return {\r\n ...mscoaInput,\r\n ...input\r\n }\r\n }\r\n return mscoaInput;\r\n }) || []\r\n }\r\n }\r\n }\r\n return column;\r\n })\r\n }\r\n })\r\n }\r\n\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Error updating element configuration';\r\n console.error(message);\r\n throw new Error(message);\r\n\r\n }\r\n}","/**\r\n * Converts a string to camel case.\r\n * @param str - The string to be camelized.\r\n * @returns The camelized string.\r\n */\r\nexport function camelize(str: string) {\r\n if (!!str) {\r\n return str\r\n .replace(/(?:^\\w|[A-Z]|\\b\\w)/g, function (word: string, index: number) {\r\n return index === 0 ? word.toLowerCase() : word.toUpperCase();\r\n })\r\n .replace(/\\s+/g, '');\r\n } else {\r\n return;\r\n }\r\n }\r\n ","import { AllFormInputPrimaryKeys, BlurHandleTypes, ElementEditorInnerSectionElementInterface, FormInterface } from \"ngx-t-forms-types\";\r\nimport { returnAnyFormInputFromForm } from \"./findFormInput\";\r\nimport { returnDeepProperty } from \"../../../shared/functions/getDeepObject\";\r\nimport { elementConfigurationChangedFn } from \"./elementConfigurationChanged\";\r\nimport { camelize } from \"../../../shared/functions/camelize\";\r\n\r\nexport const elementBlurFn = (form: FormInterface, inputId: string, event: any, element: ElementEditorInnerSectionElementInterface): FormInterface => {\r\n try {\r\n if (!form || !inputId || !element) {\r\n return form;\r\n }\r\n const { blurHandle } = element\r\n if (!blurHandle) {\r\n return form;\r\n }\r\n const input = {\r\n ...returnAnyFormInputFromForm(form, inputId)\r\n }\r\n if (!input) {\r\n throw new Error(`Failed to update element configuration, input with id ${inputId} not found`);\r\n }\r\n\r\n if (blurHandle === BlurHandleTypes.CleanFormControl) {\r\n let v\r\n\r\n const formControlName = returnDeepProperty(input, element.deepBind) || ''\r\n const dotNotationRegex = /^[^.]+(\\.[^.]+)+$/;\r\n const isDotNotation = dotNotationRegex.test(formControlName);\r\n if(!!isDotNotation){\r\n return form\r\n }\r\n v = camelize(formControlName)?.replace(\r\n /[^a-zA-Z]/g,\r\n ''\r\n );\r\n return elementConfigurationChangedFn(form,inputId,element, v)\r\n }\r\n\r\n if (blurHandle === BlurHandleTypes.PrePopulateFormControl) {\r\n\r\n let v\r\n const newForm= elementConfigurationChangedFn(form,inputId,element,event.target.value)\r\n if (!!input?.id && !!input.formControlName) return newForm;\r\n\r\n v = camelize(input?.label || '')?.replace(\r\n /[^a-zA-Z]/g,\r\n ''\r\n );\r\n return elementConfigurationChangedFn(newForm,inputId, { deepBind: [AllFormInputPrimaryKeys.FormControlName] } as any,v)\r\n\r\n }\r\n return form;\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Error on element blur';\r\n console.error(message);\r\n throw new Error(message);\r\n\r\n }\r\n\r\n}","import { FormColumnInputs, FormInterface } from \"ngx-t-forms-types\";\r\nimport { v4 as uuidv4 } from 'uuid';\r\nexport function addScoaExtensionInput(form: FormInterface, sectionId: string, scoaInputId: string): FormInterface {\r\n try {\r\n if (!form || !sectionId || !scoaInputId) {\r\n throw new Error('Form, sectionId and scoaExtensionInputInEditId are required');\r\n }\r\n const newInput = {\r\n id: uuidv4(),\r\n sectionId,\r\n \r\n } as FormColumnInputs;\r\n return {\r\n ...form,\r\n slides: form.slides.map((slide) => {\r\n if (slide.sectionId === sectionId) {\r\n return {\r\n ...slide,\r\n columns: [...slide.columns].map((col) => {\r\n if (col.id === scoaInputId) {\r\n return {\r\n ...col,\r\n mscoaConfig:{\r\n ...col.mscoaConfig,\r\n inputs:[...col.mscoaConfig.inputs,newInput as any]\r\n }\r\n };\r\n }\r\n return col;\r\n })\r\n };\r\n }\r\n return slide;\r\n })\r\n };\r\n }\r\n catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to add scoa extension input to form';\r\n throw new Error(message);\r\n }\r\n}","import { of, take, tap } from \"rxjs\";\r\nimport { FormsStoreService } from \"./forms-store.service\";\r\nimport { CdkDragDrop } from \"@angular/cdk/drag-drop\";\r\nimport { DatabaseFormInterface, FormColumnInputs, } from 'ngx-t-forms-types';;\r\nimport { APIDataFetchingConfigurationInterface, ElementTypes, IMultipleInputCal } from 'ngx-t-forms-types';;\r\n\r\nimport { FormInterface } from 'ngx-t-forms-types';;\r\n\r\nimport { ElementEditorInnerSectionElementInterface } from 'ngx-t-forms-types';;\r\nimport { assignDeepPropertyToObject } from \"../../../shared\";\r\n\r\nimport { sectionDrop } from \"../../../services/core/t-form-builder/functions/sectionDrop\";\r\nimport { moveFormInput, moveMultipleInputInput } from \"../../../services/core/t-form-builder/functions/moveFormInput\";\r\nimport { addNewSection } from \"../../../services/core/t-form-builder/functions/addNewSection\";\r\nimport { stepTitleChangeStepFn } from \"../../../services/core/t-form-builder/functions/stepTitleChangeStep\";\r\nimport { removeItem } from \"../../../services/core/t-form-builder/functions/removeItem\";\r\nimport { multipleInputToggleLabelFn } from \"../../../services/core/t-form-builder/functions/multipleInputToggleLabel\";\r\nimport { addMultipleInputFunction } from \"../../../services/core/t-form-builder/functions/addMultipleInputFunction\";\r\nimport { deleteActiveSection } from \"../../../services/core/t-form-builder/functions/deleteSection\";\r\nimport { moveInputToSectionFn } from \"../../../services/core/t-form-builder/functions/moveInputToDiffSection\";\r\nimport { clearInputInEditFn, cloneCopyFormInputFn } from \"../functions/cloneCopyFormInput\";\r\nimport { addFormInputToForm, addMultipleFormInputFn } from \"../../../services/core/t-form-builder/functions/addFormInputToForm\";\r\nimport { selectInputTemplateFn } from \"../functions/selectInputTemplate\";\r\nimport { elementConfigurationChangedFn } from \"../functions/elementConfigurationChanged\";\r\nimport { elementBlurFn } from \"../functions/elementBlur\";\r\nimport { FormControl } from '@angular/forms';\r\nimport { HintType } from \"../../../shared/functions/textIconsForUserHints\";\r\nimport { addScoaExtensionInput } from \"../../../services/core/t-form-builder/functions/addScoaExtensionInput\";\r\n\r\nexport function formBuilderStoreActions(store: FormsStoreService) {\r\n\r\n\r\n const form$ = store.selectors.selectFormInEdit$\r\n const handelSaveForm = () => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return;\r\n const _id = form?._id\r\n if (_id) {\r\n store.effects.updateForm$(of({ ...form.form, formId: _id }))\r\n store.showMessage('Form updated successfully', HintType.SUCCESS)\r\n } else {\r\n store.effects.createForm$(of(form.form))\r\n store.showMessage('Form saved successfully', HintType.SUCCESS)\r\n }\r\n })\r\n ).subscribe()\r\n }\r\n const setFormTitle = (title: string) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return;\r\n const newForm = {\r\n ...form.form,\r\n formTitle: title\r\n\r\n } as FormInterface\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n\r\n\r\n\r\n })\r\n ).subscribe()\r\n }\r\n const handleSectionDragDrop = (event: CdkDragDrop<any, any, any>) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return;\r\n const newForm = sectionDrop(event, form.form)\r\n if (!newForm) return\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n\r\n\r\n })\r\n ).subscribe()\r\n }\r\n const handleInputDragDrop = (event: CdkDragDrop<any, any, any>, sectionId: string) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return;\r\n const newForm = moveFormInput(event, sectionId, form.form)\r\n if (!newForm) return\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n\r\n\r\n })\r\n ).subscribe()\r\n }\r\n const handleAddSection = () => {\r\n form$.pipe(\r\n take(1),\r\n tap(async (form) => {\r\n if (!form) return;\r\n const newForm = addNewSection(form.form)\r\n if (!newForm) return\r\n const newSection = newForm.slides[newForm.slides.length - 1]?.sectionId\r\n store.sectionPlaceholder[newSection!] = new FormControl()\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n\r\n\r\n store.showMessage('Section added, proceed to add section inputs', HintType.DOCUMENT)\r\n\r\n })\r\n ).subscribe()\r\n }\r\n const stepTitleChangeStep = (sectionId: string, title: string) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return;\r\n const newForm = stepTitleChangeStepFn(sectionId, title, form.form)\r\n if (!newForm) return\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n\r\n })\r\n ).subscribe()\r\n }\r\n\r\n const formDeleteInput = (item: FormColumnInputs) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return\r\n const newForm = removeItem(item, form.form)\r\n\r\n if (!newForm) return\r\n\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n store.showMessage('Input deleted. Add new inputs.', HintType.CRITICAL)\r\n\r\n })).subscribe()\r\n }\r\n const multipleInputToggleLabel = (item: FormColumnInputs) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return\r\n const newForm = multipleInputToggleLabelFn(item, form.form)\r\n if (!newForm) return\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n\r\n })).subscribe()\r\n }\r\n const editInput = (item: FormColumnInputs) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n\r\n if (!form) return\r\n\r\n\r\n store.actions.setInputInEditId(of({\r\n // Because the originalId is the id of the input before it was cloned \r\n inputInEdit: item.originalId || item.id\r\n }))\r\n\r\n store.showMessage('Configure input settings in the edit panel', HintType.SUCCESS)\r\n\r\n })).subscribe()\r\n }\r\n const addMultipleInputValueCalculationFunction = (item: IMultipleInputCal, multipleInputId: string | undefined) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return\r\n const newForm = addMultipleInputFunction(item, multipleInputId, form.form)\r\n if (!newForm) return\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n\r\n\r\n })).subscribe()\r\n }\r\n const formDeleteSection = (sectionId: string) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return\r\n const newForm = deleteActiveSection(form.form, sectionId)\r\n if (!newForm) return\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n delete store.sectionPlaceholder[sectionId]\r\n store.refreshExternalFormStates?.(newForm)\r\n store.showMessage('Section deleted', HintType.CRITICAL)\r\n\r\n })).subscribe()\r\n }\r\n\r\n\r\n const moveInputToSection = (inputId: string, targetSectionId: string) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return\r\n const newForm = moveInputToSectionFn(form.form, inputId, targetSectionId)\r\n if (!newForm) return\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n\r\n })).subscribe()\r\n }\r\n const reorderMultipleInputItems = (event: CdkDragDrop<FormColumnInputs[], any, any>, multipleInputId: string) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return\r\n const newForm = moveMultipleInputInput(multipleInputId, event, form.form)\r\n if (!newForm) return\r\n\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n })).subscribe()\r\n }\r\n const cloneCopyFormInput = (inputId: string) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return\r\n const newForm = cloneCopyFormInputFn(form.form, inputId)\r\n if (!newForm) return\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n store.showMessage('Input cloned, proceed to configure the new input', HintType.SUCCESS)\r\n\r\n })).subscribe()\r\n }\r\n\r\n const saveInput = (sectionId: string) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return\r\n const newForm = addFormInputToForm(form.form, sectionId)\r\n if (!newForm) return\r\n\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n store.showMessage('Input added! Complete the configuration below.', HintType.CRITICAL)\r\n\r\n })).subscribe()\r\n }\r\n const addMultipleFormInput = (sectionId: string, multipleInputInEditId: string) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return\r\n const newForm = addMultipleFormInputFn(form.form, sectionId, multipleInputInEditId)\r\n if (!newForm) return\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n\r\n })).subscribe(\r\n )\r\n\r\n }\r\n const addInputToScoaSelection = (sectionId: string, scoaInputId: string) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return\r\n const newForm = addScoaExtensionInput(form.form, sectionId, scoaInputId)\r\n if (!newForm) return\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n\r\n })).subscribe()\r\n }\r\n const applyFormTemplate = (form: FormInterface) => {\r\n form$.pipe(\r\n take(1),\r\n tap(() => {\r\n\r\n if (!form) return;\r\n const newForm = {\r\n systemDefault: false,\r\n defaultDepartment: \"\",\r\n form: {\r\n\r\n formId: undefined,\r\n formTitle: `${form?.formTitle} - Copy`,\r\n slides: [...[], ...form.slides],\r\n\r\n },\r\n } as DatabaseFormInterface\r\n\r\n\r\n\r\n store.actions.loadFormSuccess(of({\r\n form: newForm\r\n }))\r\n // Refresh external form states \r\n store.refreshExternalFormStates?.(form)\r\n return\r\n })).subscribe()\r\n }\r\n const selectInputTemplate = (inputId: string, element: ElementTypes) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return;\r\n const newForm = selectInputTemplateFn(form.form, inputId, element)\r\n if (!newForm) return\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n\r\n })).subscribe()\r\n }\r\n const formInputChange = (ele: ElementEditorInnerSectionElementInterface, value: any) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n //REVIEW - This method changes inputs by changing the form object directly. This wont work for nested inputs\r\n\r\n if (!form) return;\r\n if (!form) return\r\n const applyTo: FormInterface = { ...form?.form }\r\n if (ele.clearOnChange) {\r\n ele.clearOnChange.forEach((clear: string[]) => {\r\n assignDeepPropertyToObject(\r\n applyTo,\r\n clear,\r\n undefined\r\n );\r\n })\r\n }\r\n if (ele.deepBind) {\r\n assignDeepPropertyToObject(\r\n applyTo,\r\n ele.deepBind,\r\n value\r\n );\r\n }\r\n const newForm = new Object({ ...applyTo }) as any\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n\r\n })).subscribe()\r\n }\r\n const saveSubmitApi = (dataPlaceholder: undefined | {\r\n data: APIDataFetchingConfigurationInterface\r\n }, keyInEdit: 'submissionAPI' | 'canSubmitAPI' | undefined) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return\r\n const formClone: FormInterface = {\r\n ...form?.form,\r\n submissionHandle: {\r\n ...form?.form?.submissionHandle\r\n }\r\n } as any\r\n\r\n const old = (formClone?.submissionHandle?.[keyInEdit || 'submissionAPI'] || []) as APIDataFetchingConfigurationInterface[]\r\n // Check if API with same _id already exists\r\n const isDuplicate = old.some(api =>\r\n api._id === dataPlaceholder?.data._id\r\n\r\n );\r\n if (isDuplicate) {\r\n // Update existing API instead of adding new one\r\n const newApis = old.map(api =>\r\n api._id === dataPlaceholder?.data._id\r\n ? dataPlaceholder?.data\r\n : api\r\n\r\n );\r\n\r\n assignDeepPropertyToObject(\r\n formClone,\r\n ['submissionHandle', keyInEdit || 'submissionAPI'],\r\n newApis\r\n );\r\n } else {\r\n // Add new API\r\n const newApis = [...old, dataPlaceholder?.data];\r\n assignDeepPropertyToObject(\r\n formClone,\r\n ['submissionHandle', keyInEdit || 'submissionAPI'],\r\n newApis\r\n );\r\n }\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: formClone }))\r\n store.refreshExternalFormStates?.(formClone)\r\n store.showMessage(\"API configuration saved. Test your integration when ready\", HintType.SUCCESS)\r\n\r\n })).subscribe()\r\n }\r\n const removeSubmissionApi = (api: APIDataFetchingConfigurationInterface, keyInEdit: 'submissionAPI' | 'canSubmitAPI' | undefined) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return\r\n const formClone = form?.form\r\n if (!form) return;\r\n const key = keyInEdit || 'submissionAPI'\r\n const old = (formClone?.submissionHandle[key] || []) as any[]\r\n const newApis = old.filter((a) => a._id !== api._id)\r\n assignDeepPropertyToObject(\r\n formClone,\r\n ['submissionHandle', key],\r\n newApis\r\n );\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: formClone }))\r\n store.refreshExternalFormStates?.(formClone)\r\n store.showMessage(\"API configuration removed. Update your integrations accordingly.\", HintType.CRITICAL)\r\n })).subscribe()\r\n\r\n }\r\n const elementConfigurationChanged = (\r\n inputId: string,\r\n value: any,\r\n ele: ElementEditorInnerSectionElementInterface\r\n ) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return\r\n const newForm = elementConfigurationChangedFn(form.form, inputId, ele, value)\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n\r\n })).subscribe()\r\n }\r\n const elementBlur = (inputId: string, event: any, element: ElementEditorInnerSectionElementInterface) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return\r\n const { blurHandle } = element\r\n if (!blurHandle) {\r\n return\r\n }\r\n const newForm = elementBlurFn(form.form, inputId, event, element)\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n\r\n })).subscribe()\r\n }\r\n const clearInputInEdit = (inputId: string) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return\r\n const newForm = clearInputInEditFn(form.form, inputId)\r\n if (!newForm) return\r\n store.actions.handleEditorUpdateFormInEdit(of({ form: newForm }))\r\n store.refreshExternalFormStates?.(newForm)\r\n store.showMessage(\"Input configuration cleared. Start fresh with new settings\", HintType.CRITICAL)\r\n\r\n })).subscribe()\r\n }\r\n return {\r\n handelSaveForm,\r\n setFormTitle,\r\n handleSectionDragDrop,\r\n handleInputDragDrop,\r\n handleAddSection,\r\n stepTitleChangeStep,\r\n formDeleteInput,\r\n multipleInputToggleLabel,\r\n editInput,\r\n addMultipleInputValueCalculationFunction,\r\n formDeleteSection,\r\n moveInputToSection,\r\n reorderMultipleInputItems,\r\n cloneCopyFormInput,\r\n saveInput,\r\n applyFormTemplate,\r\n selectInputTemplate,\r\n formInputChange,\r\n saveSubmitApi,\r\n removeSubmissionApi,\r\n elementConfigurationChanged,\r\n elementBlur,\r\n addMultipleFormInput,\r\n clearInputInEdit,\r\n addInputToScoaSelection,\r\n \r\n }\r\n\r\n\r\n}","import { inject, Injectable } from '@angular/core';\r\nimport { ComponentStore } from '@ngrx/component-store';\r\nimport { FormListSection, FormsStoreSelectorsInterface, IFormsInitStateInterface, InClassFormUtilsInterface } from\"ngx-t-forms-types\";;\r\nimport { formsStoreSelectors } from './Forms-selectors';\r\nimport { formsStoreActions } from './Forms-Actions';\r\nimport { Observable } from 'rxjs';\r\nimport { DatabaseFormInterface, FormInterface, NgxTFormsConfig } from\"ngx-t-forms-types\";;\r\n\r\nimport { formsStoreEffects } from './Forms-Effects';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { NGX_T_FORMS_CONFIG_TOKEN } from '../../../injection-tokens';\r\nimport { IWorkflowOption } from \"ngx-t-forms-types\";\r\nimport { IGetTreeResponse } from \"ngx-t-forms-types\";\r\nimport { formsFormBuilderStoreSelectors } from './Form-selectors-FormBuilder';\r\n;\r\nimport { FileUploadFn } from '../functions/formHttpSubmissions';\r\nimport { IUserSignature } from \"ngx-t-forms-types\";\r\nimport { PointGroup } from 'signature_pad';\r\nimport { formBuilderStoreActions } from './Form-actions-formBuilder';\r\nimport { AbstractControl, FormControl } from '@angular/forms';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { HintType, textIconsForUserHints } from '../../../shared/functions/textIconsForUserHints';\r\n\r\n\r\nexport interface ActionButton{\r\n \r\n icon:string,\r\n color:string,\r\n onClick:()=>void\r\n \r\n}\r\nexport interface IStoreFunctions {\r\n [x: string]: any;\r\n formsCloseButton:ActionButton\r\n formBuilderCloseButton: ActionButton\r\n createForm: (form: FormInterface) => Observable<DatabaseFormInterface>;\r\n updateForm: (form: FormInterface) => Observable<DatabaseFormInterface>;\r\n archiveForm: (formId: string) => Observable<{ message: string }>;\r\n unArchiveForm: (formId: string) => Observable<{ message: string }>;\r\n deleteForm: (formId: string) => Observable<{ message: string }>;\r\n getForm: (formId: string) => Observable<DatabaseFormInterface | null>;\r\n loadForms: () => Observable<DatabaseFormInterface[]>,\r\n loadArchivedForms: () => Observable<DatabaseFormInterface[]>,\r\n toastSuccess: (message: string) => void\r\n toastError: (message: string) => void,\r\n workflows:()=>Observable<IWorkflowOption[]>,\r\n getScoaTree:()=> Observable<IGetTreeResponse>,\r\n getSCOAAccount(SCOAAccount: string): Observable<any>\r\n editForm: (formId: string) => void;\r\n addNewForm: () => void;\r\n saveFormData: (formId:string,data: { [key: string]: any }) => Observable<void>;\r\n setListSection: (section: FormListSection) => void;\r\n runMongoDbPipeLine: (pipeline: any, workflowId: string) => Observable<{results:any,message:string}>;\r\n fileUpload:FileUploadFn,\r\n formSubmittedSuccessfully:(formId:string)=>void,\r\n getUserSignature:()=>Observable<IUserSignature>;\r\n saveUserSignature:(signature:PointGroup[])=>Observable<void>;\r\n \r\n \r\n}\r\nexport const initialUIState: IFormsInitStateInterface = {\r\n initialFormValues: null,\r\n\r\n forms: [],\r\n editForm: null,\r\n formBuilderBusy: false,\r\n loadingForm: false,\r\n loadingForms: false,\r\n formId: null,\r\n loadFormsError: null,\r\n errors: null,\r\n listSection: FormListSection.ALL,\r\n routerState: null,\r\n submittingForm: false,\r\n inputInEdit: null\r\n};\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class FormsStoreService extends ComponentStore<IFormsInitStateInterface> {\r\n\r\n httpClient = inject(HttpClient)\r\n snackBar = inject(MatSnackBar)\r\n sectionPlaceholder:Record<string,AbstractControl> = {}\r\n public readonly NGX_T_FORMS_CONFIG!:NgxTFormsConfig\r\n constructor() {\r\n super(initialUIState);\r\n this.NGX_T_FORMS_CONFIG = inject(NGX_T_FORMS_CONFIG_TOKEN)\r\n //if environment is development, setup dev tools\r\n this.setupDevTools();\r\n }\r\n utils:InClassFormUtilsInterface ={\r\n httpGetDataFunction:(url: string,options:any)=>this.NGX_T_FORMS_CONFIG.formBuilder.httpGetDataFunction(url,options),\r\n httpPostDataFunction:(url: string, data: any,options:any)=>this.NGX_T_FORMS_CONFIG.formBuilder.httpPostDataFunction(url,data,options),\r\n submitForm: () => new Observable<void>(subscriber => { subscriber.complete(); }),\r\n setSubmissionStatusValue : (status: any) => { },\r\n saveFormData: function (): Observable<void> {\r\n throw new Error('Function not implemented.');\r\n },\r\n runPipeLine: function (pipeline: any, workflowId: string): Observable<{ results: any; message: string; }> {\r\n throw new Error('Function not implemented.');\r\n },\r\n fileUpload: function (file: string, fileName: string, fileType: string): Observable<{ url: string; }> {\r\n throw new Error('Function not implemented.');\r\n },\r\n getUserSignature: function (): Observable<IUserSignature> {\r\n throw new Error('Function not implemented.');\r\n },\r\n saveUserSignature: function (signature: PointGroup[]): Observable<void> {\r\n throw new Error('Function not implemented.');\r\n }\r\n }\r\n showMessage(message: string, type:HintType) {\r\n this.snackBar.open(textIconsForUserHints(message,type), 'close', {\r\n duration: 2000,\r\n panelClass: type\r\n });\r\n\r\n }\r\n private setupDevTools() {\r\n this.state$.subscribe(state => {\r\n console.log('FormsStoreService state:', state);\r\n });\r\n }\r\n get resourceFunctions(): IStoreFunctions | null{\r\n return this.NGX_T_FORMS_CONFIG.formBuilder\r\n }\r\n readonly selectors:FormsStoreSelectorsInterface = formsStoreSelectors(this)\r\n readonly formBuilderSelectors = formsFormBuilderStoreSelectors(this)\r\n readonly actions = formsStoreActions(this)\r\n readonly actionsFormBuilder = formBuilderStoreActions(this)\r\n readonly effects = formsStoreEffects(this)\r\n refreshExternalFormStates?: (form: FormInterface) => void\r\n registerFormChangeFn(fn: (form: FormInterface) => void) {\r\n \r\n this.refreshExternalFormStates = fn\r\n }\r\n createFormPlaceHolderFormGroups(form: FormInterface) {\r\n form.slides.forEach(slide=>{\r\n this.sectionPlaceholder[slide.sectionId]= new FormControl()\r\n })\r\n }\r\n}\r\n","import { Component, inject, Input, OnDestroy, OnInit } from '@angular/core';\r\n\r\nimport { map,of,Subscription,take,} from 'rxjs';\r\nimport { CommonModule, } from '@angular/common';\r\nimport { FormsStoreService } from '../forms/store/forms-store.service';\r\nimport { MatModulesModule } from '../../shared/modules/mat-modules.module';\r\nimport { FormsBuilderMenuComponent } from './elements/forms-builder-menu/forms-builder-menu.component';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { InputEditorComponent } from './elements/input-editor/input-editor.component';\r\nimport { FormSectionStepperComponent } from './elements/form-section-stepper/form-section-stepper.component';\r\nimport { MissingFormConfigsComponent } from './elements/missing-form-configs/missing-form-configs.component';\r\nimport { ActivatedRoute, ActivatedRouteSnapshot, RouterModule } from '@angular/router';\r\nimport _ from 'lodash';\r\nimport { NGX_T_FORMS_CONFIG_TOKEN } from '../../injection-tokens';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\n\r\n@Component({\r\n selector: 'app-form-builder',\r\n templateUrl: './form-builder.component.html',\r\n styleUrl: './form-builder.component.scss',\r\n standalone: true,\r\n imports: [CommonModule,\r\n MatModulesModule,\r\n FormsBuilderMenuComponent,\r\n InputEditorComponent,\r\n FormSectionStepperComponent,\r\n FormsModule,\r\n MissingFormConfigsComponent, \r\n RouterModule],\r\n providers: [\r\n FormsStoreService\r\n ]\r\n})\r\n\r\n\r\nexport class FormBuilderComponent implements OnDestroy, OnInit {\r\n subscription$ = new Subscription()\r\n private store = inject(FormsStoreService)\r\n private route = inject(ActivatedRoute)\r\n\r\n selectLoadingForm = toSignal(this.store.selectors.selectLoadingForm$,{\r\n initialValue:false\r\n })\r\n selectFormBuilderIsBusy = toSignal(this.store.selectors.selectFormBuilderIsBusy$,{\r\n initialValue:false\r\n })\r\n selectFormUpdated = toSignal(\r\n this.store.selectors.selectFormUpdated$,\r\n {\r\n initialValue: null\r\n }\r\n )\r\n canSaveForm = toSignal(\r\n this.store.formBuilderSelectors.canSaveForm$,\r\n {\r\n initialValue: false\r\n }\r\n )\r\n isNewForm = toSignal(\r\n this.store.formBuilderSelectors.isNewForm$,\r\n {\r\n initialValue: false\r\n }\r\n )\r\n @Input() set formId(value: string) {\r\n this.store.effects.loadForm$(of(value))\r\n }\r\n selectHasFormId = toSignal(this.store.selectors.selectFormId$.pipe(map((formId) => !!formId)),{\r\n initialValue: false\r\n })\r\n hasMissingConfigs = toSignal(this.store.formBuilderSelectors.hasMissingConfigs$,{ \r\n initialValue: false\r\n })\r\n \r\n elementEditorOpen = toSignal( this.store.formBuilderSelectors.inputInEdit$.pipe(\r\n map(inputInEdit => !!inputInEdit)\r\n ),{\r\n initialValue: null\r\n })\r\n\r\n constructor(\r\n\r\n ) {\r\n\r\n }\r\n readonly NGX_T_FORMS_CONFIG = inject(NGX_T_FORMS_CONFIG_TOKEN)\r\n readonly closeButton = this.NGX_T_FORMS_CONFIG?.formBuilder?.formBuilderCloseButton\r\n ngOnInit(): void {\r\n this.subscription$.add(\r\n this.route.data.subscribe(data => {\r\n const routeState: ActivatedRouteSnapshot = data['route'];\r\n const params = routeState.params\r\n this.store.actions.handleRouterStateChange(of(data['route']))\r\n this.store.effects.loadForm$(of(params['formId']))\r\n // Use formId here\r\n })\r\n )\r\n\r\n }\r\n ngOnDestroy(): void {\r\n this.subscription$.unsubscribe()\r\n\r\n }\r\n saveForm = () => this.store.actionsFormBuilder.handelSaveForm()\r\n\r\n\r\n _title = ''\r\n set titleValue(value: string) {\r\n this.store.actionsFormBuilder.setFormTitle(value)\r\n this._title = value\r\n }\r\n initiatedTitle = false\r\n get titleValue(): string | undefined {\r\n if (this._title === '' && !this.initiatedTitle) {\r\n this.store.formBuilderSelectors.selectFormTitle$.pipe(\r\n take(1),\r\n ).subscribe((title) => {\r\n this._title = title || ''\r\n this.initiatedTitle = true\r\n })\r\n\r\n }\r\n return this._title\r\n }\r\n\r\n}\r\n","<header>\r\n <mat-toolbar color=\"primary\">\r\n @if (closeButton) {\r\n <button mat-icon-button [style.color]=\"closeButton.color\" (click)=\"closeButton.onClick()\">\r\n <mat-icon>{{closeButton.icon}}</mat-icon>\r\n </button>\r\n }\r\n\r\n <!-- Navigation group -->\r\n <div class=\"nav-group\">\r\n <button mat-button routerLink=\"/\">Forms</button>\r\n <mat-icon>navigate_next</mat-icon>\r\n </div>\r\n\r\n <!-- Title input with optimized binding -->\r\n @if (selectHasFormId()) {\r\n <input [(ngModel)]=\"titleValue\" class=\"section-title-input\" placeholder=\"Enter Form Title\">\r\n }\r\n\r\n <span class=\"spacer\"></span>\r\n\r\n @defer (on viewport) {\r\n <app-forms-builder-menu />\r\n } @placeholder {\r\n <div style=\"padding: 50px;display:flex;justify-content:center;align-items:center; text-align: center;\">\r\n <mat-spinner diameter=\"20\" />\r\n </div>\r\n\r\n }\r\n\r\n <span class=\"divider\">|</span>\r\n\r\n <!-- Save/Update button with optimized reactive state -->\r\n <button mat-raised-button color=\"accent\" class=\"save-button\" [disabled]=\"!(canSaveForm())\"\r\n (click)=\"saveForm()\">\r\n\r\n <mat-icon>\r\n {{(isNewForm()) ? 'save' : 'update'}}\r\n </mat-icon>\r\n\r\n @if (selectFormBuilderIsBusy()) {\r\n {{(isNewForm()) ? '..Saving new form' : '..Updating Form'}}\r\n } @else {\r\n {{(isNewForm()) ? 'Save' : 'Update'}}\r\n }\r\n </button>\r\n\r\n <!-- Updated time info -->\r\n @if (!(isNewForm())) {\r\n <div class=\"updated-time\">\r\n <mat-icon>update</mat-icon>\r\n <span>Updated {{ selectFormUpdated() }}</span>\r\n </div>\r\n }\r\n </mat-toolbar>\r\n</header>\r\n\r\n<!-- Main content with optimized loading -->\r\n@defer (on viewport) {\r\n<div class=\"container\">\r\n <div class=\"middle\">\r\n <br>\r\n @if (selectLoadingForm()) {\r\n <div class=\"loading-container\">\r\n <mat-spinner />\r\n </div>\r\n } @else {\r\n <app-form-section-stepper />\r\n }\r\n <br>\r\n @if ((hasMissingConfigs()) && !(selectLoadingForm())) {\r\n <app-missing-form-configs />\r\n }\r\n </div>\r\n\r\n @if (elementEditorOpen()) {\r\n <app-input-editor style=\"max-width:480px;height:calc(100vh - 64px);z-index:1\" cdkDrag cdkDragBoundary=\"container\" class=\"middle editor-container\" />\r\n }\r\n <!-- Missing fields section -->`\r\n\r\n\r\n</div>\r\n}@placeholder {\r\n <div style=\"padding: 50px;display:flex;justify-content:center;align-items:center; text-align: center;\">\r\n <mat-spinner diameter=\"50\" />\r\n </div>\r\n}","\r\n\r\nexport function getAvatar(name:string):string{\r\n return `https://ui-avatars.com/api/?font-size=0.36&bold=true&name=${name}&background=random`\r\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'daysAgo',\r\n standalone: true,\r\n})\r\nexport class DaysAgoPipe implements PipeTransform {\r\n transform(value: any, args?: any): any {\r\n if (value) {\r\n const seconds = Math.floor((+new Date() - +new Date(value)) / 1000);\r\n if (seconds < 15)\r\n // less than 30 seconds ago will show as 'Just now'\r\n return 'Just now';\r\n const intervals: any = {\r\n year: 31536000,\r\n month: 2592000,\r\n week: 604800,\r\n day: 86400,\r\n hr: 3600,\r\n min: 60,\r\n sec: 1,\r\n };\r\n let counter;\r\n for (const i in intervals) {\r\n counter = Math.floor(seconds / intervals[i]);\r\n if (counter > 0)\r\n if (counter === 1) {\r\n return counter + ' ' + i + ' ago'; // singular (1 day ago)\r\n } else {\r\n return counter + ' ' + i + 's ago'; // plural (2 days ago)\r\n }\r\n }\r\n }\r\n return value;\r\n }\r\n}\r\n\r\n\r\n\r\n@Pipe({\r\n name: 'unCamelCase',\r\n standalone: true,\r\n})\r\nexport class ConvertCamelCasePipe implements PipeTransform {\r\n transform(value: any, args?: any): any {\r\n if (value) {\r\n return value.replace(/([a-z])([A-Z])/g, '$1 $2').replace(/([A-Z])([A-Z][a-z])/g, '$1 $2');\r\n }\r\n return value;\r\n }\r\n}\r\n","import { Component, inject, Inject, OnDestroy, OnInit } from '@angular/core';\r\n\r\n\r\n\r\nimport { CommonModule, DOCUMENT } from '@angular/common';\r\nimport { FormsStoreService } from './store/forms-store.service';\r\nimport { getAvatar } from '../../shared/functions/getAvatar';\r\nimport { MatModulesModule } from '../../shared/modules/mat-modules.module';\r\nimport { ActivatedRoute, ActivatedRouteSnapshot, Router, RouterModule } from '@angular/router';\r\nimport { FormListSection, LocalFormStateSelectorInterface } from\"ngx-t-forms-types\";\r\nimport { Observable, of, Subscription, } from 'rxjs';\r\nimport { NGX_T_FORMS_CONFIG_TOKEN } from '../../injection-tokens';\r\nimport { DaysAgoPipe } from '../../shared/pipes/date/days-ago.pipe';\r\n\r\n\r\n@Component({\r\n selector: 'app-forms',\r\n templateUrl: './forms.component.html',\r\n styleUrl: './forms.component.scss',\r\n standalone: true,\r\n imports: [CommonModule, MatModulesModule,DaysAgoPipe, RouterModule],\r\n providers: [\r\n FormsStoreService,\r\n\r\n ]\r\n})\r\nexport class FormsComponent implements OnInit,OnDestroy{\r\n subscription$ = new Subscription()\r\n selectFormsList$:Observable<LocalFormStateSelectorInterface[]> = this.store.selectors.selectForms$\r\n selectLoadingForms$ = this.store.selectors.selectLoadingForms$\r\n selectErrors$ :Observable<any>= this.store.selectors.selectErrors$\r\n selectFormListSection$ = this.store.selectors.selectFormListSection$\r\n NGX_T_FORMS_CONFIG = inject(NGX_T_FORMS_CONFIG_TOKEN)\r\n closeButton = this.NGX_T_FORMS_CONFIG?.formBuilder?.formsCloseButton\r\n constructor( private route: ActivatedRoute,private store: FormsStoreService, @Inject(DOCUMENT) private document: Document) {\r\n\r\n\r\n }\r\n ngOnDestroy(): void {\r\n this.subscription$.unsubscribe()\r\n }\r\n get formListSections() {\r\n return Object.values(FormListSection).map((section) => ({ value: section, label: section.charAt(0) + section.slice(1).toLowerCase() }))\r\n }\r\n viewportWidth = 0;\r\n ngOnInit(): void {\r\n this.subscription$.add(\r\n this.route.data.subscribe(data => {\r\n const routeState: ActivatedRouteSnapshot = data['route'];\r\n\r\n const params = routeState.queryParams\r\n this.store.actions.handleRouterStateChange(of(data['route']))\r\n this.store.effects.setListSection$(of(params['section'] as FormListSection));\r\n\r\n // Use formId here\r\n })\r\n )\r\n this.viewportWidth = this.document.documentElement.clientWidth;\r\n \r\n }\r\n\r\n labels = [\r\n {\r\n label: 'Form Name',\r\n formControlName: '',\r\n\r\n }\r\n ]\r\n activeForm: string | null = null;\r\n getCols() {\r\n if (this.viewportWidth < 576 || this.viewportWidth === 576) {\r\n return 1\r\n }\r\n if (this.viewportWidth > 576 && this.viewportWidth < 768 || this.viewportWidth === 768) {\r\n return 2\r\n }\r\n if (this.viewportWidth > 768 && this.viewportWidth < 992) {\r\n return 3\r\n }\r\n if (this.viewportWidth > 992) {\r\n return 4\r\n }\r\n return 1\r\n }\r\n getFormAvatar(formTitle: string) {\r\n return getAvatar(formTitle)\r\n }\r\n async archive(form: LocalFormStateSelectorInterface, event: Event): Promise<void> {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const userConfirmed = confirm(\r\n `WARNING: You are about to archive \"${form.formTitle}\". Press Cancel to stop, or OK to archive.`\r\n );\r\n\r\n if (userConfirmed) {\r\n this.store.effects.archiveForm$(form._id);\r\n\r\n }\r\n }\r\n\r\n async unarchive(form: LocalFormStateSelectorInterface, event: Event): Promise<void> {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const userConfirmed = confirm(\r\n `ALERT: You are about to Restore \"${form.formTitle}\". Press Cancel to stop, or OK to unarchive.`\r\n );\r\n\r\n if (userConfirmed) {\r\n this.store.effects.unArchiveForm$(form._id);\r\n\r\n }\r\n }\r\n async delete(form: LocalFormStateSelectorInterface, event: Event): Promise<void> {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n const userConfirmed = confirm(\r\n `⚠️ CRITICAL WARNING\\n\\nYou are about to permanently delete \"${form.formTitle}\".\\n\\nThis action cannot be undone. All form data will be permanently lost.\\n\\nClick 'Cancel' to keep the form\\nClick 'OK' to permanently delete`\r\n );\r\n\r\n if (userConfirmed) {\r\n this.store.effects.deleteForm$(form._id);\r\n }\r\n }\r\n loadForms() {\r\n this.store.effects.loadForms$()\r\n }\r\n router = inject(Router)\r\n activatedRoute = inject(ActivatedRoute)\r\n setSection(value: FormListSection) {\r\n this.store.effects.setListSection$(of(value));\r\n \r\n this.router.navigate([], {\r\n relativeTo: this.activatedRoute,\r\n queryParams: { section: value },\r\n queryParamsHandling: 'merge'\r\n });\r\n }\r\n\r\neditForm(form: LocalFormStateSelectorInterface) {\r\n this.NGX_T_FORMS_CONFIG.formBuilder.editForm(form._id)\r\n}\r\naddNewForm(){\r\n this.NGX_T_FORMS_CONFIG.formBuilder.addNewForm()\r\n}\r\n}\r\n","<header>\r\n <mat-toolbar class=\"app-header\" color=\"primary\">\r\n @if(closeButton){\r\n <button mat-icon-button [style.color]=\"closeButton.color\" (click)=\"closeButton.onClick()\">\r\n <mat-icon>{{closeButton.icon}}</mat-icon>\r\n </button>\r\n }\r\n <span class=\"app-title\">Form List</span>\r\n\r\n\r\n <span class=\"flex-spacer\"></span>\r\n @for (section of formListSections; track section.value) {\r\n @if(section.value === (selectFormListSection$|async)){\r\n <button mat-flat-button (click)=\"setSection(section.value)\">\r\n <span>{{section.label}}</span>\r\n </button>\r\n }@else {\r\n <button mat-button (click)=\"setSection(section.value)\" >\r\n <span>{{section.label}}</span>\r\n </button>\r\n }\r\n }\r\n <span class=\"flex-spacer\"></span>\r\n <button mat-raised-button color=\"accent\" (click)=\"addNewForm()\" class=\"action-button\"\r\n aria-label=\"Create new form\">\r\n <mat-icon>add</mat-icon>\r\n <span>Add Form</span>\r\n </button>\r\n </mat-toolbar>\r\n</header>\r\n\r\n<div class=\"content-container\">\r\n\r\n @if((selectErrors$ |async)?.['LoadForms']){\r\n <div class=\"error-container mat-elevation-z2\">\r\n <div class=\"error-content\">\r\n <mat-icon class=\"error-icon\" color=\"warn\">error_outline</mat-icon>\r\n <span class=\"error-message\">{{(selectErrors$ |async)?.['LoadForms']}}</span>\r\n <button mat-icon-button class=\"refresh-button\" (click)=\"loadForms()\" aria-label=\"Retry\">\r\n <mat-icon>refresh</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n\r\n\r\n @if (selectLoadingForms$ | async) {\r\n <div class=\"loading-container\">\r\n\r\n <span>\r\n <mat-spinner style=\" margin: auto;\"></mat-spinner>\r\n <span style=\"position: relative;text-align: center;\">\r\n <br>\r\n Loading forms...\r\n\r\n </span>\r\n\r\n\r\n\r\n </span>\r\n\r\n\r\n </div>\r\n } @else {\r\n @if ((selectFormsList$ | async)?.length === 0) {\r\n <div class=\"empty-container\">\r\n <img src=\"https://res.cloudinary.com/glick/image/upload/v1738529610/ngx-t-forms/Blank_canvas-cuate_v7rpe0.svg\" alt=\"\">\r\n <p style=\"font-style: italic;\">\r\n <strong >\r\n No forms available.\r\n </strong>\r\n \r\n </p>\r\n </div>\r\n \r\n \r\n \r\n }\r\n <mat-nav-list class=\"forms-list\">\r\n \r\n @for (form of (selectFormsList$ | async) ?? []; track form._id) {\r\n\r\n <mat-list-item \r\n \r\n (click)=\"editForm(form)\"\r\n [disabled]=\"form.busy\"\r\n [class.archived]=\"form.archived\"\r\n [class.mat-elevation-z1]=\"activeForm !== form._id\" \r\n [class.mat-elevation-z2]=\"activeForm === form._id\"\r\n (mouseover)=\"activeForm = form._id\"\r\n [style.border]=\"form.errors.length > 0? '1px solid var(--mat-sys-error) !important':''\"\r\n (mouseleave)=\"activeForm = null\" \r\n class=\"form-list-item\">\r\n @if (form.busy) {\r\n <mat-spinner style=\"position: absolute; margin-left: 12px;\" matListItemAvatar [diameter]=\"48\"></mat-spinner>\r\n }\r\n\r\n <img [class.error]=\"form.errors.length > 0\" matListItemAvatar [src]=\"getFormAvatar(form.formTitle)\"\r\n [alt]=\"'form image ' + form.formTitle\">\r\n <div matListItemTitle class=\"form-item-content\" \r\n [style.color]=\"form.errors.length>0? 'var(--mat-sys-error)':''\"\r\n >\r\n <div class=\"form-title\">{{ form.formTitle | titlecase }}</div>\r\n <div class=\"form-metadata\">\r\n\r\n @if(form.errors.length > 0) {\r\n <span style=\"color:var(--mat-sys-error)\"><mat-icon \r\n \r\n [matTooltip]=\"form.errors.length + ' error(s) found in this form'\"\r\n >error</mat-icon> <small>{{ form.errors.length}}</small></span>\r\n <span class=\"metadata-divider\">•</span>\r\n }\r\n <span><mat-icon>add_circle_outline</mat-icon> <small>{{ form.createdAt | daysAgo }}</small> </span>\r\n <span class=\"metadata-divider\">•</span>\r\n <span><mat-icon>update</mat-icon><small> {{ form.updatedAt | daysAgo }}</small></span>\r\n\r\n\r\n\r\n </div>\r\n </div>\r\n @if (activeForm === form._id) {\r\n <span class=\"form-actions\" matListItemMeta>\r\n\r\n @if(!form.archived){\r\n <button mat-icon-button color=\"warn\" (click)=\"archive(form,$event)\"\r\n matTooltip=\"Archiving a form will affect all the workflows it is linked to. Make sure to review and update all workflow configurations accordingly.\"\r\n aria-label=\"Archive form\">\r\n\r\n <mat-icon>archive</mat-icon>\r\n </button>\r\n }@else {\r\n <button mat-icon-button (click)=\"delete(form,$event)\" color=\"warn\" \r\n matTooltip=\"Permanently delete a form. This action cannot be undone.\"\r\n aria-label=\"Restore form\">\r\n <mat-icon>\r\n delete_forever\r\n </mat-icon>\r\n </button>\r\n <button mat-icon-button color=\"primary\" (click)=\"unarchive(form,$event)\"\r\n matTooltip=\"Restore a form will make it available for use in workflows.\"\r\n aria-label=\"Restore form\">\r\n <mat-icon>unarchive</mat-icon>\r\n </button>\r\n }\r\n \r\n\r\n </span>\r\n }\r\n </mat-list-item>\r\n }\r\n </mat-nav-list>\r\n }\r\n\r\n</div>","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'searchList',\r\n standalone: true,\r\n})\r\nexport class SearchListPipe implements PipeTransform {\r\n transform(value: any[], searchKey?: string | null): any {\r\n if ( !value || !Array.isArray(value) || value.length === 0 || !searchKey || searchKey.trim() === '') {\r\n return value;\r\n }\r\n const regex = new RegExp(searchKey.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'i');\r\n return value.filter(item => {\r\n if (typeof item === \"string\") {\r\n return regex.test(item);\r\n }\r\n if (typeof item !== 'object' || item === null) {\r\n return false;\r\n }\r\n // Check if any string property value within the document matches the regex.\r\n return Object.values(item).some(value => {\r\n if(typeof value === 'object' && value !== null) {\r\n return Object.values(value).some(val => typeof val === 'string' && regex.test(val));\r\n }\r\n return typeof value === 'string' && regex.test(value)\r\n }\r\n \r\n );\r\n })\r\n\r\n\r\n\r\n }\r\n}\r\n\r\n\r\n\r\n","import { AbstractControl, ValidatorFn, ValidationErrors } from '@angular/forms';\r\nimport { validateExpressionSyntax } from '../../../../../shared/modules/stringJsonValidator/getObjectValidations';\r\n\r\n// This is a placeholder for your actual validation logic.\r\n// It can either:\r\n// 1. Return `true` or `false`.\r\n// 2. Throw an Error with a descriptive message.\r\n\r\n/**\r\n * Creates a validator that checks for valid expression syntax.\r\n * @returns {ValidatorFn} A validator function.\r\n */\r\nexport function expressionSyntaxValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n // If the control is empty, don't perform validation.\r\n // Use Validators.required alongside this validator if the field is mandatory.\r\n if (!control.value) {\r\n return null;\r\n }\r\n\r\n const expression = control.value as string;\r\n\r\n try {\r\n const isValid = validateExpressionSyntax(expression);\r\n if(isValid === null ) return null;\r\n // If the validation function returns false, return an error object.\r\n \r\n;\r\n // If no error is thrown and the result is not false, the expression is valid.\r\n return { invalidExpression :isValid || 'The expression syntax is invalid.' };\r\n\r\n } catch (error) {\r\n // Log the actual error for debugging purposes.\r\n\r\n\r\n // Capture the error message to display it in the UI.\r\n const invalidExpression = error instanceof Error ? error.message : 'An unexpected validation error occurred.';\r\n \r\n return { invalidExpression };\r\n }\r\n };\r\n}","import { TreeNode } from 'ngx-t-forms-types';\r\n\r\n\r\n\r\n\r\nconst isEmptyPath = (path: readonly string[]): boolean => path.length === 0;\r\nconst isEmptyTree = (tree: readonly TreeNode[]): boolean => tree.length === 0;\r\n\r\nconst findNodeByKey = (tree: readonly TreeNode[], key: string): TreeNode | undefined =>\r\n tree.find(node => node.key === key);\r\n\r\nconst extractNode = (tree: readonly TreeNode[], path: readonly string[]): TreeNode | null => {\r\n if (isEmptyPath(path) || isEmptyTree(tree)) {\r\n return null;\r\n }\r\n\r\n const [currentKey, ...remainingPath] = path;\r\n if(!currentKey){\r\n return null\r\n }\r\n const currentNode = findNodeByKey(tree, currentKey);\r\n\r\n if (!currentNode) {\r\n return null;\r\n }\r\n\r\n if (remainingPath.length === 0) {\r\n return currentNode;\r\n }\r\n\r\n return currentNode.children \r\n ? extractNode(currentNode.children, remainingPath)\r\n : null;\r\n};\r\n\r\nexport {extractNode};","import { FlatTreeControl } from '@angular/cdk/tree';\r\nimport { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';\r\nimport { extractNode } from './extractNodeFromTree';\r\nimport { TreeNode, FlatNode } from 'ngx-t-forms-types';\r\nimport { returnMappedPathValue } from '../../../../../services/core/t-form-section-controller/Functions/getValueFromPathMap';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nexport interface ObjectTreeNode {\r\n name: string;\r\n children?: ObjectTreeNode[];\r\n path: string[]\r\n\r\n}\r\nexport interface ObjectTreeFlatNode {\r\n expandable: boolean;\r\n name: string;\r\n level: number;\r\n\r\n path: string[]\r\n\r\n}\r\n\r\n\r\n\r\nexport function convertToTree(obj: any, parentPath: string[] = [],): TreeNode[] {\r\n\r\n function handleArray(value: any[], currentPath: string[]): TreeNode[] {\r\n try {\r\n // If the array is an array of objects, we can just convert it to a tree with \r\n return value.map((item, index) => ({\r\n key: index.toString(),\r\n value: item,\r\n name: index.toString(),\r\n functions: [] as any,\r\n keyIsArrayIndex: true,\r\n path: [...currentPath, index.toString()],\r\n children: convertToTree(item, [...currentPath, index.toString()])\r\n }));\r\n } catch (error) {\r\n console.error(error)\r\n return []\r\n }\r\n }\r\n //Trees are recursive data structures, so we expect the input to be an object or an array\r\n if (typeof obj !== 'object' || obj === null) {\r\n //If the input is not an object or an array, we don't have a tree to build\r\n return [];\r\n\r\n }\r\n\r\n if (Array.isArray(obj)) {\r\n // If the input is an array, we need to handle it differently\r\n return handleArray(obj, parentPath);\r\n }\r\n\r\n\r\n return Object.entries(obj).map(([key, value]) => {\r\n const currentPath = [...parentPath, key];\r\n const node: TreeNode = { key, value,name:key, path: currentPath, functions: [] as any };\r\n\r\n if (Array.isArray(value)) {\r\n node.children = handleArray(value, currentPath);\r\n }\r\n\r\n if (typeof value === 'object' && value !== null) {\r\n node.children = convertToTree(value, currentPath);\r\n }\r\n\r\n return node;\r\n });\r\n}\r\nexport class TreeComponent {\r\n activePath: TreeNode[] = [];\r\n pathInEdit: TreeNode | null = null\r\n get activeLevel() {\r\n return this.activePath.length - 1\r\n }\r\n private _transformer = (node: TreeNode, level: number): FlatNode => {\r\n return {\r\n expandable: this.nodeIsExpandable(node),\r\n key: node.key,\r\n value: node.value,\r\n path: node.path,\r\n level: level,\r\n name: node.key,\r\n\r\n\r\n\r\n };\r\n };\r\n\r\n setupPath(node: TreeNode) {\r\n this.activePath = [...this.activePath.map((pathPart, index) => {\r\n if (pathPart.key === node.key && pathPart.path.join('.') === node.path.join('.') && !pathPart.inEdit) {\r\n return {\r\n ...pathPart,\r\n inEdit: true\r\n }\r\n }\r\n return {\r\n ...pathPart,\r\n inEdit: false\r\n }\r\n })]\r\n this.pathInEdit = node\r\n\r\n }\r\n updateStateFromPath(path: TreeNode[]) {\r\n this.activePath = path\r\n \r\n\r\n }\r\n selectNode(node: FlatNode) {\r\n const sameAsActive = this.activePath.map(a => a.key).join('.') === node.path.join('.')\r\n\r\n if (sameAsActive) {\r\n this.activePath = this.activePath.slice(0, (node.level))\r\n\r\n return\r\n }\r\n this.activePath = node.path.map((pathPart, index) => {\r\n return extractNode(this.dataSource.data, node.path.slice(0, index + 1))\r\n }).filter((node): node is TreeNode => !!node)\r\n\r\n\r\n return this.activePath\r\n }\r\n saveNodeInEdit() {\r\n\r\n\r\n if (this.pathInEdit) {\r\n // Update the activePath with new functions\r\n this.activePath = this.activePath.map((pathPart) => {\r\n if (pathPart.inEdit) {\r\n return {\r\n ...pathPart,\r\n functions: this.pathInEdit?.functions || [],\r\n inEdit: false\r\n }\r\n }\r\n return pathPart\r\n });\r\n this.pathInEdit = null;\r\n // Emit the updated path without children and value properties\r\n return this.activePath.map(p => ({\r\n ...p,\r\n children: undefined,\r\n value: undefined\r\n }));\r\n \r\n // Emit the changes\r\n\r\n \r\n \r\n }\r\n return \r\n }\r\n resetNode() {\r\n this.pathInEdit!.functions = (this.pathInEdit?.functions || []).map(f => ({\r\n ...f,\r\n expression: '',\r\n function: '' as any,\r\n inEdit: false\r\n }))\r\n this.activePath = this.activePath.map((pathPart, index) => {\r\n if (pathPart.inEdit) {\r\n return {\r\n ...pathPart,\r\n functions: this.pathInEdit?.functions || [],\r\n inEdit: true\r\n }\r\n }\r\n return {\r\n ...pathPart,\r\n inEdit: false\r\n }\r\n })\r\n\r\n }\r\n removeFunction(id: string) {\r\n this.pathInEdit!.functions = (this.pathInEdit?.functions || []).filter(f => f.id !== id)\r\n this.activePath = this.activePath.map((pathPart, index) => {\r\n const isInEdit = pathPart.inEdit\r\n if (isInEdit) {\r\n return {\r\n ...pathPart,\r\n functions: this.pathInEdit?.functions || [],\r\n\r\n }\r\n }\r\n return {\r\n ...pathPart,\r\n inEdit: false\r\n }\r\n })\r\n }\r\n closeEdit() {\r\n this.pathInEdit!.functions = (this.pathInEdit?.functions || []).map(f => ({ ...f, inEdit: false }))\r\n this.activePath = this.activePath.map((pathPart, index) => {\r\n const isInEdit = pathPart.inEdit\r\n if (isInEdit) {\r\n return {\r\n ...pathPart,\r\n functions: this.pathInEdit?.functions || [],\r\n\r\n }\r\n }\r\n return {\r\n ...pathPart,\r\n inEdit: false\r\n }\r\n })\r\n\r\n }\r\n nodeIsExpandable(node: TreeNode) {\r\n return !!node.children && node.children.length > 0\r\n }\r\n\r\n showNode(node: FlatNode) {\r\n const checked = this.nodeIsChecked(node)\r\n if (checked) {\r\n return true\r\n }\r\n const levelHasPath = !!this.activePath[node.level]\r\n if (levelHasPath) {\r\n return false\r\n }\r\n\r\n const hasSameLevel = node.level === this.activeLevel\r\n if (hasSameLevel) {\r\n return true\r\n }\r\n const isActiveNodeChild = this.activePath.map(a => a.key).every((pathPart, index) => pathPart === node.path[index])\r\n return isActiveNodeChild\r\n\r\n }\r\n hasANodeInEdit() {\r\n return this.activePath.some(a =>\r\n a.inEdit\r\n )\r\n }\r\n nodeIsChecked(node: FlatNode) {\r\n\r\n const isActive = node.path.join('.') === this.activePath.join('.')\r\n if (isActive) {\r\n return true\r\n }\r\n\r\n const activePath = this.activePath.map(a => a.key)\r\n const isActiveNodeAncestor = node.path.every((pathPart, index) => pathPart === activePath[index])\r\n return isActiveNodeAncestor\r\n\r\n\r\n\r\n\r\n }\r\n\r\n treeControl = new FlatTreeControl<FlatNode>(\r\n node => node.level,\r\n node => node.expandable\r\n );\r\n\r\n\r\n treeFlattener = new MatTreeFlattener(\r\n this._transformer,\r\n node => node.level,\r\n node => node.expandable,\r\n\r\n node => node.children\r\n );\r\n\r\n dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);\r\n private dynamicObject: any\r\n constructor() {\r\n\r\n }\r\n\r\n computeTreeData(dynamicObject: any) {\r\n this.dynamicObject = dynamicObject\r\n \r\n const treeData = convertToTree(dynamicObject);\r\n this.dataSource.data = treeData;\r\n }\r\n assignDataSourceData(tree: TreeNode[]) {\r\n this.dataSource.data = tree\r\n }\r\n\r\n hasChild = (_: number, node: FlatNode) => node.expandable;\r\n\r\n getValue() {\r\n\r\n return returnMappedPathValue(this.activePath, this.dynamicObject)\r\n\r\n }\r\n\r\n addNewFunction() {\r\n\r\n if(this.pathInEdit &&!this.pathInEdit?.functions){\r\n this.pathInEdit = {...this.pathInEdit, functions: []}\r\n }\r\n this.pathInEdit!.functions = this.pathInEdit!.functions?.map(f => ({ ...f, inEdit: false })) || []\r\n const newFunction: any = {\r\n expression: '',\r\n id: uuidv4(),\r\n inEdit: true,\r\n function: '',\r\n }\r\n\r\n this.pathInEdit = {\r\n ...this.pathInEdit!,\r\n functions: [\r\n ...this.pathInEdit!.functions!,\r\n newFunction\r\n ]\r\n }\r\n\r\n\r\n }\r\n functionChanged(value: string ) {\r\n const functions = this.pathInEdit!.functions.find(f => f.inEdit) || {} as any\r\n functions.function =value\r\n this.pathInEdit!.functions.map(f => {\r\n if (f.inEdit) {\r\n return functions\r\n }\r\n return f\r\n })\r\n }\r\n}","export function searchAndOrderArray(\r\n arr: any[],\r\n searchTerm: string,\r\n filterBy: string\r\n): any[] {\r\n // Filter the array based on the search term\r\n const filteredArr = arr.filter((obj) =>\r\n searchTerm\r\n ? obj[filterBy].toLowerCase().includes(searchTerm.toLowerCase())\r\n : true\r\n );\r\n\r\n // Order the filtered array alphabetically by name\r\n const orderedArr = filteredArr.sort((a, b) =>\r\n a[filterBy].localeCompare(b[filterBy])\r\n );\r\n\r\n return orderedArr;\r\n}\r\n","import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\n\r\nimport { CommonModule } from '@angular/common';\r\n\r\n\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n\r\n\r\nimport { TreeComponent } from '../../functions/convertDataToTree';\r\nimport { FlatNode, TreeNode } from 'ngx-t-forms-types';\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { searchAndOrderArray } from '../../../../../../shared/functions/searchArray';\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';;\r\nimport { MatSelectChange } from '@angular/material/select';\r\nimport { _isEqual } from '../../../../../../shared/functions/isEqual';\r\n\r\n\r\n@Component({\r\n selector: 'app-data-tree',\r\n templateUrl: './data-tree.component.html',\r\n styleUrls: ['./data-tree.component.scss'],\r\n standalone: true,\r\n imports: [CommonModule, MatModulesModule, FormsModule]\r\n})\r\nexport class DataTreeComponent implements OnInit {\r\n treeClass!: TreeComponent\r\n\r\n @Input() set data(value: any) {\r\n if (_isEqual(this._data, value)) return;\r\n this._data = value;\r\n\r\n this.treeClass.computeTreeData(value)\r\n\r\n if (this.value && Array.isArray(this.value) && this.value.length > 0 && 'functions' in (this.value?.[0] || {})) {\r\n this.treeClass.updateStateFromPath(this.value as TreeNode[])\r\n }\r\n }\r\n get data(): any {\r\n return this._data;\r\n }\r\n @Input() set value(value: TreeNode[] | string) {\r\n if (_isEqual(this._value, value)) return;\r\n this._value = value;\r\n if (Array.isArray(value)) {\r\n this.treeClass.updateStateFromPath(value as TreeNode[])\r\n }\r\n\r\n\r\n\r\n\r\n }\r\n get value(): TreeNode[] | string {\r\n\r\n return this._value;\r\n }\r\n @Input() formInputs: FormColumnInputs[] = []\r\n @Output() pathChanged = new EventEmitter<TreeNode[] | string>()\r\n\r\n constructor() {\r\n this.treeClass = new TreeComponent();\r\n }\r\n private _data: any\r\n private _value: TreeNode[] | string = []\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n //@ViewChild('textarea', { static: false }) textareaRef!: HTMLTextAreaElement\r\n @ViewChild('textarea', { read: ElementRef, static: false }) textareaElementRef!: ElementRef;\r\n\r\n\r\n showSuggestions = false;\r\n suggestions = ['$option1', '$option2', '$option3', '$custom'];\r\n filteredSuggestions: string[] = [];\r\n cursorPosition = 0;\r\n valueChangedSetPath(newPath: TreeNode[] | string) {\r\n const isSameAsNewPath = _isEqual(this.value, newPath);\r\n if (!isSameAsNewPath && Array.isArray(newPath)) {\r\n this.value = newPath\r\n\r\n this.treeClass.updateStateFromPath(newPath as TreeNode[])\r\n }\r\n }\r\n async onTextChange(event: Event) {\r\n const newValue = (event.target as HTMLInputElement).value;\r\n const functions = this.treeClass.pathInEdit!.functions!.find(f => f.inEdit)\r\n functions!.expression = newValue;\r\n this.treeClass.pathInEdit!.functions.map(f => {\r\n if (f.inEdit) {\r\n return functions\r\n }\r\n return f\r\n })\r\n const textarea = this.textareaElementRef.nativeElement;\r\n this.cursorPosition = textarea.selectionStart || 0;\r\n\r\n const lastChar = newValue[this.cursorPosition - 1];\r\n if (lastChar === '$') {\r\n this.showSuggestions = true;\r\n this.filteredSuggestions = this.suggestions;\r\n } else {\r\n this.showSuggestions = false;\r\n }\r\n }\r\n functionChanged(event: MatSelectChange) {\r\n this.treeClass.functionChanged(event.value)\r\n }\r\n addNewFunction() {\r\n\r\n this.treeClass.addNewFunction()\r\n\r\n }\r\n editFunction(id: string) {\r\n\r\n\r\n this.treeClass.pathInEdit!.functions = this.treeClass.pathInEdit!.functions?.map(f => {\r\n if (f.id === id) {\r\n return { ...f, inEdit: true }\r\n }\r\n return { ...f, inEdit: false }\r\n\r\n })\r\n\r\n }\r\n selectSuggestionInput(suggestion: string) {\r\n\r\n const functions = this.treeClass.pathInEdit!.functions.find(f => f.inEdit) || {} as any\r\n const value = functions?.expression || ''\r\n const beforeCursor = value.slice(0, this.cursorPosition - 1);\r\n const afterCursor = value.slice(this.cursorPosition);\r\n functions.expression = beforeCursor + suggestion + ' ' + afterCursor;\r\n this.treeClass.pathInEdit!.functions.map(f => {\r\n if (f.inEdit) {\r\n return functions\r\n }\r\n return f\r\n })\r\n this.showSuggestions = false;\r\n\r\n const textarea = this.textareaElementRef.nativeElement;\r\n textarea.focus();\r\n const newCursorPosition = this.cursorPosition + suggestion.length;\r\n setTimeout(() => {\r\n textarea.setSelectionRange(newCursorPosition, newCursorPosition);\r\n }, 0);\r\n }\r\n\r\n onFocus(event: FocusEvent) {\r\n const textarea = this.textareaElementRef.nativeElement;\r\n this.cursorPosition = textarea.selectionStart || 0;\r\n }\r\n nodeIsChecked(node: FlatNode) {\r\n return this.treeClass.nodeIsChecked(node)\r\n }\r\n hasANodeInEdit() {\r\n return this.treeClass.hasANodeInEdit()\r\n }\r\n showNode(node: FlatNode) {\r\n return this.treeClass.showNode(node)\r\n }\r\n onSearchChange(event: Event) {\r\n this.optionsSearch = (event.target as HTMLInputElement).value;\r\n\r\n }\r\n\r\n methods = [\r\n // Logical Operators\r\n {\r\n label: 'logical AND (&&)',\r\n value: '&&'\r\n },\r\n {\r\n label: 'logical OR (||)',\r\n value: '||'\r\n },\r\n\r\n // Comparison Operators\r\n {\r\n label: 'strict equality (===)',\r\n value: '==='\r\n },\r\n {\r\n label: 'loose equality (==)',\r\n value: '=='\r\n },\r\n {\r\n label: 'strict inequality (!==)',\r\n value: '!=='\r\n },\r\n {\r\n label: 'loose inequality (!=)',\r\n value: '!='\r\n },\r\n {\r\n label: 'greater than (>)',\r\n value: '>'\r\n },\r\n {\r\n label: 'less than (<)',\r\n value: '<'\r\n },\r\n {\r\n label: 'greater than or equal to (>=)',\r\n value: '>='\r\n },\r\n {\r\n label: 'less than or equal to (<=)',\r\n value: '<='\r\n }\r\n ];\r\n getMethods() {\r\n return searchAndOrderArray(this.methods, this.optionsSearch, 'label');\r\n }\r\n getNodeValueColor(v: any) {\r\n const valueType = typeof v\r\n switch (valueType) {\r\n case 'string':\r\n return '#c56100'\r\n case 'number':\r\n return 'mediumblue'\r\n case 'boolean':\r\n return 'forestgreen'\r\n case 'object':\r\n return '#005959'\r\n default:\r\n return 'currentcolor'\r\n }\r\n }\r\n setupPath(node: TreeNode) {\r\n return this.treeClass.setupPath(node)\r\n }\r\n trackByFn(index: number, node: TreeNode): string {\r\n return node.path.join('.')\r\n }\r\n showValue: boolean = false\r\n optionsSearch!: string\r\n getAllInputs() {\r\n const inputs = this.formInputs\r\n .filter((inp) => !inp.multipleInputInEditId);\r\n return searchAndOrderArray(inputs || [], this.optionsSearch, 'label');\r\n }\r\n getValueVariables(): string[] {\r\n const isObject = typeof this.value === 'object'\r\n if (!this.value) {\r\n return []\r\n }\r\n if (!isObject && !!this.value) {\r\n return [this.value as any]\r\n }\r\n if (Array.isArray(this.value)) {\r\n return this.value.map((v, i) => (i)) as any\r\n }\r\n return Object.keys(this.value)\r\n }\r\n saveNodeInEdit() {\r\n const newP = this.treeClass.saveNodeInEdit()\r\n if (newP) {\r\n this.pathChanged.emit(newP)\r\n }\r\n\r\n }\r\n closeEdit() {\r\n this.treeClass.closeEdit()\r\n\r\n\r\n }\r\n reset() {\r\n this.treeClass.resetNode()\r\n }\r\n getFunctionInEdit() {\r\n const node = this.treeClass.pathInEdit\r\n return node?.functions?.find(f => f.inEdit)\r\n }\r\n get getValue() {\r\n return this.treeClass.getValue()\r\n }\r\n removeFunction(id: string) {\r\n this.treeClass.removeFunction(id)\r\n }\r\n update(node: any) {\r\n\r\n const path = this.treeClass.selectNode(node)?.map(p => ({\r\n ...p,\r\n children: undefined,\r\n value: undefined\r\n }))\r\n\r\n\r\n this.pathChanged.emit(path)\r\n }\r\n}\r\n","<mat-accordion multi>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"title-icon\">dataset_linked</mat-icon>\n <span style=\"font-size: 12px;line-height:normal\">\n Navigate and select data fields for mapping\n </span>\n\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div class=\"content\">\n <div class=\"tree-instructions\">\n <mat-icon class=\"info-icon\" color=\"primary\">info</mat-icon>\n <span>Click checkboxes to select fields for mapping. Selected paths will be highlighted.</span>\n </div>\n <mat-divider></mat-divider>\n\n <mat-tree [dataSource]=\"treeClass.dataSource\" [treeControl]=\"treeClass.treeControl\">\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding>\n <button disabled class=\"node-spacer\" aria-hidden=\"true\" mat-icon-button>\n\n </button>\n <mat-checkbox (change)=\"update(node)\" [checked]=\"nodeIsChecked(node)\" class=\"node-checkbox\"\n [matTooltip]=\"'Map data field: ' + node.key\">\n <span class=\"node-key\" [attr.aria-label]=\"'Field name: ' + node.key\">{{ node.key }}:</span>\n <span [attr.aria-label]=\"'Field value: ' + node.value\" style=\" white-space: nowrap;\" class=\"node-value\"\n [style.color]=\"getNodeValueColor(node.value)\">\n {{ node.value }}\n </span>\n </mat-checkbox>\n </mat-tree-node>\n\n <mat-tree-node *matTreeNodeDef=\"let node; when: treeClass.hasChild\" matTreeNodePadding>\n <button style=\"padding: 0px; \n width: 24px;\" mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Toggle ' + node.key\">\n <mat-icon>\n {{ treeClass.treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n </button>\n <mat-checkbox (change)=\"update(node)\" [checked]=\"nodeIsChecked(node)\" [matTooltip]=\"'Select ' + node.key\">\n <span class=\"node-key\">{{ node.key }}</span>\n </mat-checkbox>\n </mat-tree-node>\n </mat-tree>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"title-icon\">rebase_edit</mat-icon>\n <span style=\"font-size: 12px;line-height:normal\">\n Configure and transform your data path\n </span>\n\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div class=\"content\">\n <div class=\"tree-instructions\" *ngIf=\"treeClass.activePath.length === 0\">\n <mat-icon class=\"info-icon\" color=\"primary\">info</mat-icon>\n <span>Select a node from the tree above to begin mapping data</span>\n </div>\n <mat-divider></mat-divider>\n <mat-toolbar style=\" height: fit-content; background: inherit;\">\n <div class=\"breadcrumb-container\">\n\n <ng-container *ngFor=\"let path of treeClass.activePath; trackBy: trackByFn; last as isLast; index as i\">\n <button *ngIf=\"!path.inEdit\" matTooltip=\"Click to edit\" (click)=\"setupPath(path)\" mat-button\n [disabled]=\"!path.keyIsArrayIndex\" [color]=\"path.functions.length> 0 ? 'accent' : ''\"\n class=\"breadcrumb-item\">\n <mat-icon>{{ path.keyIsArrayIndex ? 'filter_none' : 'folder' }}</mat-icon>\n <span>{{ path.key }}</span>\n </button>\n\n\n <button *ngIf=\"!!path.inEdit\" matTooltip=\"Currently editing\" (click)=\"removeFunction(path.key)\"\n mat-raised-button color=\"primary\" class=\"breadcrumb-item\">\n <mat-icon>check_circle</mat-icon>\n <span>{{ path.key }}</span>\n </button>\n <mat-icon *ngIf=\"!isLast\" class=\"breadcrumb-separator\">chevron_right</mat-icon>\n </ng-container>\n </div>\n </mat-toolbar>\n <div *ngIf=\"!!hasANodeInEdit()\">\n\n <mat-nav-list>\n\n <ng-container *ngFor=\"let function of this.treeClass.pathInEdit?.functions;index as i\">\n <mat-list-item [activated]=\"!!function.inEdit\" class=\"functions\" style=\"height: fit-content;\">\n <span matListItemIcon class=\"function-number\">\n <strong> {{i+1}} </strong>\n </span>\n <a (click)=\"editFunction(function.id)\"\n style=\"font-size: 14px; white-space: nowrap;overflow: hidden;text-overflow: ellipsis;\" matListItemTitle>\n {{ (function.function |titlecase) ||\n 'Function configurations required'}}</a>\n <button mat-icon-button (click)=\"removeFunction(function.id)\" matListItemMeta>\n\n <mat-icon [color]=\"function.function && function.expression?'':'warn'\">{{!function.inEdit?\n 'close':'check_circle'}}</mat-icon>\n </button>\n\n\n </mat-list-item>\n\n <div class=\"function-edit-container\" *ngIf=\"function.inEdit\">\n <mat-divider></mat-divider>\n <mat-form-field subscriptSizing=\"dynamic\" style=\" margin-bottom: 8px;\" appearance=\"outline\"\n *ngIf=\"this.treeClass.pathInEdit?.functions\">\n <mat-label>Array function</mat-label>\n <mat-select matNativeControl [value]=\"getFunctionInEdit()?.function\"\n (selectionChange)=\"functionChanged($event)\" placeholder=\"ChooseFunctionToRun\">\n <mat-option value=\"filter\">filter</mat-option>\n <mat-option value=\"find\">find</mat-option>\n <mat-option value=\"map\">map</mat-option>\n </mat-select>\n <mat-hint>\n Choose a function to run on the array\n </mat-hint>\n </mat-form-field>\n <mat-form-field appearance=\"outline\" *ngIf=\"this.treeClass.pathInEdit?.functions\">\n <mat-label>Condition expression</mat-label>\n <textarea matInput #textarea [value]=\"getFunctionInEdit()?.expression\" (input)=\"onTextChange($event)\"\n (focus)=\"onFocus($event)\" placeholder=\"Enter a validation string for the function\"></textarea>\n <mat-hint>\n {{ showSuggestions ? 'Suggestions are enabled' : 'Enter a condition expression to transform the array'\n }}\n </mat-hint>\n </mat-form-field>\n <section *ngIf=\"showSuggestions\" class=\"showSuggestionContainer\">\n <!-- <mat-toolbar class=\"search-container\" style=\"background: inherit;\">\n \n \n <input type=\"search\" \n placeholder=\"Search api\" \n class=\"search-field\"\n (change)=\"onSearchChange($event)\"> \n \n <mat-icon>\n search\n </mat-icon>\n </mat-toolbar> -->\n <mat-divider></mat-divider>\n <div style=\"padding: 8px;\" class=\"\">\n <div class=\"suggestion-container\">\n <div class=\"suggestion-column\">\n <h5>Logical Operators</h5>\n <div class=\"button-container\">\n <button color=\"primary\" mat-flat-button *ngFor=\"let method of getMethods()\"\n (click)=\"selectSuggestionInput(method.value)\" class=\"suggestion-button\">\n {{ method.label | titlecase }}\n </button>\n </div>\n </div>\n <div class=\"suggestion-column\">\n <h5>Add Input as a Variable</h5>\n <div class=\"button-container\">\n <button *ngFor=\"let input of getAllInputs()\" mat-flat-button\n (click)=\"selectSuggestionInput(input.formControlName)\" class=\"suggestion-button\">\n {{ input.label | titlecase }}\n </button>\n </div>\n </div>\n <!-- <div class=\"suggestion-column\">\n <h5>Array path Object </h5>\n <div class=\"button-container\">\n <button *ngFor=\"let input of getValueVariables()\"\n color=\"accent\"\n mat-flat-button\n (click)=\"selectSuggestionInput(input)\" class=\"suggestion-button\">\n {{ input}}\n </button>\n </div>\n </div> -->\n </div>\n <div class=\"suggestion-container\">\n\n </div>\n\n </div>\n </section>\n\n\n <mat-toolbar style=\"background:none\">\n <span class=\"spacer\"></span>\n\n <button (click)=\"reset()\" mat-flat-button>\n reset\n </button>\n <button (click)=\"saveNodeInEdit()\" [disabled]=\"!function.expression && !function.function\"\n mat-flat-button color=\"primary\">\n save\n </button>\n\n </mat-toolbar>\n </div>\n <mat-divider></mat-divider>\n </ng-container>\n\n </mat-nav-list>\n <ol>\n\n </ol>\n <button (click)=\"addNewFunction()\" mat-button>+ Add function </button>\n </div>\n </div>\n </mat-expansion-panel>\n\n <mat-expansion-panel>\n <mat-expansion-panel-header>\n <mat-panel-title>\n <mat-icon class=\"title-icon\">dataset</mat-icon>\n <span style=\"font-size: 12px;line-height:normal\">\n Mapped Data Value Based on the Active Path\n </span>\n\n </mat-panel-title>\n\n </mat-expansion-panel-header>\n\n <div class=\"content\">\n <mat-divider></mat-divider>\n\n <div style=\"padding: 16px;background: black;\n color: cadetblue; border-radius:8px;min-width:fit-content\">\n <pre>{{getValue|json}}</pre>\n </div>\n </div>\n </mat-expansion-panel>\n\n\n</mat-accordion>","import { IFolderItem } from 'ngx-t-forms-types';\r\nimport { TreeNode } from 'ngx-t-forms-types';\r\n\r\nexport function convertPostmanFolderItemsToTree(obj: IFolderItem[] | undefined, parentPath: string[] = [],): TreeNode[] {\r\n\r\n if (!obj) {\r\n return []\r\n }\r\n return obj.map((item) => {\r\n const { name } = item\r\n const currentPath = [...parentPath, name];\r\n const node: TreeNode = { key: name,name, value: item, path: currentPath, functions: [] as any };\r\n \r\n if (item.item) {\r\n node.children = convertPostmanFolderItemsToTree(item.item, currentPath)\r\n }\r\n return node;\r\n });\r\n }\r\n\r\n export function flatApiList(obj: IFolderItem[] | undefined):IFolderItem[] {\r\n if (!obj) {\r\n return []\r\n }\r\n return obj.reduce((acc, item) => {\r\n acc.push(item)\r\n if (item.item) {\r\n acc.push(...flatApiList(item.item))\r\n }\r\n return acc\r\n }, [] as IFolderItem[])\r\n\r\n }","import {\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostBinding,\r\n Input,\r\n\r\n Optional,\r\n\r\n Output,\r\n Self,\r\n} from '@angular/core';\r\nimport { TreeNode } from \"ngx-t-forms-types\";\r\nimport { CommonModule } from '@angular/common';\r\nimport { DataTreeComponent } from './elements/data-tree/data-tree.component';\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { catchError, Subject, take, tap, throwError } from 'rxjs';\r\nimport { NgControl } from '@angular/forms';\r\nimport { IConfigElementError } from '../../t-dynamic-data-edit.component';\r\nimport { IFolderItem, IGetPostmanCollections, IPostmanCollectionConfig } from \"ngx-t-forms-types\";\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport _ from 'lodash';\r\nimport { flatApiList } from '../postman-collections/functions/convertPostmanCollectionToTree';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\n\r\n\r\n\r\n\r\n\r\n@Component({\r\n selector: 'app-api-value-access-rules',\r\n templateUrl: './api-value-access-rules.component.html',\r\n styleUrls: ['./api-value-access-rules.component.scss'],\r\n standalone: true,\r\n imports: [CommonModule, DataTreeComponent,OverlayModule ],\r\n providers: [{ provide: MatFormFieldControl, useExisting: ApiValueAccessRulesComponent}],\r\n})\r\nexport class ApiValueAccessRulesComponent implements MatFormFieldControl<TreeNode[] | string | {[key:string]:TreeNode[] | string}> {\r\n\r\n\r\n static nextId = 0;\r\n stateChanges = new Subject<void>();\r\n\r\n @HostBinding() id = `app-api-value-access-rules-${ApiValueAccessRulesComponent .nextId++}`;\r\n \r\n placeholder: string = ''\r\n constructor(@Optional() @Self() public ngControl: NgControl, private _elementRef: ElementRef<HTMLElement>,private readonly httpClient: HttpClient) { }\r\n focused: boolean = false;\r\n get empty() {\r\n return !this.value\r\n }\r\n get shouldLabelFloat() {\r\n return this.focused || !this.empty;\r\n }\r\n required: boolean = false;\r\n @Input() disabled: boolean = false;\r\nget errorState(): boolean {\r\n const hasError = !!this.ngControl?.control?.errors || (this.errors||[]).length > 0 && this.touched\r\n return !this.value && !!this.required || hasError\r\n }\r\n\r\n controlType?: string | undefined;\r\n autofilled?: boolean | undefined;\r\n userAriaDescribedBy?: string | undefined;\r\n disableAutomaticLabeling?: boolean | undefined;\r\n setDescribedByIds(ids: string[]) {\r\n // Ensure the component view is initialized\r\n if (this._elementRef && this._elementRef.nativeElement) {\r\n const controlElement = this._elementRef.nativeElement.querySelector('.app-api-value-access-rules');\r\n // Check if the controlElement exists before attempting to set its attribute\r\n if (controlElement) {\r\n controlElement.setAttribute('aria-describedby', ids.join(' '));\r\n }\r\n }\r\n }\r\n onContainerClick(event: MouseEvent): void {\r\n this.markAsTouched();\r\n this.stateChanges.next();\r\n }\r\n\r\n touched: boolean = false;\r\n onTouched = () => {};\r\n markAsTouched() {\r\n console.log('markAsTouched') \r\n if (!this.touched) {\r\n this.onTouched();\r\n this.touched = true;\r\n }\r\n } \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n // currently mapped value\r\n @Input() multipleBind:string[] | undefined\r\n @Input() errors:IConfigElementError[] |undefined = [];\r\n @Input() value: TreeNode[] | string | {[key:string]:TreeNode[] | string} = [];\r\n @Input() mapToData: any\r\n @Input() formInputs:FormColumnInputs[] = []\r\n @Output() valueChanged = new EventEmitter();\r\n @Output() reload = new EventEmitter();\r\n _postManCollectionConfig: IPostmanCollectionConfig | undefined\r\n @Input() set postmanCollectionConfig(postmanCollectionConfig: IPostmanCollectionConfig | undefined){\r\n if(!_.isEqual(this._postManCollectionConfig,postmanCollectionConfig)){\r\n this._postManCollectionConfig = postmanCollectionConfig\r\n this.initializePostmanService()\r\n }\r\n \r\n }\r\n\r\n get postmanCollectionConfig(): IPostmanCollectionConfig | undefined{\r\n return this._postManCollectionConfig\r\n }\r\n \r\n get computedValue():any{\r\n const invalidType =this.value instanceof Array || typeof this.value === 'string' \r\n if(this.multipleBind && invalidType && !this.value){\r\n return {}\r\n }\r\n return this.value\r\n }\r\n pathChanged(path:TreeNode[]|string,control?:string){\r\n if(!Array.isArray(path)){\r\n return\r\n }\r\n if(!control){\r\n this.valueChanged.emit(path)\r\n return\r\n }\r\n if(this.value instanceof Array || typeof this.value === 'string'){\r\n this.value = {}\r\n }\r\n const newValue = {...this.value }\r\n newValue[control] = path\r\n this.valueChanged.emit(newValue)\r\n }\r\n private isValidConfig(config: IPostmanCollectionConfig | undefined): boolean {\r\n return Boolean(config?.collectionUrl && config?.collectionKey);\r\n }\r\n error: HttpErrorResponse | undefined\r\n loading: boolean = false\r\n postManFolderItems:IFolderItem[] = []\r\n private initializePostmanService(): void {\r\n8\r\n const isValidConfig = this.isValidConfig(this.postmanCollectionConfig)\r\n if (!isValidConfig) {\r\n this.error = new HttpErrorResponse({\r\n error: 'Invalid Postman Collection Config',\r\n })\r\n return\r\n }\r\n const { collectionUrl, collectionKey } = this.postmanCollectionConfig!\r\n \r\n const requestOptions = {\r\n params: {\r\n apikey: collectionKey,\r\n clearSystemHeaders: true\r\n },\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n \r\n }\r\n }\r\n this.loading = true\r\n\r\n this.httpClient.get<IGetPostmanCollections>(\r\n collectionUrl,\r\n requestOptions\r\n ).pipe(\r\n take(1),\r\n tap((data) => {\r\n // To ensure the data can be shown as a tree\r\n this.postManFolderItems= flatApiList(data.collection.item) \r\n \r\n this.error = undefined\r\n this.loading = false\r\n }),\r\n catchError((err: HttpErrorResponse) => {\r\n this.loading = false\r\n this.error = err\r\n console.error(err)\r\n return throwError(err)\r\n })\r\n ).subscribe();\r\n }\r\n \r\n get postmanResponseBody(){\r\n \r\n const {response} = this.postManFolderItems.find((item) => item.id === this.mapToData) ||{}\r\n let responseBody = JSON.parse(response?.[0]?.body || '{}')\r\n return Object.keys(responseBody).length > 0 ? responseBody : undefined\r\n }\r\n\r\n}\r\n","\r\n\r\n\r\n<section *ngFor=\"let controlName of multipleBind||[]\">\r\n <label [for]=\"controlName\">Map <strong>{{controlName}}</strong></label>\r\n <app-data-tree \r\n [formInputs]=\"formInputs\"\r\n (pathChanged)=\"pathChanged($event,controlName)\" \r\n [data]=\"postmanResponseBody || mapToData\" [value]=\"computedValue[controlName]||''\" ></app-data-tree>\r\n</section>\r\n\r\n\r\n<app-data-tree \r\n*ngIf=\"!multipleBind\"\r\n(pathChanged)=\"pathChanged($event)\" \r\n [formInputs]=\"formInputs\"\r\n[data]=\"postmanResponseBody ||mapToData\" [value]=\"computedValue\"></app-data-tree>\r\n\r\n\r\n\r\n<ng-template\r\n cdkConnectedOverlay\r\n [cdkConnectedOverlayOpen]=\"disabled\"\r\n>\r\n<div style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5);\">\r\n\r\n\r\n</div>\r\n</ng-template>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild } from '@angular/core';\r\n\r\nimport { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { distinctUntilChanged, Subscription, tap } from 'rxjs';\r\nimport { FormColumnInputs, TreeNode } from 'ngx-t-forms-types';\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { SearchListPipe } from '../../../../../../shared/pipes/list-search.pipe';\r\nimport { expressionSyntaxValidator } from '../../functions/validateExpression';\r\nimport { ApiValueAccessRulesComponent } from '../../api-value-access-rules.component';\r\n\r\n\r\n@Component({\r\n selector: 'lib-validation-expressio-creator',\r\n imports: [CommonModule, MatModulesModule, ReactiveFormsModule, SearchListPipe, ApiValueAccessRulesComponent],\r\n templateUrl: './validation-expressio-creator.component.html',\r\n styleUrl: './validation-expressio-creator.component.css'\r\n})\r\nexport class ValidationExpressioCreatorComponent implements OnDestroy, OnInit {\r\n @Input() hint: string = ' An expression that evaluates to true or false to determine if this path is taken.'\r\n @Input() label: string = 'Validation Expression';\r\n @Input() formInputs: FormColumnInputs[] = []\r\n _data: any = {};\r\n @Input() set data(value: any) {\r\n this._data = value;\r\n }\r\n get data(): any {\r\n return this._data;\r\n }\r\n @Input() set expression(value: string) {\r\n this.expressionControl.setValue(value);\r\n this.expressionControl.markAsPristine();\r\n this.expressionControl.markAsUntouched();\r\n }\r\n _valueAccessRules: Record<string, TreeNode[]> = {};\r\n @Input() set valueAccessRules(value: Record<string, TreeNode[]>) {\r\n this._valueAccessRules = value;\r\n\r\n }\r\n get valueAccessRules(): Record<string, TreeNode[]> {\r\n return this._valueAccessRules;\r\n }\r\n\r\n subscription$ = new Subscription();\r\n ngOnDestroy(): void {\r\n this.subscription$.unsubscribe();\r\n }\r\n @Output() expressionChange = new EventEmitter<{\r\n expression: string | null;\r\n valueAccessRules: Record<string, TreeNode[]>;\r\n }>();\r\n\r\n ngOnInit(): void {\r\n this.subscription$.add(\r\n this.expressionControl.valueChanges.pipe(\r\n distinctUntilChanged((prev, curr) => prev === curr),\r\n tap(\r\n (value) => {\r\n this.onTextChange(value || '').then(() => {\r\n this.expressionChange.emit(\r\n {\r\n expression: this.expressionControl.value,\r\n valueAccessRules: this.valueAccessRules\r\n })\r\n });\r\n }\r\n )\r\n ).subscribe()\r\n )\r\n }\r\n\r\n @ViewChild('textarea', { read: ElementRef, static: false }) textareaElementRef!: ElementRef;\r\n expressionControl = new FormControl('', [Validators.required, expressionSyntaxValidator()]);\r\n cursorPosition = 0;\r\n showSuggestions = false;\r\n optionsSearch!: string\r\n async onTextChange(expression: string) {\r\n const textarea = this.textareaElementRef.nativeElement;\r\n this.cursorPosition = textarea.selectionStart || 0;\r\n\r\n // Define the operators that should prevent suggestions from showing\r\n const operators = this.methods.map(method => method.value);\r\n\r\n // Create a regex to find any of these operators\r\n const operatorRegex = new RegExp(operators.map(op => `\\\\${op.split('').join('\\\\')}`).join('|'));\r\n\r\n // Find the last occurrence of '$' before the cursor\r\n const lastDollarIndex = expression.substring(0, this.cursorPosition).lastIndexOf('$');\r\n\r\n if (lastDollarIndex !== -1) {\r\n // Extract the text between the last '$' and the cursor\r\n const textAfterDollar = expression.substring(lastDollarIndex + 1, this.cursorPosition);\r\n this.optionsSearch = textAfterDollar;\r\n // Check if the extracted text contains only letters and spaces.\r\n // This regex allows:\r\n // - An empty string \"\" (for when '$' is the last character).\r\n // - A string with letters (\"hello\").\r\n // - A string with letters and spaces (\"hello world\").\r\n const isValidFormat = /^[a-zA-Z\\s]*$/.test(textAfterDollar);\r\n\r\n // Check if any of the disallowed operators are present\r\n const containsOperator = operatorRegex.test(textAfterDollar);\r\n\r\n // Show suggestions ONLY if the format is valid (letters/spaces)\r\n // AND it does NOT contain any of the forbidden operators.\r\n if (isValidFormat && !containsOperator) {\r\n\r\n this.showSuggestions = true;\r\n } else {\r\n this.showSuggestions = false;\r\n }\r\n } else {\r\n // If no '$' is found before the cursor, hide suggestions\r\n this.optionsSearch = '';\r\n this.showSuggestions = false;\r\n }\r\n this.cleanValueAccessRules();\r\n }\r\n cleanValueAccessRules() {\r\n const expression = this.expressionControl.value || '';\r\n const originalRules = this.valueAccessRules;\r\n\r\n // 1. Tokenize the expression to get a list of all potential variable names.\r\n // This regex finds sequences of letters, numbers, and underscores.\r\n // It correctly treats \"nationalKPA%\" and \"nationalKPA\" as different tokens.\r\n const expressionTokens: RegExpMatchArray | null = expression.match(/[a-zA-Z0-9_]+/g);\r\n\r\n // 2. Filter the existing rules, keeping only those whose keys are exact tokens in the expression.\r\n this.valueAccessRules = Object.keys(originalRules)\r\n .filter((key: string) => expressionTokens?.includes(key))\r\n .reduce((newRules, key) => {\r\n newRules[key] = originalRules[key];\r\n return newRules;\r\n }, {} as any); // Assuming TypeScript context from your edit\r\n\r\n // 3. Find which inputs need to be added.\r\n const inputsToAdd = this.formInputs.filter(input =>\r\n expressionTokens?.includes(input.formControlName) &&\r\n !this.valueAccessRules[input.formControlName]\r\n );\r\n\r\n // 4. Efficiently build a single object with all the new rules.\r\n const newRulesToAdd = inputsToAdd.reduce((acc, input) => {\r\n acc[input.formControlName] = [{\r\n value: input.formControlName,\r\n key: input.formControlName,\r\n name: input.label,\r\n path: [input.formControlName],\r\n functions: []\r\n }];\r\n return acc;\r\n }, {} as any);\r\n\r\n // 5. Merge the new rules into the main object in a single, efficient operation.\r\n this.valueAccessRules = {\r\n ...this.valueAccessRules,\r\n ...newRulesToAdd,\r\n };\r\n }\r\n selectSuggestionInput(suggestion: string) {\r\n const originalValue = this.expressionControl.value || '';\r\n\r\n // Find the position of the last '$' that triggered the suggestions.\r\n // This is the same logic used in onTextChange.\r\n const lastDollarIndex = originalValue.substring(0, this.cursorPosition).lastIndexOf('$');\r\n\r\n if (lastDollarIndex !== -1) {\r\n // Construct the new value by replacing from the '$' to the cursor\r\n const beforeDollar = originalValue.slice(0, lastDollarIndex);\r\n const afterCursor = originalValue.slice(this.cursorPosition);\r\n\r\n // The new value is the part before the $, the suggestion, a space, and the part after the cursor.\r\n const newValue = beforeDollar + suggestion + ' ' + afterCursor;\r\n\r\n this.expressionControl.setValue(newValue);\r\n this.expressionControl.markAsDirty();\r\n this.showSuggestions = false;\r\n\r\n // --- Cursor repositioning logic ---\r\n const textarea = this.textareaElementRef.nativeElement;\r\n textarea.focus();\r\n\r\n // Calculate the new cursor position\r\n const newCursorPosition = (beforeDollar + suggestion + ' ').length;\r\n\r\n // Use setTimeout to ensure the cursor is set after the view updates\r\n setTimeout(() => {\r\n textarea.setSelectionRange(newCursorPosition, newCursorPosition);\r\n }, 0);\r\n const formInput = this.formInputs.find((inp) => inp.formControlName === suggestion)\r\n if (!!formInput?.formControlName) {\r\n this.valueAccessRules = {\r\n ...this.valueAccessRules,\r\n [formInput.formControlName]: [{\r\n value: formInput.formControlName,\r\n key: formInput.formControlName,\r\n name: formInput.label,\r\n path: [formInput.formControlName],\r\n functions: []\r\n }]\r\n }\r\n }\r\n\r\n }\r\n // Note: It's good practice to decide what happens if lastDollarIndex is -1,\r\n\r\n }\r\n get getAllInputs() {\r\n\r\n return this.formInputs\r\n .filter((inp) => !inp.multipleInputInEditId);\r\n }\r\n\r\n onFocus(event: FocusEvent) {\r\n const textarea = this.textareaElementRef.nativeElement;\r\n this.cursorPosition = textarea.selectionStart || 0;\r\n }\r\n\r\n methods = [\r\n // Logical Operators\r\n {\r\n label: '&&',\r\n hint: \" logical AND . Returns true if both operands are true.\",\r\n value: '&&'\r\n },\r\n {\r\n label: '||',\r\n hint: \" logical OR. Returns true if at least one operand is true.\",\r\n value: '||'\r\n },\r\n\r\n // Comparison Operators\r\n {\r\n label: '===',\r\n hint: \"strict equality . Returns true if both operands are equal and of the same type.\",\r\n value: '==='\r\n },\r\n {\r\n label: '==',\r\n hint: \"loose equality. Returns true if both operands are equal, performing type coercion if necessary.\",\r\n value: '=='\r\n },\r\n {\r\n label: '!==',\r\n hint: \"strict inequality . Returns true if operands are not equal or not of the same type.\",\r\n value: '!=='\r\n },\r\n {\r\n label: '!=',\r\n hint: \"loose inequality. Returns true if operands are not equal, performing type coercion if necessary.\",\r\n value: '!='\r\n },\r\n {\r\n label: '>',\r\n hint: \"greater than. Returns true if the left operand is greater than the right operand.\",\r\n value: '>'\r\n },\r\n {\r\n label: '<',\r\n hint: \"less than. Returns true if the left operand is less than the right operand.\",\r\n value: '<'\r\n },\r\n {\r\n label: '>=',\r\n hint: \"greater than or equal to. Returns true if the left operand is greater than or equal to the right operand.\",\r\n value: '>='\r\n },\r\n {\r\n label: '<=',\r\n hint: \"less than or equal to. Returns true if the left operand is less than or equal to the right operand.\",\r\n value: '<='\r\n }\r\n ];\r\n\r\n getMethods() {\r\n return this.methods\r\n }\r\n variableInEdit: string | null = null;\r\n get errorMessage(): string | null {\r\n const errors = this.expressionControl.errors;\r\n if (!errors) {\r\n return null;\r\n }\r\n if (errors['invalidExpression']) {\r\n return errors['invalidExpression'] || 'The expression syntax is invalid.';\r\n }\r\n if (errors['required']) {\r\n return 'This field is required.';\r\n }\r\n return null;\r\n }\r\n get valueAccessOptions(): string[] {\r\n return Object.keys(this.valueAccessRules)\r\n }\r\n activeVariableChanged(value: TreeNode[] | string) {\r\n \r\n this.expressionChange.emit(\r\n {\r\n expression: this.expressionControl.value,\r\n valueAccessRules: {\r\n ...this.valueAccessRules,\r\n [this.variableInEdit || '']: value\r\n } as Record<string, TreeNode[]>\r\n })\r\n }\r\n}\r\n","<mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" style=\"width: 100%;\" floatLabel=\"always\"\r\n id=\"validationExpressionCreator\">\r\n <mat-label>Condition expression</mat-label>\r\n <textarea [formControl]=\"expressionControl\" matInput #textarea (focus)=\"onFocus($event)\"\r\n placeholder=\"Enter a validation string for the function\"></textarea>\r\n\r\n\r\n <mat-hint\r\n [style.color]=\"expressionControl.invalid && !showSuggestions? 'var(--mat-form-field-error-text-color, var(--mat-sys-error))':''\">\r\n @if (expressionControl.invalid && errorMessage !== null && !showSuggestions) {\r\n {{errorMessage}}\r\n }@else {\r\n {{ showSuggestions ? 'Click a suggestion to apply it' : 'Enter a filter condition. Type $ for options' }}\r\n @if (showSuggestions) {\r\n <section class=\"showSuggestionContainer\">\r\n <mat-divider></mat-divider>\r\n <div style=\"padding: 0px;margin-top:8px\" class=\"\">\r\n <div class=\"suggestion-container\">\r\n <div class=\"suggestion-column\">\r\n <div class=\"suggestion-heading\">\r\n Logical Operators\r\n </div>\r\n <div class=\"button-container\">\r\n <button matTooltipPosition=\"left\" [matTooltip]=\"method.hint\" color=\"primary\" mat-button\r\n *ngFor=\"let method of getMethods()|searchList:optionsSearch\"\r\n (click)=\"selectSuggestionInput(method.value)\" class=\"suggestion-button\">\r\n {{ method.label | titlecase }}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"suggestion-column\">\r\n <div class=\"suggestion-heading\">\r\n Add Input as a Variable\r\n </div>\r\n <div class=\"button-container\">\r\n <button *ngFor=\"let input of getAllInputs|searchList:optionsSearch\" mat-button\r\n matTooltipPosition=\"right\" [matTooltip]=\"'Add Variable - '+ input.label \"\r\n (click)=\"selectSuggestionInput(input.formControlName)\" class=\"suggestion-button\">\r\n {{ input.label | titlecase }}\r\n </button>\r\n </div>\r\n </div>\r\n <!-- <div class=\"suggestion-column\">\r\n <h5>Array path Object </h5>\r\n <div class=\"button-container\">\r\n <button *ngFor=\"let input of getValueVariables()\"\r\n color=\"accent\"\r\n mat-flat-button\r\n (click)=\"selectSuggestionInput(input)\" class=\"suggestion-button\">\r\n {{ input}}\r\n </button>\r\n </div>\r\n </div> -->\r\n </div>\r\n\r\n\r\n </div>\r\n </section>\r\n\r\n\r\n }\r\n }\r\n\r\n\r\n </mat-hint>\r\n\r\n\r\n</mat-form-field>\r\n\r\n@if(valueAccessOptions.length>0){\r\n\r\n\r\n<mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\" style=\"width: 100%;margin-top:12px\" floatLabel=\"always\"\r\n id=\"Value access options\">\r\n <mat-label>\r\n Form Fields for expression\r\n </mat-label>\r\n <mat-chip-grid #chipGrid aria-label=\"value access options\">\r\n @for (variable of valueAccessOptions; track variable) {\r\n <mat-chip-option \r\n [selected]=\"variableInEdit === variable\"\r\n \r\n (click)=\"variableInEdit === variable ? variableInEdit = null : variableInEdit = variable\"\r\n [aria-description]=\"'press enter to edit ' + variable\">\r\n {{variable}}\r\n\r\n </mat-chip-option >\r\n\r\n }\r\n <input placeholder=\"\" style=\"display: none;\" [matChipInputFor]=\"chipGrid\" />\r\n </mat-chip-grid>\r\n @if(variableInEdit !== null ){\r\n <app-api-value-access-rules \r\n [value]=\"valueAccessRules[variableInEdit]||[]\"\r\n [errors]=\"[]\" [formInputs]=\"formInputs ||[]\"\r\n [mapToData]=\"data\"\r\n (valueChanged)=\"activeVariableChanged($event)\">\r\n </app-api-value-access-rules>\r\n \r\n \r\n\r\n\r\n }\r\n <mat-hint>\r\n Click a field to define how to process its value. You can filter a list, count its items, or access specific\r\n data within a complex object.\r\n </mat-hint>\r\n</mat-form-field>}","import { Component, EventEmitter, Input, NgZone, OnDestroy, Output } from '@angular/core';\r\nimport { AllFormInputPrimaryKeys, BlurHandleTypes, ElementEditorInnerSectionElementInterface, ElementEditorTypes, IGetTreeResponse, IWorkflowOption } from \"ngx-t-forms-types\";\r\n\r\nimport {\r\n BehaviorSubject,\r\n combineLatest,\r\n debounceTime,\r\n\r\n distinctUntilChanged,\r\n\r\n map,\r\n\r\n Observable,\r\n\r\n of,\r\n\r\n Subscription, switchMap, take, tap,\r\n withLatestFrom\r\n} from 'rxjs';\r\nimport { assignDeepPropertyToObject } from '../../shared';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatModulesModule } from '../../shared/modules/mat-modules.module';\r\nimport { testAgainstItem } from './functions/testData';\r\nimport { SelectionOptionsEditorComponent } from './elements/selection-options-editor/selection-options-editor.component';\r\nimport { FormInputSelectorComponent } from './elements/form-input-selector/form-input-selector.component';\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';\r\nimport { RestApiCallSetupComponent } from './elements/rest-api-call-setup/rest-api-call-setup.component';\r\nimport { ApiValueAccessRulesComponent } from './elements/api-value-access-rules/api-value-access-rules.component';\r\nimport { RequiredInputsComponent } from './elements/required-inputs/required-inputs.component';\r\nimport { PipelineGeneratorComponent } from './elements/pipeline-generator/pipeline-generator.component';\r\nimport { CalculatedFieldRulesComponent } from './elements/calculated-field-rules/calculated-field-rules.component';\r\nimport { ValidatorsConfigComponent } from './elements/validators-config/validators-config.component';\r\nimport { ConfigMscoaAdditionalInputsComponent } from './elements/config-mscoa-additional-inputs/config-mscoa-additional-inputs.component';\r\nimport { MscoaSegmentConfigComponent } from './elements/mscoa-segment-config/mscoa-segment-config.component';\r\nimport { MatSliderEditorComponent } from './elements/mat-slider-editor/mat-slider-editor.component';\r\nimport { MatSliderToggleEditorComponent } from './elements/mat-slider-toggle-editor/mat-slider-toggle-editor.component';\r\nimport { MatChipListEditorComponent } from './elements/mat-chip-list-editor/mat-chip-list-editor.component';\r\n\r\nimport { safeReturnDeepProperty } from '../../shared/functions/getDeepObject';\r\nimport { _isEqual } from '../../shared/functions/isEqual';\r\n\r\nimport { ChipOptionsCreatorEditorComponent } from './elements/chip-options-creator-editor/chip-options-creator-editor.component';\r\nimport { DataSourcePickerComponent } from './elements/data-source-picker/data-source-picker.component';\r\nimport { DocumentListLabelConfigEditorComponent } from './elements/document-list-label-config-editor/document-list-label-config-editor.component';\r\nimport { TWorkflowPickerComponent } from './elements/t-workflow-picker/t-workflow-picker.component';\r\nimport { EditorJsInputComponent } from '../t-form-input/elements/editor-input-element/core/editor-js-input/editor-js-input.component';\r\n\r\n\r\nexport interface IConfigElementError {\r\n\r\n key: string;\r\n message: string;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-t-dynamic-data-edit',\r\n standalone: true,\r\n imports: [CommonModule,\r\n SelectionOptionsEditorComponent,\r\n FormInputSelectorComponent,\r\n RestApiCallSetupComponent,\r\n ApiValueAccessRulesComponent,\r\n RequiredInputsComponent,\r\n PipelineGeneratorComponent,\r\n CalculatedFieldRulesComponent,\r\n ValidatorsConfigComponent,\r\n ConfigMscoaAdditionalInputsComponent,\r\n MatSliderEditorComponent,\r\n MscoaSegmentConfigComponent,\r\n MatSliderToggleEditorComponent,\r\n MatChipListEditorComponent,\r\n MatModulesModule,\r\n ChipOptionsCreatorEditorComponent,\r\n DataSourcePickerComponent,\r\n DocumentListLabelConfigEditorComponent,\r\n TWorkflowPickerComponent,\r\n EditorJsInputComponent\r\n ],\r\n templateUrl: './t-dynamic-data-edit.component.html',\r\n styleUrl: './t-dynamic-data-edit.component.css',\r\n\r\n})\r\nexport class TDynamicDataEditComponent implements OnDestroy {\r\n private editorInitiated: boolean = false;\r\n constructor(private ngZone: NgZone) { }\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n\r\n }\r\n private valueChanges: BehaviorSubject<unknown> | undefined = new BehaviorSubject<unknown>('');\r\n private subscription = new Subscription();\r\n elementEditorTypes = ElementEditorTypes\r\n private _editorConfig = new BehaviorSubject<ElementEditorInnerSectionElementInterface | undefined>(undefined)\r\n private _data = new BehaviorSubject<any>(undefined)\r\n @Input() set editorConfig(config: ElementEditorInnerSectionElementInterface | undefined) {\r\n this._editorConfig.next(config)\r\n }\r\n _formInputs$ = new BehaviorSubject<FormColumnInputs[]>([])\r\n _formInputs: FormColumnInputs[] = []\r\n @Input() set formInputs(inputs: Array<FormColumnInputs> ){\r\n this._formInputs = inputs\r\n }\r\n get formInputs() {\r\n return this._formInputs\r\n }\r\n @Input() set data(data: any) {\r\n this._data.next(data)\r\n if (!this.editorInitiated) {\r\n this.editorInitiated = true\r\n this.initializeValueChanges(data);\r\n\r\n }\r\n\r\n }\r\n get data() {\r\n return this._data.getValue()\r\n }\r\n @Input() validationErrors: IConfigElementError[] | null = null\r\n @Output() valueChange = new EventEmitter<unknown>()\r\n @Output() blur = new EventEmitter<any>()\r\n\r\n\r\n editorConfigValue$ = this._editorConfig.asObservable()\r\n dataValue$ = this._data.asObservable()\r\n get getMscoaTree$(): Observable<IGetTreeResponse | undefined> {\r\n return this.editorConfigValue$.pipe(switchMap(\r\n (config) => config?.getMscoaTree || of(undefined)\r\n ))\r\n }\r\n get getWorkflowOptions$(): Observable<IWorkflowOption[] | undefined> {\r\n return this.editorConfigValue$?.pipe(\r\n switchMap((config) => config?.getWorkflowOptions || [])\r\n )\r\n\r\n }\r\n // Optimized value$ getter\r\n get value$() {\r\n return this.editorConfigValue$.pipe(\r\n switchMap((config) => this.dataValue$.pipe(\r\n map((data) => {\r\n const { value } = safeReturnDeepProperty(data, config?.deepBind || [])\r\n const dotNotationRegex = /^[^.]+(\\.[^.]+)+$/;\r\n \r\n if(\r\n config?.deepBind[0]=== AllFormInputPrimaryKeys.FormControlName \r\n && !!dotNotationRegex.test(value) \r\n && config?.editType ===ElementEditorTypes.ChipOptionsCreator\r\n ){\r\n // If the value is a dot notation string, split it into an array\r\n return value ? value.split('.') : [];\r\n }\r\n \r\n // Prevent undefined values\r\n if (value === undefined) return value || '';\r\n return value\r\n })\r\n ))\r\n )\r\n\r\n }\r\n\r\n get dataOptions$() {\r\n return this.editorConfigValue$.pipe(\r\n switchMap((config) => this.dataValue$.pipe(\r\n map((data) => {\r\n const dataBindTo = config?.fetchOptions\r\n if (!dataBindTo) return undefined;\r\n if (dataBindTo.length === 0) return data;\r\n const { value } = safeReturnDeepProperty(data, dataBindTo)\r\n return value\r\n }))))\r\n }\r\n get disabled$() {\r\n return this.editorConfigValue$.pipe(\r\n switchMap((config) => this.dataValue$.pipe(\r\n map((data) => {\r\n const isSystemDefault = data?.systemDefault === true\r\n if(!!isSystemDefault && !config?.deepBind.includes('systemDefault') ){\r\n return true\r\n }\r\n if (!config) {\r\n return true\r\n }\r\n return config.disabled?.every((test) => (testAgainstItem(test, data)))\r\n }))))\r\n }\r\n\r\n\r\n\r\n private initializeValueChanges(data: unknown): void {\r\n // Run subscription setup outside NgZone for better performance\r\n this.ngZone.runOutsideAngular(() => {\r\n // Use withLatestFrom instead of combineLatest to prevent emission loops\r\n this.subscription.add(\r\n this.valueChanges?.pipe(\r\n // Filter out undefined/null values to prevent processing invalid data\r\n \r\n // Only compare relevant properties instead of deep equality when possible\r\n distinctUntilChanged((a, b) => {\r\n return _isEqual(a, b);\r\n }),\r\n \r\n debounceTime(500),\r\n // Use withLatestFrom instead of switchMap+combineLatest to avoid multiple emissions\r\n withLatestFrom(\r\n this.dataValue$,\r\n this.editorConfigValue$\r\n ),\r\n \r\n // Apply distinctUntilChanged after combining streams\r\n distinctUntilChanged(([prevValueData, prevData, prevConfig], [currValueData, currData, currConfig]) =>\r\n _isEqual(prevValueData, currValueData) &&\r\n _isEqual(prevData, currData) &&\r\n _isEqual(prevConfig, currConfig)\r\n ),\r\n \r\n // Process the combined data stream - carefully handle each parameter\r\n tap(([value, data, config]) => {\r\n // Guard against invalid inputs\r\n if (config === undefined) {\r\n return; // Skip processing if any input is undefined\r\n }\r\n\r\n const result = this.computeValueChange(value, data, config);\r\n \r\n // Only emit if result is valid\r\n if (result !== undefined) {\r\n // Re-enter zone only for UI updates\r\n this.ngZone.run(() => {\r\n this.valueChange.emit(result);\r\n });\r\n }\r\n })\r\n ).subscribe()\r\n );\r\n\r\n // Initialize with initial value\r\n const editorConfig = this._editorConfig.getValue();\r\n const initValue = safeReturnDeepProperty(data, editorConfig?.deepBind || []).value;\r\n const result = this.computeValueChange(initValue, data, editorConfig);\r\n this.valueChanges?.next(result);\r\n });\r\n }\r\n\r\n // Expensive computation moved outside zone\r\nprivate computeValueChange(\r\n value: unknown,\r\n data: unknown,\r\n config: ElementEditorInnerSectionElementInterface | undefined\r\n): unknown {\r\n if (!data || !config) {\r\n return undefined;\r\n }\r\n\r\n // Deep clone the data object to ensure it and all nested objects are extensible\r\n const updated = JSON.parse(JSON.stringify(data));\r\n\r\n try {\r\n // Ensure config.deepBind is an array before proceeding\r\n const deepBindPath = config.deepBind || [];\r\n assignDeepPropertyToObject(updated, deepBindPath, value);\r\n return safeReturnDeepProperty(updated, deepBindPath).value;\r\n } catch (error) {\r\n console.error('Error assigning deep property:', error);\r\n return undefined; // Return undefined if assignment fails\r\n }\r\n}\r\n\r\n\r\n inputChange(event: any): void {\r\n const value = event.target.value;\r\n this.valueChanges?.next(value);\r\n\r\n }\r\n // Optimize value changes\r\n valueChanged(value: unknown): void {\r\n if(this._editorConfig.getValue()?.deepBind[0] === AllFormInputPrimaryKeys.FormControlName && Array.isArray(value)){\r\n // If the value is an array, join it into a string\r\n this.valueChanges?.next(value.join('.'));\r\n return\r\n\r\n }\r\n this.valueChanges?.next(value)\r\n\r\n\r\n\r\n }\r\n manualValueChange(event: { value: unknown, deepBind: Array<string> }) {\r\n const { value, deepBind } = event\r\n this.dataValue$.pipe(\r\n take(1),\r\n tap((data) => {\r\n if (!data) return;\r\n const updated = { ...data };\r\n assignDeepPropertyToObject(updated, deepBind || [], value);\r\n this.valueChange.emit(updated)\r\n }),\r\n ).subscribe()\r\n\r\n }\r\n\r\n // Optimize blur handling\r\n blurOff: boolean = false;\r\n elementBlur(event: any): void {\r\n if (this.blurOff) return;\r\n this.ngZone.run(() => this.blur.emit(event));\r\n\r\n }\r\n get inputHasBlurFunction$(): Observable<BlurHandleTypes | undefined> {\r\n\r\n return this.editorConfigValue$.pipe(\r\n map((config) => config?.blurHandle)\r\n )\r\n\r\n }\r\n blurFunctionTooltip(blurHandle: BlurHandleTypes | undefined) {\r\n switch (blurHandle) {\r\n case BlurHandleTypes.PrePopulateFormControl:\r\n return 'Enable/disable pre-populating of the form control name from the label'\r\n case BlurHandleTypes.CleanFormControl:\r\n return 'Enable/disable auto conversion of control name to camel case'\r\n default:\r\n return 'Toggle blur function'\r\n }\r\n }\r\n formatLabel = (value: number) => value as any;\r\n vm$ = combineLatest(\r\n [\r\n this.editorConfigValue$,\r\n this.value$,\r\n this.dataOptions$,\r\n this.disabled$,\r\n this.inputHasBlurFunction$,\r\n this.dataValue$\r\n\r\n ]\r\n ).pipe(\r\n map(([editorConfigValue, value, dataOptions, disabled, inputHasBlurFunction,dataValue]) => {\r\n return {\r\n editorConfigValue,\r\n value,\r\n dataOptions,\r\n disabled,\r\n inputHasBlurFunction,\r\n dataValue,\r\n\r\n }\r\n })\r\n )\r\n}\r\n","@defer {\r\n<ng-container *ngIf=\"( vm$ |async) as vm\">\r\n\r\n <mat-form-field appearance=\"outline\" [color]=\"((validationErrors)||[]||[]).length>0 ? 'warn' : 'primary'\"\r\n [floatLabel]=\"'always'\" [subscriptSizing]=\"'dynamic'\" [hintLabel]=\"vm.editorConfigValue?.hint||''\">\r\n <mat-label> {{ (vm. editorConfigValue)?.label + ((vm. editorConfigValue)?.required ? '*' : '')}} </mat-label>\r\n\r\n @switch ((vm. editorConfigValue)?.editType) {\r\n @default {\r\n <input (blur)=\"elementBlur($event)\" (input)=\"inputChange($event)\" [disabled]=\"(vm.disabled)\"\r\n [value]=\"(vm.value)\" matInput [placeholder]=\"(vm. editorConfigValue)?.placeholder ||'Enter value'\">\r\n\r\n\r\n }\r\n @case ( elementEditorTypes.Toggle) {\r\n <lib-mat-slider-toggle-editor [name]=\"((vm. editorConfigValue)?.name||'') \"\r\n [label]=\"((vm. editorConfigValue)?.label||'')\" [disabled]=\"(vm.disabled)||false\"\r\n (valueChange)=\"valueChanged(!!$event)\" [value]=\"(vm.value)\" [errors]=\"(validationErrors)||[]\">\r\n </lib-mat-slider-toggle-editor>\r\n\r\n }\r\n\r\n @case (elementEditorTypes.Range) {\r\n\r\n\r\n <lib-mat-slider-editor [format]=\"( vm.editorConfigValue)?.format \" [formatLabel]=\" formatLabel\"\r\n [disabled]=\"(vm.disabled)||false\" [max]=\"( vm.editorConfigValue)?.max || 100\" [value]=\"(vm.value)\"\r\n [errors]=\"(validationErrors)||[]\" [min]=\"( vm.editorConfigValue)?.min || 0\"\r\n (valueChange)=\"inputChange($event)\" [step]=\"( vm.editorConfigValue)?.step || 1\"\r\n tickInterval=\"( vm.editorConfigValue)?.step || 1\">\r\n\r\n\r\n </lib-mat-slider-editor>\r\n\r\n\r\n\r\n }\r\n\r\n @case (elementEditorTypes.ChipSelect) {\r\n <lib-mat-chip-list-editor [disabled]=\"(vm.disabled)||false\"\r\n [options]=\"(vm.editorConfigValue)?.options || vm.dataOptions\"\r\n [required]=\"!!( vm.editorConfigValue)?.required\" [value]=\"(vm.value)\" [errors]=\"(validationErrors)||[]\"\r\n (valueChange)=\" valueChanged($event)\"></lib-mat-chip-list-editor>\r\n\r\n\r\n }\r\n\r\n @case (elementEditorTypes.OptionSelect) {\r\n\r\n <mat-select [value]=\"(vm.value)\" (selectionChange)=\"valueChanged($event.value)\"\r\n [disabled]=\"(vm.disabled)||false\">\r\n @for(option of ( vm.editorConfigValue)?.options || vm.dataOptions;track option.value){\r\n <mat-option [value]=\"option.value\">{{option.label}}</mat-option>\r\n }\r\n </mat-select>\r\n\r\n }\r\n\r\n @case (elementEditorTypes.RichTextEditor) {\r\n <lib-editor-js-input [value]=\"(vm.value)\" (valueChanged)=\"valueChanged($event)\"\r\n [disabled]=\"(vm.disabled)||false\"\r\n [inputConfig]=\"data\" >\r\n </lib-editor-js-input>\r\n }\r\n\r\n\r\n @case (elementEditorTypes.SelectionOptions) {\r\n\r\n <app-selection-options-editor [errors]=\"(validationErrors)||[]\" [disabled]=\"(vm.disabled)||false\"\r\n [id]=\"((vm.editorConfigValue)?.label||'')+((vm.editorConfigValue)?.editType||'')\"\r\n [options]=\"(vm.value) || []\" (valueChanged)=\"valueChanged($event)\"></app-selection-options-editor>\r\n }\r\n\r\n @case (\r\n elementEditorTypes.ApiCall) {\r\n\r\n <lib-rest-api-call-setup [postmanCollectionConfig]=\"(vm.editorConfigValue)?.postmanCollectionConfig\"\r\n [httpGetDataFunction]=\"(vm.editorConfigValue)?.httpGetDataFunction\" [disabled]=\"(vm.disabled)||false\"\r\n [id]=\"((vm.editorConfigValue)?.label||'')+((vm.editorConfigValue)?.editType||'')\" [value]=\"(vm.value)\"\r\n [errors]=\"(validationErrors)||[]\" (valueChanged)=\"valueChanged($event)\">\r\n\r\n </lib-rest-api-call-setup>\r\n\r\n }\r\n\r\n @case (elementEditorTypes.MongoPipelineBuilder) {\r\n\r\n <app-pipeline-generator [disabled]=\"(vm.disabled)||false\"\r\n [id]=\"((vm.editorConfigValue)?.label||'')+((vm.editorConfigValue)?.editType||'')\" [value]=\"(vm.value)\"\r\n [errors]=\"(validationErrors)||[]\" [getWorkflowOptions]=\"getWorkflowOptions$\"\r\n (valueChanged)=\"valueChanged($event)\"></app-pipeline-generator>\r\n\r\n }\r\n @case (elementEditorTypes.ApiValueAccessRules) {\r\n\r\n\r\n\r\n <app-api-value-access-rules [disabled]=\"(vm.disabled)||false\"\r\n [id]=\"((vm.editorConfigValue)?.label||'')+((vm.editorConfigValue)?.editType||'')\" [value]=\"(vm.value)\"\r\n [errors]=\"(validationErrors)||[]\" [formInputs]=\"formInputs ||[]\"\r\n [postmanCollectionConfig]=\"(vm.editorConfigValue)?.postmanCollectionConfig\" [mapToData]=\"vm.dataOptions\"\r\n (valueChanged)=\"valueChanged($event)\">\r\n </app-api-value-access-rules>\r\n\r\n }\r\n\r\n @case (elementEditorTypes.FormInputSelector)\r\n {\r\n\r\n <lib-form-input-selector [disabled]=\"(vm.disabled)||false\" [formInputs]=\"formInputs ||[]\"\r\n [errors]=\"(validationErrors)||[]\" [value]=\"(vm.value) || []\" (change)=\"valueChanged($event)\">\r\n </lib-form-input-selector>\r\n }\r\n\r\n @case (\r\n elementEditorTypes.RequiredInputs\r\n ){\r\n\r\n <app-required-inputs [formInputs]=\"formInputs ||[]\" [disabled]=\"(vm.disabled)||false\"\r\n [id]=\"((vm.editorConfigValue)?.label||'')+((vm.editorConfigValue)?.editType||'')\" [value]=\"(vm.value)\"\r\n [errors]=\"(validationErrors)||[]\" (valueChanged)=\"valueChanged($event)\">\r\n </app-required-inputs>\r\n }\r\n\r\n @case(elementEditorTypes.CalculatedFieldRules){\r\n\r\n <app-calculated-field-rules [formInputs]=\"formInputs ||[]\" [disabled]=\"(vm.disabled)||false\"\r\n [id]=\"((vm.editorConfigValue)?.label||'')+((vm.editorConfigValue)?.editType||'')\" [value]=\"(vm.value)\"\r\n [errors]=\"(validationErrors)||[]\" (valueChanged)=\"valueChanged($event)\"\r\n [mapToData]=\"vm.dataOptions\"></app-calculated-field-rules>\r\n }\r\n\r\n @case(elementEditorTypes.Validators){\r\n\r\n <app-validators-config [disabled]=\"(vm.disabled)||false\"\r\n [id]=\"((vm.editorConfigValue)?.label||'')+((vm.editorConfigValue)?.editType||'')\" [value]=\"(vm.value)\"\r\n [errors]=\"(validationErrors)||[]\" (valueChanged)=\"valueChanged($event)\" [formInputs]=\"formInputs ||[]\"\r\n [mapToData]=\"vm.dataOptions\">\r\n </app-validators-config>\r\n\r\n }\r\n @case(elementEditorTypes.ConfigMscoaSegments){\r\n\r\n <app-mscoa-segment-config [disabled]=\"(vm.disabled)||false\" [value]=\"(vm.value)\"\r\n [errors]=\"(validationErrors)||[]\" [getMscoaTree]=\"getMscoaTree$\" [dataValue]=\"vm.dataValue\"\r\n [showAllSegments]=\"vm.dataOptions\" (valueChanged)=\"valueChanged($event)\"></app-mscoa-segment-config>\r\n }\r\n @case(elementEditorTypes.ConfigMscoaAdditionalInputs){\r\n\r\n <app-config-mscoa-additional-inputs [disabled]=\"(vm.disabled)||false\"\r\n [id]=\"((vm.editorConfigValue)?.label||'')+((vm.editorConfigValue)?.editType||'')\" [value]=\"(vm.value)\"\r\n [errors]=\"(validationErrors)||[]\" [getMscoaTree]=\"getMscoaTree$\" [mapToData]=\"vm.dataOptions\">\r\n (valueChanged)=\"valueChanged($event)\">\r\n </app-config-mscoa-additional-inputs>\r\n\r\n }\r\n @case (elementEditorTypes.ChipOptionsCreator) {\r\n <lib-chip-options-creator-editor [disabled]=\"(vm.disabled)||false\" (valueChange)=\"valueChanged($event)\"\r\n [value]=\"(vm.value)\" [errors]=\"(validationErrors)||[]\">\r\n\r\n </lib-chip-options-creator-editor>\r\n\r\n }\r\n @case (elementEditorTypes.DataSourcePicker) {\r\n <lib-data-source-picker [disabled]=\"(vm.disabled)||false\" [editorConfig]=\"vm. editorConfigValue\"\r\n (valueChange)=\"valueChanged($event)\" [formInputs]=\"formInputs ||[]\" [value]=\"(vm.value)\"\r\n [errors]=\"(validationErrors)||[]\">\r\n </lib-data-source-picker>\r\n }\r\n @case (elementEditorTypes.ListLabelConfigEditor) {\r\n <lib-document-list-label-config-editor [disabled]=\"(vm.disabled)||false\" [editorConfig]=\"vm. editorConfigValue\"\r\n (valueChange)=\"valueChanged($event)\" [value]=\"(vm.value)\" [mapToData]=\"vm.dataOptions\"\r\n [errors]=\"(validationErrors)||[]\">\r\n\r\n </lib-document-list-label-config-editor>\r\n }\r\n @case(\r\n elementEditorTypes.WorkflowPicker\r\n ){\r\n <lib-t-workflow-picker [disabled]=\"(vm.disabled)||false\" [getWorkflowOptions]=\"getWorkflowOptions$\"\r\n (valueChanged)=\"valueChanged($event)\" [value]=\"(vm.value)\" [errors]=\"(validationErrors)||[]\"\r\n [value]=\"(vm.value)\"></lib-t-workflow-picker>\r\n }\r\n }\r\n\r\n <button [matTooltip]=\"blurFunctionTooltip((vm.editorConfigValue)?.blurHandle)\" *ngIf=\"(vm.inputHasBlurFunction)\"\r\n [disabled]=\"(vm.disabled)\" [color]=\"blurOff?'':'primary'\" (click)=\"blurOff=!blurOff\" matSuffix\r\n mat-icon-button>\r\n <mat-icon>{{\r\n blurOff?'blur_off':'blur_on'\r\n }}\r\n\r\n\r\n </mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n\r\n <mat-error style=\" font-size: 12px;\r\n margin-left: 14px;\r\n \" *ngFor=\"let error of (validationErrors)||[]\">\r\n\r\n {{error.message}}</mat-error>\r\n\r\n</ng-container>\r\n\r\n}@error {\r\n<mat-card>\r\n <mat-card-content>\r\n\r\n <span>\r\n Failed to load form inputs\r\n </span>\r\n </mat-card-content>\r\n</mat-card>\r\n}\r\n\r\n\r\n\r\n<!-- - \r\n `TableConfigSetup`\r\n- `ConditionalInputConfig`\r\n- `MatrixTable`-->","import { Component, Input, SimpleChanges } from '@angular/core';\r\nimport { TreeComponent } from '../t-dynamic-data-edit/elements/api-value-access-rules/functions/convertDataToTree';\r\nimport { MatModulesModule } from '../../shared/modules/mat-modules.module';\r\n\r\n@Component({\r\n selector: 'lib-t-dynamic-data-view',\r\n standalone: true,\r\n imports: [MatModulesModule,],\r\n templateUrl: './t-dynamic-data-view.component.html',\r\n styleUrl: './t-dynamic-data-view.component.css'\r\n})\r\nexport class TDynamicDataViewComponent {\r\n treeClass: TreeComponent = new TreeComponent()\r\n @Input() data: any;\r\n constructor() { }\r\n _data: any\r\n ngOnInit() {}\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['data']) {\r\n if (JSON.stringify(this._data) !== JSON.stringify(changes['data'].currentValue)) {\r\n this._data = changes['data'].currentValue\r\n this.treeClass.computeTreeData(changes['data'].currentValue)\r\n \r\n }\r\n\r\n }\r\n \r\n }\r\n getNodeValueColor(value: any) {\r\n if (typeof value === 'string') {\r\n return 'green'\r\n }\r\n if (typeof value === 'number') {\r\n return 'blue'\r\n }\r\n if (typeof value === 'boolean') {\r\n return 'purple'\r\n }\r\n \r\n return 'black'\r\n }\r\n}\r\n","<mat-tree [dataSource]=\"treeClass.dataSource\" [treeControl]=\"treeClass.treeControl\">\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding>\r\n <button disabled style=\"padding: 0px; \r\n width: 24px;\" mat-icon-button>\r\n\r\n </button>\r\n <div style=\"display: flex;align-items: center;\">\r\n <span class=\"node-key\">{{ node.key }}</span>\r\n <span>\r\n :\r\n </span>\r\n <span \r\n style=\" white-space: nowrap;\"\r\n [style.color]=\"getNodeValueColor(node.value)\"\r\n class=\"node-value\" >\r\n {{ node.value }}\r\n </span>\r\n </div>\r\n \r\n </mat-tree-node>\r\n\r\n <mat-tree-node *matTreeNodeDef=\"let node; when: treeClass.hasChild\" matTreeNodePadding>\r\n <button style=\"padding: 0px; \r\n width: 24px;\" mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Toggle ' + node.key\">\r\n <mat-icon>\r\n {{ treeClass.treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <span class=\"node-key\"> <strong>{{ node.key }}</strong></span>\r\n \r\n </mat-tree-node>\r\n </mat-tree>","import { Component, Input } from '@angular/core';\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatModulesModule } from '../../shared/modules/mat-modules.module';\r\nimport { ITowerStepColumn } from 'ngx-t-forms-types';\r\n@Component({\r\n selector: 'lib-t-form-input-status',\r\n standalone: true,\r\n imports: [CommonModule, MatModulesModule],\r\n templateUrl: './t-form-input-status.component.html',\r\n styleUrl: './t-form-input-status.component.css'\r\n})\r\nexport class TFormInputStatusComponent {\r\n @Input() inputConfig!: ITowerStepColumn;\r\n recentlyUpdated() {\r\n if(!this.inputConfig){\r\n return false;\r\n }\r\n const valueUpdatedAt = this.inputConfig.valueUpdatedAt;\r\n if(!valueUpdatedAt) return false;\r\n const now = new Date();\r\n const updated = new Date(valueUpdatedAt);\r\n const diffInSeconds = Math.floor((now.getTime() - updated.getTime()) / 1000);\r\n\r\n return diffInSeconds < 30; // Consider \"a few seconds\" as less than 30 seconds\r\n }\r\n get busy(): boolean {\r\n const statusObj = this.inputConfig?.status || {};\r\n const hasActiveBusyStatus = Object.entries(statusObj)\r\n .some(([_, value]) => Boolean(value));\r\n \r\n \r\n return hasActiveBusyStatus;\r\n }\r\n get busyMessage(): string {\r\n //combine status values into a single string\r\n const statusObj = this.inputConfig?.status || {};\r\n const busyMessages = Object.entries(statusObj)\r\n .filter(([_, value]) => Boolean(value))\r\n .map(([key,value]) => value);\r\n return busyMessages.join(', ');\r\n }\r\n get isReadOnly(){\r\n return Boolean(this.inputConfig?.readonly || false)\r\n }\r\n}\r\n","\r\n\r\n <mat-icon color=\"primary\" \r\n matTooltip=\"recently updated\"\r\n *ngIf=\"!busy && recentlyUpdated()\">update\r\n </mat-icon>\r\n @if (isReadOnly) {\r\n <mat-icon \r\n style=\"opacity:0.5;\" \r\n matTooltip=\"Read only\"\r\n >\r\n edit_off\r\n </mat-icon>\r\n }\r\n \r\n @if(busy === true) { \r\n <mat-spinner\r\n [matTooltip]=\"busyMessage\" \r\n [diameter]=\"12\"\r\n style=\"display: inline-block;\" > \r\n </mat-spinner>\r\n \r\n }\r\n\r\n\r\n","import { distinctUntilChanged, filter, map } from \"rxjs\";\r\nimport { MscoaComponentStore } from \"./mscoa-component-store.service\";\r\nimport { IAccountSegmentTreeKeys, ScoaAccountTree, ScoaInnerInput, ScoaSegmentValue } from \"ngx-t-forms-types\";\r\n\r\nexport function mscoaStoreSelectors(store: MscoaComponentStore) {\r\n\r\n const state$ = store.select(state => state)\r\n const initiated$ = store.select((state) => state.initiated)\r\n\r\n const loadingTree$ = store.select((state) => state.loadingTree)\r\n const segmentValues$ = store.select(state => state.segmentValues).pipe(\r\n filter((segmentValues): segmentValues is ScoaSegmentValue => segmentValues !== undefined),\r\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\r\n )\r\n const accountTreeKeys$ = store.select((state) => {\r\n\r\n const { segments, inputs } = state;\r\n\r\n const inputSegments: IAccountSegmentTreeKeys[] = [...inputs].filter(i => !i.linkedSegmentId).map(input => ({\r\n segment: input.formControlName,\r\n innerInput: {\r\n ...input,\r\n id: `${state.inputId}.${input.id}`,\r\n originalId: input.id\r\n },\r\n additionalAccounts: [],\r\n readOnly: input.readonly ?? false,\r\n label: input.label,\r\n formInput: true,\r\n singleSelect: true,\r\n id: input.id,\r\n segmentTree: {} as ScoaAccountTree,\r\n inputs: [] as ScoaInnerInput[],\r\n segmentValue: (state.segmentValues?.[input.formControlName] || {}) as Record<string, any>,\r\n segmentExtension: false,\r\n customSegment: undefined\r\n }))\r\n\r\n\r\n\r\n\r\n const standardSegments: IAccountSegmentTreeKeys[] = [...(segments || [])].map(segment => {\r\n const segmentName = segment.segmentExtension ? segment.customSegment : segment.segment\r\n const segmentValue = state.segmentValues?.[segmentName || '']\r\n return ({\r\n ...segment,\r\n segment: segmentName || '',\r\n singleSelect: Boolean(segment?.singleSelect),\r\n segmentTree: state.accountTree[segment.segment || ''] || {},\r\n inputs: state.inputs || [],\r\n segmentValue: segmentValue || {},\r\n innerInput: {} as ScoaInnerInput,\r\n formInput: false\r\n })\r\n })\r\n\r\n return [...standardSegments, ...inputSegments]\r\n }\r\n\r\n )\r\n const table$ = accountTreeKeys$.pipe(\r\n map(keys =>\r\n keys.map(segment => ({\r\n ...segment,\r\n ...getSegmentCounterAccountValues(segment),\r\n accountInputs: segment.inputs.filter(input => (input as any)?.['segment'] === segment.segment),\r\n input: segment.inputs.find(input => input.formControlName?.toLocaleUpperCase() === segment.segment),\r\n vatCredit: (segment.segmentValue as any)?.vatCredit?.SCOAAccount,\r\n vatDebit: (segment.segmentValue as any)?.vatDebit?.SCOAAccount ,\r\n debit: (segment.segmentValue as any)?.debit?.SCOAAccount || (segment.segmentValue as any)?.debit,\r\n credit: ( (segment.segmentValue as any)?.credit?.SCOAAccount || (segment.segmentValue as any)?.credit),\r\n \r\n })),\r\n )\r\n\r\n\r\n\r\n\r\n )\r\n function getSegmentCounterAccountValues(segment: IAccountSegmentTreeKeys) {\r\n return (segment.additionalAccounts ||[]).reduce((acc, account) => {\r\n const newEntry ={\r\n [`${account}Credit`]: (segment.segmentValue as any)?.[`${account}Credit`]?.SCOAAccount ,\r\n [`${account}Debit`]: (segment.segmentValue as any)?.[`${account}Debit`]?.SCOAAccount \r\n }\r\n return {\r\n ...acc,\r\n ...newEntry\r\n }\r\n },{} as Record<string, any>)\r\n\r\n }\r\n const hasVATApplicableAccount$ = table$.pipe(\r\n map(rows =>\r\n ({\r\n vatCredit: !!rows.some(ro=>!!(ro.segmentValue?.[\"credit\"]?.['VATStatus']) &&(ro.segmentValue?.[\"credit\"]?.['VATStatus']) !== 'N/a') ,\r\n vatDebit:!!rows.some(ro=>!!(ro.segmentValue?.[\"debit\"]?.['VATStatus']) &&(ro.segmentValue?.[\"debit\"]?.['VATStatus']) !== 'N/a') ,\r\n\r\n }))\r\n\r\n\r\n )\r\n const inputs$ = store.select(state => state.inputs)\r\n return {\r\n initiated$,\r\n loadingTree$,\r\n segmentValues$,\r\n accountTreeKeys$,\r\n table$,\r\n hasVATApplicableAccount$,\r\n inputs$,\r\n state$\r\n }\r\n\r\n\r\n}\r\n\r\n","\r\nimport { IScoaAccount, IScoaInputConfig, ScoaSegmentValue } from \"ngx-t-forms-types\";\r\nimport { initialMscoaState, MscoaComponentStore } from \"./mscoa-component-store.service\";\r\n\r\nexport function mscoaStoreActions(store: MscoaComponentStore) {\r\n\r\n return {\r\n resetStore: store.updater((state) => {\r\n return initialMscoaState;\r\n }),\r\n \r\n setConfig: store.updater((state, config:IScoaInputConfig|undefined|null) => ({ ...state, ...(config||{}) })),\r\n setInitiated: store.updater((state) => ({ ...state, initiated: true })),\r\n setSegmentValues: store.updater((state, segmentValues: ScoaSegmentValue | undefined |null) => {\r\n const newSegmentValues = state.accountTreeKeys?.reduce((acc, segment) => {\r\n acc[segment] = ((segmentValues|| {})[segment] || null) as any;\r\n return acc;\r\n }, {} as ScoaSegmentValue)\r\n return ({\r\n ...state,\r\n segmentValues: { ...newSegmentValues, ...segmentValues }\r\n \r\n \r\n })\r\n }\r\n ),\r\n setLoadingTree : store.updater((state, loading: boolean) => ({ ...state, loadingTree: loading })),\r\n setActiveSegment: store.updater((state, activeSegment: string | null) => ({ ...state, activeSegment })),\r\n setSegmentAccount:store.updater((state, { segment, account, accountType }: { segment: string; account: IScoaAccount | undefined; accountType: string}) => {\r\n const oldSegmentValue = state.segmentValues?.[segment.toUpperCase()] || { debit: undefined, credit: undefined };\r\n const newSegmentValue = { ...oldSegmentValue, [accountType]: account };\r\n const newState = {\r\n ...state,\r\n segmentValues: { ...state.segmentValues, [segment.toUpperCase()]: newSegmentValue }\r\n };\r\n \r\n return newState;\r\n })\r\n \r\n }\r\n}\r\n","\r\nimport { catchError, EMPTY, filter, map, Observable, of, switchMap, tap } from \"rxjs\";\r\nimport { IGetTreeResponse, ScoaSegmentValue } from \"ngx-t-forms-types\";\r\nimport { MscoaComponentStore } from \"./mscoa-component-store.service\";\r\nimport { FormBuilderFunctions } from \"ngx-t-forms-types\";\r\n\r\nexport function mscoaStoreEffects(store: MscoaComponentStore) {\r\n\r\n // Each new call of getMovie(id) pushed that id into movieId$ stream.\r\n\r\n const initLoadMscoa$ = store.effect((trigger$: Observable<FormBuilderFunctions | undefined>) =>\r\n trigger$.pipe(\r\n switchMap((functions) => store.selectors.initiated$.pipe(\r\n filter(initiated => !initiated),\r\n switchMap(() => {\r\n store.actions.setLoadingTree(true);\r\n return ((functions?.getLatestAccountTree() ?? of({\r\n message: '',\r\n accountTree: {},\r\n accountTreeKeys: []\r\n })) as Observable<IGetTreeResponse>).pipe(\r\n map(mscoa => {\r\n if (!mscoa) {\r\n throw new Error('Invalid MSCOA data received');\r\n }\r\n return mscoa;\r\n }),\r\n tap(mscoa => {\r\n store.patchState({\r\n ...mscoa\r\n });\r\n store.actions.setInitiated();\r\n store.actions.setLoadingTree(false);\r\n }),\r\n catchError((error) => {\r\n store.actions.setLoadingTree(false);\r\n return EMPTY;\r\n })\r\n );\r\n })\r\n ))\r\n )\r\n );\r\n \r\n const initSetSegmentValues$ = store.effect((\r\n segmentValues$: Observable<ScoaSegmentValue>\r\n ) => {\r\n return segmentValues$.pipe(\r\n tap((segmentValues) => {\r\n store.actions.setSegmentValues(segmentValues)\r\n\r\n })\r\n )\r\n }\r\n \r\n )\r\n\r\n return {\r\n initLoadMscoa$,\r\n \r\n initSetSegmentValues$\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { ComponentStore } from '@ngrx/component-store';\r\n\r\n\r\n\r\nimport { ScoaInterface } from \"ngx-t-forms-types\";\r\n\r\nimport { mscoaStoreSelectors } from './mscoa-selectors';\r\nimport { mscoaStoreActions } from './mscoa-actions';\r\nimport { mscoaStoreEffects } from './mscoa-effects';\r\n\r\n\r\n\r\nexport const initialMscoaState: ScoaInterface = {\r\n accountTreeKeys: [],\r\n inputs: [],\r\n initiated: false,\r\n accountTree: {},\r\n loadingTree: false,\r\n segmentValues: {},\r\n segments: [],\r\n showAllSegments: false,\r\n getTreeResponse: null,\r\n inputId: '',\r\n \r\n};\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MscoaComponentStore extends ComponentStore<ScoaInterface> {\r\n constructor() {\r\n super(initialMscoaState);\r\n \r\n }\r\n //Add a resetStore method to allow resetting the store to its initial state.\r\n\r\n\r\n // Selectors\r\n readonly selectors = mscoaStoreSelectors(this)\r\n // Updaters\r\n readonly actions = mscoaStoreActions(this)\r\n // Effects\r\n readonly effects = mscoaStoreEffects(this)\r\n\r\n}\r\n","export const MIN_ACCOUNT_DETAILS = [\r\n 'AccountNumberShortened',\r\n 'ShortDescription',\r\n // 'SCOAAccount',\r\n 'BreakDownAllowed',\r\n 'PostingLevel',\r\n];\r\nexport const SCOA_ACCOUNT_COLUMNS = [\r\n { key: 'SCOAid', label: 'SCOA ID' },\r\n { key: 'AccountNumber', label: 'Full Account Number' },\r\n { key: 'AccountNumberShortened', label: 'Account Number' },\r\n { key: 'ShortDescription', label: 'Short Description' },\r\n { key: 'DefinitionDescription', label: 'Definition Description' },\r\n { key: 'SCOAAccount', label: 'SCOA Account' },\r\n\r\n { key: 'AccountNumberPrefix', label: 'Account Prefix' },\r\n { key: 'ApplicableTo', label: 'Applicable To' },\r\n { key: 'BreakDownAllowed', label: 'BreakDown Allowed' },\r\n { key: 'ParentSCOAId', label: 'Parent SCOA ID' },\r\n { key: 'PostingLevel', label: 'Posting Level' },\r\n { key: 'Principle', label: 'Principle' },\r\n { key: 'SCOAFile', label: 'SCOA File' },\r\n { key: 'SCOALevel', label: 'SCOA Level' },\r\n { key: 'VATStatus', label: 'VAT Status' },\r\n { key: 'A2A', label: 'A2A' },\r\n { key: 'A4', label: 'A4' },\r\n { key: 'A4F', label: 'A4F' },\r\n { key: 'A5', label: 'A5' },\r\n { key: 'A6', label: 'A6' },\r\n { key: 'A6F', label: 'A6F' },\r\n { key: 'A7', label: 'A7' },\r\n { key: 'A8', label: 'A8' },\r\n { key: 'A9', label: 'A9' },\r\n { key: 'IUDF', label: 'IUDF' },\r\n { key: 'MTSF', label: 'MTSF' },\r\n { key: 'NATGRANT', label: 'NATGRANT' },\r\n { key: 'SA1', label: 'SA1' },\r\n { key: 'SA3', label: 'SA3' },\r\n { key: 'SA30', label: 'SA30' },\r\n { key: 'SA34A', label: 'SA34A' },\r\n { key: 'SA34B', label: 'SA34B' },\r\n { key: 'SA34C', label: 'SA34C' },\r\n { key: 'SA34D', label: 'SA34D' },\r\n { key: 'SA34E', label: 'SA34E' },\r\n { key: 'createdAt', label: 'Created At' },\r\n { key: 'updatedAt', label: 'Updated At' }\r\n];\r\n\r\n// { key: 'AccountNumber1', label: 'Account Number 1' },\r\n// { key: 'AccountNumber2', label: 'Account Number 2' },\r\n// { key: 'AccountNumber3', label: 'Account Number 3' },\r\n// { key: 'AccountNumber4', label: 'Account Number 4' },\r\n// { key: 'AccountNumber5', label: 'Account Number 5' },\r\n// { key: 'AccountNumber6', label: 'Account Number 6' },\r\n// { key: 'AccountNumber7', label: 'Account Number 7' },\r\n// { key: 'AccountNumber8', label: 'Account Number 8' },\r\n// { key: 'AccountNumber9', label: 'Account Number 9' },\r\n// { key: 'AccountNumber10', label: 'Account Number 10' },\r\n// { key: 'AccountNumber11', label: 'Account Number 11' },\r\n// { key: 'AccountNumber12', label: 'Account Number 12' },","import { Component, inject, OnInit } from '@angular/core';\r\n\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { TourMatMenuModule } from 'ngx-ui-tour-md-menu';\r\n\r\n\r\nimport { Observable, of } from 'rxjs';\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\n\r\nimport { FormColumnInputs, FormInterface } from \"ngx-t-forms-types\";\r\n\r\nimport { DataSources } from \"ngx-t-forms-types\";\r\nimport { NGX_T_FORMS_CONFIG_TOKEN } from '../../../../../../../lib/injection-tokens';\r\n\r\n\r\n@Component({\r\n selector: 'app-scoa-input',\r\n standalone: true,\r\n imports: [CommonModule, MatModulesModule, ReactiveFormsModule,\r\n \r\n TourMatMenuModule,],\r\n templateUrl: './scoa-input.component.html',\r\n styleUrl: './scoa-input.component.scss',\r\n\r\n\r\n})\r\nexport class ScoaInputComponent implements OnInit {\r\n ngOnInit(): void {\r\n\r\n }\r\n saveFormData = (data: any) => {\r\n console.log(data)\r\n return of(data)\r\n }\r\n createForm(): FormInterface {\r\n\r\n return {\r\n formId: this.inputConfig.id,\r\n \r\n submissionHandle:{\r\n submissionAPI: [{\r\n _id: '',\r\n name: '',\r\n httpEndPoint: '',\r\n inputSourceId: '',\r\n httpMethod: 'GET',\r\n postFormData: false,\r\n\r\n backEndConfig: {\r\n minimumInputRequired: []\r\n },\r\n valueAccessRules: [],\r\n source: DataSources.Local,\r\n \r\n }],\r\n submissionMessage: ''\r\n },\r\n formTitle: 'Default Title',\r\n \r\n slides: [{\r\n sectionId: 'section1',\r\n label: 'Default Section',\r\n columns: [\r\n {\r\n ...this.inputConfig,\r\n value: this.value,\r\n }\r\n ],\r\n }\r\n ]\r\n }\r\n }\r\n activeFormClass= undefined\r\n dataInjected = inject(MAT_DIALOG_DATA);\r\n inputConfig:FormColumnInputs = this.dataInjected.input;\r\n formGroup: FormGroup = this.dataInjected.formGroup\r\n value: any = this.dataInjected.value;\r\n heading = this.dataInjected.heading\r\n subHeading = this.dataInjected.subHeading\r\n\r\n get hasError() {\r\n const isRequired = this.inputConfig.validators.includes('required') || this.inputConfig.required\r\n return isRequired && !this.value\r\n }\r\n\r\n // private formActions = {\r\n // submitForm: (data: { [key: string]: any }) => this.save(data),\r\n // saveForm: function (formId:string,data: { [key: string]: any; }): Observable<void> {\r\n // console.warn('not implemented')\r\n // return of()\r\n // },\r\n \r\n // }\r\n NGX_T_FORMS_CONFIG = inject(NGX_T_FORMS_CONFIG_TOKEN)\r\n constructor(public dialogRef: MatDialogRef<ScoaInputComponent>) {\r\n this.createForm()\r\n\r\n // this.activeFormClass = new TFormControllerService(form,this.NGX_T_FORMS_CONFIG,this.formActions,this.httpClient)\r\n }\r\n\r\n getContentInput() {\r\n // const slides: TFormControllerService = this.activeFormClass || ({} as TFormControllerService)\r\n // return Object.keys(slides).length > 0 ? (slides?.getContentInput() as TInputControllerService[]) : ([] as TInputControllerService[]);\r\n return [] as any\r\n }\r\n trackByFn(index: number, item: any) {\r\n return item.input.id\r\n }\r\n\r\n save(data:any): Observable<void> {\r\n // const value = this.activeFormClass?.activeFormGroup()?.value\r\n // this.dialogRef.close(value)\r\n return of()\r\n }\r\n}\r\n\r\n","<h2 mat-dialog-title style=\"font-weight: 500;\"> {{heading|titlecase}}</h2>\r\n<p style=\" padding-left: 28px;padding-right:24px;margin-top:0px\">\r\n {{subHeading}}\r\n</p>\r\n<mat-dialog-content>\r\n\r\n <ng-container>\r\n<!-- \r\n <lib-t-form-input \r\n [formGroup]=\"formGroup\" \r\n [inputConfig]=\"inputConfig\"></lib-t-form-input> \r\n -->\r\n\r\n \r\n\r\n \r\n\r\n </ng-container>\r\n</mat-dialog-content>\r\n<mat-dialog-actions align=\"end\">\r\n <button mat-button mat-dialog-close>Close</button>\r\n <button mat-flat-button color=\"primary\" (click)=\"save({})\" cdkFocusInitial>Save</button>\r\n</mat-dialog-actions>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, inject, Input, Output } from '@angular/core';\r\n\r\nimport { SCOA_ACCOUNT_COLUMNS } from '../../store/accountConstants';\r\n\r\nimport { ScoaInputComponent } from '../scoa-input/scoa-input.component';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { take } from 'rxjs';\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { IScoaAccount } from \"ngx-t-forms-types\";\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';;\r\n\r\n@Component({\r\n selector: 'app-account-value',\r\n standalone: true,\r\n imports: [CommonModule, MatModulesModule],\r\n templateUrl: './account-value.component.html',\r\n styleUrl: './account-value.component.scss'\r\n})\r\nexport class AccountValueComponent {\r\n @Input() mscoaAccount: IScoaAccount | undefined;\r\n @Input() accountInputs: FormColumnInputs[] = [];\r\n @Input() userCanClearAccount = false;\r\n @Output() clearSelectedAccount = new EventEmitter<void>();\r\n @Output() updateAccount = new EventEmitter<IScoaAccount>();\r\n get accountDetails() {\r\n if (!this.mscoaAccount) return [];\r\n const descriptions = Object.keys(this.mscoaAccount).filter(key => key.includes('_description')).map(\r\n key => {\r\n \r\n return {\r\n label: key.replace('_', ' '),\r\n key\r\n };\r\n }\r\n );\r\n const li = [...SCOA_ACCOUNT_COLUMNS,...descriptions].map(col => ({\r\n label: col.label,\r\n value: (this.mscoaAccount || {})[col.key as keyof IScoaAccount] ,\r\n input: false,\r\n })).filter(item => item.value !== undefined);\r\n const inputs = this.accountInputs.map(input => ({\r\n label: input.label,\r\n value: this.mscoaAccount?.[input.formControlName as keyof IScoaAccount],\r\n formControlName: input.formControlName,\r\n input: true,\r\n }));\r\n const version = {\r\n label:\"Scoa Version\",\r\n value:( this.mscoaAccount as any)?.version.versionNumber,\r\n formControlName: \"versionNumber\",\r\n input: false,\r\n }\r\n console.log('li', this.mscoaAccount);\r\n return [...li,version, ...inputs];\r\n }\r\n clearAccount() {\r\n this.clearSelectedAccount.emit();\r\n }\r\n readonly dialog = inject(MatDialog);\r\n openValueEdit(inpu: any) {\r\n const input = this.accountInputs.find(i => i.formControlName === inpu.formControlName);\r\n const dialogRef = this.dialog.open(ScoaInputComponent, {\r\n data: {\r\n input: {\r\n ...input,\r\n value: this.mscoaAccount?.[inpu.formControlName as keyof IScoaAccount]\r\n },\r\n heading: `${this.mscoaAccount?.SCOAAccount} - ${inpu.label}`,\r\n value: this.mscoaAccount?.[inpu.formControlName as keyof IScoaAccount],\r\n subHeading: `Enter ${inpu.label} for the account`,\r\n },\r\n minWidth: \"368px\",\r\n minHeight: \"fit-content\",\r\n maxHeight: \"fit-content\",\r\n height: \"fit-content\",\r\n panelClass: \"mscoa-input-dialog\"\r\n })\r\n dialogRef.afterClosed().pipe(take(1)).subscribe(result => {\r\n if (result) {\r\n this.mscoaAccount = {\r\n ...this.mscoaAccount,\r\n [inpu.formControlName]: result\r\n } as any\r\n this.updateAccount.emit(this.mscoaAccount);\r\n\r\n }\r\n\r\n });\r\n }\r\n\r\n}\r\n","<div style=\"max-width: 500px; background: var(--mat-sys-surface-container);\">\r\n <mat-toolbar>\r\n Account Details\r\n <span class=\"spacer\"></span>\r\n <button *ngIf=\"userCanClearAccount\" (click)=\"clearAccount()\" mat-flat-button color=\"accent\">\r\n Clear Account\r\n <mat-icon>\r\n backspace\r\n </mat-icon>\r\n </button>\r\n </mat-toolbar>\r\n <div class=\"account-grid\">\r\n <ng-container *ngFor=\"let item of accountDetails; let last = last\">\r\n <div class=\"label\">\r\n {{item.label}}\r\n </div>\r\n <div class=\"value\">\r\n @if (item?.input) {\r\n @if( !item.value){\r\n <button (click)=\"openValueEdit(item)\" style=\"width: 100%;\" mat-stroked-button>\r\n {{item.value? item.value: 'set ' + item.label}}\r\n </button>\r\n }@else{\r\n <button color=\"primary\" (click)=\"openValueEdit(item)\" style=\"width: 100%;text-align:start\" mat-button>\r\n {{item.value? item.value: 'set ' + item.label}}\r\n </button>\r\n }\r\n }@else {\r\n {{item.value}}\r\n }\r\n </div>\r\n <mat-divider *ngIf=\"!last\"></mat-divider>\r\n </ng-container>\r\n\r\n </div>\r\n</div>","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { MatCheckboxChange } from '@angular/material/checkbox';\r\nimport { MIN_ACCOUNT_DETAILS, SCOA_ACCOUNT_COLUMNS } from '../../store/accountConstants';\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { IScoaAccount } from \"ngx-t-forms-types\";\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nexport interface ColumnConfig<T> {\r\n key: keyof T | string;\r\n header: string;\r\n sortable?: boolean;\r\n cell?: (element: T) => string;\r\n}\r\n@Component({\r\n selector: 'app-scoa-account-table',\r\n standalone: true,\r\n imports: [CommonModule, MatModulesModule,ReactiveFormsModule],\r\n templateUrl: './scoa-account-table.component.html',\r\n styleUrl: './scoa-account-table.component.scss'\r\n})\r\nexport class ScoaAccountTableComponent implements OnChanges, OnInit {\r\n @Input() data: { accounts: IScoaAccount[], account: string } | undefined;\r\n @Output() accountSelected = new EventEmitter<IScoaAccount | null>();\r\n dataSource: MatTableDataSource<IScoaAccount>;\r\n searchControl = new FormControl('');\r\n @Input() selectedAccount: IScoaAccount | null = null;\r\n @Input() segment: string | undefined\r\n\r\n minViewCol: string[] = [];\r\n\r\n scoaAccountColumns: any[] = [];\r\n colDisplayChanged(event: MatCheckboxChange, col: string) {\r\n const checked = event.checked\r\n if (checked) {\r\n this.minViewCol.push(col)\r\n return\r\n }\r\n\r\n this.minViewCol = this.minViewCol.filter(d => d !== col)\r\n\r\n }\r\n showFullAccountDetails: boolean = false\r\n get displayColumns() {\r\n const cols = this.scoaAccountColumns.map(h => h.key)\r\n if (!this.showFullAccountDetails) {\r\n return cols.filter(c => this.minViewCol.includes(c))\r\n }\r\n return cols\r\n }\r\n colIsChecked(col: string) {\r\n return this.minViewCol.includes(col)\r\n }\r\n\r\n @ViewChild(MatSort, { static: true }) sort!: MatSort;\r\n @ViewChild(MatPaginator, { static: true }) paginator!: MatPaginator;\r\n constructor() {\r\n this.dataSource = new MatTableDataSource<IScoaAccount>([]);\r\n }\r\n\r\n ngOnInit() {\r\n this.scoaAccountColumns = SCOA_ACCOUNT_COLUMNS\r\n this.minViewCol = MIN_ACCOUNT_DETAILS\r\n this.dataSource.sort = this.sort;\r\n this.dataSource.paginator = this.paginator;\r\n this.searchControl.valueChanges.subscribe(value => {\r\n this.applyFilter(value || '');\r\n });\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['data'] && changes['data'].currentValue) {\r\n const newData = changes['data'].currentValue.accounts;\r\n this.dataSource.data = this.mapAccounts(newData)\r\n }\r\n }\r\n\r\n mapAccounts(accounts: IScoaAccount[]) {\r\n return accounts.map(acc => ({\r\n ...acc,\r\n AccountNumberShortened: this.removeTrailingZeros(acc.AccountNumber)\r\n }))\r\n\r\n }\r\n removeTrailingZeros(str: string) {\r\n // Use a regular expression to remove trailing zeros\r\n return str.replace(/0+$/, '');\r\n }\r\n applyFilter(filterValue: string) {\r\n this.dataSource.filter = filterValue.trim().toLowerCase();\r\n if (this.dataSource.paginator) {\r\n this.dataSource.paginator.firstPage();\r\n }\r\n }\r\n\r\n\r\n selectAccount(account: IScoaAccount) {\r\n const isActive = this.rowIsActivated(account)\r\n if (!isActive) {\r\n return\r\n }\r\n if (this.selectedAccount && this.selectedAccount.SCOAid === account.SCOAid) {\r\n this.accountSelected.emit(null)\r\n return\r\n }\r\n this.accountSelected.emit(account)\r\n }\r\n clearSearch() {\r\n this.searchControl.setValue('');\r\n \r\n }\r\n rowIsActivated(row: IScoaAccount): boolean {\r\n const isProject = this.segment?.toUpperCase() === 'PROJECT'\r\n if (!isProject) {\r\n return row.PostingLevel === \"Y\"\r\n }\r\n return row.PostingLevel === \"Y\" || row.BreakDownAllowed === \"Y\"\r\n }\r\n showMinMal: boolean = true\r\n toogleDetails() {\r\n this.showMinMal = !this.showMinMal\r\n if (this.showMinMal) {\r\n\r\n this.minViewCol = MIN_ACCOUNT_DETAILS\r\n return\r\n } else {\r\n this.minViewCol = SCOA_ACCOUNT_COLUMNS.map(h => h.key)\r\n }\r\n\r\n }\r\n\r\n\r\n}","<div >\r\n <mat-toolbar class=\"search\">\r\n <mat-form-field>\r\n <mat-label>Search Accounts</mat-label>\r\n <input matInput [formControl]=\"searchControl\" placeholder=\"Enter SCOA ID, Account Number, or Description\">\r\n @if ( !!this.searchControl.value) {\r\n <button matSuffix mat-icon-button (click)=\"clearSearch()\">\r\n <mat-icon>\r\n close\r\n </mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n\r\n \r\n <span class=\"spacer\"></span>\r\n <button mat-flat-button [matMenuTriggerFor]=\"menu\">\r\n <mat-icon>\r\n view_column\r\n </mat-icon>\r\n Columns\r\n\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <div style=\" padding-left: 16px;\r\n margin-top: 8px;\" mat-subheader>Account list headers</div>\r\n <br>\r\n\r\n <section style=\"padding-left: 16px; padding-right:16px\">\r\n <button style=\"width: 100%;\" (click)=\"toogleDetails()\" class=\"cols\" color=\"primary\" mat-flat-button>\r\n {{showMinMal ? 'show all details' : 'Show less details'}}\r\n </button>\r\n </section>\r\n <p style=\"\r\n padding-left: 16px;\r\n padding-right:16px;\r\n \r\n font-size:14px\">Only selected headers will be shown.</p>\r\n @for (col of scoaAccountColumns; track $index) {\r\n <button (click)=\"$event.stopPropagation()\" class=\"cols\" mat-menu-item>\r\n\r\n <mat-checkbox [checked]=\"colIsChecked(col.key)\" (change)=\"colDisplayChanged($event,col.key)\"\r\n class=\"cols\">\r\n {{col.label}}</mat-checkbox>\r\n </button>\r\n }\r\n </mat-menu>\r\n </mat-toolbar>\r\n\r\n @if (dataSource.filteredData.length === 0) {\r\n <div class=\"no-results\">\r\n No accounts match your search criteria.\r\n </div>\r\n }@else {\r\n\r\n <table mat-table [dataSource]=\"dataSource||[]\" matSort>\r\n <ng-container *ngFor=\"let column of scoaAccountColumns\" [matColumnDef]=\"column.key\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{ column.label }}</th>\r\n <td mat-cell *matCellDef=\"let element\">{{ element[column.key] }}</td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayColumns;\" class=\"account-row\" (click)=\"selectAccount(row)\"\r\n [class.deactivated-row]=\"rowIsActivated(row) === false\" [class.selected-row]=\"selectedAccount === row\"></tr>\r\n </table>\r\n <mat-paginator [pageSizeOptions]=\"[5, 10, 20]\" showFirstLastButtons></mat-paginator>\r\n\r\n }\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, inject, OnDestroy, OnInit } from '@angular/core';\r\nimport { finalize, Observable, Subject, take, tap } from 'rxjs';\r\n\r\nimport { FlatTreeControl } from '@angular/cdk/tree';\r\nimport { MatTreeFlattener, MatTreeFlatDataSource } from '@angular/material/tree';\r\n\r\nimport _ from 'lodash';\r\n\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { IIncludedSegmentConfig, IScoaAccount, ScoaAccountTree } from \"ngx-t-forms-types\";\r\nimport { convertToTree, ObjectTreeFlatNode, ObjectTreeNode } from '../../../../../t-dynamic-data-edit/elements/api-value-access-rules/functions/convertDataToTree';\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';;\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\n import { AccountValueComponent } from '../account-value/account-value.component';\r\nimport { ScoaAccountTableComponent } from '../scoa-account-table/scoa-account-table.component';\r\n\r\nexport interface IMscoaComputationComponentData {\r\n data: ScoaAccountTree;\r\n segment: string;\r\n value: IScoaAccount | undefined;\r\n accountInputs: FormColumnInputs[];\r\n activeColumn: string | undefined;\r\n segmentConfig: IIncludedSegmentConfig | undefined;\r\n readonly:boolean;\r\n getSCOAAccount:(account:string)=>Observable<{accounts:IScoaAccount[]}>;\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'app-mscoa-computation',\r\n standalone: true,\r\n imports: [CommonModule, \r\n MatModulesModule,\r\n AccountValueComponent,\r\n ScoaAccountTableComponent\r\n ],\r\n\r\n templateUrl: './mscoa-computation.component.html',\r\n styleUrl: './mscoa-computation.component.scss'\r\n})\r\nexport class MscoaComputationComponent implements OnInit, OnDestroy {\r\n\r\n dataInjected = inject(MAT_DIALOG_DATA) as IMscoaComputationComponentData;\r\n // readonly dialog = inject(MatDialog); \r\n // Removed duplicate declaration\r\n data: ScoaAccountTree | undefined = this.dataInjected.data\r\n segment: string | undefined = this.dataInjected.segment\r\n value: IScoaAccount | undefined = this.dataInjected.value\r\n accountInputs: FormColumnInputs[] = this.dataInjected.accountInputs\r\n activeColumn: string | undefined = this.dataInjected.activeColumn\r\n readonly:boolean = this.dataInjected.readonly\r\n segmentConfig: IIncludedSegmentConfig | undefined = this.dataInjected.segmentConfig\r\n private destroy$ = new Subject<void>();\r\n treeControl: FlatTreeControl<ObjectTreeFlatNode>;\r\n private treeFlattener: MatTreeFlattener<ObjectTreeNode, ObjectTreeFlatNode>;\r\n dataSource: MatTreeFlatDataSource<ObjectTreeNode, ObjectTreeFlatNode>;\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef<MscoaComputationComponent>,) {\r\n this.treeControl = new FlatTreeControl<ObjectTreeFlatNode>(\r\n node => node.level,\r\n node => node.expandable\r\n );\r\n\r\n this.treeFlattener = new MatTreeFlattener(\r\n this.transformer,\r\n node => node.level,\r\n node => node.expandable,\r\n node => node.children\r\n );\r\n\r\n this.dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);\r\n\r\n }\r\n\r\n\r\n\r\n\r\n ngOnInit(): void {\r\n this._selectedAccount = this.value || null\r\n\r\n this.dataSource.data = convertToTree(this.data) as unknown as ObjectTreeNode[]\r\n console.log(this.dataSource)\r\n \r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n hasChild = (_: number, node: ObjectTreeFlatNode) => node.expandable;\r\n private transformer = (node: ObjectTreeNode, level: number): ObjectTreeFlatNode => {\r\n return {\r\n expandable: !!node.children && node.children.length > 0,\r\n name: node.name,\r\n level: level,\r\n path: node.path\r\n };\r\n };\r\n\r\n\r\n isActivePathOrParent(path: string[]) {\r\n if (!this._selected) {\r\n return false;\r\n }\r\n if (path.length > this._selected.path.length) return false;\r\n const samePath = this._selected.path?.every((p, i) => p === path[i])\r\n if (samePath) return true;\r\n return path.every((p, i) => p === this._selected?.path[i])\r\n }\r\n toggleNode(node: ObjectTreeFlatNode): void {\r\n if (node.expandable) {\r\n if (this.treeControl.isExpanded(node)) {\r\n this.treeControl.collapse(node);\r\n } else {\r\n // Expand only the immediate children of the clicked node\r\n this.treeControl.expand(node);\r\n\r\n // Optionally, collapse sibling nodes to reduce visual clutter\r\n this.collapseSiblings(node);\r\n }\r\n }\r\n }\r\n private collapseSiblings(node: ObjectTreeFlatNode): void {\r\n const parent = this.getParentNode(node);\r\n if (parent) {\r\n this.treeControl.getDescendants(parent)\r\n .filter(child => child !== node && this.treeControl.isExpanded(child))\r\n .forEach(child => this.treeControl.collapse(child));\r\n }\r\n }\r\n\r\n private getParentNode(node: ObjectTreeFlatNode): ObjectTreeFlatNode | null {\r\n const currentLevel = node.level;\r\n if (currentLevel < 1) {\r\n return null;\r\n }\r\n const startIndex = this.treeControl.dataNodes.indexOf(node) - 1;\r\n for (let i = startIndex; i >= 0; i--) {\r\n const currentNode = this.treeControl.dataNodes[i];\r\n if (currentNode&&currentNode.level < currentLevel) {\r\n return currentNode;\r\n }\r\n }\r\n return null;\r\n }\r\n _selected: ObjectTreeFlatNode | undefined;\r\n\r\n selectNode(node: ObjectTreeFlatNode) {\r\n const isSamePath = node.path.every((p, i) => p === this._selected?.path[i])\r\n if (isSamePath) {\r\n this.cancel()\r\n return\r\n }\r\n this._selected = node\r\n this.getSelectedAccounts()\r\n return\r\n\r\n }\r\n\r\n searchAccount: any[] = []\r\n searchingAccounts: boolean = false\r\n account: string | undefined = undefined\r\n getSelectedAccounts() {\r\n const account = this._selected?.path.join(\":\")\r\n if (!account) {\r\n return\r\n }\r\n this.searchingAccounts = true\r\n this.dataInjected.getSCOAAccount(account).pipe(\r\n take(1),\r\n tap(res => {\r\n this.searchAccount = res.accounts\r\n this.account = account\r\n console.log(this.searchAccount)\r\n\r\n }),\r\n finalize(() => {\r\n this.searchingAccounts = false\r\n })\r\n ).subscribe()\r\n }\r\n cancel() {\r\n this._selected = undefined\r\n this.searchAccount = []\r\n this._selectedAccount = null\r\n this.account = undefined\r\n }\r\n saveAccount() {\r\n if (this._selectedAccount) {\r\n this.closeAndPassData(this._selectedAccount)\r\n } else {\r\n this.closeAndPassData(undefined)\r\n }\r\n }\r\n closeAndPassData(account: IScoaAccount | undefined) {\r\n this.dialogRef.close(account)\r\n }\r\n\r\n _selectedAccount: IScoaAccount | null = null;\r\n selectAccount(account: IScoaAccount | null) {\r\n\r\n this._selectedAccount = account\r\n\r\n }\r\n clearSelectedAccount() {\r\n this._selectedAccount = null\r\n\r\n }\r\n get saveSelection() {\r\n const allInputsAreValid = this.accountInputs.every(input =>\r\n input.required || input.validators.includes(\"\") ? this._selectedAccount?.[input.formControlName as keyof IScoaAccount] : true)\r\n\r\n const isDifferent = !_.isEqual(this._selectedAccount, this.value)\r\n return isDifferent && allInputsAreValid\r\n }\r\n updateAccount(account: IScoaAccount) {\r\n this._selectedAccount = account\r\n \r\n }\r\n get userCanClearAccount() {\r\n if(this.readonly ){\r\n return false\r\n }\r\n return !this.segmentConfig?.readOnly\r\n }\r\n}","<mat-toolbar class=\"glass\" [color]=\"activeColumn ==='debit'?'primary':'warn'\">\r\n <span>\r\n <h1>\r\n {{ segment|| 'No segment' | titlecase}} : {{activeColumn |\r\n titlecase}}\r\n account\r\n </h1>\r\n\r\n </span>\r\n\r\n <span class=\"spacer\">\r\n </span>\r\n\r\n</mat-toolbar>\r\n\r\n@if ( _selectedAccount ) {\r\n<div style=\"max-height:calc(98vh - 128px); max-width: 98vw;\">\r\n <app-account-value [accountInputs]=\"accountInputs\" [userCanClearAccount]=\"userCanClearAccount\"\r\n [mscoaAccount]=\"_selectedAccount\" (updateAccount)=\"updateAccount($event)\"\r\n (clearSelectedAccount)=\"clearSelectedAccount()\">\r\n </app-account-value>\r\n</div>\r\n\r\n\r\n}@else{\r\n<mat-drawer-container style=\"max-height:calc(98vh - 128px); max-width: 98vw;\" autosize>\r\n <mat-drawer #drawer style=\" \r\n max-width: 98vw;\r\n overflow: auto;\r\n background: var(--mat-sys-surface-container) !important;padding:16px\" mode=\"side\" position=\"end\"\r\n [opened]=\"!searchingAccounts && !!this._selected\">\r\n\r\n <h4>Select an Account</h4>\r\n <p class=\"info\">Please choose from the options below. Search results for account\r\n <strong>{{account}}</strong>\r\n </p>\r\n\r\n\r\n <app-scoa-account-table [selectedAccount]=\" _selectedAccount\" [segment]=\"segment\"\r\n (accountSelected)=\" selectAccount($event)\" [data]=\"{\r\n accounts: searchAccount,\r\n account: ''\r\n }\">\r\n </app-scoa-account-table>\r\n\r\n <footer>\r\n <mat-toolbar>\r\n <span class=\"spacer\"></span>\r\n <button mat-flat-button color=\"warn\" (click)=\"cancel()\">Cancel account selection</button>\r\n\r\n </mat-toolbar>\r\n </footer>\r\n </mat-drawer>\r\n <div class=\"tree-content\">\r\n\r\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding>\r\n\r\n\r\n <button class=\"toggle-button\" mat-icon-button disabled></button>\r\n <mat-checkbox (change)=\"selectNode(node)\"\r\n disabled=\"{{isActivePathOrParent(node.path) && searchingAccounts}}\"\r\n [checked]=\"isActivePathOrParent(node.path)\">\r\n <mat-spinner color=\"primary\" *ngIf=\"isActivePathOrParent(node.path) && searchingAccounts\"\r\n class=\"loading\"></mat-spinner>\r\n <span *ngIf=\"!(isActivePathOrParent(node.path) && searchingAccounts)\" class=\"label\"\r\n [class.selected]=\"isActivePathOrParent(node.path)\">\r\n {{node.name}}\r\n\r\n </span>\r\n <span *ngIf=\"isActivePathOrParent(node.path) && searchingAccounts\" class=\"label\"\r\n [class.selected]=\"isActivePathOrParent(node.path)\">\r\n ...Loading <strong>{{node.name}}</strong> accounts\r\n </span>\r\n </mat-checkbox>\r\n\r\n </mat-tree-node>\r\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding>\r\n\r\n <button class=\"toggle-button\" mat-icon-button [attr.aria-label]=\"'Toggle ' + node.name\"\r\n (click)=\"toggleNode(node)\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox (change)=\"selectNode(node)\" disabled=\"true\" checked=\"true\"\r\n *ngIf=\"isActivePathOrParent(node.path)\">\r\n <span class=\"label\" [class.selected]=\"isActivePathOrParent(node.path)\">\r\n {{node.name}}\r\n </span>\r\n </mat-checkbox>\r\n\r\n <span *ngIf=\"!isActivePathOrParent(node.path)\" class=\"label\"\r\n [class.selected]=\"isActivePathOrParent(node.path)\">\r\n {{node.name}} {{node.selected}}\r\n </span>\r\n\r\n\r\n\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n</mat-drawer-container>\r\n}\r\n<mat-divider></mat-divider>\r\n<mat-toolbar class=\"glass\" style=\" background: rgba(255, 255, 255, 0.15)\">\r\n <span class=\"spacer\"></span>\r\n <button mat-button (click)=\"closeAndPassData(undefined)\">Close</button>\r\n @if (userCanClearAccount&& !!_selectedAccount?._id) {\r\n <button mat-raised-button color=\"primary\" [disabled]=\"!saveSelection\" (click)=\"saveAccount()\">Save</button>\r\n }\r\n\r\n</mat-toolbar>","import { Component, OnInit, OnDestroy, inject, Input, EventEmitter, Output, Injector } from '@angular/core';\r\nimport { combineLatest, map, Observable, Subject, take, takeUntil, distinctUntilChanged, timer, tap, } from 'rxjs';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { IScoaAccount, IScoaInputConfig, ITableScoaSelectionRow, ITowerStepColumn, ScoaInnerInput, ScoaSegmentValue } from \"ngx-t-forms-types\";\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { MscoaComponentStore, } from '../../store/mscoa-component-store.service';\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';;\r\nimport { IMscoaComputationComponentData, MscoaComputationComponent } from '../mscoa-computation/mscoa-computation.component';\r\nimport { FormBuilderFunctions } from \"ngx-t-forms-types\";\r\nimport { _isEqual } from '../../../../../../shared/functions/isEqual';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { ScoaInputComponent } from '../scoa-input/scoa-input.component';\r\n\r\nimport {\r\n ComponentPortal,\r\n PortalModule,\r\n\r\n} from '@angular/cdk/portal';\r\nimport { ConvertCamelCasePipe } from '../../../../../../shared/pipes/date/days-ago.pipe';\r\n\r\n@Component({\r\n selector: 'app-mscoa-chart',\r\n templateUrl: './mscoa-chart.component.html',\r\n styleUrls: ['./mscoa-chart.component.scss'],\r\n standalone: true,\r\n imports: [MatModulesModule, CommonModule, PortalModule,ConvertCamelCasePipe],\r\n providers: [MscoaComponentStore,],\r\n\r\n\r\n})\r\n\r\nexport class MscoaChartComponent implements OnInit, OnDestroy {\r\n\r\n\r\n selectAccountTreeKeys$ = this.store.selectors.accountTreeKeys$\r\n selectMscoaLoadingTree$ = this.store.selectors.loadingTree$;\r\n table$ = this.store.selectors.table$.pipe(\r\n distinctUntilChanged((a, b) => _isEqual(a, b))\r\n );\r\n hasVATApplicableAccount$ = this.store.selectors.hasVATApplicableAccount$;\r\n segmentValues$ = this.store.selectors.segmentValues$;\r\n initiated$ = this.store.selectors.initiated$;\r\n inputs$ = this.store.selectors.inputs$;\r\n private destroy$ = new Subject<void>()\r\n _formBuilderFunctions: FormBuilderFunctions | undefined = undefined\r\n\r\n constructor(private store: MscoaComponentStore, private injector: Injector) {\r\n }\r\n @Output() onContainerClick = new EventEmitter<MouseEvent>();\r\n setAsTouched(ev:MouseEvent) {\r\n this.onContainerClick.emit(ev)\r\n }\r\n // Create portal properties\r\n inputPortals: { [key: string]: ComponentPortal<any> } = {};\r\n // Improved setupPortals method for MscoaChartComponent\r\n setupPortals(inputs: ScoaInnerInput[]) {\r\n // Reset portals\r\n this.inputPortals = {};\r\n\r\n if (!inputs || inputs.length === 0) {\r\n console.log('No inputs to setup portals for');\r\n return;\r\n }\r\n\r\n const sectionId = this.inputConfig?.sectionId;\r\n if (!sectionId) {\r\n console.warn('No sectionId provided in inputConfig');\r\n return;\r\n }\r\n\r\n // Generate form group\r\n try {\r\n \r\n\r\n\r\n\r\n\r\n\r\n // Dynamically import the component\r\n import('../../../../t-form-input.component').then(module => {\r\n // Filter and create portals for each input\r\n const validInputs = inputs.filter(input => {\r\n // Skip inputs linked to segments if needed\r\n if (input.linkedSegmentId) return false;\r\n\r\n // Make sure the form control exists\r\n if (!this.formGroup?.controls[`${this.inputConfig?.id}.${input.id}`]) {\r\n console.error(`Form control not found for input ${input.id} in section ${sectionId}`);\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n\r\n // Create a portal for each valid input\r\n validInputs.forEach(inp => {\r\n // Create the portal with the proper injector\r\n this.inputPortals[`${this.inputConfig?.id}.${inp.id}`] = new ComponentPortal(\r\n module.TFormInputComponent,\r\n null,\r\n this.createInjectorWithProps({\r\n inputConfig: {\r\n ...inp,\r\n sectionId,\r\n id: `${this.inputConfig?.id}.${inp.id}`,\r\n label:'',\r\n appearance:'fill',\r\n originalId: inp.id,\r\n },\r\n formGroup:this.formGroup,\r\n formBuilderFunctions: this.formBuilderFunctions,\r\n editorMode: this.editorMode\r\n })\r\n );\r\n\r\n \r\n });\r\n \r\n }).catch(error => {\r\n console.error('Error importing TFormInputComponent:', error);\r\n });\r\n\r\n \r\n \r\n } catch (error) {\r\n console.error('Error in setupPortals:', error);\r\n }\r\n }\r\n\r\n // Helper to create an injector with properties to pass to the component\r\n createInjectorWithProps(props: any): Injector {\r\n return Injector.create({\r\n providers: [\r\n { provide: 'COMPONENT_PROPS', useValue: props }\r\n ],\r\n parent: this.injector\r\n });\r\n }\r\n @Input() inputConfig!: ITowerStepColumn;\r\n @Input() editorMode: boolean = false\r\n @Input() set formBuilderFunctions(func: FormBuilderFunctions | undefined) {\r\n if (this.formBuilderFunctions !== undefined) return\r\n this._formBuilderFunctions = func\r\n this.loadMscoa(func)\r\n }\r\n get formBuilderFunctions() {\r\n return this._formBuilderFunctions\r\n }\r\n @Input() set segmentValues(segmentValues: ScoaSegmentValue | null) {\r\n this.store.actions.setSegmentValues(segmentValues)\r\n }\r\n @Input() readonly = false\r\n _config: IScoaInputConfig | undefined | null = undefined\r\n @Input() set config(config: IScoaInputConfig | undefined | null) {\r\n if (!config) return\r\n if (_isEqual(this._config, config)) return\r\n this._config = config\r\n this.store.actions.setConfig(({\r\n ...config\r\n } as any))\r\n\r\n\r\n\r\n }\r\n get config() {\r\n return this._config\r\n }\r\n @Input() formGroup: FormGroup | undefined | null\r\n @Output() segmentValuesChanged = new EventEmitter<ScoaSegmentValue>();\r\n @Output() interaction = new EventEmitter<string>();\r\n\r\n\r\n\r\n readonly dialog = inject(MatDialog);\r\n\r\n\r\n ngOnInit(): void {\r\n this.segmentValues$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(segmentValues => {\r\n this.segmentValuesChanged.emit(segmentValues);\r\n });\r\n\r\n this.inputs$.\r\n pipe(takeUntil(this.destroy$))\r\n .subscribe(inputs => {\r\n this.setupPortals(inputs);\r\n });\r\n\r\n\r\n }\r\n segmentChange(activeSegment: string) {\r\n this.store.actions.setActiveSegment(activeSegment)\r\n }\r\n\r\n loadMscoa(functions: FormBuilderFunctions | undefined): void {\r\n this.store.effects.initLoadMscoa$(functions);\r\n }\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n // this.store.actions.resetStore();\r\n }\r\n accountNumberSelected(account: IScoaAccount | undefined, segment: string,\r\n accountType: string = \"debit\") {\r\n this.store.actions.setSegmentAccount({ segment, account, accountType })\r\n }\r\n\r\n\r\n get hasMultiSelect$(): Observable<boolean> {\r\n return this.table$.pipe(\r\n map(table => table.some(row => (row as any).singleSelect === false))\r\n )\r\n }\r\n\r\n get cols$(): Observable<string[]> {\r\n return combineLatest([\r\n this.hasMultiSelect$,\r\n this.hasVATApplicableAccount$\r\n ]).pipe(\r\n map(([hasMultiSelect, hasVATApplicableAccount]) => {\r\n // Start with base columns\r\n let cols = [\"segment\", \"debit\"];\r\n \r\n // Add credit column if hasMultiSelect is true\r\n if (hasMultiSelect) {\r\n cols.push(\"credit\");\r\n }\r\n \r\n // Add vatDebit if applicable\r\n if (hasVATApplicableAccount.vatDebit) {\r\n cols.push(\"vatDebit\");\r\n }\r\n \r\n // Add vatCredit only if both conditions are met:\r\n // 1. hasVATApplicableAccount.vatCredit is true\r\n // 2. hasMultiSelect is true (as vatCredit isn't needed when hasMultiSelect is false)\r\n if (hasVATApplicableAccount.vatCredit && hasMultiSelect) {\r\n cols.push(\"vatCredit\");\r\n }\r\n const exts = (this.config?.extensionAccountsForSegments || []).map((ext) =>hasMultiSelect? ([\r\n `${ext}Debit`,\r\n `${ext}Credit`\r\n ]) : ([\r\n `${ext}Debit`\r\n ])).flat()\r\n return [...cols,...exts];\r\n })\r\n );\r\n }\r\n editSelection: ITableScoaSelectionRow | any = undefined\r\n activeColumn: string | undefined;\r\n selectAccount(row: ITableScoaSelectionRow | undefined, col: string | undefined) {\r\n\r\n this.editSelection = row;\r\n this.activeColumn = col;\r\n const isInput = (row as any)?.innerInput && Object.keys((row as any)?.innerInput).length > 0\r\n console.error(\"selectAccount not implemented---\", row, col)\r\n this.interaction.emit()\r\n if (isInput) {\r\n this.openInput(isInput)\r\n return\r\n } else {\r\n\r\n this.openScoaSelection()\r\n }\r\n \r\n\r\n\r\n\r\n }\r\n openScoaSelection() {\r\n if (!this.editSelection) return\r\n console.error(\"openScoaSelection not implemented\", this.editSelection)\r\n const data: IMscoaComputationComponentData = {\r\n\r\n segment: this.editSelection.segment as string,\r\n segmentConfig: this.config?.segments?.find(segment => segment.id === this.editSelection?.id),\r\n value: (this.editSelection.segmentValue as any)?.[this.activeColumn as \"debit\" | \"credit\"],\r\n data: this.editSelection.segmentTree,\r\n accountInputs: this.editSelection.accountInputs,\r\n activeColumn: this.activeColumn,\r\n readonly: this.readonly,\r\n getSCOAAccount: this.formBuilderFunctions?.getSCOAAccount ?? (() => new Observable(subscriber => subscriber.next({ accounts: [] }))) as any\r\n }\r\n const dialogRef = this.dialog.open(MscoaComputationComponent, {\r\n data,\r\n minWidth: \"fit-content\",\r\n minHeight: \"fit-content\",\r\n maxHeight: \"fit-content\",\r\n height: \"fit-content\",\r\n panelClass: \"mscoa-computation-dialog\"\r\n\r\n });\r\n dialogRef.afterClosed().pipe(take(1)).subscribe(result => {\r\n if (!result) return\r\n if (result && this.editSelection['singleSelect'] === true) {\r\n\r\n if(this.activeColumn === 'debit'){\r\n this.accountNumberSelected(result, this.editSelection.customSegment || this.editSelection.segment, \"debit\")\r\n this.accountNumberSelected(result, this.editSelection.customSegment || this.editSelection.segment, \"credit\") \r\n return\r\n }\r\n if(this.activeColumn === 'vatDebit'){\r\n this.accountNumberSelected(result, this.editSelection.customSegment || this.editSelection.segment, \"vatDebit\")\r\n this.accountNumberSelected(result, this.editSelection.customSegment || this.editSelection.segment, \"vatCredit\")\r\n return\r\n }\r\n const split = this.activeColumn?.split(/(?=[A-Z])/)\r\n const isExtensionDebit = split?.at(-1)?.toLowerCase() === 'debit'\r\n if(isExtensionDebit && this.config?.extensionAccountsForSegments?.includes(split[0] as string)){\r\n this.accountNumberSelected(result, this.editSelection.customSegment || this.editSelection.segment, this.activeColumn)\r\n this.accountNumberSelected(result, this.editSelection.customSegment || this.editSelection.segment, split[0] + 'Credit')\r\n return\r\n }\r\n \r\n\r\n } else {\r\n this.accountNumberSelected(result, this.editSelection.customSegment || this.editSelection.segment, this.activeColumn )\r\n }\r\n\r\n this.editSelection = undefined;\r\n this.activeColumn = undefined\r\n });\r\n }\r\n openInput(input: FormColumnInputs) {\r\n const dialogRef = this.dialog.open(ScoaInputComponent, {\r\n data: {\r\n input,\r\n formGroup:this.formGroup,\r\n heading: `${this.activeColumn} ${this.editSelection.segment?.toLowerCase() || 'Incomplete configuration'}`,\r\n value: this.editSelection.segmentValue?.[this.activeColumn as \"debit\" | \"credit\"],\r\n subHeading: `Enter ${this.activeColumn} ${this.editSelection.segment?.toLowerCase() || '***'} and save`\r\n },\r\n minWidth: \"368px\",\r\n minHeight: \"fit-content\",\r\n maxHeight: \"fit-content\",\r\n height: \"fit-content\",\r\n panelClass: \"mscoa-input-dialog\"\r\n });\r\n dialogRef.afterClosed().pipe(take(1)).subscribe(result => {\r\n console.log(result, this.editSelection.segment)\r\n if (result) {\r\n\r\n this.accountNumberSelected(result[this.editSelection.segment], this.editSelection.segment, this.activeColumn as \"debit\" | \"credit\")\r\n }\r\n\r\n this.editSelection = undefined;\r\n this.activeColumn = undefined\r\n });\r\n }\r\n\r\n onClick() {\r\n console.error(\"onContainerClick not implemented\")\r\n }\r\n\r\n viewData$ = combineLatest([\r\n this.selectMscoaLoadingTree$,\r\n this.selectAccountTreeKeys$,\r\n this.table$,\r\n this.cols$,\r\n this.hasMultiSelect$\r\n ]).pipe(\r\n map(([loading, accountTreeKeys, tableData, cols, hasMultiSelect]) => ({\r\n loading,\r\n accountTreeKeys,\r\n tableData: tableData || [],\r\n cols,\r\n hasMultiSelect\r\n }))\r\n );\r\n test(){\r\n this.viewData$.pipe(take(1)).subscribe((data) => {\r\n console.error(\"Data---\", data)\r\n })\r\n }\r\n inputWillBeRemovedIn(id: string) {\r\n return this.countdownSeconds[id]?.count\r\n }\r\n countdownSeconds: {\r\n [key: string]:\r\n {\r\n count: number | null,\r\n stop$: Subject<void>\r\n }\r\n } = {}\r\n removeInput(item: any) {\r\n if (this.countdownSeconds[item.id]) {\r\n this.stopDeletion(item.id);\r\n return;\r\n }\r\n \r\n this.countdownSeconds[item.id] = {\r\n count: 5,\r\n stop$: new Subject<void>()\r\n };\r\n \r\n const countdown$ = timer(0, 1000).pipe(\r\n tap((secondsElapsed) => {\r\n const data = this.countdownSeconds[item.id];\r\n if (!data) {\r\n return;\r\n }\r\n \r\n const remainingTime = 5 - secondsElapsed;\r\n if (remainingTime <= 0) {\r\n this.formDeleteInput(item)\r\n this.stopDeletion(item.id);\r\n // Stop and remove timer\r\n // Actual deletion logic here, e.g., remove the element by id\r\n // document.getElementById(id)?.remove();\r\n } else {\r\n data.count = remainingTime;\r\n }\r\n }),\r\n takeUntil(this.countdownSeconds[item.id]!.stop$)\r\n );\r\n \r\n countdown$?.subscribe({\r\n complete: () => {\r\n console.log('Deletion stopped or completed');\r\n }\r\n });\r\n }\r\n stopDeletion(id: string) {\r\n if (this.countdownSeconds[id]) {\r\n this.countdownSeconds[id]?.stop$.next();\r\n delete this.countdownSeconds[id];\r\n }\r\n }\r\n overId: string | null = null\r\n formDeleteInput(item: FormColumnInputs){\r\n this.formBuilderFunctions?.deleteInput(item)\r\n }\r\n editInput(input: any) {\r\n this.formBuilderFunctions?.editInput(input)\r\n }\r\n selectionDisabled(row: any, col: any) {\r\n if(this.inputConfig?.readonly || row['readOnly']){\r\n return true\r\n }\r\n const isVatCol = col === 'vatCredit' || col === 'vatDebit';\r\n \r\n // Case 1: Credit column with singleSelect enabled\r\n if (row['singleSelect'] && col === 'credit' && !isVatCol) {\r\n return true;\r\n }\r\n \r\n // Case 2: VAT columns with special conditions\r\n if (isVatCol) {\r\n const vatType = col === 'vatCredit' ? 'credit' : 'debit';\r\n const vatStatus = row['segmentValue']?.[vatType]?.['VATStatus'];\r\n return vatStatus === 'N/a' || !vatStatus;\r\n }\r\n const split = (col || '').split(/(?=[A-Z])/)\r\n const isExtensionDebit = split?.at(-1)?.toLowerCase() === 'debit'\r\n const isExtensionCredit = split?.at(-1)?.toLowerCase() === 'credit'\r\n const isInConfig = this.config?.extensionAccountsForSegments?.includes(split[0] as string)\r\n const isSetupForRow = Boolean(row?.additionalAccounts?.includes(split[0] as string))\r\n if(!!isExtensionDebit && !!isInConfig && !isSetupForRow || isExtensionCredit && isInConfig && !isSetupForRow){\r\n return true\r\n }\r\n \r\n return false;\r\n }\r\n}","\r\n<section (click)=\"setAsTouched($event)\" class=\"p-4\" *ngIf=\"(viewData$ | async) as viewData\">\r\n\r\n @if (viewData.loading) {\r\n <div style=\"padding: 24px; display: flex; align-items: center; justify-content: center;\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n } @else {\r\n @defer (on viewport) {\r\n <ng-container *ngIf=\"viewData.accountTreeKeys\">\r\n <div class=\"table-container\">\r\n <table mat-table [dataSource]=\"viewData.tableData\" class=\"table\">\r\n @for (col of viewData.cols; track col; let i = $index) {\r\n <ng-container [matColumnDef]=\"col\">\r\n <th [style.text-align]=\"i === 0 ? 'right' : 'center'\"\r\n style=\"background: var(--mat-sys-surface-container);\" mat-header-cell *matHeaderCellDef>\r\n @if (viewData.hasMultiSelect || i === 0) {\r\n {{col | titlecase | unCamelCase}}\r\n } @else if (col === 'debit') {\r\n Debit / Credit\r\n }@else if (col === 'vatDebit') {\r\n VAT Debit / Credit\r\n }@else{\r\n {{col | unCamelCase}} / credit\r\n }\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\" [style.text-align]=\"i === 0 ? 'right' : 'center'\"\r\n [ngClass]=\"{'segment-cell': i === 0}\"\r\n [class.active]=\"editSelection?.segment === row['segment'] && activeColumn === col\">\r\n @if (i === 0) {\r\n <div style=\" display: flex\r\n;\r\n align-items: center;\r\n justify-self: right;\">\r\n\r\n @if(editorMode && row.innerInput?.id){\r\n <button mat-icon-button\r\n [matMenuTriggerData]=\"{innerInput:row.innerInput}\"\r\n [matMenuTriggerFor]=\"inputMenu\" \r\n [matTooltip]=\"'options for: ' + row.innerInput.label\">\r\n <mat-icon>\r\n more_vert\r\n </mat-icon>\r\n </button>\r\n }\r\n {{row['label']}}\r\n \r\n </div>\r\n \r\n } @else {\r\n \r\n @if(row.innerInput?.id &&formGroup && inputPortals[row.innerInput.id]){\r\n <div>\r\n <ng-template [cdkPortalOutlet]=\"inputPortals[row.innerInput?.id]\"></ng-template>\r\n \r\n </div>\r\n\r\n\r\n\r\n }@else {\r\n @if (row[col]) {\r\n\r\n <button [disabled]=\"!!row['singleSelect'] === true && col === 'credit'\"\r\n (mousedown)=\"$event.preventDefault(); $event.stopPropagation(); \r\n selectAccount(row, col);setAsTouched($event)\" color=\"primary\"\r\n mat-button class=\"cell-button\">\r\n <div class=\"content\">\r\n \r\n {{row[col]| unCamelCase}}\r\n </div>\r\n </button>\r\n } @else {\r\n <button [disabled]=\"selectionDisabled(row, col)\"\r\n (click)=\"selectAccount(row, col); $event.stopPropagation();setAsTouched($event)\" mat-button class=\"cell-button\">\r\n <div class=\"content\">\r\n {{!!row['singleSelect'] === true && col === 'credit' ? 'auto selected ' : 'Select ' + row['segment'] + '\r\n ' + col + ' account' | unCamelCase}}\r\n </div>\r\n </button>\r\n }\r\n }\r\n\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n <tr mat-header-row *matHeaderRowDef=\"viewData.cols\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: viewData.cols;\"></tr>\r\n </table>\r\n </div>\r\n <ng-container *ngIf=\"viewData.accountTreeKeys.length === 0\">\r\n <section style=\"padding: 16px; text-align: center; display: flex;\">\r\n <span><mat-icon>info</mat-icon></span>\r\n <span>\r\n No account segments are currently configured.\r\n Please configure account segments to proceed.\r\n </span>\r\n </section>\r\n </ng-container>\r\n </ng-container>\r\n } @placeholder {\r\n <div class=\"table-container\">\r\n <p class=\"text-gray-500\">Loading data...</p>\r\n </div>\r\n }\r\n\r\n @loading (minimum 100ms) {\r\n <div class=\"flex justify-center items-center h-64\">\r\n <mat-progress-spinner mode=\"indeterminate\"></mat-progress-spinner>\r\n </div>\r\n } @error {\r\n <div class=\"table-container\">\r\n <p class=\"text-red-500\">Error loading data. Please try again.</p>\r\n </div>\r\n }\r\n }\r\n\r\n</section>\r\n\r\n<mat-menu #inputMenu=\"matMenu\">\r\n <ng-template matMenuContent let-innerInput=\"innerInput\">\r\n\r\n\r\n <button [matTooltip]=\"'Edit Input: ' +innerInput.label \" (click)=\"editInput(innerInput)\"\r\n mat-icon-button>\r\n <mat-icon>\r\n edit\r\n </mat-icon>\r\n\r\n </button>\r\n @if(!!inputWillBeRemovedIn(innerInput.id) ){\r\n <button (mouseover)=\"overId = innerInput.id\" (mouseout)=\"overId = null\"\r\n (click)=\"removeInput(innerInput)\" color=\"warn\" mat-stroked-button>\r\n <div style=\"display: flex; align-items: center;\">\r\n <mat-progress-spinner style=\"margin-right: 5px;\" color=\"primary\" class=\"cancelProgress\"\r\n [value]=\"((inputWillBeRemovedIn(innerInput.id)||0)/5)*100\">\r\n </mat-progress-spinner>\r\n {{overId === innerInput.id ? 'Click to cancel':'Deleting in'}}\r\n {{inputWillBeRemovedIn(innerInput.id)}}\r\n </div>\r\n\r\n </button>\r\n\r\n }@else {\r\n <button [matTooltip]=\"'Delete input ' + innerInput.label \" (click)=\"removeInput(innerInput)\"\r\n mat-icon-button>\r\n\r\n <mat-icon>\r\n delete\r\n </mat-icon>\r\n </button>\r\n }\r\n </ng-template>\r\n</mat-menu>\r\n","import { Directive, ElementRef, Input, Optional, Self, OnDestroy, DoCheck } from '@angular/core';\r\nimport { ControlValueAccessor, NgControl, ValidationErrors } from '@angular/forms';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { Subject } from 'rxjs';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\n\r\nimport { _isEqual } from '../../../../shared/functions/isEqual';\r\n\r\nexport interface BaseCustomInputConfig {\r\n controlType: string;\r\n nextId: number;\r\n}\r\n/**\r\n * Abstract base class for custom form input components that implement Material Form Field Control and Control Value Accessor.\r\n * Provides common functionality for custom form controls including state management, validation, and accessibility features.\r\n *\r\n * @template T - The type of value that this input control handles\r\n * \r\n * @implements {MatFormFieldControl<T>} - Material Form Field Control interface\r\n * @implements {ControlValueAccessor} - Angular's Control Value Accessor interface\r\n * @implements {OnDestroy} - Angular's OnDestroy lifecycle hook\r\n * \r\n * @param ngControl - Optional NgControl instance for form integration\r\n * @param _elementRef - Reference to the host element\r\n * @param config - Configuration object for the custom input\r\n * \r\n * @property {Subject<void>} stateChanges - Subject that emits when the control's state changes\r\n * @property {string} id - Unique identifier for the control\r\n * @property {boolean} focused - Tracks the focus state of the control\r\n * @property {boolean} touched - Tracks if the control has been touched\r\n * @property {string} controlType - Type identifier for the control\r\n * @property {boolean} autofilled - Tracks if the control has been autofilled\r\n * @property {string} userAriaDescribedBy - ARIA describedby attribute for accessibility\r\n * @property {string} placeholder - Placeholder text for the control\r\n * @property {boolean} required - Whether the control is required\r\n * @property {boolean} disabled - Whether the control is disabled\r\n * @property {T | null} value - Current value of the control\r\n * @property {ValidationErrors | null} errors - Current validation errors\r\n * @property {boolean} errorState - Whether the control is in an error state\r\n * @property {boolean} empty - Abstract getter for checking if the control is empty\r\n * @property {boolean} shouldLabelFloat - Abstract getter for determining if the label should float\r\n * \r\n * @method writeValue - Writes a new value to the control\r\n * @method registerOnChange - Registers a callback for value changes\r\n * @method registerOnTouched - Registers a callback for when the control is touched\r\n * @method setDisabledState - Sets the disabled state of the control\r\n * @method setDescribedByIds - Sets ARIA describedby IDs for accessibility\r\n * @method onContainerClick - Handles clicks on the control container\r\n * @method markAsTouched - Marks the control as touched\r\n * @method onFocusIn - Handles focus events\r\n * @method onFocusOut - Handles blur events\r\n * @method checkValidationsAndErrors - Checks and updates validation errors\r\n * @method ngOnDestroy - Cleanup on component destruction\r\n */\r\n\r\n@Directive()\r\nexport abstract class BaseCustomInput<T> implements MatFormFieldControl<T>, ControlValueAccessor, OnDestroy, DoCheck {\r\n destroy$ = new Subject<void>();\r\n protected constructor(\r\n @Optional() @Self() public ngControl: NgControl,\r\n protected _elementRef: ElementRef<HTMLElement>,\r\n private config: BaseCustomInputConfig\r\n ) {\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n protected _touched = false;\r\n // Common properties\r\n readonly stateChanges = new Subject<void>();\r\n readonly id = `${this.config.controlType}-${this.config.nextId++}`;\r\n focused = false;\r\n get touched(){\r\n const { touched } = this.ngControl || {};\r\n return touched || this._touched;\r\n }\r\n set touched(value: boolean) {\r\n this._touched = value;\r\n }\r\n readonly controlType = this.config.controlType;\r\n autofilled = false;\r\n\r\n // Protected fields with getters/setters\r\n protected _placeholder = '';\r\n protected _required = false;\r\n protected _disabled = false;\r\n protected _value: T | null = null;\r\n protected _errors: ValidationErrors | null = null;\r\n\r\n // Input properties\r\n @Input('aria-describedby') userAriaDescribedBy = '';\r\n\r\n // Required implementations\r\n abstract get empty(): boolean;\r\n abstract get shouldLabelFloat(): boolean;\r\n\r\n // Common getters/setters\r\n @Input()\r\n get placeholder(): string { return this._placeholder; }\r\n set placeholder(value: string) {\r\n this._placeholder = value;\r\n this.stateChanges.next();\r\n }\r\n\r\n @Input()\r\n get required(): boolean { return this._required; }\r\n set required(req: boolean) {\r\n this._required = coerceBooleanProperty(req);\r\n this.stateChanges.next();\r\n }\r\n\r\n @Input()\r\n get disabled(): boolean { return this._disabled; }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n\r\n get value(): T | null { return this._value; }\r\n set value(value: T | null) {\r\n if (!_isEqual(this._value, value)) {\r\n this._value = value;\r\n this.onChange(value);\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n get errorState(): boolean {\r\n const invalidValue = this.value === null || this.value === undefined || this.value === '';\r\n return ((invalidValue && this.required) || !!this.ngControl?.errors) && this.touched;\r\n }\r\n\r\n get errors() { return this._errors; }\r\n set errors(err: ValidationErrors | null) {\r\n if (!_isEqual(this._errors, err)) {\r\n this._errors = err;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n // ControlValueAccessor implementation\r\n onChange = (_: T | null) => { };\r\n onTouched = () => { };\r\n\r\n writeValue(value: T): void {\r\n this._value = value;\r\n this.stateChanges.next();\r\n }\r\n\r\n registerOnChange(fn: (_: T | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n }\r\n\r\n // MatFormFieldControl implementation\r\n setDescribedByIds(ids: string[]): void {\r\n const controlElement = this._elementRef.nativeElement.querySelector(`.${this.controlType}`);\r\n controlElement?.setAttribute('aria-describedby', ids.join(' '));\r\n }\r\n\r\n // Common methods\r\n onContainerClick(event: MouseEvent): void {\r\n if (event.target !== this._elementRef.nativeElement) {\r\n this.markAsTouched();\r\n this.stateChanges.next();\r\n }\r\n \r\n }\r\n\r\n markAsTouched(): void {\r\n if (!this.touched) {\r\n this.onTouched();\r\n this.touched = true;\r\n }\r\n }\r\n\r\n onFocusIn(event: FocusEvent): void {\r\n if (!this.focused) {\r\n this.focused = true;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n onFocusOut(event: FocusEvent): void {\r\n if (!this._elementRef.nativeElement.contains(event.relatedTarget as Element)) {\r\n this.touched = true;\r\n this.focused = false;\r\n this.onTouched();\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n\r\n errorMessage: string | null = null;\r\n temporaryError(msg: string) {\r\n // Set the error message\r\n this.errorMessage = msg\r\n const { control } = this.ngControl || {};\r\n const newErrors = {\r\n ...control?.errors, temporaryError :msg\r\n };\r\n control?.setErrors(newErrors);\r\n this.stateChanges.next();\r\n setTimeout(() => {\r\n this.errorMessage = null\r\n\r\n\r\n control?.setErrors(control?.errors ? { ...control.errors, temporaryError: undefined } : null);\r\n this.stateChanges.next();\r\n console.log(\"Error message cleared.\"); // Log or update the UI accordingly\r\n }, 3000);\r\n }\r\n\r\n checkValidationsAnErrors() {\r\n\r\n const { control } = this.ngControl || {};\r\n const { value, } = this;\r\n // Early exit if conditions are not met\r\n if (!this.required || !control || !value && !control.touched) {\r\n return;\r\n }\r\n\r\n const errors = control.errors ?? {};\r\n if (!_isEqual(this.errors, errors)) return;\r\n this.errors = errors;\r\n const hasIsRequiredError = 'required' in errors;\r\n const valueValid = value !== undefined && value !=='' && value !==null && control.touched;\r\n const hasOtherErrors = Object.keys(errors).length > 1;\r\n\r\n if (valueValid) {\r\n if (hasIsRequiredError) {\r\n // Only update errors if there are other errors besides 'required'\r\n if (hasOtherErrors) {\r\n delete errors['required'];\r\n control.setErrors(errors);\r\n } else {\r\n control.setErrors(null);\r\n }\r\n }\r\n } else if (!hasIsRequiredError) {\r\n // Only add 'required' error if it's not already present\r\n control.setErrors({ required: true, ...errors });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stateChanges.complete();\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n\r\n }\r\n\r\n ngDoCheck(): void {\r\n\r\n this.checkValidationsAnErrors();\r\n }\r\n}","import { Component, ElementRef, Input, Optional, Self } from '@angular/core';\r\nimport { FormGroup, NgControl } from '@angular/forms';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { FormBuilderFunctions, ITowerStepColumn } from \"ngx-t-forms-types\";\r\n\r\nimport { MscoaChartComponent } from '../mscoa-chart/mscoa-chart.component';\r\nimport { IScoaInputConfig, ScoaSegmentValue } from \"ngx-t-forms-types\";\r\nimport _ from 'lodash';\r\nimport { CommonModule } from '@angular/common';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';;\r\n\r\nconst customInputConfig: BaseCustomInputConfig = {\r\n controlType: 'lib-mscoa-reactive-form-field',\r\n nextId: 0\r\n}\r\n\r\n@Component({\r\n selector: 'lib-mscoa-reactive-form-field',\r\n standalone: true,\r\n imports: [MscoaChartComponent ,CommonModule],\r\n templateUrl: './mscoa-reactive-form-field.component.html',\r\n styleUrl: './mscoa-reactive-form-field.component.css',\r\n host: {\r\n '[lib-mscoa-reactive-form-field.floating]': 'shouldLabelFloat',\r\n '[id]': 'id',\r\n },\r\n providers: [{ provide: MatFormFieldControl, useExisting: MscoaReactiveFormFieldComponent }],\r\n})\r\nexport class MscoaReactiveFormFieldComponent extends BaseCustomInput< ScoaSegmentValue> \r\n{\r\n override get empty(): boolean {\r\n return this.value === null || this.value === undefined || Object.keys(this.value).length === 0;\r\n }\r\n constructor(\r\n @Optional() @Self() ngControl: NgControl,\r\n elementRef: ElementRef<HTMLElement>\r\n ) {\r\n super(ngControl, elementRef, customInputConfig);\r\n }\r\n\r\n \r\n\r\n @Input() formBuilderFunctions: FormBuilderFunctions |undefined\r\n @Input() editorMode: boolean = false;\r\n\r\n _inputConfig!: ITowerStepColumn;\r\n\r\n mscoaInputConfig$ = new BehaviorSubject<IScoaInputConfig | undefined>(undefined)\r\n @Input() set inputConfig(inputConfig:ITowerStepColumn){\r\n this._inputConfig = inputConfig\r\n this.mscoaInputConfig$.next({...inputConfig.mscoaConfig,inputId:inputConfig.id} as any)\r\n\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n get shouldLabelFloat(): boolean {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n\r\n\r\n\r\n segmentValuesChanged(event: ScoaSegmentValue): void {\r\n this.value = event\r\n this.onChange(event);\r\n this.stateChanges.next(); \r\n\r\n }\r\n\r\n get readonly(): boolean {\r\n return !!this._inputConfig.readonly\r\n }\r\n get parentFormGroup(): FormGroup | null {\r\n return this.ngControl?.control?.parent as FormGroup;\r\n }\r\n override checkValidationsAnErrors() {\r\n const { control } = this.ngControl || {};\r\n \r\n // Early exit if conditions are not met\r\n if (!this.required || !control ) {\r\n return;\r\n }\r\n \r\n const errors = control.errors ?? {};\r\n this.errors = errors;\r\n const hasIsRequiredError = 'required' in errors;\r\n const requiredSegments = this._inputConfig.mscoaConfig.segments\r\n const allSegmentsValid = requiredSegments?.every((segment) => {\r\n const key = segment.customSegment || segment.segment;\r\n const segmentValue = this.value && key ? this.value[key] : undefined;\r\n if((segmentValue !== undefined && segmentValue !== null) === false){\r\n console.error(\"Segment value is invalid\", segmentValue, key, this.value, segment);\r\n }\r\n return segmentValue !== undefined && segmentValue !== null ;\r\n }\r\n );\r\n const valueValid = Boolean(allSegmentsValid) ;\r\n const hasOtherErrors = Object.keys(errors).length > 1;\r\n if (valueValid === true && hasIsRequiredError) {\r\n \r\n // Only update errors if there are other errors besides 'required'\r\n if (hasOtherErrors) {\r\n delete errors['required'];\r\n control.setErrors(errors);\r\n } else {\r\n control.setErrors(null);\r\n }\r\n \r\n } else if (!hasIsRequiredError&& valueValid === false) {\r\n // Only add 'required' error if it's not already present\r\n console.error(\"Required was set to true but the value is not valid\", valueValid,this.value, errors)\r\n control.setErrors({ required: true, ...errors });\r\n }\r\n }\r\n\r\n \r\n \r\n}\r\n","\r\n<div (click)=\"onContainerClick($event)\">\r\n\r\n <app-mscoa-chart \r\n (onContainerClick)=\"onContainerClick($event)\"\r\n (segmentValuesChanged)=\"segmentValuesChanged($event)\" \r\n [config]=\"mscoaInputConfig$|async\"\r\n [inputConfig]=\"_inputConfig \"\r\n [readonly]=\"readonly\"\r\n [editorMode]=\"editorMode\"\r\n [formGroup]=\"parentFormGroup\"\r\n [formBuilderFunctions]=\"formBuilderFunctions\"\r\n [segmentValues]=\"value\"></app-mscoa-chart>\r\n\r\n</div>\r\n\r\n","import { FormGroup, ValidationErrors } from \"@angular/forms\";\r\n\r\nimport { ElementTypes, IDateRangePickerInput } from\"ngx-t-forms-types\";\r\nimport { FormColumnInputs } from \"ngx-t-forms-types\";\r\nexport function getInputErrorMessage(inputConfig: FormColumnInputs,formGroup: FormGroup) {\r\n const control = formGroup.controls[inputConfig.id];\r\n const dateRangePicker = inputConfig.element === ElementTypes.DateRangePicker;\r\n\r\n if(!!dateRangePicker){\r\n const { startDateControl,endDateControl } = inputConfig as IDateRangePickerInput ||{};\r\n if(!startDateControl || !endDateControl){\r\n return `Start/End Form control is not found`;\r\n }\r\n const startControl = formGroup.controls[`${inputConfig.id}.${startDateControl}`] || formGroup.controls[startDateControl];\r\n const endControl = formGroup.controls[`${inputConfig.id}.${endDateControl}`] || formGroup.controls[endDateControl];\r\n \r\n \r\n return returnError({\r\n ...startControl?.errors,\r\n ...endControl?.errors\r\n });\r\n }\r\n\r\n if (!control && !dateRangePicker ) {\r\n return `Form control ${inputConfig.id} is not found`;\r\n }\r\n\r\n return returnError(control?.errors||null);\r\n\r\n\r\n\r\n\r\n\r\n function returnError(errors: ValidationErrors | null):string|undefined{\r\n if (!errors) return undefined;\r\n \r\n // Check for temporary error first\r\n if (errors['temporaryError']) {\r\n return errors['temporaryError'];\r\n }\r\n\r\n if (Object.keys(errors).length === 0) return undefined;\r\n\r\n const errorArray = Object.keys(errors).map((key) => {\r\n switch(key) {\r\n case 'required':\r\n return 'This field is required';\r\n case 'email':\r\n return 'Invalid email';\r\n default:\r\n return errors[key]?.message || \r\n (typeof errors[key] === 'string' ? errors[key] : 'Invalid');\r\n }\r\n });\r\n\r\n return errorArray.join(',');\r\n }\r\n}","import { Component, EventEmitter, Input, Output, } from '@angular/core';\r\nimport {ITowerStepColumn } from \"ngx-t-forms-types\";\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormBuilderFunctions } from \"ngx-t-forms-types\";\r\n\r\n\r\nimport _ from 'lodash';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { MscoaReactiveFormFieldComponent } from './elements/mscoa-reactive-form-field/mscoa-reactive-form-field.component';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\n\r\n\r\n@Component({\r\n selector: 'lib-mscoa-form-input',\r\n standalone: true,\r\n imports: [\r\n MatModulesModule,\r\n CommonModule, \r\n ReactiveFormsModule,\r\n TFormInputStatusComponent,\r\n MscoaReactiveFormFieldComponent\r\n ],\r\n templateUrl: './mscoa-form-input.component.html',\r\n styleUrl: './mscoa-form-input.component.css'\r\n})\r\nexport class MscoaFormInputComponent {\r\n @Input() inputConfig!: ITowerStepColumn;\r\n @Input() editorMode: boolean = false; \r\n @Input() formGroup!: FormGroup;\r\n \r\n @Input() formBuilderFunctions: FormBuilderFunctions |undefined\r\n\r\n\r\n @Output() reload = new EventEmitter<void>();\r\n\r\n \r\n get errorMessage(){\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n }\r\n \r\n \r\n}\r\n","<form [formGroup]=\"formGroup\">\r\n <mat-form-field \r\n\r\n [appearance]=\"this.inputConfig.appearance ||'fill' \"\r\n [floatLabel]=\"'always'\"\r\n subscriptSizing=\"dynamic\" *ngIf=\"this.inputConfig as inputConfig\">\r\n <mat-label>\r\n {{this.inputConfig.label }} \r\n <lib-t-form-input-status \r\n [inputConfig]=\"this.inputConfig\"></lib-t-form-input-status>\r\n </mat-label>\r\n <mat-card style=\"overflow:auto\">\r\n \r\n <lib-mscoa-reactive-form-field \r\n [inputConfig]=\"this.inputConfig\"\r\n [formControlName]=\"this.inputConfig.id\"\r\n [required]=\"this.inputConfig.required\"\r\n [formGroup]=\"formGroup\"\r\n [editorMode]=\"editorMode\"\r\n [formBuilderFunctions]=\"formBuilderFunctions\"\r\n ></lib-mscoa-reactive-form-field>\r\n \r\n </mat-card>\r\n \r\n\r\n @if(inputConfig.hintLabel || inputConfig.temporaryHint ){\r\n <mat-hint class=\"inputHint\">\r\n {{ inputConfig.temporaryHint || inputConfig.hintLabel}}\r\n </mat-hint>\r\n }\r\n \r\n @if (!!errorMessage) {\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{errorMessage}}</mat-error>\r\n }\r\n <!-- Prefix Icon -->\r\n <mat-icon *ngIf=\"inputConfig.prefixIcon\" matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n \r\n <!-- Suffix Icon or Password Visibility Toggle -->\r\n <ng-container *ngIf=\"inputConfig.suffixIcon\">\r\n <mat-icon *ngIf=\"inputConfig.id !== 'password'\" matSuffix>{{ inputConfig.suffixIcon\r\n }}</mat-icon>\r\n <!-- <button *ngIf=\"inputConfig.id === 'password'\" (click)=\"inputConfig.togglePasswordVisibility()\"\r\n mat-icon-button matSuffix>\r\n <mat-icon>{{ inputConfig.showPassword ? 'remove_red_eye' : 'eye_off' }}</mat-icon>\r\n </button> -->\r\n </ng-container>\r\n \r\n <!-- Prefix & Suffix Text -->\r\n <span *ngIf=\"inputConfig.prefixText\" matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n <span *ngIf=\"inputConfig.suffixText\" matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText\r\n }}</span>\r\n \r\n <!-- Character Count Hint -->\r\n <mat-hint *ngIf=\"inputConfig.maxLength && formGroup\" align=\"end\">\r\n {{ (formGroup.controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength\r\n }}\r\n </mat-hint>\r\n \r\n \r\n </mat-form-field>\r\n\r\n\r\n \r\n \r\n \r\n","import { Options } from \"signature_pad\";\r\n\r\n export const SignatureConfigOptions: Options = {\r\n // Pen properties\r\n dotSize: 2,\r\n minWidth: 0.5,\r\n maxWidth: 2.5,\r\n penColor: '#000000',\r\n \r\n // Canvas background\r\n backgroundColor: '#ffffff',\r\n \r\n // Performance and quality\r\n velocityFilterWeight: 0.9, // Increase from 0.7\r\n minDistance: 2.0, // Increase from 1.0 to reduce points\r\n throttle: 8, // Reduce from 16 for smoother lines\r\n \r\n // Composite operation for drawing\r\n compositeOperation: 'source-over' as GlobalCompositeOperation,\r\n \r\n // Canvas context options\r\n canvasContextOptions: {\r\n alpha: true,\r\n desynchronized: true,\r\n willReadFrequently: false \r\n }\r\n }","import CryptoJS from 'crypto-js';\r\ninterface EncryptedData {\r\n ciphertext: string;\r\n salt: string;\r\n iv: string;\r\n hmac: string;\r\n}\r\n\r\nconst ITERATIONS = 100000;\r\nconst KEY_LENGTH = 32;\r\n\r\nasync function encrypt(value: string, secret: string): Promise<EncryptedData> {\r\n if (!value || !secret) throw new Error('Missing required parameters');\r\n\r\n try {\r\n const salt = crypto.getRandomValues(new Uint8Array(16));\r\n const iv = crypto.getRandomValues(new Uint8Array(16));\r\n \r\n const saltWords = CryptoJS.lib.WordArray.create(salt);\r\n const ivWords = CryptoJS.lib.WordArray.create(iv);\r\n \r\n const key = CryptoJS.PBKDF2(secret, saltWords, {\r\n keySize: KEY_LENGTH / 4,\r\n iterations: ITERATIONS,\r\n hasher: CryptoJS.algo.SHA256\r\n });\r\n\r\n // Convert input to WordArray\r\n const messageWords = CryptoJS.enc.Utf8.parse(value);\r\n\r\n const encrypted = CryptoJS.AES.encrypt(messageWords, key, {\r\n iv: ivWords,\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.Pkcs7\r\n });\r\n\r\n const hmac = CryptoJS.HmacSHA256(encrypted.ciphertext.toString(), key);\r\n\r\n return {\r\n ciphertext: CryptoJS.enc.Base64.stringify(encrypted.ciphertext),\r\n salt: CryptoJS.enc.Base64.stringify(saltWords),\r\n iv: CryptoJS.enc.Base64.stringify(ivWords),\r\n hmac: hmac.toString(CryptoJS.enc.Base64)\r\n };\r\n } catch (error) {\r\n console.error('Encryption error:', error);\r\n throw error;\r\n }\r\n}\r\n\r\nasync function decrypt(encrypted: EncryptedData, secret: string): Promise<string> {\r\n if (!encrypted || !secret) throw new Error('Missing required parameters');\r\n\r\n try {\r\n const salt = CryptoJS.enc.Base64.parse(encrypted.salt);\r\n const iv = CryptoJS.enc.Base64.parse(encrypted.iv);\r\n const ciphertext = CryptoJS.enc.Base64.parse(encrypted.ciphertext);\r\n \r\n const key = CryptoJS.PBKDF2(secret, salt, {\r\n keySize: KEY_LENGTH / 4,\r\n iterations: ITERATIONS,\r\n hasher: CryptoJS.algo.SHA256\r\n });\r\n\r\n const computedHmac = CryptoJS.HmacSHA256(ciphertext.toString(), key)\r\n .toString(CryptoJS.enc.Base64);\r\n \r\n if (computedHmac !== encrypted.hmac) {\r\n throw new Error('Invalid HMAC - data may be tampered');\r\n }\r\n\r\n const decrypted = CryptoJS.AES.decrypt(\r\n CryptoJS.lib.CipherParams.create({\r\n ciphertext: ciphertext\r\n }),\r\n key,\r\n {\r\n iv: iv,\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.Pkcs7\r\n }\r\n );\r\n\r\n return decrypted.toString(CryptoJS.enc.Utf8);\r\n } catch (error) {\r\n console.error('Decryption error:', error);\r\n throw error;\r\n }\r\n}\r\n\r\nexport { encrypt, decrypt, EncryptedData };","\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';\r\nimport { HmacSHA256, enc } from 'crypto-js';\r\n\r\n\r\n const APP_SECRET = `c011//e91d5664a8df0b///f6240a06445**b9YWnn7db012ec5a4f62b12e0555_24bfec2`; // Move to environment config in production\r\nexport const generateSecretKey = async (input:FormColumnInputs): Promise<string> => {\r\n try {\r\n if(!input){\r\n throw new Error(\"Input is required to generate secret key\");\r\n }\r\n const {id,element,formControlName,sectionId} = input;\r\n // Add salt and pepper to the mix\r\n const pepper = \"NGX_T_FORMS_V1\";\r\n const timestamp = new Date().getTimezoneOffset();\r\n \r\n // Create a more complex seed with multiple layers\r\n const primarySeed = `${id}:${formControlName}:${element}:${sectionId}`;\r\n const enrichedSeed = `${pepper}:${primarySeed}:${timestamp}`;\r\n \r\n // Double hashing for increased security\r\n const firstHash = HmacSHA256(enrichedSeed, APP_SECRET);\r\n const secondHash = HmacSHA256(firstHash.toString(), APP_SECRET + pepper);\r\n \r\n // Take first 32 characters of final hash\r\n return secondHash.toString(enc.Hex).substring(0, 32);\r\n } catch (error) {\r\n console.error('Error generating secret key:', error);\r\n throw error\r\n }\r\n \r\n\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, inject, Input, NgZone, Optional, Self, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';;\r\nimport { NgControl } from '@angular/forms';\r\n\r\nimport SignaturePad, { PointGroup } from 'signature_pad';\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';;\r\n\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { debounceTime, finalize, firstValueFrom, Subject, Subscription, take } from 'rxjs';\r\nimport { SignatureConfigOptions } from '../../config/signature';\r\nimport { IUserSignature } from \"ngx-t-forms-types\";\r\nimport { decrypt, encrypt, EncryptedData } from '../../../../../../shared/functions/enryption';\r\nimport { generateSecretKey } from '../../../../../../services/core/t-input-controller/functions/generateInputSecret';\r\nimport { NGX_T_FORMS_CONFIG_TOKEN } from '../../../../../../injection-tokens';\r\n\r\n\r\nconst customInputConfig: BaseCustomInputConfig = {\r\n controlType: 'lib-signature-pad-input',\r\n nextId: 0\r\n}\r\n@Component({\r\n selector: 'lib-signature-pad-input',\r\n standalone: true,\r\n imports: [CommonModule, MatModulesModule],\r\n templateUrl: './signature-pad-input.component.html',\r\n styleUrl: './signature-pad-input.component.css',\r\n providers: [\r\n {\r\n provide: MatFormFieldControl,\r\n useExisting: SignaturePadInputComponent\r\n }\r\n ],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SignaturePadInputComponent extends BaseCustomInput<PointGroup[] | undefined> implements AfterViewInit {\r\n readonly NGX_T_FORMS_CONFIG = inject(NGX_T_FORMS_CONFIG_TOKEN)\r\n @ViewChild('signature', { static: false }) signatureElement!: ElementRef\r\n signaturePad: SignaturePad | undefined;\r\n override get empty(): boolean {\r\n return !this.value;\r\n }\r\n override get shouldLabelFloat(): boolean {\r\n return true;\r\n }\r\n private signatureSubject = new Subject<void>();\r\n private subscription: Subscription = new Subscription();\r\n\r\n constructor(\r\n @Optional() @Self() ngControl: NgControl,\r\n elementRef: ElementRef<HTMLElement>,\r\n private cdr: ChangeDetectorRef,\r\n private ngZone: NgZone\r\n ) {\r\n super(ngControl, elementRef, customInputConfig);\r\n this.subscription = this.signatureSubject\r\n .pipe(debounceTime(500))\r\n .subscribe(async () => {\r\n await this.saveSignature();\r\n });\r\n }\r\n _inputConfig!: FormColumnInputs;\r\n @Input() set inputConfig(inputConfig: FormColumnInputs) {\r\n\r\n this._inputConfig = inputConfig;\r\n }\r\n\r\n get inputConfig() {\r\n return this._inputConfig;\r\n }\r\n\r\n\r\n\r\n ngAfterViewInit() {\r\n this.loading = 'Initializing signature pad ...';\r\n \r\n this.initSignature()\r\n\r\n }\r\n\r\n initSignature() {\r\n this.ngZone.runOutsideAngular(async () => {\r\n try {\r\n {\r\n\r\n const canvas = document.createElement('canvas');\r\n // Set canvas dimensions\r\n canvas.width = this.signatureElement.nativeElement.offsetWidth;\r\n canvas.height = 200; // You can adjust this value\r\n\r\n // Append canvas to the div\r\n this.signatureElement.nativeElement.appendChild(canvas);\r\n // Initialize SignaturePad\r\n this.signaturePad = new SignaturePad(canvas, SignatureConfigOptions);\r\n // Load initial value if exists\r\n\r\n if (this.value !== undefined && this.value !== null && (this.value as any) !== '') {\r\n\r\n await this.initLoadValue()\r\n\r\n\r\n } else{\r\n await this.loadUserDigitalSignatureFromAPI()\r\n }\r\n\r\n\r\n // Add event listeners for changes\r\n this.signaturePad.addEventListener('afterUpdateStroke', () => {\r\n \r\n this.signatureSubject.next();\r\n this.canSaveSignature = true;\r\n \r\n \r\n }, { once: false });\r\n if(!!this.inputConfig.readonly){\r\n this.signaturePad.off()\r\n }\r\n this.loading = undefined;\r\n }\r\n } catch (error) {\r\n\r\n }\r\n })\r\n }\r\n\r\n \r\n async initLoadValue() {\r\n try {\r\n this.loading = 'Loading signature ...';\r\n\r\n //Load user signature \r\n const secret = await generateSecretKey(this.inputConfig);\r\n if (!secret) {\r\n console.error('[SignaturePad] No secrete key');\r\n this.loading = undefined;\r\n return\r\n }\r\n \r\n \r\n const decrypted = await decrypt(this.value as unknown as EncryptedData, secret) as unknown as PointGroup[];\r\n \r\n let parsed = JSON.parse(decrypted as unknown as string || '[]');\r\n try {\r\n parsed = JSON.parse(decrypted as unknown as string || '[]');\r\n } catch (error) {\r\n console.error('[SignaturePad] Decryption error, decrypted string is not json', error);\r\n this.loading = undefined;\r\n return\r\n }\r\n this.NGX_T_FORMS_CONFIG.formBuilder.toastSuccess('Signature loaded successfully')\r\n this.signaturePad?.fromData(parsed);\r\n \r\n } catch (error) {\r\n \r\n console.error('[SignaturePad] Error loading signature:', error);\r\n\r\n } finally{\r\n this.loading = undefined;\r\n }\r\n \r\n\r\n }\r\n\r\n private _loading?: string;\r\n get loading(): string | undefined {\r\n return this._loading;\r\n }\r\n set loading(value: string | undefined) {\r\n this._loading = value;\r\n this.cdr.markForCheck(); // Replace detectChanges() with markForCheck()\r\n }\r\n private async processSignatureData(data: PointGroup[]): Promise<string> {\r\n // Process in chunks if data is large\r\n if (data.length > 1000) {\r\n const chunkSize = 1000;\r\n const chunks = [];\r\n for (let i = 0; i < data.length; i += chunkSize) {\r\n chunks.push(data.slice(i, i + chunkSize));\r\n }\r\n return JSON.stringify(await Promise.all(chunks.map(chunk => chunk)));\r\n }\r\n return JSON.stringify(data);\r\n }\r\n\r\n\r\n saveSignature = async (): Promise<PointGroup[] | null> => {\r\n\r\n // FIXME: This function causes app rendering to freeze for a few ms\r\n // 4 hours trying speed this function good luck next time \r\n try {\r\n if (!this.signaturePad) {\r\n console.error('[SignaturePad] Instance not found');\r\n return null;\r\n }\r\n\r\n\r\n // get this from user profile\r\n const data = this.signaturePad.toData();\r\n\r\n // send this to api to save \r\n\r\n\r\n\r\n if (!data?.length) {\r\n console.error('[SignaturePad] No signature data');\r\n return null;\r\n }\r\n\r\n this.loading = 'Securing signature ...';\r\n const secrete = await generateSecretKey(this.inputConfig);\r\n if (!secrete) {\r\n console.error('[SignaturePad] No secrete key');\r\n this.loading = undefined;\r\n return null;\r\n }\r\n\r\n const processedData = await this.processSignatureData(data);\r\n this.value = await encrypt(processedData, secrete) as unknown as PointGroup[];\r\n\r\n this.onChange(this.value);\r\n this.stateChanges.next();\r\n this.loading = undefined;\r\n this.canApplySignature = false\r\n return data;\r\n } catch (error) {\r\n console.error('[SignaturePad] Save error:', error);\r\n this.loading = undefined;\r\n this.canApplySignature = false\r\n return null;\r\n }\r\n };\r\n clearSignature() {\r\n this.signaturePad?.clear();\r\n this.value = undefined;\r\n this.onChange(this.value);\r\n this.stateChanges.next();\r\n this.canSaveSignature = false;\r\n this.canApplySignature = false;\r\n this. userStoredSignature = undefined;\r\n this.loading = undefined;\r\n }\r\n override ngOnDestroy() {\r\n this.signaturePad?.off(); // Remove event listeners\r\n this.stateChanges.complete();\r\n this.subscription?.unsubscribe();\r\n console.log('destroyed');\r\n }\r\n\r\n canSaveSignature: boolean = false;\r\n canApplySignature:boolean = false;\r\n userStoredSignature: IUserSignature | undefined;\r\n getUserUrl(){\r\n const userPicture = this.userStoredSignature?.pictureUrl || `https://ui-avatars.com/api/?name=${this.userStoredSignature?.userName}&background=random&rounded=true&size=32&bold=true`\r\n return userPicture \r\n }\r\n async loadUserDigitalSignatureFromAPI(): Promise<void> {\r\n if (!this.NGX_T_FORMS_CONFIG.formBuilder.getUserSignature) {\r\n console.error('[SignaturePad] getUserSignature not found in input class utils');\r\n return;\r\n }\r\n if(this._inputConfig.disabled || !!this._inputConfig.readonly){\r\n return \r\n }\r\n\r\n try {\r\n this.loading = 'Loading signature...';\r\n \r\n this.userStoredSignature = await firstValueFrom(\r\n this.NGX_T_FORMS_CONFIG.formBuilder.getUserSignature().pipe(take(1))\r\n );\r\n\r\n if (!this.userStoredSignature?.dataPoints) {\r\n throw new Error('Invalid signature data received');\r\n }\r\n\r\n this.signaturePad?.fromData(this.userStoredSignature.dataPoints);\r\n this.canApplySignature = true;\r\n\r\n } catch (error) {\r\n console.error('[SignaturePad] Error loading user signature:', error);\r\n } finally {\r\n this.loading = undefined;\r\n }\r\n }\r\n saveUserSignature(){\r\n if (!this.signaturePad) {\r\n console.error('[SignaturePad] Instance not found');\r\n return null;\r\n }\r\n const data = this.signaturePad.toData();\r\n this.loading = 'Saving signature ...';\r\n this.NGX_T_FORMS_CONFIG.formBuilder.saveUserSignature(data).pipe(\r\n take(1),\r\n finalize(() => {\r\n this.loading = undefined;\r\n this.canSaveSignature = false;\r\n })\r\n ).subscribe(()=>{\r\n\r\n });\r\n return null;\r\n }\r\n\r\n}\r\n","<div [style.opacity]=\"canApplySignature?'0.1':'1'\" #signature class=\"signature-container\">\r\n \r\n \r\n</div>\r\n@if (canSaveSignature) {\r\n\r\n<mat-toolbar>\r\n\r\n <button style=\" width: 100%;\" \r\n matTooltip=\"You can save this signature for quick use in future documents\" \r\n mat-flat-button\r\n color=\"accent\"\r\n (click)=\"saveUserSignature()\">\r\n <mat-icon>save</mat-icon>\r\n Save for future use\r\n </button>\r\n</mat-toolbar>\r\n}\r\n@if (canApplySignature && !inputConfig.disabled && !inputConfig.readonly ) {\r\n\r\n <mat-card appearance=\"outlined\" class=\"signature-card\">\r\n <mat-card-header>\r\n <img \r\n class=\"userAvatar\"\r\n mat-card-avatar \r\n [src]=\"getUserUrl()\" \r\n [attr.aria-label]=\"'Profile picture of ' + userStoredSignature?.userName\"\r\n >\r\n \r\n \r\n <mat-card-title class=\"existingTitle\">Found an existing signature</mat-card-title>\r\n \r\n <mat-card-subtitle class=\"signature-metadata\">\r\n <span class=\"metadata-item\">\r\n <mat-icon aria-hidden=\"true\">person</mat-icon>\r\n <span class=\"metadata-text\">{{userStoredSignature?.userName}}</span>\r\n </span>\r\n \r\n <span class=\"metadata-item\">\r\n <mat-icon aria-hidden=\"true\">calendar_month</mat-icon>\r\n <span class=\"metadata-text\">{{userStoredSignature?.signatureDate | date: 'mediumDate'}}</span>\r\n </span>\r\n </mat-card-subtitle>\r\n </mat-card-header>\r\n \r\n <mat-card-content>\r\n <p class=\"signature-description\">\r\n You can apply your saved signature or clear to draw a new one\r\n </p>\r\n </mat-card-content>\r\n \r\n \r\n <mat-card-actions align=\"end\">\r\n <button \r\n mat-flat-button\r\n color=\"primary\" \r\n class=\"apply-signature-btn\"\r\n (click)=\"saveSignature()\"\r\n [matTooltip]=\"'Apply your saved signature from ' + (userStoredSignature?.signatureDate | date: 'mediumDate')\">\r\n <mat-icon>done</mat-icon>\r\n <span>Apply Existing Signature</span>\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n }\r\n<mat-toolbar style=\"max-width: 100%; overflow:auto\">\r\n <span>\r\n <div style=\"font-size:14px;line-height:normal;font-weight:500\">\r\n Signature:\r\n </div>\r\n <div style=\"font-size:12px;font-weight:400;line-height:1.5\">\r\n Secured and Encrypted.\r\n </div>\r\n\r\n </span>\r\n <span class=\"spacer\"></span>\r\n\r\n@if(!inputConfig.readonly){\r\n <button mat-stroked-button color=\"warn\" (click)=\"clearSignature()\">\r\n Clear\r\n\r\n</button>\r\n}\r\n\r\n</mat-toolbar>\r\n@if(loading){\r\n<div class=\"signature-pad-container\">\r\n <mat-spinner diameter=\"50\">\r\n </mat-spinner>\r\n <span>\r\n {{loading}}\r\n </span>\r\n\r\n</div>\r\n}","import { Component,EventEmitter,Input, Output } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { ITowerStepColumn } from \"ngx-t-forms-types\";\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\n\r\nimport { SignaturePadInputComponent } from './core/signature-pad-input/signature-pad-input.component';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\n\r\n\r\n@Component({\r\n selector: 'lib-signature-input-element',\r\n standalone: true,\r\n imports: [ MatModulesModule, \r\n TFormInputStatusComponent,\r\n CommonModule,\r\n ReactiveFormsModule, SignaturePadInputComponent],\r\n templateUrl: './signature-input-element.component.html',\r\n styleUrl: './signature-input-element.component.css'\r\n})\r\nexport class SignatureInputElementComponent {\r\n @Input() inputConfig!: ITowerStepColumn;\r\n @Input() formGroup!: FormGroup;\r\n \r\n @Output() reload = new EventEmitter<void>();\r\n\r\n\r\n get errorMessage(){\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n }\r\n}\r\n","<form [formGroup]=\"formGroup\">\r\n <mat-form-field \r\n [appearance]=\"this.inputConfig.appearance ||'fill' \"\r\n [floatLabel]=\"'always'\"\r\n subscriptSizing=\"dynamic\" *ngIf=\"this.inputConfig as inputConfig\">\r\n <mat-label>\r\n {{this.inputConfig.label }} \r\n <lib-t-form-input-status [inputConfig]=\"this.inputConfig\"></lib-t-form-input-status>\r\n </mat-label>\r\n <lib-signature-pad-input [inputConfig]=\"this.inputConfig\"\r\n [required]=\"this.inputConfig.required\"\r\n [formControlName]=\"inputConfig.id\"></lib-signature-pad-input>\r\n <!-- <app-signature-input [inputConfig]=\"this.inputConfig\"\r\n [formControlName]=\"inputConfig.id\"></app-signature-input>\r\n -->\r\n\r\n @if(inputConfig.hintLabel || inputConfig.temporaryHint ){\r\n <mat-hint class=\"inputHint\">\r\n {{ inputConfig.temporaryHint || inputConfig.hintLabel}}\r\n </mat-hint>\r\n } \r\n\r\n @if (!!errorMessage) {\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{errorMessage}}</mat-error>\r\n }\r\n <!-- Prefix Icon -->\r\n <mat-icon *ngIf=\"inputConfig.prefixIcon\" matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n\r\n <!-- Suffix Icon or Password Visibility Toggle -->\r\n <ng-container *ngIf=\"inputConfig.suffixIcon\">\r\n <mat-icon *ngIf=\"inputConfig.id !== 'password'\" matSuffix>{{ inputConfig.suffixIcon\r\n }}</mat-icon>\r\n <!-- <button *ngIf=\"inputConfig.id === 'password'\" (click)=\"inputConfig.togglePasswordVisibility()\"\r\n mat-icon-button matSuffix>\r\n <mat-icon>{{ inputConfig.showPassword ? 'remove_red_eye' : 'eye_off' }}</mat-icon>\r\n </button> -->\r\n </ng-container>\r\n\r\n <!-- Prefix & Suffix Text -->\r\n <span *ngIf=\"inputConfig.prefixText\" matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n <span *ngIf=\"inputConfig.suffixText\" matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText\r\n }}</span>\r\n\r\n <!-- Character Count Hint -->\r\n <mat-hint *ngIf=\"inputConfig.maxLength && formGroup\" align=\"end\">\r\n {{ (formGroup.controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength\r\n }}\r\n </mat-hint>\r\n\r\n \r\n\r\n </mat-form-field>\r\n</form>","import { Component, Input } from '@angular/core';\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { ITowerStepColumn } from 'ngx-t-forms-types';\r\n\r\n\r\n@Component({\r\n selector: 'lib-section-title',\r\n standalone: true,\r\n imports: [CommonModule,MatModulesModule],\r\n templateUrl: './section-title.component.html',\r\n styleUrl: './section-title.component.css'\r\n})\r\nexport class SectionTitleComponent {\r\n @Input() inputConfig!: ITowerStepColumn;\r\n \r\n}\r\n","<br>\r\n<h3>\r\n {{inputConfig.label}}\r\n</h3>\r\n<div [innerHTML]=\"inputConfig.hintLabel\">\r\n</div>\r\n<br>\r\n","import { Component, ElementRef, Input, OnInit, Optional, Self } from '@angular/core';\r\nimport { NgControl, ReactiveFormsModule} from '@angular/forms';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';\r\nimport { ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { MatAutocomplete } from '@angular/material/autocomplete';\r\nimport { debounceTime, Subject, takeUntil } from 'rxjs';\r\nconst customInputConfig:BaseCustomInputConfig = {\r\n controlType: 'lib-auto-complet-reactive-input',\r\n nextId: 0\r\n}\r\n@Component({\r\n selector: 'lib-auto-complet-reactive-input',\r\n imports: [\r\n MatModulesModule,\r\n ReactiveFormsModule,\r\n ],\r\n host: {\r\n '[lib-auto-complet-reactive-input]': 'shouldLabelFloat',\r\n '[id]': 'id',\r\n\r\n },\r\n providers: [{ provide: MatFormFieldControl, useExisting: AutoCompletReactiveInputComponent }],\r\n templateUrl: './auto-complet-reactive-input.component.html',\r\n styleUrl: './auto-complet-reactive-input.component.css'\r\n})\r\nexport class AutoCompletReactiveInputComponent extends BaseCustomInput<string|number|Date> implements OnInit {\r\n override get empty(): boolean {\r\n return !this.value;\r\n }\r\n override get shouldLabelFloat(): boolean {\r\n return true;\r\n }\r\n @Input() auto!: MatAutocomplete\r\n @Input() inputConfig!: ITowerStepColumn;\r\n constructor(\r\n @Optional() @Self() ngControl: NgControl,\r\n elementRef: ElementRef<HTMLElement>\r\n ) {\r\n super(ngControl, elementRef,customInputConfig);\r\n }\r\n private readonly debounceTime = 300;\r\n private valueSubject = new Subject<any>();\r\n \r\n ngOnInit(): void {\r\n this.valueSubject.pipe(\r\n debounceTime(this.debounceTime),\r\n takeUntil(this.destroy$)\r\n ).subscribe(event => {\r\n this.value = event.target.value;\r\n this.stateChanges.next();\r\n this.onChange(this.value);\r\n });\r\n }\r\n\r\n onInputChange($event: any) {\r\n this.valueSubject.next($event);\r\n }\r\n \r\n}\r\n","<input [readonly]=\"this.inputConfig?.readonly\" [pattern]=\"this.inputConfig?.pattern || ''\"\r\n [required]=\"!!this.inputConfig?.required\" [attr.maxlength]=\"this.inputConfig?.maxLength\"\r\n [attr.minlength]=\"this.inputConfig?.minLength\"\r\n [type]=\"this.inputConfig?.type||'text'\" \r\n (input)=\"onInputChange($event)\"\r\n [value]=\"value\"\r\n\r\n [min]=\"this.inputConfig?.min\" [max]=\"this.inputConfig?.max\" autocomplete=\"on\"\r\n [matAutocomplete]=\"auto\"\r\n matInput />","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\nimport { ITowerStepColumn } from \"ngx-t-forms-types\";\r\nimport { AutoCompletReactiveInputComponent } from './core/auto-complet-reactive-input/auto-complet-reactive-input.component';\r\n\r\n@Component({\r\n selector: 'lib-auto-complete-input-element',\r\n standalone: true,\r\n imports: [MatModulesModule,ReactiveFormsModule,CommonModule, \r\n AutoCompletReactiveInputComponent,\r\n TFormInputStatusComponent],\r\n templateUrl: './auto-complete-input-element.component.html',\r\n styleUrl: './auto-complete-input-element.component.css'\r\n})\r\nexport class AutoCompleteInputElementComponent {\r\n @Input() inputConfig!: ITowerStepColumn; \r\n @Input() formGroup!: FormGroup;\r\n @Input() options!: any;\r\n\r\n \r\n @Output() reload = new EventEmitter<void>();\r\n \r\n get errorMessage(){\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n }\r\n}\r\n","\r\n<form [formGroup]=\"formGroup\">\r\n\r\n <mat-form-field [appearance]=\"this.inputConfig.appearance ||'fill' \" subscriptSizing=\"dynamic\" *ngIf=\"this.inputConfig as inputConfig\">\r\n <mat-label>\r\n {{this.inputConfig.label }} \r\n <lib-t-form-input-status [inputConfig]=\"this.inputConfig\"></lib-t-form-input-status>\r\n </mat-label>\r\n <lib-auto-complet-reactive-input\r\n [inputConfig]=\"this.inputConfig\"\r\n [required]=\"this.inputConfig.required\"\r\n [formControlName]=\"this.inputConfig.id\"\r\n [auto]=\"auto\"\r\n ></lib-auto-complet-reactive-input>\r\n \r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\">\r\n @for (option of options ; track option.id) {\r\n <mat-option [value]=\"option.value\">{{option.label}}</mat-option>\r\n }\r\n \r\n </mat-autocomplete>\r\n\r\n\r\n @if(inputConfig.hintLabel || inputConfig.temporaryHint ){\r\n <mat-hint [matTooltip]=\"inputConfig.hintLabel ||''\" class=\"inputHint\">\r\n {{ inputConfig.temporaryHint || inputConfig.hintLabel}}\r\n </mat-hint>\r\n }\r\n \r\n @if (!!errorMessage) {\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{errorMessage}}</mat-error>\r\n }\r\n <!-- Prefix Icon -->\r\n <mat-icon *ngIf=\"inputConfig.prefixIcon\" matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n \r\n <!-- Suffix Icon or Password Visibility Toggle -->\r\n <ng-container *ngIf=\"inputConfig.suffixIcon\">\r\n <mat-icon *ngIf=\"inputConfig.id !== 'password'\" matSuffix>{{ inputConfig.suffixIcon\r\n }}</mat-icon>\r\n \r\n </ng-container>\r\n \r\n <!-- Prefix & Suffix Text -->\r\n <span *ngIf=\"inputConfig.prefixText\" matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n <span *ngIf=\"inputConfig.suffixText\" matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText\r\n }}</span>\r\n \r\n <!-- Character Count Hint -->\r\n <mat-hint *ngIf=\"inputConfig.maxLength && formGroup\" align=\"end\">\r\n {{ (formGroup.controls[inputConfig.id]?.value.length || 0) + '/' + inputConfig.maxLength\r\n }}\r\n </mat-hint>\r\n \r\n \r\n \r\n \r\n </mat-form-field>\r\n</form>\r\n\r\n","import { Component, ElementRef, forwardRef, Input, Optional, Self } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport _ from 'lodash';\r\n\r\nimport { ITowerStepColumn } from 'ngx-t-forms-types';;\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatSlideToggleChange } from '@angular/material/slide-toggle';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';\r\nimport { _isEqual } from '../../../../../../shared/functions/isEqual';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\n;\r\nconst customInputConfig: BaseCustomInputConfig = {\r\n controlType: 'lib-geo-location-form-input',\r\n nextId: 0\r\n}\r\n@Component({\r\n selector: 'lib-toggle',\r\n standalone: true,\r\n imports: [MatModulesModule,CommonModule,OverlayModule],\r\n\r\n templateUrl: './toggle.component.html',\r\n providers: [ {\r\n provide: MatFormFieldControl,\r\n useExisting: forwardRef(() => ToggleComponent)\r\n }],\r\n styleUrl: './toggle.component.css'\r\n})\r\nexport class ToggleComponent extends BaseCustomInput<boolean> {\r\n\r\n \r\n constructor(\r\n @Optional() @Self() ngControl: NgControl,\r\n elementRef: ElementRef<HTMLElement>\r\n ) {\r\n super(ngControl, elementRef, customInputConfig);\r\n }\r\n\r\n\r\n \r\n \r\n @Input() inputConfig!: ITowerStepColumn;\r\n\r\n\r\n\r\n\r\n\r\n \r\n\r\n get empty() {\r\n return !this.value\r\n }\r\n\r\n get shouldLabelFloat() {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n @Input()\r\n\r\n \r\n\r\n changed(event:MatSlideToggleChange){\r\n this.value = event.checked\r\n this.onChange(event.checked)\r\n this.stateChanges.next();\r\n }\r\n get isChecked(){\r\n return Boolean(this.value)\r\n }\r\n\r\n}","<ng-template\r\n cdkConnectedOverlay\r\n [cdkConnectedOverlayOpen]=\"!!(this.inputConfig.disabled || this.inputConfig.readonly)\"\r\n>\r\n<div style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.1);\">\r\n\r\n\r\n</div>\r\n</ng-template>\r\n\r\n<mat-slide-toggle \r\n\r\nstyle=\"display: block\" \r\n\r\n [disabledInteractive]=\"this.inputConfig.disabled || this.inputConfig.readonly\"\r\n[required]=\"this.inputConfig.required\" \r\n[labelPosition]=\"this.inputConfig.labelPosition || 'after'\"\r\n(change)=\"this.changed($event)\"\r\n[checked]=\"isChecked\"\r\n[ariaReadOnly]=\"this.inputConfig.disabled\"\r\n[disabled]=\"this.inputConfig.disabled\"\r\n>\r\n@if (inputConfig.falseLabel || inputConfig.trueLabel) {\r\n\r\n\r\n @if (this.inputConfig.labelPosition !== 'after') {\r\n {{ this.inputConfig.label | titlecase }}\r\n <span class=\"spacer\"></span>\r\n @if (isChecked) {\r\n <span class=\"true-label\" >{{ inputConfig.trueLabel|| 'Yes' }}</span>\r\n } @else {\r\n <span class=\"false-label\" >{{ inputConfig.falseLabel || 'No' }}</span>\r\n }\r\n } \r\n @else {\r\n @if (isChecked) {\r\n <span class=\"true-label\" >{{ inputConfig.trueLabel || 'Yes' }}</span>\r\n } @else {\r\n <span class=\"false-label\">{{ inputConfig.falseLabel || 'No' }}</span>\r\n }\r\n <span class=\"spacer\"></span>\r\n {{ this.inputConfig.label | titlecase }}\r\n }\r\n\r\n}\r\n</mat-slide-toggle>","import { Component,EventEmitter,Input, Output} from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { ITowerStepColumn } from \"ngx-t-forms-types\";\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { ToggleComponent } from './core/toggle/toggle.component';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\n\r\n\r\n@Component({\r\n selector: 'lib-toggle-input-element',\r\n standalone: true,\r\n imports: [MatModulesModule,ReactiveFormsModule,TFormInputStatusComponent,\r\n CommonModule,\r\n ToggleComponent\r\n ],\r\n templateUrl: './toggle-input-element.component.html',\r\n styleUrl: './toggle-input-element.component.css'\r\n})\r\nexport class ToggleInputElementComponent {\r\n @Input() inputConfig!: ITowerStepColumn;\r\n @Input() formGroup!: FormGroup;\r\n \r\n @Output() reload = new EventEmitter<void>();\r\n\r\n\r\n get errorMessage(){\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n } \r\n}\r\n","<form [formGroup]=\"formGroup\">\r\n <mat-form-field [appearance]=\"this.inputConfig.appearance ||'fill' \" floatLabel=\"always\" subscriptSizing=\"dynamic\"\r\n *ngIf=\"this.inputConfig as inputConfig\">\r\n @if(!(inputConfig.disabled ||errorMessage)){\r\n <mat-label>\r\n toggle to select\r\n\r\n <lib-t-form-input-status [inputConfig]=\"this.inputConfig\"></lib-t-form-input-status>\r\n </mat-label>\r\n }\r\n\r\n <lib-toggle [inputConfig]=\"this.inputConfig\" [required]=\"this.inputConfig.required\"\r\n [formControlName]=\"inputConfig.id\"></lib-toggle>\r\n\r\n\r\n @if(inputConfig.hintLabel || inputConfig.temporaryHint ){\r\n <mat-hint class=\"inputHint\">\r\n {{ inputConfig.temporaryHint || inputConfig.hintLabel}}\r\n </mat-hint>\r\n }\r\n\r\n @if (!!errorMessage) {\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{errorMessage}}</mat-error>\r\n }\r\n <!-- Prefix Icon -->\r\n <mat-icon *ngIf=\"inputConfig.prefixIcon\" matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n\r\n <!-- Suffix Icon or Password Visibility Toggle -->\r\n <ng-container *ngIf=\"inputConfig.suffixIcon\">\r\n <mat-icon *ngIf=\"inputConfig.id !== 'password'\" matSuffix>{{ inputConfig.suffixIcon\r\n }}</mat-icon>\r\n <!-- <button *ngIf=\"inputConfig.id === 'password'\" (click)=\"inputConfig.togglePasswordVisibility()\"\r\n mat-icon-button matSuffix>\r\n <mat-icon>{{ inputConfig.showPassword ? 'remove_red_eye' : 'eye_off' }}</mat-icon>\r\n </button> -->\r\n </ng-container>\r\n\r\n <!-- Prefix & Suffix Text -->\r\n <span *ngIf=\"inputConfig.prefixText\" matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n <span *ngIf=\"inputConfig.suffixText\" matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText\r\n }}</span>\r\n\r\n <!-- Character Count Hint -->\r\n <mat-hint *ngIf=\"inputConfig.maxLength && formGroup\" align=\"end\">\r\n {{ (formGroup.controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength\r\n }}\r\n </mat-hint>\r\n\r\n </mat-form-field>\r\n</form>","import { Component, ElementRef, Input, OnInit, Optional, Self } from '@angular/core';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';\r\n\r\nimport { NgControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { MatSelectChange } from '@angular/material/select';\r\nimport { ITowerStepColumn } from 'ngx-t-forms-types';\r\nconst customInputConfig:BaseCustomInputConfig = {\r\n controlType: 'lib-input-custom',\r\n nextId: 0\r\n}\r\n@Component({\r\n selector: 'lib-select-input',\r\n imports: [CommonModule,MatModulesModule,ReactiveFormsModule],\r\n templateUrl: './select-input.component.html',\r\n styleUrl: './select-input.component.css',\r\n host: {\r\n '[lib-select-input.floating]': 'shouldLabelFloat',\r\n '[id]': 'id',\r\n },\r\n providers: [{ provide: MatFormFieldControl, useExisting: SelectInputComponent }],\r\n\r\n})\r\nexport class SelectInputComponent extends BaseCustomInput<string|number|Date> implements OnInit {\r\n @Input() inputConfig!: ITowerStepColumn;\r\n constructor(\r\n @Optional() @Self() ngControl: NgControl,\r\n elementRef: ElementRef<HTMLElement>\r\n ) {\r\n super(ngControl, elementRef,customInputConfig);\r\n \r\n }\r\n\r\n\r\n override get empty(): boolean {\r\n return !this.value;\r\n }\r\n\r\n override get shouldLabelFloat(): boolean {\r\n return true;\r\n }\r\n \r\n private valueSubject = new Subject<any>();\r\n\r\n ngOnInit() {\r\n \r\n }\r\n\r\n onInputChange($event: any) {\r\n this.valueSubject.next($event);\r\n }\r\n onSelectionChange(event:MatSelectChange){\r\n this.value = event.value\r\n this.stateChanges.next();\r\n this.onChange(this.value);\r\n console.error('onSelectionChange',event)\r\n \r\n\r\n }\r\n getSelectOptions(): any {\r\n if(!this.inputConfig?.matOptions) return []\r\n if(Array.isArray(this.inputConfig.matOptions?.options)){\r\n return this.inputConfig.matOptions?.options || []\r\n }\r\n return []\r\n \r\n }\r\n getAvatar(userName: any) {\r\n return `https://ui-avatars.com/api/?color=EADDFF&font-size=0.36&bold=true&background=random&name=${userName}`\r\n }\r\n get inputControl(){\r\n return this.ngControl?.control as any \r\n\r\n }}\r\n","<mat-select #sele \r\n\r\n(selectionChange)=\"onSelectionChange($event)\"\r\n[value]=\"value\"\r\n \r\n>\r\n\r\n\r\n\r\n@for (option of getSelectOptions(); track option.value) {\r\n <mat-option [value]=\"option.value\" [disabled]=\"this.inputConfig?.readonly\" >\r\n @switch (this.inputConfig?.matOptions?.optionType) {\r\n @case ('user') {\r\n <mat-list-item style=\"padding: 0px;\">\r\n <img matListItemAvatar [src]=\"getAvatar(option.username)\" />\r\n <div matListItemTitle>{{ option.username | titlecase }}</div>\r\n <div matListItemLine> {{ option.email }}</div>\r\n </mat-list-item>\r\n \r\n }\r\n @default {\r\n {{ option.label }}\r\n }\r\n }\r\n \r\n </mat-option>\r\n}\r\n \r\n</mat-select>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormControl, FormGroup, FormGroupDirective, NgForm, ReactiveFormsModule } from '@angular/forms';\r\nimport { ITowerStepColumn } from \"ngx-t-forms-types\";\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\n\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\nimport { ErrorStateMatcher } from '@angular/material/core';\r\nimport { SelectInputComponent } from './elements/select-input/select-input.component';\r\n// Add this to your component\r\n\r\n@Component({\r\n selector: 'lib-select-input-element',\r\n standalone: true,\r\n imports: [CommonModule,MatModulesModule,ReactiveFormsModule,SelectInputComponent,TFormInputStatusComponent],\r\n templateUrl: './select-input-element.component.html',\r\n styleUrl: './select-input-element.component.css'\r\n})\r\nexport class SelectInputElementComponent {\r\n @Input() inputConfig!: ITowerStepColumn;\r\n @Input() formGroup!: FormGroup;\r\n\r\n @Output() reload = new EventEmitter<void>();\r\n getSelectOptions(): any {\r\n if(!this.inputConfig.matOptions) return []\r\n if(Array.isArray(this.inputConfig.matOptions?.options)){\r\n return this.inputConfig.matOptions?.options || []\r\n }\r\n return []\r\n \r\n \r\n }\r\n optionsSearchWordKeyWord!: string;\r\n\r\n \r\n selectInputSearchWord(event: any) {\r\n this.optionsSearchWordKeyWord = event.detail.value.toUpperCase();\r\n }\r\n get errorMessage(){\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n }\r\n\r\n errorStateMatcher = new class implements ErrorStateMatcher {\r\n isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {\r\n return !!(control && control.invalid && (control.dirty || control.touched));\r\n }\r\n }\r\n}\r\n","<ng-container [formGroup]=\"formGroup\">\r\n <mat-form-field [appearance]=\"this.inputConfig.appearance ||'fill' \" subscriptSizing=\"dynamic\"\r\n *ngIf=\"this.inputConfig as inputConfig\">\r\n <mat-label>\r\n {{this.inputConfig.label }}\r\n <lib-t-form-input-status [inputConfig]=\"this.inputConfig\"></lib-t-form-input-status>\r\n </mat-label>\r\n\r\n <lib-select-input [inputConfig]=\"this.inputConfig\"\r\n\r\n [required]=\"this.inputConfig.required\"\r\n [formControlName]=\"this.inputConfig.id\" >\r\n\r\n </lib-select-input>\r\n @if(inputConfig.hintLabel || inputConfig.temporaryHint ){\r\n <mat-hint class=\"inputHint\">\r\n {{ inputConfig.temporaryHint || inputConfig.hintLabel}}\r\n </mat-hint>\r\n }\r\n\r\n\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{errorMessage}}</mat-error>\r\n\r\n <!-- Prefix Icon -->\r\n <mat-icon *ngIf=\"inputConfig.prefixIcon\" matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n\r\n <!-- Suffix Icon or Password Visibility Toggle -->\r\n <ng-container *ngIf=\"inputConfig.suffixIcon\">\r\n <mat-icon *ngIf=\"inputConfig.id !== 'password'\" matSuffix>{{ inputConfig.suffixIcon\r\n }}</mat-icon>\r\n <!-- <button *ngIf=\"inputConfig.id === 'password'\" (click)=\"inputConfig.togglePasswordVisibility()\"\r\n mat-icon-button matSuffix>\r\n <mat-icon>{{ inputConfig.showPassword ? 'remove_red_eye' : 'eye_off' }}</mat-icon>\r\n </button> -->\r\n </ng-container>\r\n\r\n <!-- Prefix & Suffix Text -->\r\n <span *ngIf=\"inputConfig.prefixText\" matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n <span *ngIf=\"inputConfig.suffixText\" matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText\r\n }}</span>\r\n\r\n <!-- Character Count Hint -->\r\n <mat-hint *ngIf=\"inputConfig.maxLength && formGroup\" align=\"end\">\r\n {{ (formGroup.controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength\r\n }}\r\n </mat-hint>\r\n\r\n\r\n\r\n </mat-form-field>\r\n</ng-container>\r\n","import { Component, ElementRef, Input, OnInit, Optional, Self } from '@angular/core';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { String } from 'lodash';\r\nimport { NgControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatAutocomplete } from '@angular/material/autocomplete';\r\nimport { ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { Subject, debounceTime, takeUntil } from 'rxjs';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\n\r\nconst customInputConfig:BaseCustomInputConfig = {\r\n controlType: 'lib-text-area-reactive-input',\r\n nextId: 0\r\n}\r\n@Component({\r\n selector: 'lib-text-area-reactive-input',\r\n imports: [CommonModule,MatModulesModule,ReactiveFormsModule],\r\n host: {\r\n '[lib-text-area-reactive-input]': 'shouldLabelFloat',\r\n '[id]': 'id',\r\n\r\n },\r\n providers: [{ provide: MatFormFieldControl, useExisting: TextAreaReactiveInputComponent }],\r\n \r\n templateUrl: './text-area-reactive-input.component.html',\r\n styleUrl: './text-area-reactive-input.component.css'\r\n})\r\nexport class TextAreaReactiveInputComponent extends BaseCustomInput<String> implements OnInit {\r\n override get empty(): boolean {\r\n return !this.value;\r\n }\r\n override get shouldLabelFloat(): boolean {\r\n return true;\r\n }\r\n @Input() auto!: MatAutocomplete\r\n @Input() inputConfig!: ITowerStepColumn;\r\n constructor(\r\n @Optional() @Self() ngControl: NgControl,\r\n elementRef: ElementRef<HTMLElement>\r\n ) {\r\n super(ngControl, elementRef,customInputConfig);\r\n }\r\n private readonly debounceTime = 300;\r\n private valueSubject = new Subject<any>();\r\n \r\n ngOnInit(): void {\r\n this.valueSubject.pipe(\r\n debounceTime(this.debounceTime),\r\n takeUntil(this.destroy$)\r\n ).subscribe(event => {\r\n this.value = event.target.value;\r\n this.stateChanges.next();\r\n this.onChange(this.value);\r\n });\r\n }\r\n\r\n onInputChange($event: any) {\r\n this.valueSubject.next($event);\r\n }\r\n}\r\n","\r\n<textarea \r\n [readonly]=\"this.inputConfig?.readonly\"\r\n [required]=\"inputConfig?.required\" \r\n [attr.maxlength]=\"inputConfig?.maxLength\" [attr.minlength]=\"inputConfig?.minLength\"\r\n [rows]=\"inputConfig?.rows\" [spellcheck]=\"inputConfig?.spellcheck\"\r\n [value]=\"value\"\r\n [autocapitalize]=\"inputConfig?.autocapitalize\" [autocomplete]=\"inputConfig?.autocomplete\"\r\n (input)=\"onInputChange($event)\" \r\n [placeholder]=\"inputConfig?.placeholder||''\" [wrap]=\"inputConfig?.wrap\" matInput></textarea>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { ITowerStepColumn } from \"ngx-t-forms-types\";\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\nimport { TextAreaReactiveInputComponent } from './core/text-area-reactive-input/text-area-reactive-input.component';\r\n\r\n@Component({\r\n selector: 'lib-textarea-input-element',\r\n standalone: true,\r\n imports: [ReactiveFormsModule,CommonModule,MatModulesModule,TFormInputStatusComponent,TextAreaReactiveInputComponent],\r\n templateUrl: './textarea-input-element.component.html',\r\n styleUrl: './textarea-input-element.component.css'\r\n})\r\nexport class TextareaInputElementComponent {\r\n @Input() inputConfig!: ITowerStepColumn;\r\n @Input() formGroup!: FormGroup;\r\n \r\n @Output() reload = new EventEmitter<void>();\r\n \r\n \r\n get errorMessage(){\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n }\r\n}\r\n","<form [formGroup]=\"formGroup\">\r\n <mat-form-field [appearance]=\"this.inputConfig.appearance ||'fill' \" subscriptSizing=\"dynamic\" *ngIf=\"this.inputConfig as inputConfig\">\r\n <mat-label>\r\n {{this.inputConfig.label }} \r\n <lib-t-form-input-status [inputConfig]=\"this.inputConfig\"></lib-t-form-input-status>\r\n </mat-label>\r\n <lib-text-area-reactive-input \r\n [inputConfig]=\"this.inputConfig\"\r\n [required]=\"this.inputConfig.required\"\r\n [formControlName]=\"this.inputConfig.id\"\r\n\r\n >\r\n\r\n </lib-text-area-reactive-input>\r\n\r\n @if(inputConfig.hintLabel || inputConfig.temporaryHint ){\r\n <mat-hint class=\"inputHint\">\r\n {{ inputConfig.temporaryHint || inputConfig.hintLabel}}\r\n </mat-hint>\r\n }\r\n \r\n @if (!!errorMessage) {\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{errorMessage}}</mat-error>\r\n }\r\n <!-- Prefix Icon -->\r\n <mat-icon *ngIf=\"inputConfig.prefixIcon\" matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n \r\n <!-- Suffix Icon or Password Visibility Toggle -->\r\n <ng-container *ngIf=\"inputConfig.suffixIcon\">\r\n <mat-icon *ngIf=\"inputConfig.id !== 'password'\" matSuffix>{{ inputConfig.suffixIcon\r\n }}</mat-icon>\r\n <!-- <button *ngIf=\"inputConfig.id === 'password'\" (click)=\"inputConfig.togglePasswordVisibility()\"\r\n mat-icon-button matSuffix>\r\n <mat-icon>{{ inputConfig.showPassword ? 'remove_red_eye' : 'eye_off' }}</mat-icon>\r\n </button> -->\r\n </ng-container>\r\n \r\n <!-- Prefix & Suffix Text -->\r\n <span *ngIf=\"inputConfig.prefixText\" matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n <span *ngIf=\"inputConfig.suffixText\" matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText\r\n }}</span>\r\n \r\n <!-- Character Count Hint -->\r\n <mat-hint *ngIf=\"inputConfig.maxLength && formGroup\" align=\"end\">\r\n {{ (formGroup.controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength\r\n }}\r\n </mat-hint>\r\n \r\n \r\n </mat-form-field>\r\n</form>\r\n","import { Component, ElementRef, Input, Optional, Self } from '@angular/core';\r\nimport { FormControl, FormGroup, NgControl } from '@angular/forms';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';\r\nimport { ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\n\r\n\r\nconst customInputConfig:BaseCustomInputConfig = {\r\n controlType: 'lib-date-range-picker-reactive-input',\r\n nextId: 0\r\n}\r\n@Component({\r\n selector: 'lib-date-range-picker-reactive-input',\r\n imports: [CommonModule,MatModulesModule],\r\n standalone: true,\r\n host: {\r\n '[lib-date-picker-reactive-input]': 'shouldLabelFloat',\r\n '[id]': 'id',\r\n\r\n },\r\n providers: [{ provide: MatFormFieldControl, useExisting: DateRangePickerReactiveInputComponent }],\r\n \r\n templateUrl: './date-range-picker-reactive-input.component.html',\r\n styleUrl: './date-range-picker-reactive-input.component.css'\r\n})\r\nexport class DateRangePickerReactiveInputComponent extends BaseCustomInput<Date> {\r\n override get empty(): boolean {\r\n return !this.value;\r\n }\r\n override get shouldLabelFloat(): boolean {\r\n return true;\r\n }\r\n\r\n @Input() inputConfig!: ITowerStepColumn;\r\n constructor(\r\n @Optional() @Self() ngControl: NgControl,\r\n elementRef: ElementRef<HTMLElement>\r\n ) {\r\n super(ngControl, elementRef, customInputConfig);\r\n }\r\n \r\n\r\n get startDateControl(): FormControl {\r\n return this.parentFormGroup?.controls[`${this.inputConfig?.id}.${this.inputConfig?.startDateControl}`] as FormControl;\r\n }\r\n get endDateControl(): FormControl {\r\n return this.parentFormGroup?.controls[`${this.inputConfig?.id}.${this.inputConfig?.endDateControl}`] as FormControl;\r\n }\r\n\r\n \r\n get parentFormGroup(): FormGroup | null {\r\n return this.ngControl?.control?.parent as FormGroup;\r\n }\r\n override checkValidationsAnErrors(): void {\r\n \r\n const control = this.ngControl?.control;\r\n if (!control || !this.touched) return;\r\n \r\n const errors = { ...control.errors };\r\n \r\n \r\n this.errors = errors;\r\n const validStartDate = this.startDateControl?.valid;\r\n const validEndDate = this.endDateControl?.valid;\r\n if (validStartDate && validEndDate && 'required' in errors) {\r\n const hasOtherErrors = Object.keys(errors).length > 1;\r\n if (!hasOtherErrors) {\r\n control.setErrors(null);\r\n } else {\r\n delete errors['required'];\r\n control.setErrors(errors);\r\n }\r\n } else if (!('required' in errors) && this.required && !validStartDate || !('required' in errors) && this.required && !validEndDate) {\r\n control.setErrors({ required: true, ...errors });\r\n }\r\n }\r\n\r\n}\r\n","","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { provideNativeDateAdapter } from '@angular/material/core';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\n\r\nimport { DateRange, MatDatepickerInputEvent } from '@angular/material/datepicker';\r\nimport { DateRangePickerReactiveInputComponent } from './core/date-range-picker-reactive-input/date-range-picker-reactive-input.component';\r\nimport { ITowerStepColumn } from 'ngx-t-forms-types';\r\n\r\n@Component({\r\n selector: 'lib-date-range-picker-input-element',\r\n standalone: true,\r\n imports: [CommonModule, MatModulesModule, ReactiveFormsModule, TFormInputStatusComponent,DateRangePickerReactiveInputComponent],\r\n templateUrl: './date-range-picker-input-element.component.html',\r\n styleUrl: './date-range-picker-input-element.component.css',\r\n providers: [provideNativeDateAdapter()],\r\n})\r\nexport class DateRangePickerInputElementComponent {\r\n \r\n\r\n @Input() inputConfig!: ITowerStepColumn;\r\n @Input() formGroup!: FormGroup;\r\n \r\n @Output() reload = new EventEmitter<void>();\r\n /**\r\n * Get the appropriate error message for this input\r\n */\r\n get errorMessage() {\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n }\r\n\r\n /**\r\n * Get the start date control name\r\n */\r\n get startControlName(): string {\r\n return this.inputConfig.startDateControl \r\n ? `${this.inputConfig.id}.${this.inputConfig.startDateControl}`\r\n : `${this.inputConfig.id}.startDate`;\r\n }\r\n\r\n /**\r\n * Get the end date control name\r\n */\r\n get endControlName(): string {\r\n return this.inputConfig.endDateControl \r\n ? `${this.inputConfig.id}.${this.inputConfig.endDateControl}`\r\n : `${this.inputConfig.id}.endDate`;\r\n }\r\n\r\n /**\r\n * Check if the start date control has a specific error\r\n */\r\n hasStartDateError(errorName: string): boolean {\r\n const control = this.formGroup.get(this.startControlName);\r\n return control ? control.hasError(errorName) : false;\r\n }\r\n\r\n /**\r\n * Check if the end date control has a specific error\r\n */\r\n hasEndDateError(errorName: string): boolean {\r\n const control = this.formGroup.get(this.endControlName);\r\n return control ? control.hasError(errorName) : false;\r\n }\r\n dateChanged(event: MatDatepickerInputEvent<any, DateRange<any>>,formControlName: string | undefined) {\r\n // set touched and dirty on the form group\r\n const control = this.formGroup.controls[`${this.inputConfig.id}.${formControlName}`];\r\n if (control) {\r\n control.setValue(event.value);\r\n control.updateValueAndValidity();\r\n control.markAsTouched();\r\n control.markAsDirty();\r\n }\r\n\r\n\r\n }\r\n}","<!-- <mat-form-field [appearance]=\"this.inputConfig.appearance || 'fill'\" floatLabel=\"auto\">\r\n <mat-label></mat-label>\r\n @if(inputConfig.startDateControl && inputConfig.endDateControl) {\r\n <ng-container>\r\n <mat-date-range-input [formGroup]=\"formGroup\" [rangePicker]=\"picker\">\r\n <input matStartDate [formControlName]=\"inputConfig.startDateControl\" placeholder=\"Start date\">\r\n <input matEndDate [formControlName]=\"inputConfig.endDateControl\" placeholder=\"End date\">\r\n </mat-date-range-input>\r\n <mat-hint>{{inputConfig.hintLabel}}</mat-hint>\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n\r\n @if (formGroup.controls[inputConfig.startDateControl]?.hasError('matStartDateInvalid')) {\r\n <mat-error>Invalid start date</mat-error>\r\n }\r\n @if (formGroup.controls[inputConfig.endDateControl]?.hasError('matEndDateInvalid')) {\r\n <mat-error>Invalid end date</mat-error>\r\n }\r\n \r\n @if(!!errorMessage) {\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{errorMessage}}</mat-error>\r\n }\r\n </ng-container>\r\n }\r\n</mat-form-field> -->\r\n<form [formGroup]=\"formGroup\">\r\n\r\n\r\n<mat-form-field [appearance]=\"this.inputConfig.appearance || 'fill'\" subscriptSizing=\"dynamic\">\r\n <mat-label>{{inputConfig.label}} <lib-t-form-input-status [inputConfig]=\"this.inputConfig\"></lib-t-form-input-status></mat-label>\r\n <lib-date-range-picker-reactive-input\r\n [inputConfig]=\"this.inputConfig\"\r\n [required]=\"this.inputConfig.required\"\r\n [formControlName]=\"inputConfig.id+'.'+inputConfig.endDateControl\" \r\n ></lib-date-range-picker-reactive-input>\r\n\r\n <mat-date-range-input [required]=\"inputConfig.required\" [formGroup]=\"formGroup\" [rangePicker]=\"picker\">\r\n @if (inputConfig.startDateControl) {\r\n <input matStartDate \r\n [formControlName]=\"inputConfig.id+'.'+inputConfig.startDateControl\"\r\n [min]=\"inputConfig.startMinDate\"\r\n [max]=\"inputConfig.startMaxDate\"\r\n [value]=\"formGroup.controls[inputConfig.id+'.'+inputConfig.startDateControl]?.value\"\r\n (dateChange)=\"dateChanged($event, inputConfig.startDateControl)\"\r\n placeholder=\"Start date\">\r\n }\r\n @if (inputConfig.endDateControl) {\r\n <input matEndDate \r\n [formControlName]=\"inputConfig.id+'.'+inputConfig.endDateControl\" \r\n [value]=\"formGroup.controls[inputConfig.id+'.'+inputConfig.endDateControl]?.value\"\r\n placeholder=\"End date\"\r\n [min]=\"inputConfig.endMinDate\" \r\n [max]=\"inputConfig.endMaxDate\"\r\n (dateChange)=\"dateChanged($event, inputConfig.endDateControl)\"\r\n >\r\n }\r\n </mat-date-range-input>\r\n\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker >\r\n <mat-datepicker-actions>\r\n <button mat-button matDatepickerCancel>Cancel</button>\r\n <button mat-raised-button color=\"primary\" matDatepickerApply>Apply</button>\r\n </mat-datepicker-actions>\r\n </mat-date-range-picker>\r\n\r\n\r\n\r\n @if(inputConfig.hintLabel || inputConfig.temporaryHint ){\r\n <mat-hint [matTooltip]=\"inputConfig.hintLabel ||''\" class=\"inputHint\">\r\n {{ inputConfig.temporaryHint || inputConfig.hintLabel}}\r\n </mat-hint>\r\n }\r\n \r\n @if (!!errorMessage) {\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{errorMessage}}</mat-error>\r\n }\r\n <!-- Prefix Icon -->\r\n <mat-icon *ngIf=\"inputConfig.prefixIcon\" matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n\r\n <!-- Suffix Icon or Password Visibility Toggle -->\r\n <ng-container *ngIf=\"inputConfig.suffixIcon\">\r\n <mat-icon *ngIf=\"inputConfig.id !== 'password'\" matSuffix>{{ inputConfig.suffixIcon\r\n }}</mat-icon>\r\n\r\n </ng-container>\r\n <!-- Prefix & Suffix Text -->\r\n <span *ngIf=\"inputConfig.prefixText\" matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n <span *ngIf=\"inputConfig.suffixText\" matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText\r\n }}</span>\r\n <!-- Character Count Hint -->\r\n <mat-hint *ngIf=\"inputConfig.maxLength && formGroup\" >\r\n {{ (formGroup.controls[inputConfig.id]?.value.length || 0) + '/' + inputConfig.maxLength\r\n }}\r\n </mat-hint>\r\n\r\n</mat-form-field>\r\n\r\n</form>","import { Component, ElementRef, Input, Optional, Self } from '@angular/core';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';\r\nimport { ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { NgControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatDatepicker, MatDatepickerInputEvent } from '@angular/material/datepicker';\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nconst customInputConfig:BaseCustomInputConfig = {\r\n controlType: 'lib-auto-complet-reactive-input',\r\n nextId: 0\r\n}\r\n@Component({\r\n selector: 'lib-date-picker-reactive-input',\r\n imports: [\r\n MatModulesModule,\r\n ReactiveFormsModule\r\n ],\r\n host: {\r\n '[lib-date-picker-reactive-input]': 'shouldLabelFloat',\r\n '[id]': 'id',\r\n\r\n },\r\n providers: [{ provide: MatFormFieldControl, useExisting: DatePickerReactiveInputComponent }],\r\n templateUrl: './date-picker-reactive-input.component.html',\r\n styleUrl: './date-picker-reactive-input.component.css'\r\n})\r\nexport class DatePickerReactiveInputComponent extends BaseCustomInput<Date> {\r\n override get empty(): boolean {\r\n return !this.value;\r\n }\r\n override get shouldLabelFloat(): boolean {\r\n return true;\r\n }\r\n@Input()picker!: MatDatepicker<any>\r\n @Input() inputConfig!: ITowerStepColumn;\r\n constructor(\r\n @Optional() @Self() ngControl: NgControl,\r\n elementRef: ElementRef<HTMLElement>\r\n ) {\r\n super(ngControl, elementRef,customInputConfig);\r\n }\r\n \r\n \r\n\r\n changed(event: MatDatepickerInputEvent<any, any>){\r\n \r\n this.value = event.value;\r\n this.stateChanges.next();\r\n this.onChange(this.value);\r\n \r\n }\r\n\r\n \r\n}\r\n","<input \r\n[required]=\"inputConfig?.required\" \r\n\r\n[min]=\"inputConfig?.min\" \r\n(dateChange)=\"changed($event)\"\r\n[value]=\"value\"\r\n[max]=\"inputConfig?.max\" matInput \r\n[matDatepicker]=\"picker\" />","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\n\r\nimport { ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { provideNativeDateAdapter } from '@angular/material/core';\r\nimport { DatePickerReactiveInputComponent } from './core/date-picker-reactive-input/date-picker-reactive-input.component';\r\n\r\n\r\n@Component({\r\n selector: 'lib-date-picker-input-element',\r\n standalone: true,\r\n imports: [CommonModule, MatModulesModule, ReactiveFormsModule, TFormInputStatusComponent,DatePickerReactiveInputComponent],\r\n templateUrl: './date-picker-input-element.component.html',\r\n styleUrl: './date-picker-input-element.component.css',\r\n providers: [provideNativeDateAdapter()],\r\n})\r\nexport class DatePickerInputElementComponent {\r\n @Input() inputConfig!: ITowerStepColumn;\r\n @Input() formGroup!: FormGroup;\r\n \r\n @Output() reload = new EventEmitter<void>();\r\n get errorMessage(){\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n }\r\n}\r\n","\r\n\r\n<form [formGroup]=\"formGroup\">\r\n\r\n <mat-form-field \r\n [appearance]=\"this.inputConfig.appearance ||'fill' \" \r\n subscriptSizing=\"dynamic\">\r\n <mat-label>\r\n {{this.inputConfig.label }} \r\n <lib-t-form-input-status [inputConfig]=\"this.inputConfig\"></lib-t-form-input-status>\r\n </mat-label>\r\n <lib-date-picker-reactive-input\r\n [inputConfig]=\"this.inputConfig\"\r\n [required]=\"this.inputConfig.required\"\r\n [formControlName]=\"this.inputConfig.id\"\r\n [picker]=\"picker\"\r\n \r\n ></lib-date-picker-reactive-input>\r\n <mat-datepicker-toggle matIconSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker>\r\n <button mat-button matDatepickerCancel>Cancel</button>\r\n <button mat-raised-button color=\"primary\" matDatepickerApply>Apply</button>\r\n </mat-datepicker>\r\n \r\n\r\n @if(inputConfig.hintLabel || inputConfig.temporaryHint ){\r\n <mat-hint class=\"inputHint\">\r\n {{ inputConfig.temporaryHint || inputConfig.hintLabel}}\r\n </mat-hint>\r\n }\r\n \r\n\r\n @if (!!errorMessage) {\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{errorMessage}}</mat-error>\r\n }\r\n <!-- Prefix Icon -->\r\n <mat-icon *ngIf=\"inputConfig.prefixIcon\" matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n \r\n <!-- Suffix Icon or Password Visibility Toggle -->\r\n <ng-container *ngIf=\"inputConfig.suffixIcon\">\r\n <mat-icon \r\n matSuffix>{{ inputConfig.suffixIcon\r\n }}</mat-icon>\r\n \r\n \r\n </ng-container>\r\n \r\n <!-- Prefix & Suffix Text -->\r\n <span *ngIf=\"inputConfig.prefixText\" matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n <span *ngIf=\"inputConfig.suffixText\" matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText\r\n }}</span>\r\n \r\n <!-- Character Count Hint -->\r\n <mat-hint *ngIf=\"inputConfig.maxLength && formGroup\" align=\"end\">\r\n {{ (formGroup.controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength\r\n }}\r\n </mat-hint>\r\n </mat-form-field>\r\n</form>","\r\nimport { Component, ElementRef, Input, Optional, Self, ViewChild } from '@angular/core';\r\nimport { NgControl, } from '@angular/forms';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\n\r\nimport _ from 'lodash';\r\nimport { IFileUploadInput, ITowerStepColumn } from \"ngx-t-forms-types\";\r\n\r\nimport { FileUploadInputValueInterface, AllDocumentFileExtensions, AllImageFileExtensions, InputFileType, UploadTypes } from \"ngx-t-forms-types\";\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { CommonModule } from '@angular/common';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';;\r\nconst customInputConfig:BaseCustomInputConfig = {\r\n controlType: 'app-file-uploader',\r\n nextId: 0\r\n}\r\n\r\n@Component({\r\n selector: 'app-file-uploader',\r\n templateUrl: './file-uploader.component.html',\r\n styleUrls: ['./file-uploader.component.css'],\r\n standalone: true,\r\n imports: [\r\n MatModulesModule,\r\n CommonModule\r\n ],\r\n host: {\r\n '[fileUploader.floating]': 'shouldLabelFloat',\r\n '[id]': 'id',\r\n },\r\n providers: [{ provide: MatFormFieldControl, useExisting: FileUploaderComponent }]\r\n\r\n})\r\nexport class FileUploaderComponent extends BaseCustomInput< FileUploadInputValueInterface | object | null > {\r\n\r\n //Emit on the stateChanges stream when something happens in the form field control that may require the form field to run change detection.\r\n constructor(\r\n @Optional() @Self() ngControl: NgControl,\r\n elementRef: ElementRef<HTMLElement>\r\n ) {\r\n super(ngControl, elementRef,customInputConfig);\r\n }\r\n\r\n\r\n @ViewChild('uploader') uploader!: ElementRef<HTMLInputElement>;\r\n\r\n\r\n\r\n\r\n\r\n\r\n @Input() inputConfig!: ITowerStepColumn;\r\n\r\n\r\n\r\n\r\n override get value(): FileUploadInputValueInterface | object | null {\r\n return this._value;\r\n }\r\n override set value(file: FileUploadInputValueInterface | object | null) {\r\n const fileType = this.inputConfig?.fileType;\r\n if (!file || typeof file !== 'object') {\r\n this._value = file;\r\n this.stateChanges.next();\r\n return;\r\n }\r\n\r\n const { base64, fileExtension } = file as FileUploadInputValueInterface;\r\n\r\n if (!base64) {\r\n this._value = file;\r\n this.stateChanges.next();\r\n return;\r\n }\r\n\r\n const allDocExtensions = Object.values(AllDocumentFileExtensions);\r\n const allImageExtensions = Object.values(AllImageFileExtensions);\r\n const isFile = allDocExtensions.includes(fileExtension as any);\r\n const isImage = allImageExtensions.includes(fileExtension as any);\r\n console.log(fileExtension, isFile, isImage, fileType)\r\n if ((fileType === InputFileType.file && !isFile) ||\r\n ((fileType === InputFileType.Image || fileType === InputFileType.CaptureImage) && !isImage)) {\r\n this._value = null;\r\n\r\n this.temporaryError(`Invalid file type. Expected ${fileType} file`);\r\n this.stateChanges.next();\r\n return\r\n } else {\r\n this._value = file;\r\n this.stateChanges.next();\r\n return;\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n \r\n\r\n\r\n\r\n\r\n\r\n get empty() {\r\n return !this.value\r\n }\r\n\r\n get shouldLabelFloat() {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n\r\n \r\n \r\n\r\n\r\n\r\n \r\n override onContainerClick(event: MouseEvent) {\r\n this.uploader.nativeElement.click();\r\n if (event.target !== this._elementRef.nativeElement) {\r\n this.markAsTouched();\r\n this.stateChanges.next();\r\n }\r\n }\r\n ///End of Implementation of MatFormFieldControl\r\n\r\n triggerUploader() {\r\n this.uploader.nativeElement.click();\r\n }\r\n\r\n fileName!: string;\r\n loading!: Number;\r\n onFileSelected(event: Event): void {\r\n const files = (event.target as HTMLInputElement).files;\r\n if (files && files.length > 0) {\r\n const file = files[0];\r\n if(!file) return;\r\n this.assignFile(file);\r\n }\r\n }\r\n\r\n assignFile(file: File) {\r\n const reader = new FileReader();\r\n reader.onload = (e) => {\r\n this.fileName = file.name;\r\n const nameSplit = file.name.split('.')\r\n const fileExtension = nameSplit[nameSplit.length - 1];\r\n this.value = {\r\n fileName: file.name,\r\n base64: reader.result as string,\r\n type:this.inputConfig?.fileType,\r\n blob: file,\r\n fileExtension\r\n };\r\n this.onChange(this.value)\r\n\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n\r\n\r\n returnPreview() {\r\n const inp: any = this.inputConfig;\r\n const fileType = (inp as IFileUploadInput)?.fileType;\r\n switch (fileType) {\r\n case InputFileType.file:\r\n return 'https://res.cloudinary.com/afrob/image/upload/v1676973154/Flows/Icons/iPhone_14_-_1_tx1scw.png';\r\n\r\n default:\r\n return (this.value as FileUploadInputValueInterface)?.base64;\r\n break;\r\n }\r\n }\r\n uploadType() {\r\n const inp: any = this.inputConfig;\r\n const fileType = (inp as IFileUploadInput)?.fileType;\r\n if (!fileType) {\r\n return InputFileType.file;\r\n }\r\n return (UploadTypes as any)[fileType as any];\r\n }\r\n\r\n dragOver = false;\r\n\r\n onDragOver(event: DragEvent) {\r\n console.log('drag over');\r\n this.dragOver = true;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Add logic to highlight the drop zone\r\n }\r\n\r\n onDrop(event: DragEvent) {\r\n this.dragOver = false;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n const files = event.dataTransfer?.files;\r\n if (files && files.length > 0) {\r\n const file = files[0];\r\n // Handle the file(s) here\r\n if(!file) return;\r\n this.assignFile(file);\r\n }\r\n // Remove highlight from the drop zone\r\n }\r\n\r\n onDragLeave(event: DragEvent) {\r\n console.log('drag leave');\r\n this.dragOver = false;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n // Remove highlight from the drop zone\r\n }\r\n clearFile(event: MouseEvent) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.value = null;\r\n this.stateChanges.next();\r\n }\r\n\r\n\r\n}\r\n","\r\n <mat-progress-bar *ngIf=\"loading\" mode=\"indeterminate\"></mat-progress-bar>\r\n\r\n\r\n\r\n\r\n<section *ngIf=\"!shouldLabelFloat\">\r\n <br>\r\n <div \r\n [style.border-color]=\"dragOver ? ' var(--mat-stepper-header-selected-state-icon-background-color)' : '#ccc;'\"\r\n(dragover)=\"onDragOver($event)\" \r\n(drop)=\"onDrop($event)\" \r\n(dragleave)=\"onDragLeave($event)\"\r\n class=\"drop-zone\" >\r\n <div>\r\n <mat-icon>\r\n cloud_upload\r\n </mat-icon>\r\n </div>\r\n <div>\r\n @if (!!errorMessage\r\n\r\n ) {\r\n <span class=\"mat-mdc-form-field-error\" >\r\n {{errorMessage}}\r\n </span>\r\n }@else {\r\n Drag and drop files or click to upload\r\n }\r\n \r\n \r\n \r\n </div>\r\n \r\n </div>\r\n</section>\r\n\r\n<input\r\nstyle=\"display: none\"\r\nhidden\r\n[readonly]=\"!!this.inputConfig?.readonly\"\r\n[type]=\"this.inputConfig?.type|| 'file'\"\r\n[accept]=\"uploadType()\"\r\n(change)=\"onFileSelected($event)\"\r\n#uploader\r\n/>\r\n<div \r\n[style.border-color]=\"dragOver ? 'var(--mat-stepper-header-selected-state-icon-background-color)' : '#ccc;'\"\r\n*ngIf=\"!!shouldLabelFloat\" \r\nclass=\"drop-zone\"\r\n\r\n(dragover)=\"onDragOver($event)\" \r\n(drop)=\"onDrop($event)\" \r\n(dragleave)=\"onDragLeave($event)\">\r\n<img style=\"width: 100%;\" [src]=\"returnPreview()\" alt=\"\">\r\n<mat-toolbar style=\" height: min-content !important;\">\r\n <mat-icon\r\n [style.color]=\"dragOver ? 'var(--mat-stepper-header-selected-state-icon-background-color)' : ''\"\r\n >\r\n cloud_upload\r\n </mat-icon>\r\n <span class=\"spacer\"></span>\r\n <div style=\"padding: 8px;\" >\r\n <div style=\"\r\n line-height: normal;width: 100%;\r\n white-space:normal;overflow: hidden;text-overflow: ellipsis;\r\n font-size: 12px;color:var(--mat-stepper-header-selected-state-icon-background-color);\"\r\n *ngIf=\"!!this.fileName\">\r\n {{ this.fileName}}\r\n </div>\r\n <div style=\"font-size: 14px;\">\r\n \r\n Drag and drop files or click to upload\r\n \r\n </div>\r\n </div>\r\n \r\n \r\n <span class=\"spacer\"></span>\r\n <button (click)=\"clearFile($event)\" mat-icon-button>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n</mat-toolbar>\r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule, ValidationErrors } from '@angular/forms';\r\nimport { ITowerStepColumn } from \"ngx-t-forms-types\";\r\nimport { FileUploaderComponent } from './core/file-uploader/file-uploader.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\n\r\n@Component({\r\n selector: 'lib-file-upload-input-element',\r\n standalone: true,\r\n imports: [FileUploaderComponent, CommonModule, ReactiveFormsModule, TFormInputStatusComponent, MatModulesModule],\r\n templateUrl: './file-upload-input-element.component.html',\r\n styleUrl: './file-upload-input-element.component.css'\r\n})\r\nexport class FileUploadInputElementComponent {\r\n @Input() inputConfig!: ITowerStepColumn;\r\n @Input() formGroup!: FormGroup;\r\n @Output() reload = new EventEmitter<void>();\r\n getErrors(): ValidationErrors | null | undefined {\r\n return this.formGroup.controls[this.inputConfig.id]?.errors\r\n }\r\n get errorMessage() {\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n }\r\n}\r\n","<form [formGroup]=\"formGroup\">\r\n <mat-form-field [appearance]=\"this.inputConfig.appearance ||'fill' \" subscriptSizing=\"dynamic\" *ngIf=\"this.inputConfig as classInput\">\r\n <mat-label>\r\n {{this.inputConfig.label }} \r\n <lib-t-form-input-status [inputConfig]=\"this.inputConfig\"></lib-t-form-input-status>\r\n </mat-label>\r\n <app-file-uploader\r\n [inputConfig]=\"inputConfig\"\r\n [formControlName]=\"inputConfig.id\"\r\n [required]=\"this.inputConfig.required\"\r\n ></app-file-uploader>\r\n\r\n\r\n @if(inputConfig.hintLabel || classInput.temporaryHint ){\r\n <mat-hint class=\"inputHint\">\r\n {{ classInput.temporaryHint || inputConfig.hintLabel}}\r\n </mat-hint>\r\n }\r\n \r\n @if (!!errorMessage) {\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{errorMessage}}</mat-error>\r\n }\r\n <!-- Prefix Icon -->\r\n <mat-icon *ngIf=\"inputConfig.prefixIcon\" matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n \r\n <!-- Suffix Icon or Password Visibility Toggle -->\r\n <ng-container *ngIf=\"inputConfig.suffixIcon\">\r\n <mat-icon *ngIf=\"inputConfig.id !== 'password'\" matSuffix>{{ inputConfig.suffixIcon\r\n }}</mat-icon>\r\n <!-- <button *ngIf=\"inputConfig.id === 'password'\" (click)=\"classInput.togglePasswordVisibility()\"\r\n mat-icon-button matSuffix>\r\n <mat-icon>{{ classInput.showPassword ? 'remove_red_eye' : 'eye_off' }}</mat-icon>\r\n </button> -->\r\n </ng-container>\r\n \r\n <!-- Prefix & Suffix Text -->\r\n <span *ngIf=\"inputConfig.prefixText\" matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n <span *ngIf=\"inputConfig.suffixText\" matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText\r\n }}</span>\r\n \r\n <!-- Character Count Hint -->\r\n <mat-hint *ngIf=\"inputConfig.maxLength && formGroup\" align=\"end\">\r\n {{ (formGroup.controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength\r\n }}\r\n </mat-hint>\r\n \r\n \r\n \r\n </mat-form-field>\r\n</form>\r\n\r\n","import { EditorConfig, OutputData} from \"@editorjs/editorjs\";\r\nimport Header from '@editorjs/header';\r\nimport List from '@editorjs/list';\r\nimport Paragraph from '@editorjs/paragraph';\r\nimport Quote from '@editorjs/quote';\r\nimport Table from '@editorjs/table';\r\nimport ImageTool from '@editorjs/image';\r\nimport Delimiter from '@editorjs/delimiter';\r\nimport CodeTool from '@editorjs/code';\r\n\r\nimport Embed from '@editorjs/embed';\r\n\r\nexport interface EditorJsPayload {\r\n holderId: string,\r\n imageFetchEndpoint:string,\r\n imageUploadEndpoint: string,\r\n readOnly:boolean,\r\n onChangeFn: () => void,\r\n data:OutputData|undefined\r\n}\r\nexport const editorConfig = (\r\n payload: EditorJsPayload \r\n): EditorConfig => {\r\n return ({\r\n holder: payload.holderId,\r\n autofocus: true,\r\n placeholder: 'Let\\'s write something amazing...',\r\n inlineToolbar: true,\r\n tools: {\r\n header: {\r\n class: Header as any,\r\n config: {\r\n levels: [1, 2, 3, 4, 5, 6],\r\n defaultLevel: 1,\r\n placeholder: 'Type your heading here...'\r\n },\r\n inlineToolbar: ['link', 'bold', 'italic', 'marker']\r\n },\r\n list: {\r\n class: List as any,\r\n inlineToolbar: true,\r\n config: {\r\n defaultStyle: 'unordered',\r\n placeholder: 'Enter a list item here...'\r\n }\r\n },\r\n paragraph: {\r\n class: Paragraph as any,\r\n inlineToolbar: true,\r\n config: {\r\n preserveBlank: true,\r\n placeholder: 'Type your paragraph here...'\r\n }\r\n },\r\n quote: {\r\n class: Quote,\r\n inlineToolbar: true,\r\n shortcut: 'CMD+SHIFT+Q',\r\n config: {\r\n quotePlaceholder: 'Enter a quote',\r\n captionPlaceholder: 'Quote\\'s author',\r\n alignmentEnabled: true\r\n }\r\n },\r\n delimiter: {\r\n class: Delimiter\r\n },\r\n image: {\r\n class: ImageTool,\r\n config: {\r\n endpoints: {\r\n byFile: payload.imageUploadEndpoint,\r\n byUrl: payload.imageFetchEndpoint\r\n },\r\n uploader: {\r\n uploadByFile(file: File) {\r\n // Custom upload logic\r\n }\r\n }\r\n }\r\n },\r\n table: {\r\n class: Table as any,\r\n inlineToolbar: true,\r\n config: {\r\n rows: 2,\r\n cols: 3\r\n }\r\n },\r\n code: {\r\n class: CodeTool,\r\n config: {\r\n placeholder: 'Enter code here...'\r\n }\r\n },\r\n \r\n embed: {\r\n class: Embed as any,\r\n config: {\r\n services: {\r\n youtube: true,\r\n codesandbox: true,\r\n codepen: true\r\n }\r\n }\r\n },\r\n \r\n },\r\n defaultBlock: 'paragraph',\r\n hideToolbar: false,\r\n data: payload.data,\r\n readOnly:payload.readOnly,\r\n logLevel: 'ERROR' as any,\r\n minHeight: 300,\r\n onChange: (api, event) => {\r\n payload.onChangeFn()\r\n },\r\n onReady: () => {\r\n console.log('Editor is ready');\r\n },\r\n sanitizer: {\r\n p: true,\r\n b: true,\r\n a: {\r\n href: true,\r\n target: '_blank',\r\n rel: 'nofollow'\r\n }\r\n },\r\n i18n: {\r\n messages: {\r\n ui: {\r\n blockTunes: {\r\n toggler: {\r\n 'Click to tune': 'Click to tune',\r\n 'or drag to move': 'or drag to move'\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n}\r\n \r\n \r\n","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnDestroy, Optional, Output, Self } from '@angular/core';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';;\r\nimport { NgControl } from '@angular/forms';\r\n\r\nimport { ITowerStepColumn } from 'ngx-t-forms-types';;\r\nimport EditorJS, { OutputData } from '@editorjs/editorjs'\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { editorConfig, EditorJsPayload } from '../form-input-rich-text-editor/config';\r\nimport { _isEqual } from '../../../../../../shared/functions/isEqual';\r\nimport { CommonModule } from '@angular/common';\r\nconst customInputConfig: BaseCustomInputConfig = {\r\n controlType: 'lib-editor-js-input',\r\n nextId: 0\r\n}\r\n@Component({\r\n selector: 'lib-editor-js-input',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './editor-js-input.component.html',\r\n providers: [{ provide: MatFormFieldControl, useExisting: EditorJsInputComponent }],\r\n styleUrl: './editor-js-input.component.css'\r\n})\r\nexport class EditorJsInputComponent extends BaseCustomInput<OutputData | undefined> implements AfterViewInit, OnDestroy {\r\n editor: EditorJS | undefined\r\n @Input() inputConfig!: ITowerStepColumn;\r\n override get empty(): boolean {\r\n return !this.value;\r\n }\r\n override get shouldLabelFloat(): boolean {\r\n return true;\r\n }\r\n override _value:OutputData | undefined = undefined;\r\n @Input() override set value(value: OutputData | undefined) {\r\n if (!_isEqual(this._value, value)) {\r\n this._value = value;\r\n this.onChange(value);\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\noverride get value():OutputData | undefined { return this._value; }\r\n @Output() valueChanged = new EventEmitter<OutputData | undefined>();\r\n constructor(\r\n @Optional() @Self() ngControl: NgControl,\r\n elementRef: ElementRef<HTMLElement>\r\n ) {\r\n super(ngControl, elementRef, customInputConfig);\r\n }\r\n ngAfterViewInit(): void {\r\n if (!!this.editor) {\r\n this.editor?.destroy()\r\n }\r\n console.error('EditorJSInputComponent ngAfterViewInit', this.inputConfig, this.value)\r\n const config: EditorJsPayload = {\r\n holderId: this.inputConfig.id,\r\n imageFetchEndpoint: '',\r\n imageUploadEndpoint: '',\r\n readOnly: this.inputConfig.readonly || false,\r\n data: this.value || undefined,\r\n onChangeFn: this.contentChangedSaveValue.bind(this)\r\n }\r\n this.editor = new EditorJS(editorConfig(config))\r\n\r\n }\r\n\r\n\r\n async contentChangedSaveValue() {\r\n const value: OutputData | undefined = await this.editor?.save()\r\n this.value = value\r\n\r\n\r\n this.onChange(value)\r\n this.valueChanged.emit(value)\r\n\r\n }\r\n override ngOnDestroy(): void {\r\n this.stateChanges.complete();\r\n this.editor?.destroy()\r\n }\r\n}\r\n","\r\n<div class=\" editor-container\" style=\"padding: 16px;\">\r\n <div #editorJs [id]=\"inputConfig.id\"></div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component,EventEmitter,Input, Output } from '@angular/core';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { EditorJsInputComponent } from './core/editor-js-input/editor-js-input.component';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\nimport { ITowerStepColumn } from 'ngx-t-forms-types';\r\n\r\n@Component({\r\n selector: 'lib-editor-input-element',\r\n standalone: true,\r\n imports: [\r\n MatModulesModule,\r\n TFormInputStatusComponent,\r\n CommonModule,\r\n ReactiveFormsModule,\r\n EditorJsInputComponent\r\n ],\r\n templateUrl: './editor-input-element.component.html',\r\n styleUrl: './editor-input-element.component.css'\r\n})\r\nexport class EditorInputElementComponent {\r\n @Input() inputConfig!: ITowerStepColumn;\r\n @Input() formGroup!: FormGroup;\r\n \r\n @Output() reload = new EventEmitter<void>();\r\n \r\n \r\n constructor() {\r\n\r\n }\r\n get errorMessage() {\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n }\r\n\r\n}\r\n","\r\n@if (inputConfig.richTextEditorLibrary === 'EditorJS') {\r\n <form [formGroup]=\"formGroup\">\r\n <mat-form-field [appearance]=\"this.inputConfig.appearance ||'fill' \" subscriptSizing=\"dynamic\" *ngIf=\"this.inputConfig as classInput\">\r\n <mat-label>\r\n {{this.inputConfig.label }} \r\n <lib-t-form-input-status [inputConfig]=\"this.inputConfig\"></lib-t-form-input-status>\r\n </mat-label>\r\n <lib-editor-js-input \r\n [inputConfig]=\"inputConfig\"\r\n [formControlName]=\"inputConfig.id\"\r\n [required]=\"this.inputConfig.required\"\r\n ></lib-editor-js-input>\r\n <!-- <app-form-input-rich-text-editor\r\n [inputConfig]=\"inputConfig\"\r\n [formControlName]=\"inputConfig.id\"\r\n (change)=\"changed($event)\"\r\n >\r\n </app-form-input-rich-text-editor> -->\r\n\r\n\r\n @if(inputConfig.hintLabel || classInput.temporaryHint ){\r\n <mat-hint class=\"inputHint\">\r\n {{ classInput.temporaryHint || inputConfig.hintLabel}}\r\n </mat-hint>\r\n }\r\n\r\n @if (!!errorMessage) {\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{errorMessage}}</mat-error>\r\n }\r\n <!-- Prefix Icon -->\r\n <mat-icon *ngIf=\"inputConfig.prefixIcon\" matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n \r\n <!-- Suffix Icon or Password Visibility Toggle -->\r\n <ng-container *ngIf=\"inputConfig.suffixIcon\">\r\n <mat-icon *ngIf=\"inputConfig.id !== 'password'\" matSuffix>{{ inputConfig.suffixIcon\r\n }}</mat-icon>\r\n <!-- <button *ngIf=\"inputConfig.id === 'password'\" (click)=\"classInput.togglePasswordVisibility()\"\r\n mat-icon-button matSuffix>\r\n <mat-icon>{{ classInput.showPassword ? 'remove_red_eye' : 'eye_off' }}</mat-icon>\r\n </button> -->\r\n </ng-container>\r\n \r\n <!-- Prefix & Suffix Text -->\r\n <span *ngIf=\"inputConfig.prefixText\" matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n <span *ngIf=\"inputConfig.suffixText\" matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText\r\n }}</span>\r\n \r\n <!-- Character Count Hint -->\r\n <mat-hint *ngIf=\"inputConfig.maxLength && formGroup\" align=\"end\">\r\n {{ (formGroup.controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength\r\n }}\r\n </mat-hint>\r\n \r\n\r\n \r\n </mat-form-field>\r\n \r\n</form>\r\n\r\n}\r\n\r\n\r\n\r\n\r\n","import { Component, ElementRef, Input, OnInit, Optional, Self } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { debounceTime, Subject, takeUntil } from 'rxjs';\r\nconst customInputConfig:BaseCustomInputConfig = {\r\n controlType: 'lib-input-custom',\r\n nextId: 0\r\n}\r\n@Component({\r\n selector: 'lib-input-custom',\r\n imports: [CommonModule,MatModulesModule],\r\n templateUrl: './input-custom.component.html',\r\n host: {\r\n '[lib-input-custom.floating]': 'shouldLabelFloat',\r\n '[id]': 'id',\r\n },\r\n providers: [{ provide: MatFormFieldControl, useExisting: InputCustomComponent }],\r\n styleUrl: './input-custom.component.css'\r\n})\r\nexport class InputCustomComponent extends BaseCustomInput<string|number|Date> implements OnInit {\r\n @Input() inputConfig!: ITowerStepColumn;\r\n constructor(\r\n @Optional() @Self() ngControl: NgControl,\r\n elementRef: ElementRef<HTMLElement>\r\n ) {\r\n super(ngControl, elementRef,customInputConfig);\r\n }\r\n\r\n\r\n override get empty(): boolean {\r\n return !this.value;\r\n }\r\n\r\n override get shouldLabelFloat(): boolean {\r\n return true;\r\n }\r\n private readonly debounceTime = 300;\r\n private valueSubject = new Subject<any>();\r\n\r\n ngOnInit() {\r\n this.valueSubject.pipe(\r\n debounceTime(this.debounceTime),\r\n takeUntil(this.destroy$)\r\n ).subscribe(event => {\r\n this.value = event.target.value;\r\n this.stateChanges.next();\r\n this.onChange(this.value);\r\n });\r\n }\r\n\r\n onInputChange($event: any) {\r\n this.valueSubject.next($event);\r\n }\r\n}\r\n","@if(inputConfig){\r\n<input matInput [readonly]=\"this.inputConfig.readonly || this.inputConfig.disabled\"\r\n [pattern]=\"this.inputConfig.pattern || ''\" [required]=\"this.inputConfig.required\"\r\n [attr.maxlength]=\"this.inputConfig.maxLength\" [type]=\"this.inputConfig.type||'text'\" [value]=\"value\"\r\n (input)=\"onInputChange($event)\" [attr.minlength]=\"this.inputConfig.minLength\"\r\n [autocomplete]=\"this.inputConfig.autocomplete\" [min]=\"this.inputConfig.min\" [max]=\"this.inputConfig.max\" />\r\n}\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ReactiveFormsModule, FormGroup, FormsModule, FormControl } from '@angular/forms';\r\n\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\nimport { ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { InputCustomComponent } from './core/input-custom/input-custom.component';\r\n\r\n@Component({\r\n selector: 'lib-basic-input-input-element',\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n MatModulesModule,\r\n TFormInputStatusComponent,\r\n CommonModule,\r\n ReactiveFormsModule,\r\n InputCustomComponent\r\n\r\n\r\n ],\r\n templateUrl: './basic-input-input-element.component.html',\r\n styleUrl: './basic-input-input-element.component.css',\r\n\r\n})\r\nexport class BasicInputInputElementComponent {\r\n\r\n @Input() inputConfig!: ITowerStepColumn;\r\n @Input() formGroup!: FormGroup;\r\n\r\n\r\n @Output() reload = new EventEmitter<void>();\r\n get formControl(): FormControl<any> {\r\n return this.formGroup.controls[this.inputConfig.id] as FormControl<any>\r\n }\r\n\r\n passwordStrengthColor(formControlName: string) {\r\n const form = this.formGroup\r\n const value: string = form?.value[formControlName];\r\n let strongPassword = new RegExp(\r\n '(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])(?=.{8,})'\r\n );\r\n let mediumPassword = new RegExp(\r\n '((?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])(?=.{6,}))|((?=.*[a-z])(?=.*[A-Z])(?=.*[^A-Za-z0-9])(?=.{8,}))'\r\n );\r\n if (strongPassword.test(value)) {\r\n return 'var(--ion-color-success)';\r\n } else if (mediumPassword.test(value)) {\r\n return 'var(--ion-color-warning)';\r\n } else {\r\n return 'var(--ion-color-danger)';\r\n }\r\n }\r\n checkPasswordStrength(formControlName: string) {\r\n const form = this.formGroup\r\n\r\n const value: string = form?.value[formControlName];\r\n let strongPassword = new RegExp(\r\n '(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])(?=.{8,})'\r\n );\r\n let mediumPassword = new RegExp(\r\n '((?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^A-Za-z0-9])(?=.{6,}))|((?=.*[a-z])(?=.*[A-Z])(?=.*[^A-Za-z0-9])(?=.{8,}))'\r\n );\r\n if (strongPassword.test(value)) {\r\n return 'strong';\r\n } else if (mediumPassword.test(value)) {\r\n return 'medium';\r\n } else {\r\n return 'weak';\r\n }\r\n\r\n }\r\n\r\n get errorMessage() {\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n }\r\n\r\n get hasError() {\r\n // Correctly access the control within the form group\r\n const control = this.formGroup.get(this.inputConfig.id);\r\n return control?.invalid && (control?.touched || control?.dirty);\r\n }\r\n}\r\n","\r\n <ng-container [formGroup]=\"formGroup\">\r\n <mat-form-field \r\n\r\n [appearance]=\"this.inputConfig.appearance ||'fill'\" subscriptSizing=\"dynamic\"\r\n *ngIf=\"this.inputConfig as classInput\">\r\n <mat-label>\r\n {{inputConfig.label }}\r\n <lib-t-form-input-status \r\n \r\n [inputConfig]=\"this.inputConfig\"></lib-t-form-input-status>\r\n </mat-label>\r\n <lib-input-custom\r\n [inputConfig]=\"this.inputConfig\"\r\n [required]=\"this.inputConfig.required\"\r\n [formControlName]=\"this.inputConfig.id\"\r\n \r\n ></lib-input-custom>\r\n\r\n @if(errorMessage) {\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{errorMessage}}</mat-error>\r\n }\r\n <!-- [type]=\"this.inputConfig.showPassword ? 'text' : this.inputConfig.type||'text'\"-->\r\n <!-- @if(classInput.canRefresh){\r\n <button\r\n (click)=\"classInput.refresh()\"\r\n style=\" min-width: 1%;\"\r\n [matTooltip]=\"'Click to refresh this field. This will update any calculated values, fetch latest data from services, or reload available options'\"\r\n color=\"primary\" matSuffix mat-icon-button>\r\n <mat-icon>\r\n sync\r\n </mat-icon>\r\n </button>\r\n } -->\r\n\r\n\r\n @if(inputConfig.hintLabel || classInput.temporaryHint ){\r\n <mat-hint class=\"inputHint\">\r\n {{ classInput.temporaryHint || inputConfig.hintLabel}}\r\n </mat-hint>\r\n }\r\n\r\n \r\n <!-- Prefix Icon -->\r\n <mat-icon *ngIf=\"inputConfig.prefixIcon\" matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n\r\n <!-- Suffix Icon or Password Visibility Toggle -->\r\n <!-- <ng-container *ngIf=\"inputConfig.suffixIcon\">\r\n <mat-icon *ngIf=\"inputConfig.id !== 'password'\" matSuffix>{{ inputConfig.suffixIcon\r\n }}</mat-icon>\r\n <button *ngIf=\"inputConfig.id === 'password'\" (click)=\"classInput.togglePasswordVisibility()\"\r\n mat-icon-button matSuffix>\r\n <mat-icon>{{ classInput.showPassword ? 'remove_red_eye' : 'eye_off' }}</mat-icon>\r\n </button>\r\n </ng-container> -->\r\n\r\n <!-- Prefix & Suffix Text -->\r\n <span *ngIf=\"inputConfig.prefixText\" matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n <span *ngIf=\"inputConfig.suffixText\" matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText\r\n }}</span>\r\n\r\n <!-- Character Count Hint -->\r\n <mat-hint *ngIf=\"inputConfig.maxLength && formGroup\" align=\"end\">\r\n {{ (formGroup.controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength\r\n }}\r\n </mat-hint>\r\n\r\n <!-- Password Strength Hint -->\r\n <mat-hint *ngIf=\"inputConfig.type === 'password'\" [style.color]=\"passwordStrengthColor(inputConfig.id)\"\r\n matTooltip=\"The password should be at least 8 characters long. Have at least one uppercase letter, one lowercase, one digit, one special character.\"\r\n align=\"end\">\r\n {{ checkPasswordStrength(inputConfig.id) }} password\r\n </mat-hint>\r\n <!-- @if(inputConfig?.canReload){\r\n <mat-hint align=\"end\">\r\n \r\n <button click=\" canReload.emit()\" style=\" height: 28px;\r\n width: 28px;\r\n padding: 0px;\r\n font-size: 16px;\" [matTooltip]=\"'Reload ' + inputConfig.label +' resources'\" mat-icon-button>\r\n <mat-icon>\r\n sync\r\n </mat-icon>\r\n\r\n </button>\r\n </mat-hint>\r\n \r\n\r\n } -->\r\n </mat-form-field>\r\n\r\n \r\n\r\n\r\n</ng-container>\r\n","export class ColorScale {\r\n private min: number;\r\n private max: number;\r\n private alpha: number;\r\n private colorStops: Color[];\r\n\r\n constructor(\r\n min: number,\r\n max: number,\r\n colorStops: string[],\r\n alpha: number = 1\r\n ) {\r\n validateMinMaxValues(min, max);\r\n validateColorStops(colorStops);\r\n validateAlphaValue(alpha);\r\n\r\n this.min = min;\r\n this.max = max;\r\n this.alpha = alpha;\r\n this.colorStops = colorStops.map((colorStop) =>\r\n hexToColor(colorStop, alpha)\r\n );\r\n }\r\n\r\n getColor(value: number) {\r\n const numOfColorStops = this.colorStops.length;\r\n if (value < this.min) return this.colorStops[0];\r\n if (value > this.max) return this.colorStops[numOfColorStops - 1];\r\n\r\n const range = this.max - this.min;\r\n\r\n let weight = (value - this.min) / range;\r\n const colorStopIndex = Math.max(\r\n Math.ceil(weight * (numOfColorStops - 1)),\r\n 1\r\n );\r\n\r\n const minColor = this.colorStops[colorStopIndex - 1];\r\n const maxColor = this.colorStops[colorStopIndex];\r\n if(maxColor === undefined) return minColor;\r\n if(minColor === undefined) return maxColor;\r\n\r\n weight = weight * (numOfColorStops - 1) - (colorStopIndex - 1);\r\n\r\n const r = Math.floor(weight * maxColor.r + (1 - weight) * minColor.r);\r\n const g = Math.floor(weight * maxColor.g + (1 - weight) * minColor.g);\r\n const b = Math.floor(weight * maxColor.b + (1 - weight) * minColor.b);\r\n\r\n return new Color(r, g, b, this.alpha);\r\n }\r\n}\r\n\r\nexport function validateMinMaxValues(min: number, max: number) {\r\n if (min > max) {\r\n throw new Error('The minimum value must be less than the maximum value.');\r\n }\r\n}\r\n\r\nexport function validateColorStops(colorStops: string[]) {\r\n if (colorStops.length < 2) {\r\n throw new Error('At least two colors must be provided.');\r\n }\r\n\r\n colorStops.forEach((str) => {\r\n if (!isValidHexColor(str)) {\r\n throw new Error(`${str} is not a valid hex color.`);\r\n }\r\n });\r\n}\r\n\r\nexport function validateAlphaValue(alpha: number) {\r\n if (alpha < 0 || alpha > 1) {\r\n throw new Error('The alpha value must be between 0 and 1.');\r\n }\r\n}\r\n\r\nexport function hexToColor(hex: string, alpha: number) {\r\n if (isValid3DigitHexColor(hex)) {\r\n hex = convertTo6DigitHexColor(hex);\r\n }\r\n\r\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\r\n if (!!result?.[1] && !!result?.[2] && !!result?.[3]) {\r\n return new Color(\r\n parseInt(result[1], 16),\r\n parseInt(result[2], 16),\r\n parseInt(result[3], 16),\r\n alpha\r\n );\r\n } else {\r\n throw new Error(`${hex} is not a valid hex color.`);\r\n }\r\n}\r\n\r\nexport function isValidHexColor(colorString: string) {\r\n return (\r\n isValid3DigitHexColor(colorString) || isValid6DigitHexColor(colorString)\r\n );\r\n}\r\n\r\nfunction isValid3DigitHexColor(colorString: string) {\r\n const hexColorRegex = /^#(?:[0-9a-fA-F]{3})$/;\r\n return colorString.match(hexColorRegex);\r\n}\r\n\r\nfunction isValid6DigitHexColor(colorString: string) {\r\n const hexColorRegex = /^#(?:[0-9a-fA-F]{6})$/;\r\n return colorString.match(hexColorRegex);\r\n}\r\n\r\nfunction convertTo6DigitHexColor(threeDigitHex: string) {\r\n return threeDigitHex\r\n .substring(1)\r\n .split('')\r\n .map((char) => {\r\n return char + char;\r\n })\r\n .join('');\r\n}\r\n\r\nfunction componentToHex(c: number) {\r\n const hex = c.toString(16);\r\n return hex.length === 1 ? '0' + hex : hex;\r\n}\r\n\r\nexport function rgbaToHex(color: Color) {\r\n const r = Math.floor(color.r * color.a);\r\n const g = Math.floor(color.g * color.a);\r\n const b = Math.floor(color.b * color.a);\r\n return `#${componentToHex(r)}${componentToHex(g)}${componentToHex(b)}`;\r\n}\r\n\r\nexport class Color {\r\n public r: number;\r\n public g: number;\r\n public b: number;\r\n public a: number;\r\n\r\n constructor(r: number, g: number, b: number, a: number = 1) {\r\n validateAlphaValue(a);\r\n\r\n this.r = r;\r\n this.g = g;\r\n this.b = b;\r\n this.a = a;\r\n }\r\n\r\n toRGBString() {\r\n return `rgb(${Math.floor(this.r * this.a)},${Math.floor(\r\n this.g * this.a\r\n )},${Math.floor(this.b * this.a)})`;\r\n }\r\n\r\n toRGBAString() {\r\n return `rgba(${this.r},${this.g},${this.b},${this.a})`;\r\n }\r\n\r\n toHexString() {\r\n return rgbaToHex(this);\r\n }\r\n}\r\n","\r\n\r\n\r\nimport { DocumentLitsLabelConfigInterfaceValueType, FormColumnInputs, InputDataTypes, InputPipeTypes } from \"ngx-t-forms-types\";\r\n\r\nexport function configureCols(inputConfig:FormColumnInputs,tempLabels:string[]):{displayedColumnsInOrder:string[],columnsConfig:any} \r\n{\r\n try {\r\n \r\n const labelInputs = ((inputConfig?.formInputs || []) as FormColumnInputs[]).filter(input=>input.showAsLabel || tempLabels.includes(input.formControlName) )\r\n const cols = [];\r\n let colConfigs: any = {};\r\n for (\r\n let index = 0;\r\n index < ( labelInputs).length;\r\n index++\r\n ) {\r\n const c = labelInputs [index]\r\n const col = {...c}\r\n cols.push(`${inputConfig.id}.${col.id}`);\r\n if(!col.id){\r\n continue\r\n }\r\n colConfigs[`${inputConfig.id}.${col.id}`]={\r\n 'property' :`${inputConfig.id}.${col.id}`,\r\n 'formControlName': col.formControlName,\r\n 'label': col.label,\r\n dataType: getDataType(col as any)\r\n }\r\n \r\n }\r\n \r\n //add remove section config\r\n cols.push('itemRemovalButton');\r\n colConfigs['itemRemovalButton'] = {\r\n property: 'itemRemovalButton',\r\n label: '',\r\n type: 'removal',\r\n };\r\n // end\r\n return {\r\n displayedColumnsInOrder : cols.filter((c) => !!c ) as string[],\r\n columnsConfig : colConfigs}\r\n } catch (error) {\r\n const message = error instanceof Error ? error.message : 'Failed to configure columns';\r\n throw new Error(message)\r\n \r\n }\r\n \r\n}\r\n\r\nfunction getDataType(input:FormColumnInputs):DocumentLitsLabelConfigInterfaceValueType|InputPipeTypes | InputDataTypes{\r\n try {\r\n if(input.pipe?.pipeType){\r\n return input.pipe.pipeType\r\n }\r\n const inputDataType = input.dataType;\r\n switch (inputDataType) {\r\n\r\n\r\n case InputDataTypes.Number:\r\n\r\n return DocumentLitsLabelConfigInterfaceValueType.number\r\n\r\n case InputDataTypes.Date:\r\n \r\n return DocumentLitsLabelConfigInterfaceValueType.date\r\n case InputDataTypes.Array:\r\n return InputDataTypes.Array\r\n case InputDataTypes.Boolean:\r\n return InputDataTypes.Boolean\r\n case InputDataTypes.Object:\r\n return InputDataTypes.Object\r\n\r\n\r\n \r\n \r\n\r\n default:\r\n return DocumentLitsLabelConfigInterfaceValueType.string\r\n \r\n }\r\n \r\n } catch (error) {\r\n const msg = error instanceof Error ? error.message : 'Failed to get data type'\r\n throw new Error(msg)\r\n }\r\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { MatTableDataSource, MatTableModule } from '@angular/material/table';\r\nimport { IMultiple } from \"ngx-t-forms-types\";\r\nimport { ColorScale } from '../../../../../../services/core/t-input-controller/functions/colorCoding';\r\nimport { CalculationFunctions } from \"ngx-t-forms-types\";\r\nimport { FormGroup } from '@angular/forms';\r\nimport { configureCols } from '../../../../../../services/core/t-input-controller/functions/configureCols';\r\nimport { FormatDataPipe } from '../../../../../../../lib/shared/pipes/format-Data.pipe';\r\n\r\n@Component({\r\n selector: 'lib-multiple-input-table-view',\r\n standalone: true,\r\n imports: [MatModulesModule, CommonModule,MatTableModule,FormatDataPipe],\r\n templateUrl: './multiple-input-table-view.component.html',\r\n styleUrl: './multiple-input-table-view.component.css'\r\n})\r\nexport class MultipleInputTableViewComponent {\r\n @Input() inputConfig!: ITowerStepColumn;\r\n @Input() dataSource: MatTableDataSource<any> = new MatTableDataSource<any>();\r\n @Input() applyOptionsTo:any\r\n @Input() formGroup:FormGroup | null = null\r\n @Output() onEditItem = new EventEmitter<string>();\r\n @Output() onDeleteItem = new EventEmitter<any>();\r\n @Output() onCopy = new EventEmitter<string>();\r\n @Output() onApplyOptionsTo = new EventEmitter<any>();\r\n applyOptionsToFn(item:any){\r\n this.onApplyOptionsTo.emit(item)\r\n }\r\n editItem(row:any) {\r\n const rowId = row[`${this.inputConfig?.id}.id`]\r\n \r\n this.onEditItem.emit(rowId);\r\n }\r\n \r\n copy(row:any) {\r\n const rowId = row[`${this.inputConfig?.id}.id`]\r\n this.onCopy.emit(rowId);\r\n }\r\n areYouSureYouWantToDeleteRow :Record<string,boolean> = {\r\n\r\n }\r\n isAboutToDeleteRow(row: any) {\r\n return this.areYouSureYouWantToDeleteRow[row[`${this.inputConfig?.id}.id`]]\r\n }\r\n \r\n countDownDate: Date = new Date();\r\n deletionTimers: { [key: string]: any } = {}; // Store timeout IDs by row ID\r\n \r\n getCountdownSeconds(): number {\r\n const now = new Date();\r\n const timeElapsed = (now.getTime() - this.countDownDate.getTime()) / 1000;\r\n // Convert elapsed time to percentage (0-100)\r\n // 0 seconds = 0%, 3 seconds = 100%\r\n const percentage = Math.min(Math.round((timeElapsed / 3) * 100), 100);\r\n return percentage;\r\n }\r\n secondsCountDown() {\r\n return (3 - (this.getCountdownSeconds() / 100 * 3)).toFixed(1)\r\n }\r\n multipleInputRemoveItem(event: Event, row: any) {\r\n const rowId = row[`${this.inputConfig?.id}.id`];\r\n \r\n if (this.areYouSureYouWantToDeleteRow[rowId]) {\r\n // Second click - cancel the scheduled deletion\r\n if (this.deletionTimers[rowId]) {\r\n clearTimeout(this.deletionTimers[rowId]);\r\n delete this.deletionTimers[rowId];\r\n }\r\n delete this.areYouSureYouWantToDeleteRow[rowId];\r\n } else {\r\n // First click - schedule auto-deletion after 3 seconds\r\n this.areYouSureYouWantToDeleteRow[rowId] = true;\r\n \r\n // Start countdown\r\n this.countDownDate = new Date();\r\n \r\n // Schedule auto-deletion after 3 seconds\r\n this.deletionTimers[rowId] = setTimeout(() => {\r\n if (this.areYouSureYouWantToDeleteRow[rowId]) {\r\n this.onDeleteItem.emit(row);\r\n delete this.areYouSureYouWantToDeleteRow[rowId];\r\n delete this.deletionTimers[rowId];\r\n }\r\n }, 3000);\r\n }\r\n \r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n returnBackground(row: any, columnsConfig?: any):string|undefined {\r\n var background: any = '';\r\n if (\r\n this.dataSource\r\n ? this.dataSource.data.length > 1\r\n ? columnsConfig['colorScale']\r\n : false\r\n : false\r\n ) {\r\n const input = this.inputConfig as IMultiple;\r\n const point = row[columnsConfig['key']];\r\n const inputIsGrouped = input.groupBy;\r\n const dataSet = inputIsGrouped\r\n ? this.dataSource!.data.filter(\r\n (s) => s[input.groupBy?.[0] || ''] === row[input.groupBy?.[0] || '']\r\n )\r\n : new Array(this.dataSource!.data);\r\n let arrayValues: Array<number> = dataSet.map((vr) =>\r\n Number(vr[columnsConfig['key']])\r\n );\r\n const max = Math.max(...arrayValues);\r\n const min = Math.min(...arrayValues);\r\n const hasNun = isNaN(max) || isNaN(min);\r\n if (!hasNun && Number(max) !== Number(min)) {\r\n let colorScale = new ColorScale(\r\n min,\r\n max,\r\n ['#2fdf75', '#FFA500', '#ff4961'],\r\n 0.8\r\n );\r\n\r\n let color:string|undefined= colorScale.getColor(point)?.toRGBAString();\r\n background = color;\r\n }\r\n }\r\n return background;\r\n }\r\n\r\n hasTopBorder(row: any) {\r\n const input = this.inputConfig as IMultiple\r\n const inputIsGrouped = input.groupBy;\r\n if (inputIsGrouped) {\r\n const indexOfRow = this.dataSource!.data.indexOf(row);\r\n const rowIsFirstInTable = indexOfRow === 0;\r\n\r\n if (!input.groupBy) {\r\n return false;\r\n }\r\n const isFirstInGroup = rowIsFirstInTable\r\n ? true\r\n : this.dataSource!.data[indexOfRow - 1][input.groupBy?.[0] ?? ''] !==\r\n row[input.groupBy?.[0] ?? ''];\r\n\r\n return isFirstInGroup;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n getCalculationFunction(row: any) {\r\n const func:CalculationFunctions = row['SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION']\r\n \r\n switch (func) {\r\n case CalculationFunctions.Sum:\r\n \r\n return 'TOTAL';\r\n case CalculationFunctions.Avg:\r\n return 'AVERAGE';\r\n case CalculationFunctions.Max:\r\n return 'MAX';\r\n case CalculationFunctions.Min:\r\n return 'MIN';\r\n \r\n default:\r\n return func;\r\n }\r\n }\r\n tempLabels:string[] = []\r\n toggleTepLabel(event:any,label:string){\r\n if(this.tempLabels.includes(label)){\r\n this.tempLabels = this.tempLabels.filter(l=>l!==label)\r\n \r\n }else{\r\n this.tempLabels.push(label)\r\n }\r\n\r\n event.stopPropagation()\r\n event.preventDefault()\r\n }\r\n get getColConfig(){\r\n if(!this.inputConfig) return {\r\n columnsConfig: [],\r\n displayedColumnsInOrder: []\r\n }\r\n return configureCols(this.inputConfig,this.tempLabels )\r\n }\r\n get displayedColumnsInOrder():string[] {\r\n return this.getColConfig.displayedColumnsInOrder\r\n }\r\n get allPossibleLabels(){\r\n return this.inputConfig?.formInputs?.map(\r\n inp=>({\r\n label:inp.label,\r\n selected:this.displayedColumnsInOrder.includes(`${this.inputConfig?.id}.${inp.id}`),\r\n formControlName: inp.formControlName\r\n })\r\n ) ||[]\r\n }\r\n \r\n\r\n\r\n SYSTEM_KEY_IN_EDIT:string| null = null\r\n rowIsInEdit(row:any) {\r\n return !!this.inputConfig?.formIsOpen &&this.formGroup?.controls[`${this.inputConfig?.id}.id`]?.value===row[`${this.inputConfig?.id}.id`]\r\n }\r\n fullView: boolean = false;\r\n}\r\n","@defer (on viewport) {\r\n\r\n@if (getColConfig.displayedColumnsInOrder.length===0) {\r\n<div style=\"\r\n padding-left: 16px;\r\n padding-right: 16px;\r\n padding-top: 16px;\r\n padding-bottom: 16px;\r\n\r\n display: flex;\r\n justify-content: center;\r\n opacity: 0.6;\r\n font-size: 13px;\r\n \">\r\n No columns\r\n</div>\r\n}\r\n<div class=\"table-container\">\r\n\r\n <table mat-table [dataSource]=\"(dataSource || [])\" class=\"example-table\" matSort matSortActive=\"created\"\r\n matSortDisableClear matSortDirection=\"desc\">\r\n @for (col of (displayedColumnsInOrder||[]); track col) {\r\n <ng-container [matColumnDef]=\"col\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <span style=\"text-align: start; line-height: normal; font-size: 13px\">\r\n {{ getColConfig.columnsConfig?.[col]?.[\"label\"] }}\r\n </span>\r\n @if($last){\r\n <button matTooltip=\"Show other values\" [matMenuTriggerFor]=\"colOptions\" \r\n [matMenuTriggerData]=\"{}\" mat-icon-button>\r\n <mat-icon>\r\n label\r\n </mat-icon>\r\n </button>\r\n \r\n }\r\n </th>\r\n <td [class.functionClass]=\"row['SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION']\"\r\n \r\n [style.background]=\"\r\n returnBackground(row, getColConfig.columnsConfig?.[col])\r\n \" mat-cell *matCellDef=\"let row\">\r\n <div *ngIf=\" getColConfig.columnsConfig?.[col]?.['type'] === 'removal'\" class=\"cellClass\">\r\n <span *ngIf=\"\r\n !!row['SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION'] &&\r\n inputConfig?.multipleInputInEditId !== row['id']\">\r\n <strong>\r\n\r\n {{getCalculationFunction(row)}}\r\n </strong>\r\n\r\n </span>\r\n <button mat-icon-button\r\n [color]=\"t.menuOpen ? 'primary' : 'basic'\"\r\n *ngIf=\"\r\n !row['SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION'] &&\r\n row['' ] !== 'true' && !inputConfig?.readonly \r\n \r\n \" \r\n [matMenuTriggerFor]=\"rowOptions\" \r\n [matMenuTriggerData]=\"{row:row}\" \r\n #t=\"matMenuTrigger\" (click)=\"applyOptionsToFn(row)\"\r\n expand=\"block\" fill=\"clear\" style=\"margin-left: auto;margin-right:0px;display:block\">\r\n @if (rowIsInEdit(row)) {\r\n <mat-icon color=\"primary\">\r\n edit\r\n </mat-icon> \r\n\r\n }@else {\r\n <mat-icon >\r\n {{\r\n t.menuOpen ? 'close' : 'more_horiz'\r\n }}\r\n \r\n </mat-icon>\r\n }\r\n \r\n\r\n </button>\r\n\r\n\r\n <mat-chip *ngIf=\"\r\n row['SYSTEM_KEY_IN_EDIT']\r\n \r\n \">\r\n In {{ inputConfig?.readonly ? 'View' : 'Edit' }}\r\n\r\n </mat-chip>\r\n\r\n </div>\r\n <div *ngIf=\"getColConfig.columnsConfig && getColConfig.columnsConfig?.[col]?.type !== 'removal'\"\r\n class=\"cellClass\">\r\n <span >\r\n {{ row[col] |formatData: getColConfig.columnsConfig?.[col].dataType }}\r\n\r\n </span>\r\n </div>\r\n </td>\r\n </ng-container>\r\n }\r\n\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"getColConfig.displayedColumnsInOrder \"></tr>\r\n <tr [style.border-top]=\"hasTopBorder(row) ? 'solid 2px' : ''\" mat-row\r\n \r\n *matRowDef=\"let row; columns: getColConfig.displayedColumnsInOrder\"></tr>\r\n </table>\r\n \r\n <div *ngIf=\"!(dataSource?.data)||(dataSource?.data)?.length === 0\">\r\n <div style=\"\r\n padding-left: 16px;\r\n padding-right: 16px;\r\n padding-top: 16px;\r\n padding-bottom: 16px;\r\n\r\n display: flex;\r\n justify-content: center;\r\n opacity: 0.6;\r\n font-size: 13px;\r\n \">\r\n <div style=\"\r\n padding-left: 16px;\r\n padding-right: 16px;\r\n padding-top: 16px;\r\n padding-bottom: 16px;\r\n\r\n display: flex;\r\n justify-content: center;\r\n opacity: 0.6;\r\n font-size: 13px;\r\n \">\r\n \r\n <div style=\"margin-top: 8px; text-align: center;\">\r\n <mat-icon style=\"font-size: 20px; vertical-align: middle; margin-right: 8px;\">list</mat-icon>\r\n <div style=\"margin-top: 8px;\">\r\n <strong>No items yet</strong>\r\n <p style=\"margin-top: 4px; font-size: 13px;\">\r\n <strong>Click the add button</strong> to create a new row. You'll be able to fill in details using a form.\r\n Each saved entry will appear as a row in this table.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n}@placeholder {\r\n<div style=\"padding: 50px;display:flex;justify-content:center;align-items:center; text-align: center;\">\r\n <mat-spinner diameter=\"50\" />\r\n</div>\r\n}\r\n<mat-menu #colOptions=\"matMenu\">\r\n <ng-template matMenuContent >\r\n @for (label of allPossibleLabels; track label.label) {\r\n <button mat-menu-item (click)=\"toggleTepLabel($event,label.formControlName);\">\r\n <mat-icon>\r\n {{ label.selected?'check_circle':'radio_button_unchecked'}}\r\n </mat-icon>\r\n {{label.label}}\r\n \r\n </button>\r\n \r\n }\r\n\r\n </ng-template>\r\n</mat-menu>\r\n<mat-menu #rowOptions=\"matMenu\">\r\n <ng-template matMenuContent let-row=\"row\">\r\n @if(!inputConfig?.readonly){\r\n <button mat-menu-item (click)=\"editItem(row)\">\r\n <mat-icon>\r\n {{'edit'}}\r\n </mat-icon>\r\n <div class=\"option-text\">\r\n <div class=\"option-main-text\">\r\n {{ 'Edit'}}\r\n </div>\r\n <div class=\"option-sub-text\">\r\n {{inputConfig?.readonly ? 'View item properties' : 'Modify item properties'}}\r\n </div>\r\n </div>\r\n </button>\r\n\r\n <button mat-menu-item (click)=\"copy(row)\">\r\n <mat-icon>\r\n content_copy\r\n </mat-icon>\r\n <div class=\"option-text\">\r\n <div class=\"option-main-text\">\r\n Duplicate\r\n </div>\r\n <div class=\"option-sub-text\">\r\n Create a copy with same values\r\n </div>\r\n </div>\r\n </button>\r\n @if(isAboutToDeleteRow(row)){\r\n <button mat-menu-item (click)=\"multipleInputRemoveItem($event,row)\">\r\n <mat-icon color=\"accent\">\r\n cancel\r\n </mat-icon>\r\n <div class=\"option-text\">\r\n <div class=\"option-main-text\" style=\"color: #2196F3;\">\r\n Cancel Deletion\r\n </div>\r\n <div class=\"option-sub-text\">\r\n Auto-deleting in {{ secondsCountDown()}} seconds...\r\n </div>\r\n </div>\r\n </button>\r\n <div class=\"deletion-progress-container\">\r\n <mat-progress-bar color=\"warn\" mode=\"determinate\" [value]=\"getCountdownSeconds()\"></mat-progress-bar>\r\n <div class=\"deletion-message\" *ngIf=\"getCountdownSeconds() > 75\">\r\n Deleting soon...\r\n </div>\r\n </div>\r\n }@else {\r\n <button mat-menu-item (click)=\"multipleInputRemoveItem($event,row)\">\r\n <mat-icon color=\"warn\">\r\n delete_outline\r\n </mat-icon>\r\n <div class=\"option-text\">\r\n <div class=\"option-main-text\">\r\n Delete \r\n </div>\r\n <div class=\"option-sub-text\">\r\n Will delete after 3 seconds (click to cancel)\r\n </div>\r\n </div>\r\n </button>\r\n }\r\n }\r\n </ng-template>\r\n</mat-menu>\r\n","import { Component, EventEmitter, Input, OnDestroy, Output } from '@angular/core';\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { TFormInputComponent } from '../../../../t-form-input.component';\r\nimport { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\r\n\r\nimport { Subject, takeUntil, tap, timer } from 'rxjs';\r\nimport { CalculationFunctions, ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { IMultipleInputCal } from 'ngx-t-forms-types';\r\nimport { FormBuilderFunctions } from 'ngx-t-forms-types';\r\nimport { AbstractControl, FormGroup } from '@angular/forms';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'lib-multiple-input-table-edit',\r\n standalone: true,\r\n imports: [MatModulesModule, CommonModule, DragDropModule,],\r\n templateUrl: './multiple-input-table-edit.component.html',\r\n styleUrl: './multiple-input-table-edit.component.css'\r\n})\r\nexport class MultipleInputTableEditComponent implements OnDestroy {\r\n InputComponent = TFormInputComponent;\r\n @Input() inputConfig!: ITowerStepColumn;\r\n @Input() editorMode: boolean = false;\r\n @Input() formGroup:FormGroup | null = null\r\n\r\n @Output() onSaveMultipleInputForm = new EventEmitter<any>();\r\n @Output() editMultipleInput = new EventEmitter<ITowerStepColumn>();\r\n @Output() deleteInput = new EventEmitter<ITowerStepColumn>();\r\n @Output() showItemAsLabel = new EventEmitter<ITowerStepColumn>();\r\n @Output() addFunction = new EventEmitter<IMultipleInputCal>();\r\n @Input() formBuilderFunctions: FormBuilderFunctions |undefined\r\n @Output() reorderItems = new EventEmitter< CdkDragDrop<ITowerStepColumn[] , any, any>>();\r\n calculationFunctions \r\n constructor() {\r\n this.calculationFunctions = Object.values(CalculationFunctions)\r\n }\r\n\r\n ngOnDestroy(): void {\r\n Object.values(this.countdownSeconds).forEach(({ stop$ }) => stop$.complete());\r\n }\r\nactiveInput:string = ''\r\n // getMultipleInputForm(): FormGroup | any {\r\n // const form: FormGroup | undefined =\r\n // this.inputConfig?.multipleInputController?.sections[\r\n // this.inputConfig.input.id\r\n // ]?.sectionForm\r\n \r\n // return form;\r\n // }\r\n saveMultipleInputForm() {\r\n this.onSaveMultipleInputForm.emit();\r\n }\r\n dragging:boolean = false\r\n inputWillBeRemovedIn(id: string) {\r\n return this.countdownSeconds[id]?.count\r\n }\r\n countdownSeconds: {\r\n [key: string]:\r\n {\r\n count: number | null,\r\n stop$: Subject<void>\r\n }\r\n } = {}\r\n removeInput(item: ITowerStepColumn) {\r\n if (this.countdownSeconds[item.id]) {\r\n this.stopDeletion(item.id);\r\n return;\r\n }\r\n \r\n this.countdownSeconds[item.id] = {\r\n count: 5,\r\n stop$: new Subject<void>()\r\n };\r\n \r\n const countdown$ = timer(0, 1000).pipe(\r\n tap((secondsElapsed) => {\r\n const data = this.countdownSeconds[item.id];\r\n if (!data) {\r\n return;\r\n }\r\n \r\n const remainingTime = 5 - secondsElapsed;\r\n if (remainingTime <= 0) {\r\n this.formDeleteInput(item)\r\n this.stopDeletion(item.id);\r\n // Stop and remove timer\r\n // Actual deletion logic here, e.g., remove the element by id\r\n // document.getElementById(id)?.remove();\r\n } else {\r\n data.count = remainingTime;\r\n }\r\n }),\r\n takeUntil(this.countdownSeconds[item.id]!.stop$)\r\n );\r\n \r\n countdown$?.subscribe({\r\n complete: () => {\r\n console.log('Deletion stopped or completed');\r\n }\r\n });\r\n }\r\n stopDeletion(id: string) {\r\n if (this.countdownSeconds[id]) {\r\n this.countdownSeconds[id]?.stop$.next();\r\n delete this.countdownSeconds[id];\r\n }\r\n }\r\n\r\n formDeleteInput(item: ITowerStepColumn){\r\n this.deleteInput.emit(item)\r\n }\r\n dropItems(event: CdkDragDrop<ITowerStepColumn[], any, any>) {\r\n this.reorderItems.emit(event);\r\n\r\n }\r\n overId:string | null = null\r\n editInput(input: ITowerStepColumn) {\r\n \r\n this.editMultipleInput.emit(input);\r\n\r\n }\r\n toggleLabel(item: ITowerStepColumn) {\r\n this.showItemAsLabel.emit(item);\r\n }\r\n toggleFunction(func:CalculationFunctions,inputId:string) {\r\n \r\n let addFunction:IMultipleInputCal = {\r\n inputId: this.activeInput,\r\n func\r\n }\r\n this.addFunction.emit(addFunction);\r\n \r\n \r\n }\r\n selectedFunction(func:CalculationFunctions) {\r\n return this.inputConfig?.calculateListFunctions.find(f=>f.inputId === this.activeInput && f.func === func)\r\n }\r\n areYouSure:boolean = false\r\n get formInvalid(){\r\n const allControls: AbstractControl<any, any>[] = []\r\n this.inputConfig?.formInputs?.forEach(input=>{\r\n const control = this.formGroup?.controls[`${ this.inputConfig?.id}.${input.id}`];\r\n if (control) {\r\n allControls.push(control);\r\n }else{\r\n \r\n }\r\n })\r\n \r\n return allControls.some((control:any)=>control?.invalid || !control)\r\n }\r\n closeMultipleInput(){\r\n if(this.areYouSure){\r\n this.formBuilderFunctions?.multipleInputToggleForm(this.inputConfig?.id!,false)\r\n this.areYouSure = false \r\n return \r\n }\r\n this.areYouSure = true\r\n\r\n }\r\n get innerInputs():ITowerStepColumn[]{\r\n return this. inputConfig?.formInputs?.map(input=>({\r\n ...input,\r\n originalId: input.id,\r\n id: `${this.inputConfig?.id}.${input.id}`\r\n } as ITowerStepColumn)) ||[]\r\n }\r\n get rowInUpdate(){\r\n return !!this.inputConfig?.formIsOpen &&!!this.formGroup?.controls[`${this.inputConfig?.id}.id`]?.value\r\n }\r\n}\r\n","\r\n<mat-card appearance=\"outlined\" style=\" margin-top: 8px;background:var(--mat-sys-surface-container)\" class=\" mat-elevation-z4\">\r\n <mat-card-content>\r\n <div class=\"list\" (cdkDropListDropped)=\"dropItems($event)\"\r\n \r\n [cdkDropListData]=\"innerInputs\" cdkDropList\r\n \r\n #InputList=\"cdkDropList\" class=\"row\">\r\n @for( innerInput of innerInputs|| [];track innerInput.id\r\n ){\r\n <ng-container>\r\n @if(editorMode){\r\n <mat-card (mouseover)=\"activeInput = innerInput.id\" *ngIf=\"!!formGroup\" cdkDrag\r\n (cdkDragStarted)=\"dragging =true\" (cdkDragReleased)=\"dragging =false\"\r\n [class.inputCardElevated]=\"activeInput ===innerInput.id\"\r\n [class.inputCard]=\"activeInput !==innerInput.id\"\r\n [class]=\"'col-md-'+(dragging?'12':innerInput.colSize)\" class=\"box\">\r\n <div class=\"custom-placeholder\" *cdkDragPlaceholder></div>\r\n <ng-container *ngComponentOutlet=\"InputComponent; \r\n inputs: {\r\n inputConfig: innerInput,\r\n formGroup: formGroup,\r\n formBuilderFunctions: formBuilderFunctions,\r\n }\">\r\n </ng-container>\r\n <mat-card-actions *ngIf=\"activeInput === innerInput.id\">\r\n <span class=\"spacer\"></span>\r\n <button [matTooltip]=\"'Edit Input: ' + innerInput.label \"\r\n (click)=\"editInput(innerInput)\" mat-icon-button>\r\n <mat-icon>\r\n edit\r\n </mat-icon>\r\n\r\n </button>\r\n @if(!!inputWillBeRemovedIn(innerInput.id) ){\r\n <button (mouseover)=\"overId = innerInput.id\" (mouseout)=\"overId = null\"\r\n (click)=\"removeInput(innerInput)\" color=\"warn\" mat-stroked-button>\r\n <div style=\"display: flex; align-items: center;\">\r\n <mat-progress-spinner style=\"margin-right: 5px;\" color=\"primary\" class=\"cancelProgress\"\r\n [value]=\"((inputWillBeRemovedIn(innerInput.id)||0)/5)*100\">\r\n </mat-progress-spinner>\r\n\r\n {{overId === innerInput.id ? 'Click to cancel':'Deleting in'}}\r\n {{inputWillBeRemovedIn(innerInput.id)}}\r\n </div>\r\n\r\n </button>\r\n\r\n }@else if(inputConfig?.systemDefault !== true && innerInput.systemDefault !== true) {\r\n <button [matTooltip]=\"'Delete input ' + innerInput.label \"\r\n (click)=\"removeInput(innerInput)\" mat-icon-button>\r\n\r\n <mat-icon>\r\n delete\r\n </mat-icon>\r\n </button>\r\n }\r\n |\r\n <button *ngIf=\"!!innerInput.showAsLabel && innerInput.dataType=== 'number' ||!!innerInput.showAsLabel && innerInput.type === 'number'\"\r\n [matMenuTriggerFor]=\"calculationMenu\" \r\n [matMenuTriggerData]=\"{inputId:innerInput.originalId || innerInput.id}\"\r\n [matTooltip]=\"'calculate sum,avg,min,max'\"\r\n mat-icon-button>\r\n\r\n <mat-icon>\r\n calculate\r\n </mat-icon>\r\n </button>\r\n <button [color]=\"innerInput.showAsLabel? 'primary' : ''\"\r\n (click)=\"toggleLabel(innerInput)\"\r\n [matTooltip]=\"innerInput.showAsLabel? 'Hide as label' : 'Show as label'\"\r\n mat-icon-button>\r\n\r\n <mat-icon>\r\n label\r\n </mat-icon>\r\n </button>\r\n <span class=\"spacer\"></span>\r\n </mat-card-actions>\r\n </mat-card>\r\n }@else {\r\n \r\n <div [class]=\"'col-md-'+(dragging?'12':innerInput.colSize)\" class=\"box\">\r\n <ng-container *ngComponentOutlet=\"InputComponent; \r\n inputs: {\r\n inputConfig: innerInput,\r\n formGroup: formGroup,\r\n formBuilderFunctions: formBuilderFunctions,\r\n }\">\r\n </ng-container>\r\n </div>\r\n \r\n }\r\n\r\n </ng-container>\r\n }\r\n @if (!!editorMode && ( innerInputs|| []).length === 0) {\r\n\r\n <div class=\"tree-instructions\">\r\n <mat-icon style=\"margin-top: 4px;margin-bottom:auto\" class=\"info-icon\" color=\"primary\">info</mat-icon>\r\n <span>\r\n <strong>Add Form Input</strong>\r\n <br>\r\n Manage your list by adding, editing, or removing items. Each item is customizable through a form.\r\n </span>\r\n </div>\r\n\r\n }\r\n\r\n </div>\r\n </mat-card-content>\r\n @if ( ( innerInputs|| []).length !== 0) {\r\n <br>\r\n <mat-divider></mat-divider>\r\n <mat-card-actions align=\"end\" class=\"ion-margin-top\">\r\n <button [color]=\"areYouSure ? 'warn' : ''\" class=\"ion-margin-end\"\r\n [style.text-decoration]=\"areYouSure ? 'underline' : ''\" mat-flat-button\r\n (click)=\"closeMultipleInput()\">\r\n {{ areYouSure ? \"leave without saving\" : \"cancel\" }}\r\n </button>\r\n @if(!inputConfig?.readonly){\r\n <button [disabled]=\"!!formInvalid\" style=\"min-width: 10em\" color=\"primary\" (click)=\"saveMultipleInputForm()\" class=\"ion-padding-horizontal\"\r\n mat-raised-button>\r\n {{\r\n rowInUpdate\r\n ? \"Update\"\r\n : \"save\"\r\n }}\r\n </button>\r\n }\r\n\r\n </mat-card-actions>\r\n }\r\n\r\n</mat-card>\r\n<mat-menu #calculationMenu=\"matMenu\">\r\n <ng-template matMenuContent let-inputId=\"sectionId\">\r\n <button (click)=\"toggleFunction(func,inputId)\" mat-menu-item *ngFor=\"let func of calculationFunctions\">\r\n {{ func }}\r\n <mat-icon color=\"primary\" *ngIf=\"selectedFunction(func)\">check_circle</mat-icon>\r\n </button>\r\n </ng-template>\r\n</mat-menu> ","\r\nimport { calculateListOveralFunctions } from \"../../../../../services/core/t-form-controller/function/calculateInputValue\";\r\nimport { CalculationFunctions, FormColumnInputs } from \"ngx-t-forms-types\";\r\n\r\nexport function getCaluculatedTableData(inputConfig: FormColumnInputs | undefined,data:any[]) {\r\n try {\r\n if(!Array.isArray(data) || !inputConfig) return data ;\r\n const input:FormColumnInputs = inputConfig;\r\n // const funcs = (input?.calculateListFunctions || []).map(f=> {\r\n // // const {formControlName}= input.formInputs?.find(i=>i.id === f.id) ||{}\r\n // // return {\r\n // // ...f,\r\n // // formControlName\r\n // // }\r\n // return \r\n // })\r\n const funcs = (input?.calculateListFunctions || [])\r\n const allUniqueFunctionNames = [...new Set(funcs.map((f: {\r\n \r\n inputId: string;\r\n func: CalculationFunctions;\r\n })=>f.func))]\r\n const calculatedData = allUniqueFunctionNames.map(func=>{\r\n let newCalculatedData:any = {\r\n //itemRemovalButton\r\n SYSTEM_KEY_PROPERTY_FOR_MULTIPLE_INPUTS_CALCULATION_FUNCTION: func\r\n \r\n }\r\n funcs.filter(f=>f.func === func).forEach(f=>{\r\n const arrayValues = data.map(d=>Number(d[f.inputId as any]))\r\n newCalculatedData[f.inputId as any] = calculateListOveralFunctions(func,arrayValues)\r\n })\r\n return newCalculatedData\r\n })\r\nreturn [...data,...calculatedData]\r\n \r\n } catch (error) {\r\n return data;\r\n }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, Input, Optional, Self } from '@angular/core';\r\nimport { FormGroup, NgControl, } from '@angular/forms';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\n\r\nimport { IMultiple, IMultipleInputCal, ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\n\r\nimport _, { } from 'lodash';\r\n\r\n\r\nimport { MultipleInputTableViewComponent } from '../multiple-input-table-view/multiple-input-table-view.component';\r\nimport { MultipleInputTableEditComponent } from '../multiple-input-table-edit/multiple-input-table-edit.component';\r\n\r\nimport { FormBuilderFunctions } from 'ngx-t-forms-types';\r\nimport { getCaluculatedTableData } from '../../functions/getListCalculated';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';\r\nimport { CdkDragDrop } from '@angular/cdk/drag-drop';\r\n\r\nimport { _isEqual } from '../../../../../../shared/functions/isEqual';\r\nimport { takeUntil } from 'rxjs';\r\nconst customInputConfig: BaseCustomInputConfig = {\r\n controlType: 'app-multiple-input-table',\r\n nextId: 0\r\n}\r\n@Component({\r\n selector: 'app-multiple-input-table',\r\n templateUrl: './multiple-input-table.component.html',\r\n styleUrls: ['./multiple-input-table.component.css'],\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatModulesModule,\r\n MultipleInputTableEditComponent,\r\n MultipleInputTableViewComponent,\r\n ],\r\n providers: [{ provide: MatFormFieldControl, useExisting: MultipleInputTableComponent }],\r\n\r\n})\r\nexport class MultipleInputTableComponent extends BaseCustomInput<any[] | null> {\r\n constructor(\r\n @Optional() @Self() ngControl: NgControl,\r\n elementRef: ElementRef<HTMLElement>\r\n ) {\r\n super(ngControl, elementRef, customInputConfig);\r\n this.listenToValueChanges();\r\n\r\n }\r\n @Input() editorMode: boolean = false;\r\n @Input() formGroup!: FormGroup;\r\n \r\n _inputConfig!: ITowerStepColumn ;\r\n @Input() set inputConfig(config: ITowerStepColumn ){\r\n if(_isEqual(this._inputConfig, config)) return\r\n \r\n this._inputConfig = config;\r\n \r\n \r\n }\r\n get inputConfig() {\r\n return this._inputConfig;\r\n }\r\n @Input() formBuilderFunctions: FormBuilderFunctions | undefined\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n get empty() {\r\n return !this.value\r\n }\r\n\r\n get shouldLabelFloat() {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n /// En of implementations of MatFormFieldControl\r\n applyOptionsTo: any;\r\n dataSource!: MatTableDataSource<any>\r\nlistenToValueChanges(){\r\n this.stateChanges.pipe(\r\n takeUntil(this.destroy$)\r\n ).subscribe(() => {\r\n this.checkItemList()\r\n })\r\n}\r\n checkItemList(){\r\n try {\r\n \r\n if (this.value) {\r\n const TableData: any = (this.inputConfig as IMultiple)\r\n .groupBy\r\n ? addGroups(\r\n this.value,\r\n (this.inputConfig as IMultiple).groupBy\r\n )\r\n : this.value;\r\n const data = getCaluculatedTableData(this.inputConfig, TableData)\r\n \r\n if (!this.dataSource) {\r\n \r\n this.dataSource = new MatTableDataSource(data);\r\n\r\n this.dataSource\r\n } else {\r\n this.dataSource.data = data;\r\n }\r\n \r\n }\r\n return true\r\n } catch (error) {\r\n const msg = error instanceof Error ? error.message : 'Error checking item list';\r\n console.error(msg);\r\n return false\r\n\r\n }\r\n }\r\n\r\n multipleInputRemoveItem(item: any) {\r\n\r\n if (!this.value) return;\r\n this.value = this.value.filter((i) => !_isEqual(i, item));\r\n\r\n\r\n this.applyOptionsTo = undefined;\r\n this.onChange(this.value);\r\n this.stateChanges.next();\r\n }\r\n\r\n\r\n generateMultipleInputForm() {\r\n const id = this.inputConfig?.id;\r\n if (!id) return;\r\n this.formBuilderFunctions?.multipleInputToggleForm(id,true)\r\n\r\n }\r\n rowInViewOnly:string| undefined = undefined;\r\n\r\n editRow(rowId:string) {\r\n if(!rowId ){\r\n console.error('Row id not provided')\r\n \r\n throw new Error('Row id not provided')\r\n\r\n }\r\n\r\n if(!this.formBuilderFunctions || !this.inputConfig ) return\r\n\r\n this.formBuilderFunctions?.multipleInputEditRow( this.inputConfig?.id,rowId)\r\n\r\n\r\n // if( !this.inputConfig?.multipleInputController){\r\n // return\r\n // }\r\n // this.inputConfig.multipleInputInEditId = this.applyOptionsTo.id;\r\n // this.inputConfig.applyMultipleInputValuesToForm(\r\n // this.applyOptionsTo\r\n // );\r\n }\r\n \r\n copy(rowId:string) {\r\n if(!this.formBuilderFunctions || !this.inputConfig) return\r\n this.formBuilderFunctions?.multipleInputDuplicateRow( this.inputConfig?.id,rowId)\r\n // this.generateMultipleInputForm();\r\n // this.inputConfig?.applyMultipleInputValuesToForm(\r\n // this.applyOptionsTo\r\n // );\r\n // this.applyOptionsTo = undefined;\r\n }\r\n get handleLabel() {\r\n return (this.inputConfig as any)?.handleLabel\r\n }\r\n handleIcon() {\r\n return (this.inputConfig as any)?.handleIcon || 'add'\r\n }\r\n saveMultipleInputForm() {\r\n\r\n this.formBuilderFunctions?.multipleInputSaveForm(this.inputConfig?.id!)\r\n \r\n // const value: any = this.inputConfig?.multipleInputFormValue();\r\n\r\n // value['id'] = uuidv4();\r\n\r\n // if (!this.inputConfig) {\r\n // return\r\n // }\r\n\r\n // const previousValue = this.value\r\n // if (!previousValue) {\r\n // this.value = [value];\r\n // this.inputConfig.multipleInputController = undefined;\r\n\r\n // } else {\r\n // if (this.inputConfig?.multipleInputInEditId) {\r\n // let inEdit = previousValue.find(\r\n // (i: { id: any }) =>\r\n // i.id === this.inputConfig?.multipleInputInEditId\r\n // );\r\n // Object.keys(inEdit).every((s) => {\r\n // s;\r\n // inEdit[s] = value[s];\r\n // return !!inEdit[s];\r\n // });\r\n\r\n // this.value = [...previousValue],\r\n // this.inputConfig.multipleInputController = undefined;\r\n\r\n // } else {\r\n\r\n\r\n // this.value = [...previousValue, value];\r\n // this.inputConfig.multipleInputController = undefined;\r\n\r\n // }\r\n // }\r\n // this.onChange(this.value);\r\n // this.stateChanges.next();\r\n // this.checkItemList(this.value || []);\r\n // return\r\n\r\n\r\n }\r\n \r\n editInput(input: ITowerStepColumn) {\r\n if (typeof this.formBuilderFunctions?.editInput !== 'function') {\r\n throw new Error('editInput function not defined in formBuilderFunctions')\r\n }\r\n this.formBuilderFunctions?.editInput(input)\r\n }\r\n deleteItemInput(input: ITowerStepColumn) {\r\n this.formBuilderFunctions?.deleteInput(input)\r\n }\r\n showItemAsLabel(input: ITowerStepColumn) {\r\n this.formBuilderFunctions?.multipleInputToggleLabel(input)\r\n }\r\n addFunction(func: IMultipleInputCal) {\r\n this.formBuilderFunctions?.addFunction(func, this.inputConfig?.id)\r\n\r\n }\r\n reorderItems(event: CdkDragDrop<ITowerStepColumn[] , any, any>) {\r\n if (!this.formBuilderFunctions || !this.inputConfig) return\r\n this.formBuilderFunctions?.reorderItems(event as any, this.inputConfig.id)\r\n }\r\n get parentFormGroup(): FormGroup | null {\r\n return this.ngControl?.control?.parent as FormGroup;\r\n }\r\n\r\n}\r\n\r\n\r\n\r\nfunction addGroups(tableValue: any[], groupBy: string[] | undefined): any {\r\n throw new Error('Function not implemented.');\r\n}\r\n\r\n","\r\n<lib-multiple-input-table-view\r\n\r\n[inputConfig]=\"inputConfig\"\r\n[dataSource]=\"dataSource\"\r\n[applyOptionsTo]=\"applyOptionsTo\"\r\n[formGroup]=\"parentFormGroup\"\r\n(onEditItem)=\"editRow($event)\"\r\n\r\n(onDeleteItem)=\"multipleInputRemoveItem(applyOptionsTo)\"\r\n(onCopy)=\"copy($event)\"\r\n(onApplyOptionsTo)=\"applyOptionsTo = $event\"\r\n></lib-multiple-input-table-view>\r\n@if(!!inputConfig?.formIsOpen || !!rowInViewOnly){\r\n<lib-multiple-input-table-edit \r\n[editorMode]=\"editorMode\"\r\n(editMultipleInput)=\"editInput($event)\"\r\n(deleteInput)=\" deleteItemInput($event)\"\r\n(addFunction)=\"addFunction($event)\"\r\n(showItemAsLabel)=\"showItemAsLabel($event)\"\r\n(onSaveMultipleInputForm)=\"saveMultipleInputForm()\"\r\n(reorderItems)=\"reorderItems($event)\"\r\n[formBuilderFunctions]=\"formBuilderFunctions\"\r\n[formGroup]=\"parentFormGroup\"\r\n[inputConfig]=\"inputConfig\"\r\n></lib-multiple-input-table-edit>\r\n\r\n}\r\n\r\n@if (\r\n !inputConfig?.readonly &&\r\n !inputConfig?.formIsOpen\r\n) {\r\n <section >\r\n <button \r\n color=\"primary\" \r\n style=\" display: block;\r\n margin-top: 8px;\r\n width: 100%;\" (click)=\"generateMultipleInputForm()\" mat-flat-button>\r\n \r\n {{handleLabel}}\r\n <mat-icon matPrefix>{{\r\n handleIcon()\r\n }}</mat-icon>\r\n \r\n \r\n </button>\r\n </section>\r\n \r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { ITowerStepColumn } from \"ngx-t-forms-types\";\r\n\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\n\r\nimport { MultipleInputTableComponent } from './core/multiple-input-table/multiple-input-table.component';\r\n\r\nimport { FormBuilderFunctions } from \"ngx-t-forms-types\";\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\n@Component({\r\n selector: 'lib-multiple-input-input-element',\r\n standalone: true,\r\n imports: [MatModulesModule, \r\n TFormInputStatusComponent,\r\n CommonModule,\r\n ReactiveFormsModule,MultipleInputTableComponent ],\r\n templateUrl: './multiple-input-input-element.component.html',\r\n styleUrl: './multiple-input-input-element.component.css'\r\n})\r\nexport class MultipleInputInputElementComponent {\r\n @Input() inputConfig!: ITowerStepColumn;\r\n @Input() formGroup!: FormGroup;\r\n @Input() editorMode: boolean = false;\r\n \r\n @Input() formBuilderFunctions: FormBuilderFunctions |undefined\r\n\r\n @Output() reload = new EventEmitter<void>();\r\n get errorMessage(){\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n }\r\n \r\n}\r\n","<form [formGroup]=\"formGroup\">\r\n <mat-form-field [appearance]=\"this.inputConfig.appearance ||'fill' \" subscriptSizing=\"dynamic\" floatLabel=\"always\"\r\n *ngIf=\"this.inputConfig as inputConfig\">\r\n <mat-label>\r\n {{this.inputConfig.label }}\r\n <lib-t-form-input-status [inputConfig]=\"this.inputConfig\"></lib-t-form-input-status>\r\n </mat-label>\r\n\r\n <app-multiple-input-table [editorMode]=\"editorMode\" [required]=\"this.inputConfig.required\" [formGroup]=\"formGroup\"\r\n [formBuilderFunctions]=\"formBuilderFunctions\" *ngIf=\"inputConfig.id\" [formControlName]=\"inputConfig.id\"\r\n [inputConfig]=\"inputConfig\">\r\n </app-multiple-input-table>\r\n\r\n\r\n @if(inputConfig.hintLabel || inputConfig.temporaryHint ){\r\n <mat-hint class=\"inputHint\">\r\n {{ inputConfig.temporaryHint || inputConfig.hintLabel}}\r\n </mat-hint>\r\n }\r\n\r\n @if (!!errorMessage) {\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{errorMessage}}</mat-error>\r\n }\r\n <!-- Prefix Icon -->\r\n <mat-icon *ngIf=\"inputConfig.prefixIcon\" matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n\r\n <!-- Suffix Icon or Password Visibility Toggle -->\r\n <ng-container *ngIf=\"inputConfig.suffixIcon\">\r\n <mat-icon *ngIf=\"inputConfig.id !== 'password'\" matSuffix>{{ inputConfig.suffixIcon\r\n }}</mat-icon>\r\n <!-- <button *ngIf=\"inputConfig.id === 'password'\" (click)=\"inputConfig.togglePasswordVisibility()\"\r\n mat-icon-button matSuffix>\r\n <mat-icon>{{ inputConfig.showPassword ? 'remove_red_eye' : 'eye_off' }}</mat-icon>\r\n </button> -->\r\n </ng-container>\r\n\r\n <!-- Prefix & Suffix Text -->\r\n <span *ngIf=\"inputConfig.prefixText\" matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n <span *ngIf=\"inputConfig.suffixText\" matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText\r\n }}</span>\r\n\r\n <!-- Character Count Hint -->\r\n <mat-hint *ngIf=\"inputConfig.maxLength && formGroup\" align=\"end\">\r\n {{ (formGroup.controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength\r\n }}\r\n </mat-hint>\r\n <!-- @if(inputConfig?.canReload?.canReload){\r\n <mat-hint align=\"end\">\r\n \r\n <button click=\" canReload.emit()\" style=\" height: 28px;\r\n width: 28px;\r\n padding: 0px;\r\n font-size: 16px;\" [matTooltip]=\"'Reload ' + inputConfig.label +' resources'\" mat-icon-button>\r\n <mat-icon>\r\n sync\r\n </mat-icon>\r\n\r\n </button>\r\n </mat-hint>\r\n \r\n\r\n } -->\r\n </mat-form-field>\r\n</form>","\r\n\r\nconst DEFAULT_OPTIONS: PositionOptions = {\r\n enableHighAccuracy: true,\r\n timeout: 5000,\r\n maximumAge: 0\r\n};\r\n\r\nconst getGeoLocation = (options: PositionOptions = DEFAULT_OPTIONS): Promise<GeolocationPosition> => {\r\n return new Promise((resolve, reject) => {\r\n if (!navigator.geolocation) {\r\n const error= {\r\n code: 0,\r\n message: 'Geolocation is not supported by this browser',\r\n PERMISSION_DENIED: 1,\r\n POSITION_UNAVAILABLE: 2,\r\n TIMEOUT: 3\r\n };\r\n reject(error);\r\n return;\r\n }\r\n\r\n navigator.geolocation.getCurrentPosition(\r\n (position: GeolocationPosition) => resolve(position),\r\n (error: GeolocationPositionError) => reject(error),\r\n options\r\n );\r\n });\r\n};\r\n\r\nexport default getGeoLocation;","import { Component, ElementRef, Input, Optional, Self } from '@angular/core';\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { NgControl, } from '@angular/forms';\r\nimport _ from 'lodash';\r\nimport getGeoLocation from '../../functions/getGeoLocation';\r\nimport { FormBuilderFunctions, ITowerStepColumn } from \"ngx-t-forms-types\";\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';\r\n\r\n\r\n\r\nconst customInputConfig: BaseCustomInputConfig = {\r\n controlType: 'lib-geo-location-form-input',\r\n nextId: 0\r\n}\r\n@Component({\r\n selector: 'lib-geo-location-form-input',\r\n standalone: true,\r\n imports: [CommonModule, MatModulesModule],\r\n templateUrl: './geo-location-form-input.component.html',\r\n styleUrl: './geo-location-form-input.component.css',\r\n providers: [\r\n {\r\n provide: MatFormFieldControl,\r\n useExisting: GeoLocationFormInputComponent\r\n }\r\n ]\r\n})\r\nexport class GeoLocationFormInputComponent extends BaseCustomInput<GeolocationPosition | null> {\r\n constructor(\r\n @Optional() @Self() ngControl: NgControl,\r\n elementRef: ElementRef<HTMLElement>\r\n ) {\r\n super(ngControl, elementRef, customInputConfig);\r\n }\r\n\r\n override get empty(): boolean {\r\n return !this.value;\r\n }\r\n override get shouldLabelFloat(): boolean {\r\n return true;\r\n }\r\n\r\n\r\n @Input() formBuilderFunctions: FormBuilderFunctions | undefined\r\n\r\n\r\n @Input() inputConfig!: ITowerStepColumn;\r\n\r\n\r\n\r\n\r\n isLoading = false;\r\n error = false;\r\n async getLocation() {\r\n try {\r\n this.error = false;\r\n this.isLoading = true;\r\n const currentLocation = await getGeoLocation()\r\n this.isLoading = false;\r\n this.value = currentLocation\r\n this.onChange(this.value);\r\n this.stateChanges.next()\r\n } catch (error) {\r\n this.isLoading = false;\r\n console.error(error)\r\n this.error = true;\r\n this.errors = { externalError: true }\r\n\r\n }\r\n\r\n }\r\n}\r\n","@if(!!empty){\r\n\r\n<p class=\"empty-state\">\r\n Click icon to get your location\r\n\r\n</p>\r\n\r\n\r\n}\r\n<div class=\"coordinates-section\">\r\n @if(!empty){\r\n <div class=\"coordinate-item\">\r\n <mat-icon color=\"primary\">map</mat-icon>\r\n <span class=\"value\">\r\n <div class=\"inner-value\">\r\n {{value?.coords?.latitude || 'N/A'}} <span class=\"unit\">°N</span>\r\n </div>\r\n <div class=\"inner-value label\">\r\n latitude\r\n </div>\r\n </span>\r\n\r\n\r\n </div>\r\n <div class=\"coordinate-item\">\r\n <mat-icon color=\"primary\">map</mat-icon>\r\n\r\n <span class=\"value\">\r\n <div class=\"inner-value\">\r\n {{value?.coords?.longitude || 'N/A'}}\r\n <span class=\"unit\">°E</span>\r\n </div>\r\n <div class=\"inner-value label\">\r\n longitude\r\n </div>\r\n </span>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"coordinate-item\">\r\n <mat-icon color=\"primary\">zoom_in_map</mat-icon>\r\n <span class=\"value\">\r\n <div class=\"inner-value\">\r\n {{value?.coords?.accuracy | number:'1.0-0'}}\r\n <span class=\"unit\">m</span>\r\n </div>\r\n <div class=\"inner-value label\">\r\n accuracy\r\n </div>\r\n </span>\r\n\r\n\r\n </div>\r\n }\r\n <button mat-flat-button (click)=\"getLocation()\">\r\n {{empty ? 'Get Location' : 'Update Location'}}\r\n <mat-icon>my_location</mat-icon>\r\n </button>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\n\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormBuilderFunctions, ITowerStepColumn } from \"ngx-t-forms-types\";\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { GeoLocationFormInputComponent } from './elements/geo-location-form-input/geo-location-form-input.component';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'lib-geo-location',\r\n standalone: true,\r\n imports: [CommonModule, MatModulesModule, ReactiveFormsModule, TFormInputStatusComponent, GeoLocationFormInputComponent],\r\n templateUrl: './geo-location.component.html',\r\n styleUrl: './geo-location.component.css'\r\n})\r\nexport class GeoLocationComponent {\r\n @Input() inputConfig!: ITowerStepColumn;\r\n @Input() formGroup!: FormGroup;\r\n @Input() editorMode: boolean = false;\r\n @Input() formBuilderFunctions: FormBuilderFunctions | undefined\r\n\r\n \r\n @Output() reload = new EventEmitter<void>();\r\n get errorMessage() {\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n }\r\n}\r\n","\r\n\r\n<form [formGroup]=\"formGroup\">\r\n <mat-form-field [appearance]=\"this.inputConfig.appearance ||'fill' \" subscriptSizing=\"dynamic\" *ngIf=\"this.inputConfig as classInput\">\r\n <mat-label>\r\n {{this.inputConfig.label }} \r\n <lib-t-form-input-status \r\n [inputConfig]=\"this.inputConfig\"></lib-t-form-input-status>\r\n </mat-label>\r\n <lib-geo-location-form-input\r\n [inputConfig]=\"this.inputConfig\"\r\n [formControlName]=\"this.inputConfig.id\"\r\n [required]=\"this.inputConfig.required\"\r\n ></lib-geo-location-form-input>\r\n \r\n @if(inputConfig.hintLabel || classInput.temporaryHint ){\r\n <mat-hint class=\"inputHint\">\r\n {{ classInput.temporaryHint || inputConfig.hintLabel}}\r\n </mat-hint>\r\n }\r\n \r\n @if (!!errorMessage) {\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{errorMessage}}</mat-error>\r\n }\r\n <!-- Prefix Icon -->\r\n <mat-icon *ngIf=\"inputConfig.prefixIcon\" matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n \r\n <!-- Suffix Icon or Password Visibility Toggle -->\r\n <ng-container *ngIf=\"inputConfig.suffixIcon\">\r\n <mat-icon *ngIf=\"inputConfig.id !== 'password'\" matSuffix>{{ inputConfig.suffixIcon\r\n }}</mat-icon>\r\n <!-- <button *ngIf=\"inputConfig.id === 'password'\" (click)=\"classInput.togglePasswordVisibility()\"\r\n mat-icon-button matSuffix>\r\n <mat-icon>{{ classInput.showPassword ? 'remove_red_eye' : 'eye_off' }}</mat-icon>\r\n </button> -->\r\n </ng-container>\r\n \r\n <!-- Prefix & Suffix Text -->\r\n <span *ngIf=\"inputConfig.prefixText\" matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n <span *ngIf=\"inputConfig.suffixText\" matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText\r\n }}</span>\r\n \r\n <!-- Character Count Hint -->\r\n <mat-hint *ngIf=\"inputConfig.maxLength && formGroup\" align=\"end\">\r\n {{ (formGroup.controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength\r\n }}\r\n </mat-hint>\r\n \r\n\r\n </mat-form-field>\r\n</form>","// Image capture\r\n\r\nimport { AbstractControl, ValidationErrors } from \"@angular/forms\";\r\nimport { FileUploadInputValueInterface } from \"ngx-t-forms-types\";\r\n\r\n\r\nexport async function setupDevices(\r\n cameraCallback: (stream: MediaStream) => any\r\n): Promise<any> {\r\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia({\r\n video: true,\r\n });\r\n if (stream) {\r\n cameraCallback(stream);\r\n return stream;\r\n } else {\r\n return 'You have no output video device';\r\n }\r\n } catch (e) {\r\n return e;\r\n }\r\n }\r\n}\r\n\r\n\r\nexport function fileUploaderValidator(control: AbstractControl): ValidationErrors | null {\r\n // Implement your validation logic here\r\n const file: FileUploadInputValueInterface= control.value;\r\n\r\n // Example validation: Check if file is provided\r\n if (!file || !file.base64) {\r\n return { requiredFile: 'You must upload a file.' };\r\n }\r\n\r\n // Add more validation logic as needed\r\n // ...\r\n\r\n return null; // Return null if no validation errors\r\n}","import { Component, ElementRef, Input, Optional, Self, ViewChild } from '@angular/core';\r\nimport {\r\n NgControl,\r\n} from '@angular/forms';\r\nimport { setupDevices } from '../../../file-upload-input-element/core/file-uploader/camera-functions';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\n\r\nimport _ from 'lodash';\r\nimport { FileUploadInputValueInterface, ITowerStepColumn } from \"ngx-t-forms-types\";\r\n\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';;\r\nconst customInputConfig: BaseCustomInputConfig = {\r\n controlType: 'app-camera-capture',\r\n nextId: 0\r\n}\r\n@Component({\r\n selector: 'app-camera-capture',\r\n templateUrl: './camera-capture.component.html',\r\n styleUrls: ['./camera-capture.component.scss'],\r\n standalone: true,\r\n imports: [CommonModule, MatModulesModule],\r\n\r\n providers: [{\r\n provide: MatFormFieldControl,\r\n useExisting: CameraCaptureComponent\r\n }]\r\n\r\n})\r\nexport class CameraCaptureComponent extends BaseCustomInput<FileUploadInputValueInterface | object | null> {\r\n constructor(\r\n @Optional() @Self() ngControl: NgControl,\r\n elementRef: ElementRef<HTMLElement>\r\n ) {\r\n super(ngControl, elementRef, customInputConfig);\r\n }\r\n //Emit on the stateChanges stream when something happens in the form field control that may require the form field to run change detection.\r\n\r\n @ViewChild('video')\r\n public video!: ElementRef;\r\n\r\n @ViewChild('canvas')\r\n public canvas!: ElementRef;\r\n\r\n @Input() inputConfig!: ITowerStepColumn;\r\n\r\n get empty() {\r\n return !this.value\r\n }\r\n\r\n get shouldLabelFloat() {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n WIDTH = 640;\r\n HEIGHT = 480;\r\n captures: string[] = [];\r\n isCaptured!: boolean;\r\n\r\n ngOnInit() {\r\n }\r\n recapture() {\r\n this.video.nativeElement.srcObject = undefined;\r\n this.isCaptured = false;\r\n setupDevices(this.setup);\r\n this.value = null;\r\n this.stateChanges.next();\r\n }\r\n setup = (stream: MediaStream): any => {\r\n try {\r\n this.video.nativeElement.srcObject = stream;\r\n this.video.nativeElement.play()\r\n\r\n } catch (error) {\r\n console.error('Error setting up video stream', error);\r\n }\r\n };\r\n touch(event: any) {\r\n this.markAsTouched();\r\n }\r\n videoMode: boolean = false;\r\n capture() {\r\n this.touch('df');\r\n this.drawImageToCanvas(this.video.nativeElement);\r\n const inp: any = this.inputConfig\r\n const fileType = (inp).fileType;\r\n this.value = {\r\n fileName: new Date(),\r\n type: fileType,\r\n base64: this.canvas.nativeElement.toDataURL('image/png'),\r\n };\r\n\r\n this.captures.push(this.canvas.nativeElement.toDataURL('image/png'));\r\n this.isCaptured = true;\r\n this.stopVideo();\r\n this.onChange(this.value);\r\n this.stateChanges.next();\r\n }\r\n\r\n stopVideo() {\r\n if (this.video.nativeElement.srcObject) {\r\n const tracks = this.video.nativeElement.srcObject.getTracks();\r\n tracks.forEach((track: { stop: () => any }) => track.stop());\r\n }\r\n\r\n }\r\n drawImageToCanvas(image: any) {\r\n this.canvas.nativeElement\r\n .getContext('2d')\r\n .drawImage(image, 0, 0, this.WIDTH, this.HEIGHT);\r\n }\r\n}\r\n\r\n","<br>\r\n<div class=\"video-container\">\r\n <video\r\n style=\"margin: auto;\"\r\n [style.display]=\"!isCaptured ? 'block' : 'none'\"\r\n #video\r\n id=\"video\"\r\n [width]=\"WIDTH\"\r\n [height]=\"HEIGHT\"\r\n autoplay\r\n ></video>\r\n <canvas\r\n [style.display]=\"isCaptured ? 'block' : 'none'\"\r\n #canvas\r\n id=\"canvas\"\r\n [width]=\"WIDTH\"\r\n [height]=\"HEIGHT\"\r\n ></canvas>\r\n</div>\r\n<mat-toolbar style=\"background: none;\">\r\n <span class=\"spacer\"></span>\r\n <button (click)=\"isCaptured ? recapture() : capture()\" [color]=\"isCaptured?'primary':'warn'\" mat-icon-button>\r\n <mat-icon>\r\n photo_camera\r\n </mat-icon>\r\n\r\n </button>\r\n <button (click)=\"stopVideo()\" *ngIf=\"!isCaptured\" mat-icon-button>\r\n <mat-icon>\r\n stop\r\n </mat-icon>\r\n\r\n </button>\r\n <span class=\"spacer\"></span>\r\n</mat-toolbar>\r\n\r\n\r\n\r\n\r\n\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output, } from '@angular/core';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { ITowerStepColumn } from \"ngx-t-forms-types\";\r\nimport { CameraCaptureComponent } from './core/camera-capture/camera-capture.component';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\n\r\n@Component({\r\n selector: 'lib-image-capture-input-element',\r\n standalone: true,\r\n imports: [CommonModule,MatModulesModule,\r\n TFormInputStatusComponent,CameraCaptureComponent,ReactiveFormsModule],\r\n templateUrl: './image-capture-input-element.component.html',\r\n styleUrl: './image-capture-input-element.component.css'\r\n})\r\nexport class ImageCaptureInputElementComponent {\r\n @Input() inputConfig!: ITowerStepColumn;\r\n @Input() formGroup!: FormGroup;\r\n \r\n \r\n @Output() reload = new EventEmitter<void>();\r\n\r\n get errorMessage(){\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n }\r\n}\r\n","\r\n\r\n<ng-container [formGroup]=\"formGroup\">\r\n <mat-form-field [appearance]=\"inputConfig.appearance ||'fill' \" subscriptSizing=\"dynamic\" *ngIf=\"this.inputConfig as inputConfig\">\r\n <mat-label>\r\n {{inputConfig.label }} \r\n <lib-t-form-input-status [inputConfig]=\"this.inputConfig\"></lib-t-form-input-status>\r\n </mat-label>\r\n \r\n <app-camera-capture\r\n [required]=\"this.inputConfig.required\"\r\n [inputConfig]=\"inputConfig\"\r\n [formControlName]=\"inputConfig.id\"\r\n \r\n ></app-camera-capture> \r\n\r\n\r\n @if(inputConfig.hintLabel || inputConfig.temporaryHint ){\r\n <mat-hint class=\"inputHint\">\r\n {{ inputConfig.temporaryHint || inputConfig.hintLabel}}\r\n </mat-hint>\r\n } \r\n\r\n @if (!!errorMessage) {\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{errorMessage}}</mat-error>\r\n }\r\n <!-- Prefix Icon -->\r\n <mat-icon *ngIf=\"inputConfig.prefixIcon\" matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n\r\n <!-- Suffix Icon or Password Visibility Toggle -->\r\n <ng-container *ngIf=\"inputConfig.suffixIcon\">\r\n <mat-icon *ngIf=\"inputConfig.id !== 'password'\" matSuffix>{{ inputConfig.suffixIcon\r\n }}</mat-icon>\r\n <!-- <button *ngIf=\"inputConfig.id === 'password'\" (click)=\"inputConfig.togglePasswordVisibility()\"\r\n mat-icon-button matSuffix>\r\n <mat-icon>{{ inputConfig.showPassword ? 'remove_red_eye' : 'eye_off' }}</mat-icon>\r\n </button> -->\r\n </ng-container>\r\n\r\n <!-- Prefix & Suffix Text -->\r\n <span *ngIf=\"inputConfig.prefixText\" matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n <span *ngIf=\"inputConfig.suffixText\" matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText\r\n }}</span>\r\n\r\n <!-- Character Count Hint -->\r\n <mat-hint *ngIf=\"inputConfig.maxLength && formGroup\" align=\"end\">\r\n {{ (formGroup.controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength\r\n }}\r\n </mat-hint>\r\n\r\n\r\n </mat-form-field>\r\n</ng-container>\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { CurrencyPipe, DatePipe } from '@angular/common';\r\nimport { DocumentLitsLabelConfigInterfaceValueType, FormColumnInputs, InputDataTypes, InputPipeTypes } from 'ngx-t-forms-types'; // Assuming this path is correct relative to your pipe file\r\n\r\n@Pipe({\r\n name: 'formatData',\r\n standalone: true, // For Angular 14+ standalone components/pipes. Remove if not applicable.\r\n})\r\nexport class FormatDataPipe implements PipeTransform {\r\n\r\n transform(\r\n value: any,\r\n dataType: DocumentLitsLabelConfigInterfaceValueType | InputDataTypes | undefined |InputPipeTypes ,\r\n pipeConfig?: FormColumnInputs['pipe'] | undefined\r\n ): any {\r\n try {\r\n switch (dataType) {\r\n case 'date':\r\n const datePipe = new DatePipe('en-US'); // You might want to inject this or make locale configurable\r\n return datePipe.transform(value, 'mediumDate');\r\n case 'currency':\r\n // The 'R' for ZAR is hardcoded here as per the original function.\r\n // Consider making the currency code and locale configurable if needed.\r\n const currencyPipeForCurrencyType = new CurrencyPipe('en-US', pipeConfig?.param || 'ZAR');\r\n const numberValueForCurrency = parseFloat(value);\r\n return currencyPipeForCurrencyType.transform(numberValueForCurrency, pipeConfig?.param);\r\n case 'number':\r\n if (pipeConfig?.pipeType === 'currency') {\r\n const currencyPipeForNumberType = new CurrencyPipe('en-US'); // Locale hardcoded\r\n const currencyCode = pipeConfig?.param;\r\n const numberValueForNumber = parseFloat(value);\r\n return currencyPipeForNumberType.transform(numberValueForNumber, currencyCode);\r\n } else {\r\n return value;\r\n }\r\n case InputDataTypes.Array:\r\n return value.length + ' items'\r\n case InputDataTypes.Object:\r\n return `{item}`\r\n case InputDataTypes.Boolean:\r\n return value ? 'Yes' : 'No';\r\n case 'daysAgo':\r\n if (value) {\r\n const seconds = Math.floor((+new Date() - +new Date(value)) / 1000);\r\n if (seconds < 15)\r\n // less than 30 seconds ago will show as 'Just now'\r\n return 'Just now';\r\n const intervals: any = {\r\n year: 31536000,\r\n month: 2592000,\r\n week: 604800,\r\n day: 86400,\r\n hr: 3600,\r\n min: 60,\r\n sec: 1,\r\n };\r\n let counter;\r\n for (const i in intervals) {\r\n counter = Math.floor(seconds / intervals[i]);\r\n if (counter > 0)\r\n if (counter === 1) {\r\n return counter + ' ' + i + ' ago'; // singular (1 day ago)\r\n } else {\r\n return counter + ' ' + i + 's ago'; // plural (2 days ago)\r\n }\r\n }\r\n }\r\n return value;\r\n default:\r\n return value;\r\n }\r\n } catch (error) {\r\n console.error('Error in FormatDataPipe:', error);\r\n return value; // Return original value in case of an error\r\n }\r\n }\r\n}","import { Component, ElementRef, inject, Input, Optional, Self } from '@angular/core';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';\r\nimport { APIDataFetchingConfigurationInterface, DataSources, FormBuilderFunctions, FormColumnInputs, MongoDbPipeLineConfigInterface } from 'ngx-t-forms-types';\r\nimport { FormControl, FormGroup, NgControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NGX_T_FORMS_CONFIG_TOKEN } from '../../../../../../injection-tokens';\r\nimport { _isEqual } from '../../../../../../shared/functions/isEqual';\r\nimport { IWorkflowDocumentPickerConfig, IWorkflowDocListCols } from 'ngx-t-forms-types';\r\nimport { catchError, take, takeUntil, tap } from 'rxjs';\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { FormatDataPipe } from '../../../../../../shared/pipes/format-Data.pipe';\r\nimport { PageEvent } from '@angular/material/paginator';\r\n\r\n\r\n\r\nconst customInputConfig: BaseCustomInputConfig = {\r\n controlType: 'lib-document-picker-reactive-input',\r\n nextId: 0\r\n}\r\n@Component({\r\n selector: 'lib-document-picker-reactive-input',\r\n imports: [CommonModule, MatModulesModule, FormatDataPipe, ReactiveFormsModule],\r\n templateUrl: './document-picker-reactive-input.component.html',\r\n styleUrl: './document-picker-reactive-input.component.css',\r\n host: {\r\n '[lib-document-picker-reactive-input]': 'shouldLabelFloat',\r\n '[id]': 'id',\r\n\r\n },\r\n providers: [{ provide: MatFormFieldControl, useExisting: DocumentPickerReactiveInputComponent }],\r\n\r\n})\r\nexport class DocumentPickerReactiveInputComponent extends BaseCustomInput<string> {\r\n FORMS_CONFIG = inject(NGX_T_FORMS_CONFIG_TOKEN)\r\n searchFormControl = new FormControl(\r\n ''\r\n )\r\n override get empty(): boolean {\r\n return !this.value;\r\n }\r\n override get shouldLabelFloat(): boolean {\r\n return true;\r\n }\r\n @Input() formBuilderFunctions: FormBuilderFunctions | undefined\r\n _inputConfig: FormColumnInputs | undefined;\r\n @Input() set inputConfig(value: FormColumnInputs | undefined) {\r\n if (_isEqual(this._inputConfig, value)) return;\r\n this._inputConfig = value\r\n this.loadCols()\r\n\r\n\r\n }\r\n get inputConfig() {\r\n return this._inputConfig\r\n }\r\n constructor(\r\n @Optional() @Self() ngControl: NgControl,\r\n elementRef: ElementRef<HTMLElement>\r\n ) {\r\n super(ngControl, elementRef, customInputConfig);\r\n this.listenToStateChanges()\r\n \r\n }\r\n\r\n get parentFormGroup(): FormGroup | null {\r\n return this.ngControl?.control?.parent as FormGroup;\r\n }\r\n _pickerConfig: IWorkflowDocumentPickerConfig | undefined;\r\n _cols: IWorkflowDocListCols[] = []\r\n _loadingCols: boolean = false;\r\n get displayedColumns() {\r\n return this._cols.map(col => col.formControlName)\r\n }\r\n listenToStateChanges() {\r\n this.stateChanges.asObservable().pipe(\r\n takeUntil(this.destroy$),\r\n tap(\r\n () => {\r\n if (this.selectedDocument?.['_id'] !== this.value && !!this.value) {\r\n this.loadSelectedDocument()\r\n }\r\n if (this.selectedDocument?.['_id'] !== this.value && !this.value) {\r\n this.loadDocumentOptions()\r\n }\r\n\r\n }\r\n )\r\n )\r\n .subscribe()\r\n }\r\n loadCols() {\r\n const newConfig = this._inputConfig?.workflowPickerConfig\r\n\r\n if (_isEqual(this._pickerConfig, newConfig) || !newConfig?.workflowId) return;\r\n this._pickerConfig = newConfig\r\n this._loadingCols = true\r\n this.FORMS_CONFIG.formBuilder.getWorkflowCols(newConfig?.workflowId).pipe(\r\n take(1),\r\n tap(\r\n cols => {\r\n\r\n this._cols = [{\r\n label: '',\r\n formControlName: \"icons\"\r\n }, {\r\n label: 'reference',\r\n formControlName: \"reference\"\r\n }, ...cols, {\r\n label: \"\",\r\n formControlName: \"actions\"\r\n }]\r\n this._loadingCols = false\r\n }\r\n ),\r\n catchError(\r\n err => {\r\n this._loadingCols = false\r\n this._cols = []\r\n return []\r\n }\r\n )\r\n ).subscribe()\r\n\r\n\r\n\r\n }\r\n documentOptions: Record<string, any>[] = []\r\n get docLength() {\r\n if(this.selectedDocument){\r\n return 1\r\n }\r\n if (!this.searchKey) {\r\n return this.documentOptions.length\r\n }\r\n return this.searchedData.length\r\n }\r\n pageIndex: number = 0\r\n pageSize: number = 5\r\n get searchedData() {\r\n const currentSearchKey = this.searchKey?.trim(); // Handles null, undefined, and trims whitespace\r\n\r\n if (!currentSearchKey) {\r\n return this.documentOptions; // No search key, return all documents\r\n }\r\n\r\n // Create a case-insensitive regular expression from the searchKey.\r\n // Special regex characters in the searchKey are escaped to ensure they are treated literally.\r\n const regex = new RegExp(currentSearchKey.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'i');\r\n\r\n return this.documentOptions.filter(doc => {\r\n // Ensure doc is a non-null object before attempting to iterate over its values.\r\n if (typeof doc !== 'object' || doc === null) {\r\n return false;\r\n }\r\n // Check if any string property value within the document matches the regex.\r\n return Object.values(doc).some(value =>\r\n typeof value === 'string' && regex.test(value)\r\n );\r\n });\r\n }\r\n get paginatedData() {\r\n if (this.selectedDocument) {\r\n return [this.selectedDocument]\r\n }\r\n const dataToPaginate = this.searchedData; // Use the filtered (or all) documents\r\n\r\n const startIndex = this.pageIndex * this.pageSize;\r\n // The 'end' parameter for slice is exclusive, so (pageIndex + 1) * pageSize is correct.\r\n const endIndex = startIndex + this.pageSize;\r\n\r\n return dataToPaginate.slice(startIndex, endIndex);\r\n }\r\n documentsSource: APIDataFetchingConfigurationInterface | MongoDbPipeLineConfigInterface | undefined\r\n loadDocumentOptions() {\r\n const newSource = this.inputConfig?.workflowPickerConfig.documentsSource\r\n if (_isEqual(this.documentsSource, newSource)) return;\r\n this.documentsSource = newSource\r\n\r\n if (this.inputConfig?.workflowPickerConfig.documentSourceType === DataSources.Api) {\r\n this.loadApiData(newSource as APIDataFetchingConfigurationInterface)\r\n }\r\n if (this.inputConfig?.workflowPickerConfig.documentSourceType === DataSources.MongoDb) {\r\n this.loadMongoData(newSource as MongoDbPipeLineConfigInterface)\r\n }\r\n }\r\n showButton: boolean = false\r\n loadApiData(config: APIDataFetchingConfigurationInterface) {\r\n const missingInputs: string[] = []\r\n const postData = config.backEndConfig.minimumInputRequired.reduce((acc, curr) => {\r\n\r\n if (curr.type === \"default\") {\r\n acc[curr.name] = curr.defaultValue\r\n return acc\r\n }\r\n if (curr.type === \"mapto\" && this.parentFormGroup?.value[curr.name]) {\r\n acc[curr.name] = this.parentFormGroup?.value[curr.name]\r\n return acc\r\n }\r\n missingInputs.push(curr.name)\r\n return acc\r\n }, {} as any)\r\n postData['workflowId'] = this.inputConfig?.workflowPickerConfig.workflowId\r\n\r\n if (missingInputs.length > 0) {\r\n this.dataLoadingError = `Missing inputs: ${missingInputs.join(\", \")}`\r\n return\r\n }\r\n\r\n this.loadingData = true\r\n\r\n this.FORMS_CONFIG.formBuilder.httpPostDataFunction(config.httpEndPoint, postData).pipe(\r\n take(1),\r\n tap((response) => {\r\n\r\n this.documentOptions = response\r\n this.dataLoadingError = undefined\r\n this.loadingData = false\r\n }),\r\n catchError((error) => {\r\n const msg = !error.error.message && error instanceof Error ? error.message : error.error.message\r\n this.dataLoadingError = msg\r\n this.loadingData = false\r\n\r\n return error\r\n })\r\n ).subscribe()\r\n/************* ✨ Windsurf Command ⭐ *************/\r\n/**\r\n * Loads data from an API based on the provided configuration.\r\n * \r\n * @param config - The configuration object specifying the API endpoint, method, and other parameters\r\n * required for fetching the data.\r\n */\r\n\r\n/******* f6089262-9e73-4765-b244-aec461c2f1be *******/ console.log(\"API Data Loading\", config)\r\n\r\n }\r\n loadingData: boolean = false\r\n dataLoadingError: string | undefined\r\n\r\n loadMongoData(config: MongoDbPipeLineConfigInterface) {\r\n if (!config.pipeline || config.pipeline.length === 0) {\r\n this.dataLoadingError = 'No pipeline found'\r\n return\r\n }\r\n if (!config.workflowId) {\r\n this.dataLoadingError = 'No workflow id found'\r\n return\r\n }\r\n this.loadingData = true\r\n this.FORMS_CONFIG.formBuilder.runMongoDbPipeLine(\r\n config.pipeline,\r\n config.workflowId\r\n ).pipe(\r\n take(1),\r\n tap(\r\n (data) => {\r\n this.documentOptions = data.results,\r\n this.loadingData = false\r\n this.dataLoadingError = undefined\r\n }\r\n ),\r\n catchError((error) => {\r\n console.error(\"Error\", error)\r\n const msg = error instanceof Error ? error.message : \"Unknown error\"\r\n this.dataLoadingError = msg\r\n this.loadingData = false\r\n\r\n return error\r\n })\r\n\r\n ).subscribe()\r\n\r\n }\r\n get searchKey() {\r\n return this.searchFormControl.value\r\n }\r\n\r\n inputSearch(event: Event) {\r\n console.error(event)\r\n\r\n\r\n\r\n }\r\n applyPagination(event: PageEvent) {\r\n const { pageIndex, pageSize } = event\r\n this.pageIndex = pageIndex\r\n this.pageSize = pageSize\r\n }\r\n\r\n selectRow(row: any) {\r\n const id = row['_id'] || row['id']\r\n this.selectedDocument = undefined\r\n this.value = id === this.value ? undefined : id\r\n \r\n this.onChange(this.value)\r\n this.onTouched()\r\n }\r\n selectedDocument: Record<string, any> | undefined = undefined\r\n loadingSelected:string| undefined\r\n loadSelectedDocument() {\r\n if (!this.value) return;\r\n if(this.loadingSelected === this.value) return;\r\n this.loadingSelected = this.value\r\n this.FORMS_CONFIG.formBuilder.getSelectedDocument(this.value).pipe(\r\n take(1),\r\n tap(\r\n doc => {\r\n this.selectedDocument = doc\r\n this.loadingSelected = undefined\r\n }\r\n ),\r\n catchError(\r\n err => {\r\n this.loadingSelected = undefined\r\n return []\r\n }\r\n )\r\n ).subscribe()\r\n\r\n }\r\n}\r\n","<mat-card>\r\n\r\n @if(_loadingCols || loadingData || loadingSelected ){\r\n <div style=\"display: flex; justify-content: center; align-items: center;padding:28px \">\r\n <mat-spinner [diameter]=\"50\"></mat-spinner>\r\n </div>\r\n\r\n }@else if (this.dataLoadingError ) {\r\n <mat-toolbar color=\"warn\">\r\n <mat-icon>error</mat-icon>\r\n <span>{{this.dataLoadingError}}</span>\r\n </mat-toolbar>\r\n }@else {\r\n <div class=\"table-container\">\r\n <div class=\"search-container\">\r\n @if (!inputConfig?.disabled && !inputConfig?.readonly) {\r\n <mat-form-field subscriptSizing=\"dynamic\" class=\"search-field\">\r\n <input matInput placeholder=\"search\" [formControl]=\"searchFormControl\" (change)=\"inputSearch($event)\"\r\n value=\"Sushi\">\r\n <mat-icon matSuffix>\r\n search\r\n\r\n </mat-icon>\r\n </mat-form-field>\r\n }\r\n\r\n\r\n\r\n </div>\r\n <table mat-table [dataSource]=\"paginatedData||[]\" class=\"example-table\" matSort matSortActive=\"created\"\r\n matSortDisableClear matSortDirection=\"desc\">\r\n @for (col of _cols; track col.formControlName) {\r\n <ng-container [matColumnDef]=\"col.formControlName\" [stickyEnd]=\"$last\">\r\n <th mat-header-cell *matHeaderCellDef\r\n [class.text-right-align]=\"col.type === 'currency' || col.type === 'number'\"\r\n [class.project-name-col]=\"col.formControlName === 'projectName'\">\r\n\r\n\r\n {{col.label}}\r\n\r\n\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\"\r\n [class.text-right-align]=\"col.type === 'currency' || col.type === 'number'\"\r\n [class.project-name-col]=\"col.formControlName === 'projectName'\">\r\n @if(col.formControlName ==='icons'){\r\n <mat-icon style=\"color:var(--mat-sys-primary)\">description</mat-icon>\r\n }@else if(col.formControlName ==='actions'){\r\n @if((row['_id'] === value || row['id'] === value)&&!!value){\r\n <button (click)=\"selectRow(row)\" [disabled]=\"!!inputConfig?.disabled || !!inputConfig?.readonly\"\r\n [matTooltip]=\"'Click to clear ' + row['reference'] + ' selection'\" matTooltipPosition=\"after\"\r\n class=\"selection-button\" mat-flat-button color=\"primary\">\r\n\r\n selected\r\n <mat-icon> check_circle </mat-icon>\r\n </button>\r\n\r\n }@else if(!inputConfig?.disabled && !inputConfig?.readonly){\r\n\r\n <button (click)=\"selectRow(row)\" [matTooltip]=\"'Click to select ' + row['reference']\"\r\n matTooltipPosition=\"after\" class=\"selection-button\" mat-raised-button color=\"primary\">\r\n\r\n select\r\n <mat-icon>\r\n radio_button_unchecked\r\n </mat-icon>\r\n </button>\r\n }\r\n\r\n\r\n }@else {\r\n <span\r\n [style.color]=\"(row['_id'] === value || row['id'] === value) && !!value?'var(--mat-sys-primary)':''\">\r\n {{row[col.formControlName]|formatData:col.type}}\r\n </span>\r\n\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row class=\"data-row\" *matRowDef=\"let row; columns: displayedColumns;\"></tr>\r\n </table>\r\n </div>\r\n <mat-divider></mat-divider>\r\n @if (!inputConfig?.disabled && !inputConfig?.readonly) {\r\n <mat-paginator [length]=\"docLength\" (page)=\"applyPagination($event)\" [pageSize]=\"pageSize\" [pageIndex]=\"pageIndex\"\r\n [pageSizeOptions]=\"[5,10, 30, 50, 100]\" aria-label=\"Select workflow document\"></mat-paginator>\r\n }\r\n\r\n }\r\n</mat-card>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\nimport { FormBuilderFunctions, ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { DocumentPickerReactiveInputComponent } from './core/document-picker-reactive-input/document-picker-reactive-input.component';\r\n\r\n@Component({\r\n selector: 'lib-document-picker',\r\n imports: [CommonModule, ReactiveFormsModule, DocumentPickerReactiveInputComponent, TFormInputStatusComponent, MatModulesModule],\r\n templateUrl: './document-picker.component.html',\r\n styleUrl: './document-picker.component.css'\r\n})\r\nexport class DocumentPickerComponent {\r\n @Input() inputConfig!: ITowerStepColumn;\r\n @Input() formGroup!: FormGroup;\r\n @Input() editorMode: boolean = false;\r\n @Input() formBuilderFunctions: FormBuilderFunctions | undefined\r\n\r\n @Output() reload = new EventEmitter<void>();\r\n\r\n\r\n get errorMessage() {\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n }\r\n\r\n}\r\n","<form [formGroup]=\"formGroup\">\r\n <mat-form-field [appearance]=\"this.inputConfig.appearance ||'fill' \" subscriptSizing=\"dynamic\"\r\n \r\n *ngIf=\"this.inputConfig as classInput\">\r\n <mat-label>\r\n {{this.inputConfig.label }}\r\n <lib-t-form-input-status [inputConfig]=\"this.inputConfig\" ></lib-t-form-input-status>\r\n </mat-label>\r\n\r\n\r\n <lib-document-picker-reactive-input \r\n [disabled]=\"!!this.inputConfig.disabled\"\r\n [inputConfig]=\"inputConfig\" [formBuilderFunctions]=\"formBuilderFunctions\"\r\n [required]=\"this.inputConfig.required\" [formControlName]=\"this.inputConfig.id\">\r\n\r\n </lib-document-picker-reactive-input>\r\n\r\n @if(inputConfig.hintLabel || classInput.temporaryHint ){\r\n <mat-hint class=\"inputHint\">\r\n {{ classInput.temporaryHint || inputConfig.hintLabel}}\r\n </mat-hint>\r\n }\r\n\r\n @if (!!errorMessage) {\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{errorMessage}}</mat-error>\r\n }\r\n <!-- Prefix Icon -->\r\n <mat-icon *ngIf=\"inputConfig.prefixIcon\" matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n\r\n <!-- Suffix Icon or Password Visibility Toggle -->\r\n <ng-container *ngIf=\"inputConfig.suffixIcon\">\r\n <mat-icon *ngIf=\"inputConfig.id !== 'password'\" matSuffix>{{ inputConfig.suffixIcon\r\n }}</mat-icon>\r\n <!-- <button *ngIf=\"inputConfig.id === 'password'\" (click)=\"classInput.togglePasswordVisibility()\"\r\n mat-icon-button matSuffix>\r\n <mat-icon>{{ classInput.showPassword ? 'remove_red_eye' : 'eye_off' }}</mat-icon>\r\n </button> -->\r\n </ng-container>\r\n\r\n <!-- Prefix & Suffix Text -->\r\n <span *ngIf=\"inputConfig.prefixText\" matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n <span *ngIf=\"inputConfig.suffixText\" matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText\r\n }}</span>\r\n\r\n <!-- Character Count Hint -->\r\n <mat-hint *ngIf=\"inputConfig.maxLength && formGroup\" align=\"end\">\r\n {{ (formGroup.controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength\r\n }}\r\n </mat-hint>\r\n\r\n\r\n\r\n </mat-form-field>\r\n</form>","import { DefaultInputConfig } from \"ngx-t-forms-types\"\r\nimport { ElementTypes } from \"ngx-t-forms-types\"\r\n\r\nexport function getInputIllustration(element:ElementTypes): string {\r\n const dc= DefaultInputConfig\r\n return dc[element]?.illustration\r\n }","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, inject, Input, Output } from '@angular/core';\r\nimport { ReactiveFormsModule, FormsModule, } from '@angular/forms';\r\n\r\nimport { take, tap } from 'rxjs';\r\nimport { FormColumnInputs, ITowerStepColumn, WorkflowAdjudicationScoreSheetValue } from 'ngx-t-forms-types';\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { NGX_T_FORMS_CONFIG_TOKEN } from '../../../../../../injection-tokens';\r\nimport { getInputIllustration } from '../../../../../../shared/functions/getInputIllustration';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { MatSelectChange } from '@angular/material/select';\r\n\r\n\r\n@Component({\r\n selector: 'app-points-creation',\r\n templateUrl: './points-creation.component.html',\r\n styleUrls: ['./points-creation.component.scss'],\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n MatModulesModule,\r\n ReactiveFormsModule,\r\n FormsModule\r\n ]\r\n})\r\nexport class PointsCreationComponent {\r\n\r\n NGX_T_FORMS_CONFIG = inject(NGX_T_FORMS_CONFIG_TOKEN);\r\n _inputConfig: ITowerStepColumn | undefined = undefined;\r\n pointRow: WorkflowAdjudicationScoreSheetValue = this.createDefaultPointRow();\r\n \r\n cols: string[] = [];\r\n selectAllWorkflowInputs: FormColumnInputs[] = [];\r\n _points: WorkflowAdjudicationScoreSheetValue[] = [];\r\n @Output() pointsChange = new EventEmitter<WorkflowAdjudicationScoreSheetValue[]>();\r\n @Input() set value(value: any) {\r\n this._points = (value || []) as WorkflowAdjudicationScoreSheetValue[];\r\n // Reset the point row to default when the value is set\r\n }\r\n @Input() set inputConfig(value: ITowerStepColumn | undefined) {\r\n this._inputConfig = value;\r\n let cols \r\n if ((this.inputConfig?.adjudicationPointTypes?.length || 0) > 0) {\r\n cols = ['description', 'totalPoints', 'pointType', 'actions'];\r\n } else {\r\n cols = ['description', 'totalPoints', 'actions'];\r\n }\r\n if(this.inputConfig?.disabled || !!this.inputConfig?.readonly) {\r\n cols = cols.filter(col => col !== 'actions'); // Remove pointType if disabled or readonly\r\n }\r\n this.cols = cols;\r\n\r\n }\r\n get inputConfig(): ITowerStepColumn | undefined {\r\n return this._inputConfig;\r\n }\r\n\r\n constructor() {\r\n this.NGX_T_FORMS_CONFIG.formBuilder.getCurrentFormAvailableInputOptions().pipe(\r\n take(1),\r\n tap((inputs: FormColumnInputs[]) => {\r\n this.selectAllWorkflowInputs = inputs;\r\n })\r\n ).subscribe();\r\n }\r\n\r\n get points(): WorkflowAdjudicationScoreSheetValue[] {\r\n // The data source for the table is always the saved points plus the current edit/add row\r\n if(this._inputConfig?.disabled || !!this._inputConfig?.readonly) {\r\n return this._points;\r\n }\r\n return [...this._points, this.pointRow];\r\n }\r\n\r\n set points(value: WorkflowAdjudicationScoreSheetValue[]) {\r\n // Used to set the points from an external source\r\n this._points = value;\r\n }\r\n \r\n get filteredInputs(): FormColumnInputs[] {\r\n const description = this.pointRow.description?.toLowerCase() || '';\r\n if (!description) {\r\n return this.selectAllWorkflowInputs;\r\n }\r\n \r\n // Using a regex for robust matching\r\n const regex = new RegExp(description.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'), 'i');\r\n return this.selectAllWorkflowInputs.filter((input: FormColumnInputs) => \r\n (typeof input.label === 'string' && regex.test(input.label)) || \r\n (typeof input.hintLabel === 'string' && regex.test(input.hintLabel))\r\n );\r\n }\r\n\r\n get pointInEditIsValid(): boolean {\r\n const typeRequired = (this.inputConfig?.adjudicationPointTypes?.length || 0) > 0;\r\n return !!this.pointRow.description && this.pointRow.totalPoints > 0 && (!typeRequired || !!this.pointRow.pointType);\r\n }\r\n\r\n private createDefaultPointRow(): WorkflowAdjudicationScoreSheetValue {\r\n return {\r\n id: '',\r\n formControlName: '',\r\n totalPoints: 0,\r\n description: '',\r\n pointType: '',\r\n inputId: undefined,\r\n isEditRow: true\r\n };\r\n }\r\n\r\n private resetPointRow(): void {\r\n this.pointRow = this.createDefaultPointRow();\r\n }\r\n\r\n selectActiveInput(input: FormColumnInputs): void {\r\n this.pointRow = {\r\n ...this.pointRow,\r\n totalPoints: 0,\r\n description: input.label || '',\r\n id: input.id,\r\n formControlName: input.formControlName,\r\n pointType: this.pointRow.pointType || this.inputConfig?.adjudicationPointTypes[0] || '',\r\n inputId: input.id\r\n };\r\n }\r\n\r\n selectPointType(pointType: MatSelectChange): void {\r\n this.pointRow = {\r\n ...this.pointRow,\r\n pointType: pointType.value\r\n };\r\n }\r\n\r\n savePoints(): void {\r\n const pointToSave: WorkflowAdjudicationScoreSheetValue = {\r\n ...this.pointRow,\r\n id: this.pointRow.id || uuidv4(),\r\n formControlName: this.pointRow.formControlName || this.pointRow.description,\r\n isEditRow: undefined // Mark as a saved row\r\n };\r\n\r\n // Add the new or updated point to our source array\r\n this._points = [...this._points, pointToSave];\r\n\r\n // Reset the input row for the next entry\r\n this.pointsChange.emit(this._points);\r\n this.resetPointRow();\r\n\r\n }\r\n\r\n edit(element: WorkflowAdjudicationScoreSheetValue): void {\r\n // Set the selected element as the current editable row\r\n this.pointRow = {\r\n ...element,\r\n isEditRow: true,\r\n };\r\n // Remove the element from the main list so there are no duplicates while editing\r\n this._points = this._points.filter(p => p.id !== element.id);\r\n // Emit the updated points list\r\n this.pointsChange.emit(this._points);\r\n }\r\n\r\n remove(element: WorkflowAdjudicationScoreSheetValue): void {\r\n // Directly filter the source array to remove the specified element\r\n this._points = this._points.filter(p => p.id !== element.id);\r\n // Emit the updated points list\r\n this.pointsChange.emit(this._points);\r\n }\r\n\r\n getInputIllustration(input: FormColumnInputs): string {\r\n return getInputIllustration(input.element);\r\n }\r\n}","<div style=\"resize: both; overflow: auto;\">\r\n @if(!points || points.length === 1) {\r\n <h5 style=\"margin-bottom: 5px; margin-top: 0px;\">\r\n ℹ️ To add a scoring item:\r\n </h5>\r\n <ol>\r\n <li>\r\n <strong>Enter Description:</strong>\r\n <ul style=\"margin-top: 5px; margin-bottom: 5px; padding-left: 20px; list-style-type: disc;\">\r\n <li>\r\n To <strong>link</strong> a field: You <strong>must select it</strong> from the list first (you can\r\n edit it after).\r\n </li>\r\n <li>\r\n For a <strong>custom</strong> point: <strong>Ignore the list</strong> and just type your own\r\n description.\r\n </li>\r\n </ul>\r\n </li>\r\n <li>\r\n <strong>Set Details:</strong>\r\n Assign the <strong>Points</strong> and select the <strong>Point Type</strong>.\r\n </li>\r\n <li>\r\n <strong>Save:</strong>\r\n Click the <strong>\"Save\"</strong> button to add the item.\r\n </li>\r\n </ol>\r\n }\r\n <table mat-table [dataSource]=\"points\" matSort>\r\n <ng-container matColumnDef=\"description\">\r\n <th mat-header-cell *matHeaderCellDef>Description</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n @if (element.isEditRow ) {\r\n \r\n <mat-form-field subscriptSizing=\"dynamic\" class=\"input-add\" appearance=\"outline\">\r\n <textarea [matAutocomplete]=\"auto\" [(ngModel)]=\"pointRow.description\" matInput cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"1\" placeholder=\"Enter point description\"></textarea>\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\">\r\n @for (input of filteredInputs; track input.id) {\r\n <mat-option [value]=\"input.label\" (click)=\"selectActiveInput(input)\">\r\n <div style=\"display: flex;align-items: center;gap:8px\">\r\n <img height=\"24px\" width=\"24px\" [src]=\" getInputIllustration(input) \"\r\n [alt]=\"input.label\">\r\n <span>\r\n <div style=\"font-size: 12px;\">\r\n <strong>\r\n {{input.label}}\r\n </strong>\r\n\r\n </div>\r\n <div\r\n style=\"font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\">\r\n {{input.hintLabel || input.formControlName}}\r\n </div>\r\n </span>\r\n\r\n </div>\r\n </mat-option>\r\n }\r\n\r\n </mat-autocomplete>\r\n\r\n </mat-form-field>\r\n\r\n\r\n }@else {\r\n\r\n {{ element.description }}}\r\n\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"totalPoints\">\r\n <th mat-header-cell *matHeaderCellDef>Points</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n @if (element.isEditRow) {\r\n \r\n <mat-form-field subscriptSizing=\"dynamic\" class=\"input-add\" appearance=\"outline\">\r\n <input matInput \r\n [(ngModel)]=\"pointRow.totalPoints\"\r\n placeholder=\"Enter points , eg 50\" type=\"number\">\r\n\r\n </mat-form-field>\r\n\r\n \r\n }@else {\r\n\r\n {{ element.totalPoints }}\r\n }\r\n\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"pointType\">\r\n <th mat-header-cell *matHeaderCellDef>Point Type</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n @if (element.isEditRow) {\r\n \r\n <mat-form-field subscriptSizing=\"dynamic\" class=\"input-add\" appearance=\"outline\">\r\n <mat-select (selectionChange)=\"selectPointType($event)\" ngDefaultControl \r\n \r\n [value]=\"pointRow.pointType\"\r\n \r\n placeholder=\"Select\">\r\n @for (type of inputConfig?.adjudicationPointTypes || []; track $index) {\r\n <mat-option [value]=\"type\">{{type}}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n \r\n }@else {\r\n\r\n {{ element.pointType }}\r\n }\r\n\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"actions\" [stickyEnd]=\"true\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <span style=\"display: flex; justify-content: center;\">\r\n @if (element.isEditRow) {\r\n <button [disabled]=\"this.inputConfig?.disabled || this.inputConfig?.readonly\" matTooltip=\"Save Point in Edit\" color=\"primary\" style=\"white-space: nowrap;\r\n height: 26px;\r\n margin-bottom: 0px;\" mat-flat-button (click)=\"savePoints()\" [disabled]=\"!pointInEditIsValid\">\r\n\r\n <span style=\"font-size: 14px;\">\r\n save\r\n </span>\r\n\r\n\r\n </button>\r\n\r\n }@else {\r\n <button mat-icon-button (click)=\"edit(element)\">\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button mat-icon-button (click)=\"remove(element)\">\r\n <mat-icon>delete_forever</mat-icon>\r\n\r\n </button>\r\n }\r\n\r\n </span>\r\n\r\n\r\n\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"cols\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: cols\"></tr>\r\n </table>\r\n</div>","export function getColorForNumber(targetNumber: number, numbers: number[], asc = true): string {\r\n if (numbers.length === 0) {\r\n throw new Error(\"The numbers array must not be empty.\");\r\n }\r\n\r\n // Avoid sorting the original array\r\n const sortedNumbers = [...numbers].sort((a, b) => asc ? a - b : b - a);\r\n const min = sortedNumbers[0];\r\n const max = sortedNumbers[sortedNumbers.length - 1];\r\n if (!min || !max) {\r\n return \"rgb(173, 173, 173)\";\r\n }\r\n if (min === max) {\r\n return \"rgb(173, 173, 173)\"; // Return gray if there is no range\r\n }\r\n\r\n const interpolateColor = (value: number): string => {\r\n const fraction = (value - min) / (max - min);\r\n const colors = [\r\n { color: [247, 0, 0], pos: 0.0 }, // Red\r\n { color: [247, 187, 0], pos: 0.25 }, // Orange\r\n { color: [247, 247, 0], pos: 0.5 }, // Yellow\r\n { color: [207, 247, 0], pos: 0.75 }, // Light green\r\n { color: [96, 247, 0], pos: 1.0 } // Green\r\n ];\r\n\r\n for (let i = 0; i < colors.length - 1; i++) {\r\n const nextColor = colors[i + 1]\r\n const currentColor = colors[i]\r\n if (currentColor && nextColor && fraction <= nextColor.pos) {\r\n\r\n const range = nextColor.pos - currentColor.pos;\r\n const localFraction = (fraction - currentColor.pos) / range;\r\n const r = Math.round(currentColor.color[0]! + localFraction * (nextColor.color[0]! - currentColor.color[0]!));\r\n const g = Math.round(currentColor.color[1]! + localFraction * (nextColor.color[1]! - currentColor.color[1]!));\r\n const b = Math.round(currentColor.color[2]! + localFraction * (nextColor.color[2]! - currentColor.color[2]!));\r\n return `rgb(${r}, ${g}, ${b})`;\r\n }\r\n }\r\n\r\n return `rgb(${colors[colors.length - 1]?.color[0]}, ${colors[colors.length - 1]?.color[1]}, ${colors[colors.length - 1]?.color[2]},0.6)`;\r\n };\r\n\r\n return interpolateColor(targetNumber);\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, Output } from '@angular/core';\r\n\r\n\r\n\r\nimport { FormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\nimport { BehaviorSubject, catchError, combineLatest, map, Observable, of, shareReplay, startWith, switchMap, take } from 'rxjs';\r\n\r\n\r\nimport { MatModulesModule } from '../../../../../../shared/modules/mat-modules.module';\r\nimport { DaysAgoPipe } from '../../../../../../shared/pipes/date/days-ago.pipe';\r\nimport { NGX_T_FORMS_CONFIG_TOKEN } from '../../../../../../injection-tokens/index';\r\nimport { ITowerStepColumn, IWorkflowDocListCols, AdjResponseReviewColumnMapping, WorkflowAdjudicationMicroFlowReviewValue } from 'ngx-t-forms-types';\r\nimport { getColorForNumber } from '../../../../../../shared/functions/mapColors';\r\nimport { _isEqual } from '../../../../../../shared/functions/isEqual';\r\nimport { MatSelectChange } from '@angular/material/select';\r\nimport { EditorJsInputComponent } from '../../../editor-input-element/core/editor-js-input/editor-js-input.component';\r\nimport { OutputData } from '@editorjs/editorjs';\r\n// --- TYPE DEFINITIONS FOR ROBUSTNESS ---\r\n\r\ninterface ISubmission extends Record<string, any> {\r\n id: string;\r\n adjudicationPricePreferenceCalculationColor?: string;\r\n backgroundShades?: Record<string, string>;\r\n}\r\ninterface tableCols extends IWorkflowDocListCols {\r\n showColor?: boolean;\r\n maxWidth?: string;\r\n}\r\ninterface IViewModel {\r\n submissions: ISubmission[];\r\n columnMapping: AdjResponseReviewColumnMapping;\r\n displayColumns?: tableCols[];\r\n displayCols: string[];\r\n loading: boolean;\r\n error?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'app-submission-review',\r\n templateUrl: './submission-review.component.html',\r\n styleUrls: ['./submission-review.component.scss'],\r\n standalone: true\r\n ,\r\n imports: [\r\n CommonModule,\r\n MatModulesModule,\r\n FormsModule,\r\n RouterModule,\r\n DaysAgoPipe,\r\n EditorJsInputComponent\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SubmissionReviewComponent {\r\n\r\n @Input() inputConfig: ITowerStepColumn | undefined\r\n private _value: WorkflowAdjudicationMicroFlowReviewValue[] | null = [];\r\n\r\n // A stream to push updates of the review values (`this.value`)\r\n private valueChanges$ = new BehaviorSubject<WorkflowAdjudicationMicroFlowReviewValue[] | null>([]);\r\n\r\n @Input() set value(value: any) {\r\n if (_isEqual(value, this._value)) return;\r\n this._value = value as WorkflowAdjudicationMicroFlowReviewValue[] || [];\r\n\r\n // FIX: Instead of triggering a full refresh, push the new value to its own stream.\r\n this.valueChanges$.next(this._value);\r\n }\r\n get value(): WorkflowAdjudicationMicroFlowReviewValue[] | null {\r\n return this._value;\r\n }\r\n @Output() reviewChange = new EventEmitter<WorkflowAdjudicationMicroFlowReviewValue[]>();\r\n\r\n private config = inject(NGX_T_FORMS_CONFIG_TOKEN);\r\n private refreshTrigger = new BehaviorSubject<void>(undefined);\r\n selected: string = '';\r\n columnMapping: AdjResponseReviewColumnMapping | undefined = undefined;\r\n submissions: ISubmission[] = [];\r\n\r\n private readonly initialState: IViewModel = {\r\n loading: true,\r\n submissions: [],\r\n columnMapping: {} as any,\r\n displayCols: [],\r\n displayColumns: [],\r\n error: undefined,\r\n };\r\n\r\n // Stream for the initial data fetch. Only re-runs when `refreshTrigger` is fired.\r\n private readonly fetchedData$ = this.refreshTrigger.pipe(\r\n switchMap(() => this.config.formBuilder.getCurrentStepMicroflowSubmissions().pipe(take(1))),\r\n shareReplay(1)\r\n );\r\n\r\n /**\r\n * REFACTORED: The new vm$ combines the one-time fetched data with the ongoing stream\r\n * of local review changes (`valueChanges$`). This prevents re-fetching from the server\r\n * every time a status or note is changed.\r\n */\r\n readonly vm$: Observable<IViewModel> = combineLatest([\r\n this.fetchedData$,\r\n this.valueChanges$\r\n ]).pipe(\r\n map(([res, reviewValues]) => {\r\n const { submissions, columnMapping } = res;\r\n\r\n this.columnMapping = columnMapping;\r\n this.submissions = submissions;\r\n // FIX: Pass reviewValues as an argument to make the function pure.\r\n const enrichedSubmissions = this.enrichSubmissionsData(submissions, columnMapping, reviewValues);\r\n\r\n\r\n const calcKey = columnMapping.responsePreferenceCalculationKey || 'adjudicationPricePreferenceCalculation';\r\n\r\n const sortedSubmissions = [...enrichedSubmissions].sort((a, b) => Number(b[calcKey]) - Number(a[calcKey]));\r\n const newVm: IViewModel = {\r\n loading: false, \r\n submissions: sortedSubmissions,\r\n columnMapping: columnMapping,\r\n displayCols: [columnMapping.respondentNameKey, 'adjudicationPricePreferenceCalculation', 'status', 'actions'],\r\n displayColumns: [\r\n { label: 'name', formControlName: columnMapping.respondentNameKey, type: 'string' as any },\r\n { label: 'Preference', formControlName: 'adjudicationPricePreferenceCalculation', type: 'number' as any, showColor: true },\r\n { label: 'Actions', formControlName: 'actions', type: 'string' },\r\n { label: 'status and Notes', formControlName: 'status', type: 'actions' },\r\n ],\r\n error: undefined,\r\n };\r\n return newVm;\r\n }),\r\n startWith(this.initialState),\r\n catchError((err: any) => {\r\n console.error('Failed to load submissions:', err);\r\n return of({ ...this.initialState, loading: false, error: 'Failed to load submissions.' });\r\n }),\r\n shareReplay(1)\r\n );\r\n\r\n loadMicroSubmissions(): void {\r\n this.refreshTrigger.next();\r\n }\r\n\r\n /**\r\n * REFACTORED: Now accepts `reviewValues` as a parameter instead of relying on `this.value`.\r\n */\r\n private enrichSubmissionsData(\r\n submissions: ISubmission[],\r\n cols: AdjResponseReviewColumnMapping,\r\n reviewValues: WorkflowAdjudicationMicroFlowReviewValue[] | null\r\n ): ISubmission[] {\r\n const numberSets = new Map<string, number[]>();\r\n numberSets.set(\r\n cols.responsePreferenceCalculationKey || 'adjudicationPricePreferenceCalculation',\r\n submissions.map((s) => Number(s[cols.responsePreferenceCalculationKey || 'adjudicationPricePreferenceCalculation'] || 0))\r\n );\r\n\r\n return submissions.map((submission) => {\r\n const priceCalcKey = cols.responsePreferenceCalculationKey || 'adjudicationPricePreferenceCalculation';\r\n const numbers = numberSets.get(priceCalcKey) || [];\r\n const color = this.getColorString(submission[priceCalcKey], numbers);\r\n // Use the passed `reviewValues` argument\r\n const submissionReview = reviewValues?.find((v) => v.id === submission.id) || {} as any;\r\n \r\n return {\r\n ...submission,\r\n submissionIsReviewed: !!submissionReview,\r\n adj_microFlow_review_notes: submissionReview?.adj_microFlow_review_notes || '',\r\n submissionHasReviewNotes: !!submissionReview?.adj_microFlow_review_notes,\r\n adj_microFlow_review: submissionReview?.['adj_microFlow_review'],\r\n adjudicationPricePreferenceCalculationColor: color,\r\n adjudicationPricePreferenceCalculation: submission[cols.responsePreferenceCalculationKey || 'adjudicationPricePreferenceCalculation'],\r\n backgroundShades: { [priceCalcKey]: this.getScoreShade(color) },\r\n };\r\n });\r\n }\r\n\r\n private getColorString(target: number, numbers: number[]): string {\r\n return getColorForNumber(target, numbers, true);\r\n }\r\n\r\n private getScoreShade(rgbColor: string): string {\r\n if (!rgbColor) return '';\r\n return rgbColor.replace('rgb', 'rgba').replace(')', `, 0.1)`);\r\n }\r\n\r\n viewMicroSubmission(res: any) {\r\n const alreadyInValue = this.value?.find((v) => v.id === res.id);\r\n if (!alreadyInValue) {\r\n const newReview: WorkflowAdjudicationMicroFlowReviewValue = {\r\n id: res.id,\r\n adj_microFlow_review: undefined as any,\r\n nameOfBidder: res[this.columnMapping?.respondentNameKey || ''] || '',\r\n supplierNumber: res[this.columnMapping?.respondentCodeKey || ''] || '',\r\n createdAt: res[this.columnMapping?.responseDateKey || 'createdAt'] || undefined,\r\n updatedAt: res[this.columnMapping?.responseDateKey || 'updatedAt'] || undefined,\r\n adjudicationPricePreferenceCalculation: res[this.columnMapping?.responsePreferenceCalculationKey || 'adjudicationPricePreferenceCalculation'] || 0,\r\n reference: res.reference || '',\r\n }\r\n const newValue = [...(this.value || []), newReview];\r\n this.reviewChange.emit(newValue);\r\n }\r\n this.config.formBuilder['previewWorkflowDocument'](res.id);\r\n }\r\n\r\n reviewStatuses = [\r\n {\r\n label: '✅ Compliant',\r\n value: \"compliant\",\r\n color: 'var(--mat-sys-primary)',\r\n },\r\n {\r\n label: '❌ Non-compliant',\r\n value: \"non-compliant\",\r\n color: 'var(--mat-sys-error)',\r\n },\r\n\r\n\r\n ];\r\n\r\n setResponseStatus(res: any, status: MatSelectChange) {\r\n const alreadyInValue = this.value?.find((v) => v.id === res.id);\r\n\r\n if (!alreadyInValue) {\r\n const newReview: WorkflowAdjudicationMicroFlowReviewValue = {\r\n id: res.id,\r\n adj_microFlow_review: status.value as any,\r\n nameOfBidder: res[this.columnMapping?.respondentNameKey || ''] || '',\r\n supplierNumber: res[this.columnMapping?.respondentCodeKey || ''] || '',\r\n createdAt: res[this.columnMapping?.responseDateKey || 'createdAt'] || undefined,\r\n updatedAt: res[this.columnMapping?.responseDateKey || 'updatedAt'] || undefined,\r\n adjudicationPricePreferenceCalculation: res[this.columnMapping?.responsePreferenceCalculationKey || 'adjudicationPricePreferenceCalculation'] || 0,\r\n reference: res.reference || '',\r\n }\r\n \r\n this.reviewChange.emit([...(this.value || []), newReview]);\r\n this.reachedMax([...(this.value || []), newReview])\r\n return\r\n }\r\n const newValue= (this.value||[]).map((v) => {\r\n if (v.id === res.id) {\r\n return { ...v, adj_microFlow_review: status.value as any };\r\n }\r\n return v;\r\n });\r\n \r\n\r\n this.reviewChange.emit(newValue);\r\n this.reachedMax(newValue)\r\n\r\n }\r\n get maxLimit(): number | undefined {\r\n const hasMax = this.inputConfig?.maxLength;\r\n if (!hasMax || isNaN(Number(hasMax))) {\r\n return; // No limit set, do nothing\r\n }\r\n return Number(hasMax);\r\n }\r\n reachedMax(newValue: WorkflowAdjudicationMicroFlowReviewValue[] | null): void {\r\n const hasMax = this.inputConfig?.maxLength;\r\n if (!hasMax || isNaN(Number(hasMax))) {\r\n return; // No limit set, do nothin\r\n }\r\n const allCompetentSubmissions = newValue?.filter((v) => (v.adj_microFlow_review as any) === 'compliant').length || 0;\r\n if (!(allCompetentSubmissions >= (Number(hasMax) || 1))) {\r\n return \r\n }\r\n const missingSubmission = this.submissions.filter((s) => !newValue?.find((v) => v.id === s.id))\r\n .map((s) => ({\r\n id: s.id,\r\n adj_microFlow_review: 'non-compliant' as any, // Default to non-compliant\r\n nameOfBidder: s[this.columnMapping?.respondentNameKey || ''] || '',\r\n supplierNumber: s[this.columnMapping?.respondentCodeKey || ''] || '',\r\n createdAt: s[this.columnMapping?.responseDateKey || 'createdAt'] || undefined,\r\n updatedAt: s[this.columnMapping?.responseDateKey || 'updatedAt'] || undefined,\r\n adjudicationPricePreferenceCalculation: s[this.columnMapping?.responsePreferenceCalculationKey || 'adjudicationPricePreferenceCalculation'] || 0,\r\n reference: s['reference'] || '',\r\n }));\r\n const unique = new Set([...newValue || [], ...missingSubmission])\r\n this.reviewChange.emit(Array.from(unique) as WorkflowAdjudicationMicroFlowReviewValue[]);\r\n \r\n\r\n }\r\n\r\n notesOpenForRowId: string | null = null;\r\n activeRowNotes: OutputData | undefined = undefined;\r\n // FIX: A Map to hold notes being edited, keyed by row ID. This prevents shared state.\r\n notesBeingEdited = new Map<string, OutputData | undefined>();\r\n\r\n /**\r\n * REFACTORED: Captures the notes for a specific row ID and stores them in the map.\r\n */\r\n notesChanged(notes: OutputData | undefined, rowId: string): void {\r\n this.notesBeingEdited.set(rowId, notes);\r\n }\r\n\r\n /**\r\n * REFACTORED: Saves the notes from the `notesBeingEdited` map.\r\n */\r\n notesBlur(): void {\r\n if (!this.notesOpenForRowId) return;\r\n\r\n const notesToSave = this.notesBeingEdited.get(this.notesOpenForRowId);\r\n const alreadyInValue = this.value?.find((v) => v.id === this.notesOpenForRowId);\r\n\r\n if (!alreadyInValue) {\r\n const newReview: WorkflowAdjudicationMicroFlowReviewValue = {\r\n id: this.notesOpenForRowId,\r\n adj_microFlow_review_notes: notesToSave,\r\n adj_microFlow_review: undefined as any,\r\n nameOfBidder: '',\r\n supplierNumber: '',\r\n createdAt: undefined as any,\r\n updatedAt: undefined as any,\r\n adjudicationPricePreferenceCalculation: 0,\r\n reference: '',\r\n } as any;\r\n this.reviewChange.emit([...(this.value || []), newReview]);\r\n } else {\r\n const newValue = this.value?.map((v) => {\r\n if (v.id === this.notesOpenForRowId) {\r\n return { ...v, adj_microFlow_review_notes: notesToSave };\r\n }\r\n return v;\r\n });\r\n this.reviewChange.emit(newValue);\r\n }\r\n\r\n // Clean up and close the overlay\r\n this.notesBeingEdited.delete(this.notesOpenForRowId);\r\n this.notesOpenForRowId = null;\r\n this.activeRowNotes = undefined;\r\n }\r\n\r\n get notesInputConfig(): ITowerStepColumn {\r\n return {\r\n id: 'adj_microFlow_review_notes',\r\n label: 'Notes',\r\n formControlName: 'adj_microFlow_review_notes',\r\n } as ITowerStepColumn\r\n }\r\n bulkOperations = [\r\n {\r\n label: '✅ Set all to Compliant',\r\n value: 'compliant',\r\n color: 'var(--mat-sys-primary)',\r\n },\r\n {\r\n label: '❌ Set all to Non-compliant',\r\n value: 'non-compliant',\r\n color: 'var(--mat-sys-error)',\r\n },\r\n {\r\n label:\"🔄 Reset all \",\r\n value: 'reset',\r\n color: 'var(--mat-sys-secondary)',\r\n }\r\n\r\n\r\n ]\r\n get bulkStatus() {\r\n const allCompliant = this.submissions.every((s) => s['adj_microFlow_review'] === 'compliant');\r\n\r\n if (allCompliant) {\r\n return 'compliant';\r\n }\r\n\r\n const allNonCompliant = this.submissions.every((s) => s['adj_microFlow_review'] === 'non-compliant');\r\n if (allNonCompliant) {\r\n return 'non-compliant';\r\n }\r\n\r\n return 'mixed';\r\n }\r\nbulkStatusChanged(event: MatSelectChange) {\r\n const newStatus = event.value;\r\n if(newStatus === 'reset') {\r\n this.reviewChange.emit([]);\r\n return\r\n }\r\n // Create a Map of existing values for efficient O(1) lookup\r\n const existingValueMap = new Map((this.value ?? []).map(v => [v.id, v]));\r\n\r\n // Destructure column keys with fallbacks for cleaner access\r\n const {\r\n respondentNameKey = '',\r\n respondentCodeKey = '',\r\n responseDateKey = 'createdAt',\r\n responsePreferenceCalculationKey = 'adjudicationPricePreferenceCalculation',\r\n } = this.columnMapping || {};\r\n\r\n let allItems = this.submissions.map(s => {\r\n // Efficiently look up the existing value using the Map\r\n const existingValue = existingValueMap.get(s.id);\r\n \r\n // If it exists, spread its properties to preserve them and update the status\r\n if (existingValue) {\r\n return { ...existingValue, adj_microFlow_review: newStatus };\r\n }\r\n \r\n // Otherwise, create a new object from the submission data\r\n return {\r\n id: s.id,\r\n adj_microFlow_review: newStatus,\r\n nameOfBidder: s[respondentNameKey] || '',\r\n supplierNumber: s[respondentCodeKey] || '',\r\n createdAt: s[responseDateKey] || undefined,\r\n updatedAt: s[this.columnMapping?.responseDateKey || 'updatedAt'] || undefined,\r\n adjudicationPricePreferenceCalculation: s[responsePreferenceCalculationKey] || 0,\r\n reference: s['reference'] || '',\r\n };\r\n });\r\n\r\n // Apply the compliance limit if necessary\r\n const shouldApplyLimit = this.maxLimit !== undefined && newStatus === 'compliant';\r\n if (shouldApplyLimit) {\r\n // Sort by preference calculation, highest first\r\n allItems.sort((a, b) => \r\n (b.adjudicationPricePreferenceCalculation ?? 0) - (a.adjudicationPricePreferenceCalculation ?? 0)\r\n );\r\n\r\n // Mark items beyond the limit as 'non-compliant'\r\n allItems = allItems.map((item, index) => {\r\n if (index >= this.maxLimit!) {\r\n return { ...item, adj_microFlow_review: 'non-compliant' };\r\n }\r\n return item;\r\n });\r\n }\r\n\r\n this.reviewChange.emit(allItems as WorkflowAdjudicationMicroFlowReviewValue[]);\r\n}\r\n\r\n openNotes(row: any) {\r\n this.notesOpenForRowId = row.id;\r\n if (!!row.adj_microFlow_review_notes || !this.inputConfig?.adjudicationReviewFeedbackTemplate) {\r\n return\r\n }\r\n const stringfiedTemplate = JSON.stringify(this.inputConfig?.adjudicationReviewFeedbackTemplate);\r\n const template = stringfiedTemplate?.replace(/\\$bidderName/g, row[this.columnMapping?.respondentNameKey || ''])\r\n ?.replace(/\\$bidderCode/g, row[this.columnMapping?.respondentCodeKey || ''])\r\n ?.replace(/\\$responseDate/g, row[this.columnMapping?.responseDateKey || ''])\r\n ?.replace(/\\$responsePreferenceCalculation/g, row[this.columnMapping?.responsePreferenceCalculationKey || ''] || '0')\r\n this.activeRowNotes = JSON.parse(template || '{}') as OutputData | undefined;\r\n }\r\n canChangeStatus(row: any): boolean {\r\n if (row.adj_microFlow_review === 'compliant') return true;\r\n const maxLength = this.inputConfig?.maxLength\r\n // check if max ecists and is a number\r\n if (!maxLength || isNaN(Number(maxLength))) {\r\n return true; // No limit set, allow status change\r\n }\r\n const allCompetentSubmissions = this.value?.filter((v) => (v.adj_microFlow_review as any) === 'compliant').length || 0;\r\n return allCompetentSubmissions < (Number(maxLength) || 1)\r\n }\r\n}","@if (vm$ | async; as vm) {\r\n\r\n<ng-container *ngIf=\"vm.loading; then loading; else (vm.error ? error : dataContainer)\"></ng-container>\r\n\r\n<ng-template #loading>\r\n <div style=\"display: flex; justify-content: center; align-items: center; padding:24px;width: 100%;\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #error>\r\n <div class=\"info-card error-card\">\r\n <h5 class=\"info-title\">❌ Failed to load data</h5>\r\n <p>{{ vm.error }}</p>\r\n <button mat-raised-button color=\"primary\" (click)=\"loadMicroSubmissions()\">\r\n Try Again\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #dataContainer>\r\n <ng-container\r\n *ngIf=\"!vm.displayCols.length; then noColumns; else (!vm.submissions.length ? noSubmissions : submissionsTable)\"></ng-container>\r\n</ng-template>\r\n\r\n\r\n<ng-template #noColumns>\r\n <div class=\"info-card\">\r\n <h5 class=\"info-title\">⚙️ This step needs to be configured to show data.</h5>\r\n <ol>\r\n <li>\r\n <strong>Why you're seeing this:</strong>\r\n <ul>\r\n <li>This component is designed for a <strong>\"Submission Review\"</strong> workflow step.</li>\r\n <li>It's currently missing the required column setup.</li>\r\n </ul>\r\n </li>\r\n <li>\r\n <strong>What to do (for Administrators):</strong>\r\n To fix this, go to the <strong>Workflow Builder</strong> and for this specific step, <strong>map the display\r\n columns</strong> to the desired submission data (e.g., form fields or document keys).\r\n </li>\r\n </ol>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #noSubmissions>\r\n <div class=\"info-card\">\r\n <h5 class=\"info-title\">ℹ️ There are no submissions to display.</h5>\r\n <ul>\r\n <li>This can happen if <strong>no one has responded</strong> yet, or if the <strong>submission closing date has\r\n passed</strong>.</li>\r\n <li>If you are expecting to see submissions, try clicking the <strong>Refresh</strong> button.</li>\r\n </ul>\r\n <button mat-raised-button color=\"primary\" (click)=\"loadMicroSubmissions()\" class=\"load-button\">\r\n Refresh\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #submissionsTable>\r\n @if(!value || value.length === 0){\r\n \r\n <div class=\"info-card\">\r\n <h5 class=\"info-title\">📝 How to Review Submissions</h5>\r\n <ol>\r\n <li>\r\n <strong>View Response:</strong> Click the <strong>Preview</strong> (<mat-icon class=\"smallIcon\">preview</mat-icon>) icon to see the full submission.\r\n </li>\r\n <li>\r\n <strong>Set Status:</strong> Use the dropdown to select <strong>Compliant</strong> or <strong>Non-compliant</strong>.\r\n </li>\r\n <li>\r\n <strong>Add Note (If Non-compliant):</strong>\r\n <ul>\r\n <li>If you select <strong>Non-compliant</strong>, you <strong>must</strong> add a note.</li>\r\n <li>Click the <strong>Add Note</strong> (<mat-icon class=\"smallIcon\">add_comment</mat-icon>) icon, write your feedback, and hit <strong>Save Feedback</strong>. Your note will be visible to the applicant.</li>\r\n </ul>\r\n </li>\r\n </ol>\r\n </div>\r\n }\r\n <table mat-table [dataSource]=\"vm.submissions\">\r\n @for (col of vm.displayColumns; track col.formControlName) {\r\n <ng-container [matColumnDef]=\"col.formControlName\">\r\n <th mat-header-cell *matHeaderCellDef style=\"padding:4px\">\r\n\r\n @if(col.formControlName === 'status'){\r\n <mat-form-field floatLabel=\"always\" subscriptSizing=\"dynamic\" style=\"width: 100%;\r\n margin-bottom: 8px;\r\n margin-top: 8px;\r\n border-radius:16px;\" appearance=\"outline\">\r\n <mat-label>\r\n Bulk Status Selection\r\n </mat-label>\r\n <mat-select\r\n [style.color]=\"bulkStatus === 'non-compliant' ? 'var(--mat-sys-error)' : bulkStatus==='compliant'? 'var(--mat-sys-primary)' : ''\"\r\n (selectionChange)=\"bulkStatusChanged($event)\" ngDefaultControl [value]=\"bulkStatus\"\r\n placeholder=\" Select Status\">\r\n @for (type of bulkOperations || []; track type) {\r\n <mat-option [value]=\"type.value\">{{type.label}}</mat-option>\r\n }\r\n </mat-select>\r\n\r\n </mat-form-field>\r\n }@else {\r\n {{ col.label }}\r\n }\r\n\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\" mat-ripple class=\"table-cell\" [class.selected-row]=\"selected === row.id\"\r\n (click)=\"$event.stopPropagation()\" [class.price-preference-cell]=\"true\"\r\n [style.border-bottom-color]=\"row.adjudicationPricePreferenceCalculationColor\"\r\n [style.background]=\"row.backgroundShades?.[col.formControlName]\">\r\n\r\n @if(col.formControlName === 'actions'){\r\n <span style=\"display: flex; align-items: center;\">\r\n <button matTooltipPosition=\"before\"\r\n [matTooltip]=\"`View and review **` + row[vm.columnMapping.respondentNameKey]+ `** 's' Submission`\"\r\n (click)=\"viewMicroSubmission(row)\" mat-icon-button>\r\n <mat-icon>preview</mat-icon>\r\n </button>\r\n <button (click)=\"openNotes(row)\" cdkOverlayOrigin\r\n #trigger=\"cdkOverlayOrigin\" matTooltipPosition=\"after\" [matTooltip]=\"\r\n `Add a review note for **` + row[vm.columnMapping.respondentNameKey] + `**`\" mat-icon-button>\r\n <mat-icon [style.color]=\"\r\n notesOpenForRowId === row.id ? 'var(--mat-sys-primary)' : (row['adj_microFlow_review']==='non-compliant' && !row['adj_microFlow_review_notes']?'var(--mat-sys-error)':'')\r\n \">\r\n {{ !row['submissionHasReviewNotes']? 'add_comment' : 'comment' }}\r\n </mat-icon>\r\n </button>\r\n </span>\r\n\r\n <ng-template (overlayOutsideClick)=\"notesOpenForRowId = null\" cdkConnectedOverlay\r\n [cdkConnectedOverlayOrigin]=\"trigger\" [cdkConnectedOverlayHasBackdrop]=\"false\"\r\n [cdkConnectedOverlayDisableClose]=\"false\" [cdkConnectedOverlayDisposeOnNavigation]=\"true\"\r\n [cdkConnectedOverlayOpen]=\"notesOpenForRowId=== row.id\" (detach)=\"notesOpenForRowId = null\">\r\n <mat-card class=\"notes-card\">\r\n <mat-card-header>\r\n <mat-card-title>Review Feedback</mat-card-title>\r\n <mat-card-subtitle>\r\n For <span style=\"color:var(--mat-sys-primary)\">{{ row[vm.columnMapping.respondentNameKey] }}</span>\r\n </mat-card-subtitle>\r\n </mat-card-header>\r\n <mat-card-content>\r\n <p>\r\n Your notes will be visible to the respondent. Provide <strong>clear, constructive feedback</strong> to\r\n guide their future submissions.\r\n </p>\r\n <mat-form-field floatLabel=\"always\" subscriptSizing=\"dynamic\" style=\"width: 100%;\r\n display: absolute;\r\n left: 0;\r\n margin-bottom: 8px;\r\n margin-top: 8px;\r\n border-radius:16px;\" appearance=\"outline\">\r\n <lib-editor-js-input [value]=\"row['adj_microFlow_review_notes'] || activeRowNotes\"\r\n (valueChanged)=\"notesChanged($event, row.id)\" ngDefaultControl [inputConfig]=\"notesInputConfig\"\r\n [required]=\"this.notesInputConfig.required\">\r\n </lib-editor-js-input>\r\n <mat-hint>\r\n <strong>Tip:</strong> Use bold, lists, and tables to structure your feedback.\r\n </mat-hint>\r\n </mat-form-field>\r\n </mat-card-content>\r\n <mat-card-actions align=\"end\">\r\n <button mat-button (click)=\"this.notesOpenForRowId = null\">\r\n Cancel\r\n </button>\r\n <button mat-flat-button (click)=\"notesBlur()\">\r\n Save Feedback\r\n </button>\r\n </mat-card-actions>\r\n </mat-card>\r\n </ng-template>\r\n\r\n } @else if(col.formControlName === 'status'){\r\n <mat-form-field floatLabel=\"always\" subscriptSizing=\"dynamic\" style=\"width: 100%;\r\n margin-bottom: 8px;\r\n margin-top: 8px;\r\n border-radius:16px;\" appearance=\"outline\">\r\n <mat-select\r\n [disabled]=\"!canChangeStatus(row)\"\r\n [style.color]=\"row['adj_microFlow_review'] === 'non-compliant' ? 'var(--mat-sys-error)' : row['adj_microFlow_review']==='compliant'? 'var(--mat-sys-primary)' : ''\"\r\n (selectionChange)=\"setResponseStatus(row,$event)\" ngDefaultControl [value]=\"row.adj_microFlow_review\"\r\n placeholder=\" Select Status\">\r\n @for (type of reviewStatuses || []; track type) {\r\n <mat-option [value]=\"type.value\">{{type.label}}</mat-option>\r\n }\r\n </mat-select>\r\n @if(row['adj_microFlow_review']==='non-compliant' && !row['adj_microFlow_review_notes']){\r\n <mat-hint style=\"color:var(--mat-sys-error)\">\r\n Rejection reason is required. Add a review note.\r\n </mat-hint>\r\n }\r\n </mat-form-field>\r\n\r\n } @else {\r\n @switch (col?.type) {\r\n @case ('daysAgo') {\r\n {{ row[col.formControlName] | daysAgo }}\r\n }\r\n @case ('number') {\r\n <div class=\"number-cell\">\r\n <span>\r\n {{ (row[col.formControlName] | number:'0.0-0' ) || 'N/A' }}\r\n </span>\r\n @if (col.showColor) {\r\n <mat-icon [style.color]=\"row.adjudicationPricePreferenceCalculationColor\">\r\n fiber_manual_record\r\n </mat-icon>\r\n }\r\n </div>\r\n }\r\n @default {\r\n @if($index === 0) {\r\n <span class=\"main-submission-text\">\r\n <mat-icon style=\"font-size: 16px;height:16px;width:16px\">domain</mat-icon>\r\n <strong>\r\n {{ row[col.formControlName] }}\r\n </strong>\r\n </span>\r\n <span class=\"secondary-text\">\r\n <mat-icon>fingerprint</mat-icon>\r\n {{row[vm.columnMapping.respondentCodeKey]}}\r\n <mat-icon>more_time</mat-icon>\r\n {{ row[vm.columnMapping.responseDateKey ||''] | daysAgo}}\r\n </span>\r\n } @else {\r\n {{ row[col.formControlName] }}\r\n }\r\n }\r\n }\r\n }\r\n </td>\r\n </ng-container>\r\n }\r\n <tr mat-header-row *matHeaderRowDef=\"vm.displayCols\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: vm.displayCols\"></tr>\r\n </table>\r\n \r\n\r\n</ng-template>\r\n\r\n}\r\n","import { Component, ElementRef, Input, Optional, Self } from '@angular/core';\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';\r\nimport { AdjudicationSteps, FormBuilderFunctions, ITowerStepColumn, WorkflowAdjudicationMicroFlowReviewValue, WorkflowAdjudicationResponseElectedSupplierSelectionValue, WorkflowAdjudicationScoreSheetValue } from 'ngx-t-forms-types';\r\nimport { NgControl } from '@angular/forms';\r\nimport { CommonModule } from '@angular/common';\r\nimport { PointsCreationComponent } from '../points-creation/points-creation.component';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { SubmissionReviewComponent } from '../submission-review/submission-review.component';\r\nconst customInputConfig: BaseCustomInputConfig = {\r\n controlType: 'lib-workflow-adjudication-reactive-input',\r\n nextId: 0\r\n}\r\n\r\n@Component({\r\n selector: 'lib-workflow-adjudication-reactive-input',\r\n imports: [CommonModule,PointsCreationComponent,SubmissionReviewComponent],\r\n templateUrl: './workflow-adjudication-reactive-input.component.html',\r\n styleUrl: './workflow-adjudication-reactive-input.component.css',\r\n host: {\r\n '[lib-workflow-adjudication-reactive-input.floating]': 'shouldLabelFloat',\r\n '[id]': 'id',\r\n },\r\n providers: [{ provide: MatFormFieldControl, useExisting: WorkflowAdjudicationReactiveInputComponent }],\r\n})\r\nexport class WorkflowAdjudicationReactiveInputComponent extends BaseCustomInput< \r\n WorkflowAdjudicationScoreSheetValue[]|\r\n WorkflowAdjudicationMicroFlowReviewValue[]|\r\n WorkflowAdjudicationResponseElectedSupplierSelectionValue> {\r\noverride get empty(): boolean {\r\n return this.value === null || this.value === undefined || Object.keys(this.value).length === 0;\r\n }\r\n constructor(\r\n @Optional() @Self() ngControl: NgControl,\r\n elementRef: ElementRef<HTMLElement>\r\n ) {\r\n super(ngControl, elementRef, customInputConfig);\r\n }\r\n\r\n adjudicationSteps = AdjudicationSteps\r\n\r\n @Input() formBuilderFunctions: FormBuilderFunctions |undefined\r\n @Input() editorMode: boolean = false;\r\n\r\n _inputConfig!: ITowerStepColumn;\r\n\r\n @Input() set inputConfig(inputConfig:ITowerStepColumn){\r\n this._inputConfig = inputConfig\r\n\r\n }\r\n get inputConfig(): ITowerStepColumn {\r\n return this._inputConfig;\r\n }\r\n\r\n get shouldLabelFloat(): boolean {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n setValue(value: WorkflowAdjudicationScoreSheetValue[] | WorkflowAdjudicationMicroFlowReviewValue[] | WorkflowAdjudicationResponseElectedSupplierSelectionValue): void {\r\n this.value = value;\r\n this.onChange(value);\r\n this.onTouched();\r\n }\r\n\r\n}\r\n","@switch (inputConfig.adjudicationStep) {\r\n@case (adjudicationSteps.ScoreCreation) {\r\n<app-points-creation [inputConfig]=\"inputConfig\" [value]=\"value\" (pointsChange)=\"setValue($event)\">\r\n</app-points-creation>\r\n}\r\n@case (adjudicationSteps.SubMissionReview) {\r\n<app-submission-review \r\n[inputConfig]=\"inputConfig\" \r\n[value]=\"value\" (reviewChange)=\"setValue($event)\"></app-submission-review>\r\n}\r\n@default {\r\n<h6>\r\n {{ inputConfig.adjudicationStep | titlecase }} is not implemented yet.\r\n</h6>\r\n}\r\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\r\nimport { FormBuilderFunctions, ITowerStepColumn } from 'ngx-t-forms-types';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\nimport { WorkflowAdjudicationReactiveInputComponent } from './elements/workflow-adjudication-reactive-input/workflow-adjudication-reactive-input.component';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'lib-workflow-adjudication',\r\n imports: [MatModulesModule, ReactiveFormsModule,\r\n CommonModule,\r\n WorkflowAdjudicationReactiveInputComponent,\r\n TFormInputStatusComponent,],\r\n templateUrl: './workflow-adjudication.component.html',\r\n styleUrl: './workflow-adjudication.component.css'\r\n})\r\nexport class WorkflowAdjudicationComponent {\r\n@Input() inputConfig!: ITowerStepColumn;\r\n @Input() editorMode: boolean = false; \r\n @Input() formGroup!: FormGroup;\r\n \r\n @Input() formBuilderFunctions: FormBuilderFunctions |undefined\r\n\r\n\r\n @Output() reload = new EventEmitter<void>();\r\n\r\n \r\n get errorMessage(){\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n }\r\n}\r\n","<form [formGroup]=\"formGroup\">\r\n <mat-form-field [appearance]=\"this.inputConfig.appearance ||'fill' \" [floatLabel]=\"'always'\" subscriptSizing=\"dynamic\"\r\n *ngIf=\"this.inputConfig as inputConfig\">\r\n <mat-label>\r\n {{this.inputConfig.label }}\r\n <lib-t-form-input-status [inputConfig]=\"this.inputConfig\"></lib-t-form-input-status>\r\n </mat-label>\r\n \r\n <lib-workflow-adjudication-reactive-input \r\n [inputConfig]=\"this.inputConfig\" \r\n [formControlName]=\"this.inputConfig.id\"\r\n [required]=\"this.inputConfig.required\"\r\n [formGroup]=\"formGroup\" \r\n [editorMode]=\"editorMode\"\r\n [formBuilderFunctions]=\"formBuilderFunctions\">\r\n\r\n </lib-workflow-adjudication-reactive-input>\r\n\r\n\r\n\r\n @if(inputConfig.hintLabel || inputConfig.temporaryHint ){\r\n <mat-hint class=\"inputHint\">\r\n {{ inputConfig.temporaryHint || inputConfig.hintLabel}}\r\n </mat-hint>\r\n }\r\n\r\n @if (!!errorMessage) {\r\n <mat-error class=\"oneLineTextEllipsis\" matTooltipClass=\"errorToolTip\">{{errorMessage}}</mat-error>\r\n }\r\n <!-- Prefix Icon -->\r\n <mat-icon *ngIf=\"inputConfig.prefixIcon\" matPrefix>{{ inputConfig.prefixIcon }}</mat-icon>\r\n\r\n <!-- Suffix Icon or Password Visibility Toggle -->\r\n <ng-container *ngIf=\"inputConfig.suffixIcon\">\r\n <mat-icon *ngIf=\"inputConfig.id !== 'password'\" matSuffix>{{ inputConfig.suffixIcon\r\n }}</mat-icon>\r\n <!-- <button *ngIf=\"inputConfig.id === 'password'\" (click)=\"inputConfig.togglePasswordVisibility()\"\r\n mat-icon-button matSuffix>\r\n <mat-icon>{{ inputConfig.showPassword ? 'remove_red_eye' : 'eye_off' }}</mat-icon>\r\n </button> -->\r\n </ng-container>\r\n\r\n <!-- Prefix & Suffix Text -->\r\n <span *ngIf=\"inputConfig.prefixText\" matPrefix style=\"top: 0\">{{ inputConfig.prefixText }}</span>\r\n <span *ngIf=\"inputConfig.suffixText\" matSuffix style=\"padding-left: 5px\">{{ inputConfig.suffixText\r\n }}</span>\r\n\r\n <!-- Character Count Hint -->\r\n <mat-hint *ngIf=\"inputConfig.maxLength && formGroup\" align=\"end\">\r\n {{ (formGroup.controls[inputConfig.id]?.value?.length || 0) + '/' + inputConfig.maxLength\r\n }}\r\n </mat-hint>\r\n\r\n\r\n </mat-form-field>","import { Component, Inject, Input, Optional } from '@angular/core';\r\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\r\n\r\n\r\nimport { CommonModule } from '@angular/common';\r\n\r\n\r\nimport { MatModulesModule } from '../../shared/modules/mat-modules.module';\r\nimport { ElementTypes, ITowerStepColumn } from \"ngx-t-forms-types\";\r\nimport { SectionTitleComponent } from './elements/section-title/section-title.component';\r\nimport { AutoCompleteInputElementComponent } from './elements/auto-complete-input-element/auto-complete-input-element.component';\r\nimport { ToggleInputElementComponent } from './elements/toggle-input-element/toggle-input-element.component';\r\nimport { SelectInputElementComponent } from './elements/select-input-element/select-input-element.component';\r\nimport { TextareaInputElementComponent } from './elements/textarea-input-element/textarea-input-element.component';\r\nimport { DateRangePickerInputElementComponent } from './elements/date-range-picker-input-element/date-range-picker-input-element.component';\r\nimport { DatePickerInputElementComponent } from './elements/date-picker-input-element/date-picker-input-element.component';\r\nimport { FileUploadInputElementComponent } from './elements/file-upload-input-element/file-upload-input-element.component';\r\n//import { ImageCaptureInputElementComponent } from './elements/image-capture-input-element/image-capture-input-element.component';\r\nimport { EditorInputElementComponent } from './elements/editor-input-element/editor-input-element.component';\r\nimport { SignatureInputElementComponent } from './elements/signature-input-element/signature-input-element.component';\r\nimport { BasicInputInputElementComponent } from './elements/basic-input-input-element/basic-input-input-element.component';\r\nimport { MultipleInputInputElementComponent } from './elements/multiple-input-input-element/multiple-input-input-element.component';\r\nimport { FormBuilderFunctions } from 'ngx-t-forms-types';\r\nimport { MscoaFormInputComponent } from './elements/mscoa-form-input/mscoa-form-input.component';\r\nimport { GeoLocationComponent } from './elements/Geo-location-form-input/geo-location.component';\r\nimport { ImageCaptureInputElementComponent } from './elements/image-capture-input-element/image-capture-input-element.component';\r\n\r\n\r\nimport { DocumentPickerComponent } from './elements/document-picker/document-picker.component';\r\nimport { WorkflowAdjudicationComponent } from './elements/workflow-adjudication/workflow-adjudication.component';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'lib-t-form-input',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n MscoaFormInputComponent,\r\n MatModulesModule,\r\n SectionTitleComponent,\r\n GeoLocationComponent,\r\n AutoCompleteInputElementComponent,\r\n ToggleInputElementComponent,\r\n SelectInputElementComponent,\r\n TextareaInputElementComponent,\r\n DateRangePickerInputElementComponent,\r\n DatePickerInputElementComponent,\r\n FileUploadInputElementComponent,\r\n //REVIEW - check circular dependency error for ImageCaptureInputElementComponent\r\n // ImageCaptureInputElementComponent,\r\n EditorInputElementComponent,\r\n SignatureInputElementComponent,\r\n MultipleInputInputElementComponent,\r\n BasicInputInputElementComponent,\r\n ImageCaptureInputElementComponent,\r\n DocumentPickerComponent,\r\nWorkflowAdjudicationComponent\r\n\r\n\r\n\r\n ],\r\n templateUrl: './t-form-input.component.html',\r\n styleUrl: './t-form-input.component.css',\r\n //TODO - check if changeDetection: ChangeDetectionStrategy.OnPush is needed\r\n // changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TFormInputComponent {\r\n @Input() inputConfig: ITowerStepColumn | undefined\r\n @Input() formGroup!: FormGroup<{\r\n [sectionId: string]: FormGroup<{\r\n [inputId: string]: FormControl<string | null>\r\n }>\r\n }> | undefined | null\r\n @Input() editorMode: boolean = false\r\n @Input() formBuilderFunctions: FormBuilderFunctions | undefined\r\n\r\n optionsSearchWordKeyWord!: string;\r\n elementTypes = ElementTypes\r\n constructor(@Optional() @Inject('COMPONENT_PROPS') private props: any) {\r\n // Apply props from portal injection if available\r\n if (this.props) {\r\n Object.keys(this.props).forEach(key => {\r\n\r\n (this as any)[key] = this.props[key];\r\n\r\n });\r\n }\r\n }\r\n get hasFormControlInstance(): boolean {\r\n // Early return if basic requirements aren't met\r\n if (!this.formGroup || !this.inputConfig) return false;\r\n\r\n const { id } = this.inputConfig || {};\r\n const isDateRangePicker = this.inputConfig?.element === ElementTypes.DateRangePicker\r\n if (isDateRangePicker) {\r\n return !!this.formGroup.controls[`${this.inputConfig.id}.${this.inputConfig.startDateControl}`] && !!this.formGroup.controls[`${this.inputConfig.id}.${this.inputConfig.endDateControl}`]\r\n }\r\n\r\n\r\n // Handle standard form control case\r\n return !!this.formGroup.controls[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","@if(inputConfig ){\r\n\r\n@if(inputConfig.element === elementTypes.SectionTitle){\r\n<lib-section-title [inputConfig]=\"inputConfig\"></lib-section-title>\r\n}\r\n\r\n@if(inputConfig.element !== elementTypes.SectionTitle && !!formGroup && !!hasFormControlInstance){\r\n@switch (inputConfig.element) {\r\n@case (elementTypes.Location) {\r\n<lib-geo-location [editorMode]=\"editorMode\" [inputConfig]=\"inputConfig\" [formGroup]=\"formGroup\"\r\n [formBuilderFunctions]=\"formBuilderFunctions\">\r\n</lib-geo-location>\r\n}\r\n<!-- @case (elementTypes.QrCodeScanner) {\r\n <lib-qr-code-scanner-element \r\n [inputConfig]=\"inputConfig\" \r\n [formGroup]=\"formGroup\" \r\n \r\n (valueChange)=\"changed($event)\">\r\n </lib-qr-code-scanner-element>\r\n } -->\r\n@case (elementTypes.AutoCompleteInput) {\r\n<lib-auto-complete-input-element [inputConfig]=\"inputConfig\" [formGroup]=\"formGroup\" [options]=\"[]\">\r\n</lib-auto-complete-input-element>\r\n}\r\n@case (elementTypes.Toggle) {\r\n<lib-toggle-input-element [inputConfig]=\"inputConfig\" [formGroup]=\"formGroup\">\r\n</lib-toggle-input-element>\r\n\r\n\r\n}\r\n@case (elementTypes.Select) {\r\n<lib-select-input-element [inputConfig]=\"inputConfig\" [formGroup]=\"formGroup\">\r\n</lib-select-input-element>\r\n}\r\n@case (elementTypes.Textarea) {\r\n<lib-textarea-input-element [inputConfig]=\"inputConfig\" [formGroup]=\"formGroup\">\r\n</lib-textarea-input-element>\r\n}\r\n@case (elementTypes.DateRangePicker) {\r\n<lib-date-range-picker-input-element [inputConfig]=\"inputConfig\" [formGroup]=\"formGroup\">\r\n</lib-date-range-picker-input-element>\r\n}\r\n@case (elementTypes.DatePicker){\r\n<lib-date-picker-input-element [inputConfig]=\"inputConfig\" [formGroup]=\"formGroup\">\r\n</lib-date-picker-input-element>\r\n}\r\n@case (elementTypes.FileUpload) {\r\n<lib-file-upload-input-element [inputConfig]=\"inputConfig\" [formGroup]=\"formGroup\">\r\n</lib-file-upload-input-element>\r\n\r\n}\r\n@case (elementTypes.ImageCapture) {\r\n<lib-image-capture-input-element [inputConfig]=\"inputConfig\" [formGroup]=\"formGroup\"></lib-image-capture-input-element>\r\n\r\n}\r\n@case (elementTypes.Editor) {\r\n<lib-editor-input-element [inputConfig]=\"inputConfig\" [formGroup]=\"formGroup\">\r\n</lib-editor-input-element>\r\n}\r\n@case (elementTypes.Signature) {\r\n<lib-signature-input-element [inputConfig]=\"inputConfig\" [formGroup]=\"formGroup\">\r\n</lib-signature-input-element>\r\n}\r\n\r\n@case (elementTypes.MultipleInput) {\r\n<lib-multiple-input-input-element [editorMode]=\"editorMode\" [inputConfig]=\"inputConfig\" [formGroup]=\"formGroup\"\r\n [formBuilderFunctions]=\"formBuilderFunctions\">\r\n\r\n</lib-multiple-input-input-element>\r\n\r\n}\r\n@case (elementTypes.MscoaSelection) {\r\n<lib-mscoa-form-input [inputConfig]=\"inputConfig\" [formGroup]=\"formGroup\" [editorMode]=\"editorMode\"\r\n [formBuilderFunctions]=\"formBuilderFunctions\">\r\n</lib-mscoa-form-input>\r\n\r\n}\r\n@case(elementTypes.WorkflowDocumentPicker){\r\n<lib-document-picker [inputConfig]=\"inputConfig\" [formGroup]=\"formGroup\"\r\n [formBuilderFunctions]=\"formBuilderFunctions\"></lib-document-picker>\r\n}\r\n@case(elementTypes.WorkflowAdjudication){\r\n <lib-workflow-adjudication [inputConfig]=\"inputConfig\" [formGroup]=\"formGroup\"\r\n [formBuilderFunctions]=\"formBuilderFunctions\" >\r\n\r\n </lib-workflow-adjudication>\r\n}\r\n\r\n@default {\r\n\r\n<lib-basic-input-input-element [inputConfig]=\"inputConfig\" [formGroup]=\"formGroup\">\r\n</lib-basic-input-input-element>\r\n}\r\n}\r\n}\r\n}\r\n\r\n\r\n\r\n<!-- \r\n<button mat-button (click)=\"externalError()\">error</button>\r\n<button mat-button (click)=\"externalErrorClear()\"> clear error</button>-->","import { inject, Injectable } from '@angular/core';\r\nimport { IStepOption, TourService } from 'ngx-ui-tour-md-menu';\r\n\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TourManagerService {\r\n\r\n\r\n private readonly tourService = inject(TourService);\r\n userProfile = this\r\n constructor() { }\r\n\r\n startTourByOption(steps: IStepOption[]) {\r\n\r\n this.tourService.end()\r\n this.tourService.initialize(steps, {\r\n enableBackdrop: true,\r\n backdropConfig: {\r\n offset: 10,\r\n },\r\n });\r\n this.tourService.start();\r\n\r\n }\r\n\r\n\r\n}\r\n","import { Component, HostListener, inject, Input, ViewChild } from '@angular/core';\r\n\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatModulesModule } from '../../shared/modules/mat-modules.module';\r\n\r\n\r\nimport { StepState } from '@angular/cdk/stepper';\r\nimport { TourMatMenuModule } from 'ngx-ui-tour-md-menu';\r\n\r\nimport { FormTowerControllerService } from '../../services/core/t-form-tower-controller/form-tower-controller.service';\r\nimport { catchError, take, tap } from 'rxjs';\r\nimport { MatStepper } from '@angular/material/stepper';\r\nimport { TFormInputComponent } from '../t-form-input/t-form-input.component';\r\nimport { DatabaseFormInterface, FormBuilderFunctions } from 'ngx-t-forms-types';\r\n\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { getSubmissionStatusFn } from '../../services/core/t-form-tower-controller/functions/getSubmissionStatus';\r\nimport { _isEqual } from '../../shared/functions/isEqual';\r\nimport { TourManagerService } from '../../services/core/tour/tour-manager.service';\r\n\r\n\r\n\r\n\r\n@Component({\r\n selector: 'lib-user-form-stepper',\r\n imports: [\r\n CommonModule,\r\n MatModulesModule,\r\n TFormInputComponent,\r\n TourMatMenuModule,\r\n ReactiveFormsModule\r\n ],\r\n templateUrl: './user-form-stepper.component.html',\r\n standalone: true,\r\n styleUrl: './user-form-stepper.component.css',\r\n})\r\nexport class UserFormStepperComponent extends FormTowerControllerService {\r\n\r\n\r\n @HostListener('document:keydown', ['$event'])\r\n\r\n /**\r\n * Handles the key down event and opens the application log if the key combination is pressed.\r\n * @param event The keyboard event object.\r\n */\r\n onKeyDown(event: KeyboardEvent) {\r\n if (event.ctrlKey && event.key === 'z') {\r\n // Handle the key press combination here\r\n this.revertBackHistory()\r\n }\r\n }\r\n\r\n _formId:string|undefined\r\n @Input() set formId(value: string | undefined) {\r\n if (_isEqual(this._form,value)) return\r\n this.loadForm(value)\r\n\r\n }\r\n loading = false\r\n loadForm(formId: string | undefined) {\r\n if (!formId) return\r\n this.loading = true\r\n this.NGX_T_FORMS_CONFIG.formBuilder.getForm(formId).pipe(\r\n take(1),\r\n tap({\r\n next: (form: DatabaseFormInterface | null) => {\r\n this.loading = false;\r\n if (!form?._id) return\r\n // this.initialize(TEST_FORM.form as any);\r\n this.initialize(form?.form);\r\n },\r\n error: (error) => {\r\n this.loading = false;\r\n console.error(error);\r\n }\r\n }),\r\n catchError((error) => {\r\n this.loading = false;\r\n return error;\r\n })\r\n ).subscribe();\r\n }\r\n\r\n _initialFormValuesLocal:any\r\n @Input() set initialValues(initialFormValues: any) {\r\n if (!!initialFormValues && typeof initialFormValues === 'object' && !_isEqual(this._initialFormValuesLocal,initialFormValues)) {\r\n this._initialFormValuesLocal = initialFormValues\r\n this.initializeFormValues(initialFormValues)\r\n }\r\n }\r\n @Input() passParamsOnSubmit: any\r\n // tourService = inject(TourManagerService)\r\n // startTour(options: IStepOption[] | undefined, event: Event | undefined) {\r\n // if (!options) return\r\n // this.tourService.startTourByOption(options)\r\n // event?.preventDefault()\r\n // event?.stopPropagation()\r\n // }\r\n get formBuilderFunctions() {\r\n return {\r\n getLatestAccountTree: () => this.NGX_T_FORMS_CONFIG.formBuilder.getScoaTree(),\r\n getSCOAAccount: (SCOAAccount: string) => this.NGX_T_FORMS_CONFIG.formBuilder.getSCOAAccount(SCOAAccount),\r\n multipleInputToggleForm: this.toggleMultipleInput.bind(this),\r\n multipleInputSaveForm: this.saveMultipleInputForm.bind(this),\r\n multipleInputEditRow: this.multipleInputEditRow.bind(this),\r\n multipleInputDuplicateRow: this.multipleInputDuplicateRow.bind(this),\r\n\r\n\r\n } as unknown as FormBuilderFunctions\r\n }\r\n\r\n\r\n @ViewChild('stepper') stepper: MatStepper | undefined;\r\n\r\n\r\n isEditable = true\r\n // showSummary = signal(false);\r\n\r\n\r\n getStepState(step: any, index: number): StepState {\r\n const activeStep = this.stepper?.selectedIndex === index;\r\n if (activeStep) return 'edit';\r\n if (step.sectionForm.touched && !step.sectionForm.valid) return 'error'; // Show error state for invalid touched forms\r\n if (step.sectionForm.valid) return 'done'; // Show done state for valid forms\r\n\r\n return 'number';\r\n }\r\n\r\n // getColumnClass(col: any): string {\r\n // const size = col.inputClass?.input?.colSize || 12;\r\n // return `'col-md-${size} box`;\r\n // }\r\n\r\n getPreviousStepLabel(): string | undefined {\r\n\r\n if (this.stepper === undefined) return ''\r\n const currentIndex = this.stepper?.selectedIndex;\r\n if (currentIndex > 0) {\r\n return this.selectFormSteps()?.[currentIndex - 1]?.label;\r\n }\r\n return '';\r\n }\r\n\r\n getNextStepLabel(): string | undefined {\r\n if (this.stepper === undefined) return ''\r\n const currentIndex = this.stepper?.selectedIndex;\r\n const steps = this.selectFormSteps();\r\n if (!steps) return ''\r\n if (currentIndex < steps.length - 1) {\r\n return steps[currentIndex + 1]?.label;\r\n }\r\n return '';\r\n }\r\n\r\n canProceedToNextStep(step: any): boolean {\r\n return step.sectionForm.valid;\r\n }\r\n\r\n get getSubmissionStatus(): string {\r\n const progress = this.formProgress() || 0;\r\n const steps = this.selectFormSteps();\r\n return getSubmissionStatusFn(this.stepper, this.mainForm, progress, steps, this.loading);\r\n }\r\n\r\n handleSubmit(): void {\r\n this.submitForm(this.passParamsOnSubmit);\r\n\r\n }\r\n\r\n\r\n\r\ntourManagerService = inject(TourManagerService)\r\n\r\nstartTour(sectionId:string): void {\r\n const tourOptions = this.selectAllFormTours().filter((step) => step.sectionId === sectionId)\r\n this.tourManagerService.startTourByOption(tourOptions)\r\n}\r\n\r\n}\r\n","@if (loading) {\r\n<div class=\"loading-container\">\r\n <mat-spinner diameter=\"48\" aria-label=\"Loading form\" />\r\n</div>\r\n}\r\n<mat-stepper [style.display]=\"loading?'none':'block'\" #stepper class=\"form-stepper\" orientation=\"vertical\"\r\n [linear]=\"!isEditable\" aria-label=\"Form sections stepper\" [animationDuration]=\"'300'\"\r\n (selectionChange)=\"handleStepChange($event)\">\r\n\r\n @for (step of selectFormSteps(); track step.sectionId) {\r\n @if (!!step.sectionForm ) {\r\n <mat-step [stepControl]=\"step.sectionForm\" [completed]=\"step.sectionIsSeen && !step.sectionIsInvalid\"\r\n [editable]=\"isEditable\" [errorMessage]=\"step.sectionFormErrorMessage||''\" [state]=\"getStepState(step,$index)\"\r\n [hasError]=\"!step.sectionForm.valid && !!step.sectionForm.touched\">\r\n <ng-template matStepLabel>\r\n <div class=\"step-label-container\" [attr.aria-label]=\"'Section ' + step.label\">\r\n <span class=\"step-label-text\">{{step.label|titlecase}}</span>\r\n @if (step.sectionIsSeen) {\r\n <mat-icon [class.error]=\"step.sectionIsInvalid\"\r\n [attr.aria-label]=\"step.sectionIsInvalid ? 'Section has errors' : 'Section completed'\">\r\n {{step.sectionIsSeen}}\r\n </mat-icon>\r\n }\r\n\r\n <span \r\n (click)=\"startTour(step.sectionId)\"\r\n class=\"tour-trigger \" *ngIf=\"(step)?.activeSectionHasTour&&!!step.isActive \">\r\n <button tourAnchor=\"Form-Tour-trigger\" matTooltip=\"Start section tour\" mat-button >\r\n <mat-icon>tour</mat-icon>\r\n </button>\r\n </span>\r\n </div>\r\n </ng-template>\r\n @if(!!step.isActive){\r\n @defer (on viewport; prefetch on idle) {\r\n <div class=\"step-content\">\r\n <div class=\"row form-section\">\r\n @for (col of step.columns; track col.id) {\r\n <div [class]=\"'col-md-'+col.colSize + ' box'\">\r\n <lib-t-form-input [tourAnchor]=\"col.id\" (valueChange)=\"updateValue(col.id,$event)\" [editorMode]=\"false\"\r\n \r\n [formBuilderFunctions]=\"formBuilderFunctions\" [inputConfig]=\"col\" [formGroup]=\"step.sectionForm\"\r\n [attr.aria-label]=\"col?.label || ''\">\r\n </lib-t-form-input>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"step-actions\">\r\n @if(!$first) {\r\n <button mat-button matStepperPrevious type=\"button\" class=\"navigation-button\"\r\n [attr.aria-label]=\"'Go back to ' + getPreviousStepLabel()\">\r\n\r\n Back\r\n </button>\r\n }\r\n @if (!$last) {\r\n <button mat-flat-button matStepperNext color=\"primary\" type=\"button\" class=\"navigation-button\"\r\n [attr.aria-label]=\"'Continue to ' + getNextStepLabel()\">\r\n Next\r\n </button>\r\n }\r\n @if (!!$last) {\r\n <button mat-button (click)=\"stepper.reset();reset()\">Reset</button>\r\n }\r\n </div>\r\n </div>\r\n } @placeholder {\r\n <div style=\"padding: 50px;display:flex;justify-content:center;align-items:center; text-align: center;\">\r\n <mat-spinner diameter=\"24\" />\r\n </div>\r\n }\r\n\r\n }\r\n\r\n </mat-step>\r\n }\r\n }\r\n</mat-stepper>\r\n\r\n<!-- Defer the footer toolbar until after the main form is loaded -->\r\n@defer (on idle; prefetch on viewport) {\r\n<footer><mat-toolbar class=\"submission-toolbar\" role=\"toolbar\" aria-label=\"Form submission actions\">\r\n <span class=\"submission-status\" role=\"status\">\r\n {{getSubmissionStatus}}\r\n </span>\r\n <button mat-raised-button color=\"primary\" [disabled]=\"mainForm?.invalid\" (click)=\"handleSubmit()\"\r\n aria-label=\"Submit form\">\r\n <span>\r\n {{ formSubmissionMessage()}}\r\n </span>\r\n @if(submittingForm){\r\n <mat-spinner diameter=\"10\"></mat-spinner>\r\n }\r\n\r\n </button>\r\n </mat-toolbar>\r\n</footer>\r\n} @placeholder {\r\n<!-- Simple placeholder for the footer that maintains layout -->\r\n<footer>\r\n <div class=\"submission-toolbar-placeholder\"></div>\r\n</footer>\r\n}","\r\n\r\n/*\r\n * Public API Surface of ngx-t-forms\r\n */\r\n\r\n console.log = () => {};\r\n console.warn = () => {};\r\n console.info = () => {};\r\n console.debug = () => {};\r\n\r\nexport * from './lib/ngx-t-forms.service';\r\nexport * from './lib/ngx-t-forms.component';\r\n\r\nexport * from './lib/services/index'\r\nexport * from './lib/injection-tokens/index'\r\nexport * from './lib/components/index'\r\nexport * from './lib/shared/pipes'\r\nexport * from './lib/shared/index'","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["FunctionTypes","destructureObject","uuidv4","this","i1","i2","i3","i4","i6","i7","i8","i9","i5","i10","i11","i13","i12","i1.MscoaComponentStore","customInputConfig"],"mappings":"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"}