ngx-t-forms 2.0.5 → 2.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{ngx-t-forms-api-value-access-rules.component-DVxjY46W.mjs → ngx-t-forms-api-value-access-rules.component-Cp0BeYD7.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-api-value-access-rules.component-DVxjY46W.mjs.map → ngx-t-forms-api-value-access-rules.component-Cp0BeYD7.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-calculated-field-rules.component-CF0b2IAN.mjs → ngx-t-forms-calculated-field-rules.component-C1v-xiGd.mjs} +3 -3
- package/fesm2022/{ngx-t-forms-calculated-field-rules.component-CF0b2IAN.mjs.map → ngx-t-forms-calculated-field-rules.component-C1v-xiGd.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-config-mscoa-additional-inputs.component-DEDrjICX.mjs → ngx-t-forms-config-mscoa-additional-inputs.component-jgXTh0do.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-config-mscoa-additional-inputs.component-DEDrjICX.mjs.map → ngx-t-forms-config-mscoa-additional-inputs.component-jgXTh0do.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-form-input-selector.component-BZLCiTEx.mjs → ngx-t-forms-form-input-selector.component-DbKhNmVM.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-form-input-selector.component-BZLCiTEx.mjs.map → ngx-t-forms-form-input-selector.component-DbKhNmVM.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-form-json-view.component-BbPsAiEG.mjs → ngx-t-forms-form-json-view.component-DSnLKnfH.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-form-json-view.component-BbPsAiEG.mjs.map → ngx-t-forms-form-json-view.component-DSnLKnfH.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-form-section-stepper.component-BYli3qzy.mjs → ngx-t-forms-form-section-stepper.component-hnOcnZGc.mjs} +4 -4
- package/fesm2022/{ngx-t-forms-form-section-stepper.component-BYli3qzy.mjs.map → ngx-t-forms-form-section-stepper.component-hnOcnZGc.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-forms-builder-menu.component-beIiFQyM.mjs → ngx-t-forms-forms-builder-menu.component-DQ8JYw6g.mjs} +4 -4
- package/fesm2022/{ngx-t-forms-forms-builder-menu.component-beIiFQyM.mjs.map → ngx-t-forms-forms-builder-menu.component-DQ8JYw6g.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-input-editor.component-CItOFrvx.mjs → ngx-t-forms-input-editor.component-Gi9MgyHB.mjs} +7 -137
- package/fesm2022/ngx-t-forms-input-editor.component-Gi9MgyHB.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-mat-chip-list-editor.component-D1jGY0Wp.mjs → ngx-t-forms-mat-chip-list-editor.component-C2jw_2gf.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-mat-chip-list-editor.component-D1jGY0Wp.mjs.map → ngx-t-forms-mat-chip-list-editor.component-C2jw_2gf.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-mat-slider-editor.component-bDCnls3E.mjs → ngx-t-forms-mat-slider-editor.component-D_IMC63r.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-mat-slider-editor.component-bDCnls3E.mjs.map → ngx-t-forms-mat-slider-editor.component-D_IMC63r.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-mat-slider-toggle-editor.component-C7q7RAhA.mjs → ngx-t-forms-mat-slider-toggle-editor.component-DeKGDDuU.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-mat-slider-toggle-editor.component-C7q7RAhA.mjs.map → ngx-t-forms-mat-slider-toggle-editor.component-DeKGDDuU.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-missing-form-configs.component-kdu_ar17.mjs → ngx-t-forms-missing-form-configs.component-BvsopeCg.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-missing-form-configs.component-kdu_ar17.mjs.map → ngx-t-forms-missing-form-configs.component-BvsopeCg.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-mscoa-segment-config.component-B80B7Y2g.mjs → ngx-t-forms-mscoa-segment-config.component-D_IIYPud.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-mscoa-segment-config.component-B80B7Y2g.mjs.map → ngx-t-forms-mscoa-segment-config.component-D_IIYPud.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-ngx-t-forms-BIKaG6Gx.mjs → ngx-t-forms-ngx-t-forms-DtoFU6uQ.mjs} +342 -33
- package/fesm2022/ngx-t-forms-ngx-t-forms-DtoFU6uQ.mjs.map +1 -0
- package/fesm2022/{ngx-t-forms-pipeline-generator.component-CZRBVUb4.mjs → ngx-t-forms-pipeline-generator.component-IwmDgCk9.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-pipeline-generator.component-CZRBVUb4.mjs.map → ngx-t-forms-pipeline-generator.component-IwmDgCk9.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-required-inputs.component-CnRGUtEj.mjs → ngx-t-forms-required-inputs.component-DdNLYKY6.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-required-inputs.component-CnRGUtEj.mjs.map → ngx-t-forms-required-inputs.component-DdNLYKY6.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-rest-api-call-setup.component-C_zsy4Pr.mjs → ngx-t-forms-rest-api-call-setup.component-DH5GpWKn.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-rest-api-call-setup.component-C_zsy4Pr.mjs.map → ngx-t-forms-rest-api-call-setup.component-DH5GpWKn.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-section-report.component-y45ZmKLZ.mjs → ngx-t-forms-section-report.component-BAddUET-.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-section-report.component-y45ZmKLZ.mjs.map → ngx-t-forms-section-report.component-BAddUET-.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-selection-options-editor.component-CKdTcvyb.mjs → ngx-t-forms-selection-options-editor.component-CQh-InJ6.mjs} +2 -2
- package/fesm2022/{ngx-t-forms-selection-options-editor.component-CKdTcvyb.mjs.map → ngx-t-forms-selection-options-editor.component-CQh-InJ6.mjs.map} +1 -1
- package/fesm2022/{ngx-t-forms-validators-config.component-CTUwEJKh.mjs → ngx-t-forms-validators-config.component-SyL_Vln8.mjs} +3 -3
- package/fesm2022/{ngx-t-forms-validators-config.component-CTUwEJKh.mjs.map → ngx-t-forms-validators-config.component-SyL_Vln8.mjs.map} +1 -1
- package/fesm2022/ngx-t-forms.mjs +1 -1
- package/lib/components/form-builder/elements/input-element-editor/input-element-editor.component.d.ts +3 -5
- package/lib/components/forms/store/Form-selectors-FormBuilder.d.ts +12 -0
- package/lib/components/forms/store/forms-store.service.d.ts +12 -0
- package/lib/components/t-form-input/elements/mscoa-form-input/mscoa-form-input.component.d.ts +1 -2
- package/lib/shared/index.d.ts +2 -1
- package/lib/shared/modules/stringJsonValidator/getObjectValidations.d.ts +15 -0
- package/package.json +1 -2
- package/fesm2022/ngx-t-forms-input-editor.component-CItOFrvx.mjs.map +0 -1
- package/fesm2022/ngx-t-forms-ngx-t-forms-BIKaG6Gx.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngx-t-forms-ngx-t-forms-DtoFU6uQ.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/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/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/assignDeepPropertyToObject.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/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/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/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/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/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-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/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/elements/editor-input-element/core/form-input-rich-text-editor/sync-editor/sync-editor.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/editor-input-element/core/form-input-rich-text-editor/sync-editor/sync-editor.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/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/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/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/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/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/form-input-rich-text-editor.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/editor-input-element/core/form-input-rich-text-editor/form-input-rich-text-editor.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/components/t-form-input/elements/select-table-input/elements/input-table/input-table.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/select-table-input/elements/input-table/input-table.component.html","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/select-table-input/select-table-input.component.ts","../../../projects/ngx-t-forms/src/lib/components/t-form-input/elements/select-table-input/select-table-input.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/testForm.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 } from \"ngx-t-forms-types\";\r\nimport { ITableSelectionInput, 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<ITableSelectionInput & 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\n const 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\nexport {validateObjectAgainstString}\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 { 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) };\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>): 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 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\n\r\n\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 formControls[input.id] = new FormControl({\r\n value: input.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;\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);\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\r\n formControls[controlName] = new FormControl({\r\n value: input.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\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 } 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 OptionsPostMethodAPI = 'OptionsPostMethodAPI',\r\n ValueGetMethodAPI = 'ValueGetMethodAPI',\r\n OptionsGetMethodAPI = 'OptionsGetMethodAPI',\r\n \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.OptionsPostMethodAPI] = Boolean(inputConfig.matOptions?.fetch.options?.source === 'api' && (inputConfig.matOptions?.fetch.options as APIDataFetchingConfigurationInterface)?.httpMethod === 'POST')\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 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.inputId) || [])\r\n .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\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.DEFAULT:\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 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 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 `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.formControlName as string])\r\n )\r\n\r\n } else {\r\n\r\n const controlName = rule.parentInputId\r\n ? rule.formControlName\r\n : rule.applyFunctionToCol;\r\n\r\n arrayValues = formInputValues\r\n ? formInputValues.map((v: { [x: string]: any }) =>\r\n Number(v[controlName 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 console.error(`running 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\ntype 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 { 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 = 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\r\n\r\n return a.functions\r\n\r\n\r\n })\r\n\r\n const { value} = safeReturnDeepProperty(obj, extractionPath as any);\r\n\r\n return value\r\n\r\n}\r\n\r\nconst getValueFromValueAccessor = (valueAccessRules: FormInputBasicOptionInterface | TreeNode[] | { [key: string]: TreeNode[] }, data: any) => {\r\n try {\r\n const hasValueAccess = !!valueAccessRules;\r\n if (!hasValueAccess) {\r\n return data;\r\n }\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\n\r\n}\r\nexport { returnMappedPathValue, getValueFromValueAccessor } ","\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\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 console.error(`running inputGetApiPostData ${dataFor}`)\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 const valueAccessRules = (fetchOptions as APIDataFetchingConfigurationInterface)?.valueAccessRules;\r\n \r\n const results = getValueFromValueAccessor(valueAccessRules||[], response);\r\n if (dataFor !== \"options\") {\r\n utils.updateValue(inputConfig.id, 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 utils.removeInputStatus(inputConfig.id, 'd19be9ca-ceda-4388-9f7b-3fcb5f12d921');\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 { getSectionForm } from \"../../t-form-section-controller/Functions/formGenerator\";\r\nimport { FormTowerControllerService } from \"../form-tower-controller.service\";\r\nimport {ITowerFormSteps} from 'ngx-t-forms-types'\r\nexport const sectionFormErrorMessage =(self: FormTowerControllerService,sectionId:string)=>{\r\n const sectionInputs = self.allFormInputs()?.filter(input=>input.sectionId === sectionId)||[]\r\n\r\n const allInputsWithErrors = sectionInputs.filter(input =>!!self.mainForm?.get(sectionId)?.get(input.id)?.invalid) \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 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 as any,\r\n isActive: slide.isActive,\r\n\r\n\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\n","import { ElementTypes, FormColumnInputs } from \"ngx-t-forms-types\";\r\nimport { FormTowerControllerService } from \"../form-tower-controller.service\";\r\n\r\nexport const allFormInputs= (self: FormTowerControllerService) : FormColumnInputs[] | undefined=> {\r\n \r\n return self.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 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 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 return [column,...mInputs]\r\n }\r\n \r\n\r\n return isMultipleFormInput ? [column, ...(column?.formInputs || [])] : [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)||[];\r\n const allValidRequiredInputs = requiredInputs.flatMap(c => {\r\n if(c.element === ElementTypes.DateRangePicker ){\r\n const start =self.mainForm?.get(c.sectionId)?.get(`${c.id}.${c.startDateControl}`);\r\n const end =self.mainForm?.get(c.sectionId)?.get(`${c.id}.${c.endDateControl}`);\r\n return [!!start?.valid,\r\n !!end?.valid]\r\n \r\n }\r\n return [!!self.mainForm?.get(c.sectionId)?.get(c.id)?.valid]\r\n })\r\n \r\n \r\n\r\n const valid = allValidRequiredInputs.filter(inp=>!!inp).length;\r\n const total = allValidRequiredInputs.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 \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\n export 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 self.form = {\r\n ...form,\r\n slides: form.slides.map((slide) => ({\r\n ...slide,\r\n columns: slide.columns.map((column) => \r\n column.id === inputId \r\n ? deepMerge(column, config) \r\n : column\r\n )\r\n }))\r\n };\r\n \r\n console.error('Form updated', self.form, config);\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 column.element === ElementTypes.MultipleInput ?\r\n [column, ...(column?.formInputs || [])] : \r\n column\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 \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 \r\n if(!input) {\r\n self.setInputTemporaryError(inputId, `Input with ID ${inputId} not found`);\r\n return;\r\n }\r\n const sectionId = input?.sectionId\r\n if(!sectionId) {\r\n self.setInputTemporaryError(inputId, `Input with ID ${inputId} has no section ID`);\r\n return;\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 const sectionControl =(self.mainForm?.controls[sectionId] as FormGroup).controls[inputId];\r\n sectionControl?.setValue(value?.value);\r\n return;\r\n }\r\n const key = `${inputId}.${value.formControlName}`;\r\n const sectionControl =(self.mainForm?.controls[sectionId] as FormGroup).controls[key];\r\n sectionControl?.setValue(value.value);\r\n return\r\n }\r\n const sectionControl = getSectionControl(self.mainForm!, sectionId,inputId);\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 const input = self.allFormInputs()?.find(input => input.id === inputId);\r\n if (!input?.sectionId) {\r\n console.error(`Input with ID ${inputId} has no section ID`);\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 }","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\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 // 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?.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};","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(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 ].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\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, 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,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\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\r\n try {\r\n\r\n console.error(`Row ID before: ${rowInEditId}`,input,sectionGroup.value);\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 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 // Determine new state (opposite of current state)\r\n \r\n\r\n // Toggle controls based on new state\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 } else if (!open && controlExists) {\r\n // Remove control if we're closing and control exists\r\n sectionGroup.removeControl(key);\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 console.error(`Row ID before: ${rowInEditId}`,input,sectionGroup.value);\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 } else {\r\n self.setTemporaryHint(inputId, 'Multiple input closed', HintType.INFO);\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\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,rowId);\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 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 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 }","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\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 self.toggleMultipleInput(inputId, false);\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 { FormInterface } from \"ngx-t-forms-types\";\r\nimport { createEmptyForm } from \"./createEmptyForm\";\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 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 return {\r\n ...column,\r\n value: 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);\r\n\r\n throw new Error(msg);\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 { 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 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\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\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 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, Utils: InClassFormUtilsInterface,): Observable<boolean> => {\r\n try {\r\n const { canSubmitAPI } = form.submissionHandle;\r\n if (!canSubmitAPI) {\r\n return of(true);\r\n }\r\n Utils.setSubmissionStatusValue(FormSubmissionStatus.VALIDATING);\r\n return executeApiCalls( canSubmitAPI,formData,Utils).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 console.error('-----------------------------1:', Utils);\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,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, IUserSignature } 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 { 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 } 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 { PointGroup } from 'signature_pad';\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\r\n ngOnDestroy(): void {\r\n this._destroyed$.next();\r\n this._destroyed$.complete();\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 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\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);\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 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 console.error(`[FormTowerControllerService] Changed input: ${changedInputId}`);\r\n const dependentInputs = this._reverseDependencyMap[changedInputId] || [];\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 console.error(`Re-running calculation for ${input.id}`);\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.OptionsPostMethodAPI:\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 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 console.error(\"Main form not initialized\")\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 const value = initialValues[input.formControlName];\r\n if (value !== undefined) {\r\n this.updateValue(input.id, value);\r\n }else{\r\n this.updateValue(input.id, '');\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 \r\n const transformedForm = this.getFormValueNames(); \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: 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 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 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 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): boolean => toggleMultipleInput(this, this._mainForm, inputId,open);\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 { 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: form\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 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 console.error('Form loaded successfully', newForm);\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 { 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],\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 console.error(\r\n '%c Form Element Editor Debug Info ',\r\n 'background: #ff0000; color: white; font-weight: bold; padding: 2px;',\r\n '\\n\\nFiltered Elements:', filteredElements,\r\n '\\n\\nProcessed Elements:', processedElements,\r\n '\\n\\nInput Being Edited:', inputInEdit,\r\n '\\n\\nDefault Input Config:', defaultInputs[inputInEdit?.element],\r\n '\\n\\nElements Removed:', processedElements.filter(el => !filteredElements.includes(el))\r\n );\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: element.editType === ElementEditorTypes.MongoPipelineBuilder ?\r\n NGX_T_FORMS_CONFIG.formBuilder.workflows() :\r\n undefined,\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 if (![ElementEditorTypes.ApiCall, ElementEditorTypes.ApiValueAccessRules].includes(element.editType)) {\r\n return undefined;\r\n }\r\n return {\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}\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 { 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\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) => form?.slides.flatMap(slide => slide.columns) || []))\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),\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, { ...inputData, sectionId: targetSection }]\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 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\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 \r\n } as FormColumnInputs\r\n console.error('newInput',newInput)\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 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 const isInnerInput = input.multipleInputInEditId\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(isInnerInput && column.id === input.multipleInputInEditId) {\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.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 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, 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 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 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 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 { 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\nimport { DialogTemplateComponent } from \"../../dialog-template/dialog-template.component\";\r\nimport { FormInterface } from 'ngx-t-forms-types';;\r\nimport { inject } from \"@angular/core\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { MatSnackBar } from \"@angular/material/snack-bar\";\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\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 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\r\n const applyFormTemplate = (form: FormInterface) => {\r\n form$.pipe(\r\n take(1),\r\n tap((form) => {\r\n if (!form) return;\r\n const dialog = inject(MatDialog);\r\n const snackBar = inject(MatSnackBar);\r\n const hasForm = !!form?.form\r\n if (hasForm) {\r\n const dialogRef = dialog.open(DialogTemplateComponent, {\r\n data: {\r\n title: 'Apply Form Template',\r\n message: 'Are you sure you want to apply this form template? This will replace the current form',\r\n noText: 'Cancel',\r\n yesText: 'Proceed'\r\n }\r\n });\r\n dialogRef.afterClosed().pipe(take(1)).subscribe(proceed => {\r\n if (proceed) {\r\n const newForm = {\r\n systemDefault: false,\r\n defaultDepartment: \"\",\r\n form: {\r\n ...form?.form,\r\n formId: undefined,\r\n formTitle: `${form?.form.formTitle} - Copy`,\r\n\r\n },\r\n } as DatabaseFormInterface\r\n store.actions.loadFormSuccess(of({\r\n form: newForm\r\n }))\r\n\r\n snackBar.open('Form Template Applied', 'Dismiss', {\r\n duration: 2000,\r\n });\r\n return\r\n }\r\n });\r\n return\r\n }\r\n\r\n\r\n snackBar.open('Form Template Applied', 'Dismiss', {\r\n duration: 2000,\r\n });\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 console.error('newForm----------------------------------------', 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\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 }\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","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 (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 <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><mat-icon \r\n [matTooltip]=\"form.errors.length + ' error(s) found in this form'\"\r\n color=\"warn\">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 { Component, EventEmitter, Input, NgZone, OnDestroy, Output } from '@angular/core';\r\nimport { 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 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\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 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 @Input() formInputs: Array<FormColumnInputs> | undefined = []\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 @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(map(\r\n (config) => config?.getMscoaTree\r\n )) as Observable<IGetTreeResponse | undefined>\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 // 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 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\n private computeValueChange(\r\n value: unknown,\r\n data: unknown,\r\n config: ElementEditorInnerSectionElementInterface | undefined): unknown {\r\n if (!data || !config) return undefined;\r\n const updated = { ...data };\r\n assignDeepPropertyToObject(updated, config.deepBind || [], value);\r\n return safeReturnDeepProperty(updated, config.deepBind || []).value;\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 console.error('inputChange -----------------', !!this.valueChanges,\"------\",value)\r\n\r\n }\r\n // Optimize value changes\r\n valueChanged(value: unknown): void {\r\n console.error('valueChanged -----------------', !!this.valueChanges,\"------\", value)\r\n this.valueChanges?.next(value)\r\n\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\r\n ]\r\n ).pipe(\r\n map(([editorConfigValue, value, dataOptions, disabled, inputHasBlurFunction]) => {\r\n return {\r\n editorConfigValue,\r\n value,\r\n dataOptions,\r\n disabled,\r\n inputHasBlurFunction,\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\"\r\n [color]=\"((validationErrors)||[]||[]).length>0 ? 'warn' : 'primary'\"\r\n [floatLabel]=\"'always'\" [subscriptSizing]=\"'dynamic'\"\r\n [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 \r\n (blur)=\"elementBlur($event)\" \r\n (input)=\"inputChange($event)\" \r\n [disabled]=\"(vm.disabled)\"\r\n [value]=\"(vm.value)\" matInput \r\n \r\n [placeholder]=\"(vm. editorConfigValue)?.placeholder ||'Enter value'\">\r\n \r\n \r\n }\r\n @case ( elementEditorTypes.Toggle) {\r\n <lib-mat-slider-toggle-editor \r\n [name]=\"((vm. editorConfigValue)?.name||'') \" \r\n [label]=\"((vm. editorConfigValue)?.label||'')\"\r\n \r\n (valueChange)=\"valueChanged(!!$event)\" [value]=\"(vm.value)\" \r\n [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 [max]=\"( vm.editorConfigValue)?.max || 100\" [value]=\"(vm.value)\" [errors]=\"(validationErrors)||[]\"\r\n [min]=\"( vm.editorConfigValue)?.min || 0\" (valueChange)=\"inputChange($event)\"\r\n [step]=\"( vm.editorConfigValue)?.step || 1\" 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 [options]=\"(vm.editorConfigValue)?.options\" [required]=\"!!( vm.editorConfigValue)?.required\"\r\n [value]=\"(vm.value)\" [errors]=\"(validationErrors)||[]\" (valueChange)=\" valueChanged($event)\"></lib-mat-chip-list-editor>\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 @for(option of ( vm.editorConfigValue)?.options;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 <p>\r\n Not implemented yet\r\n </p>\r\n }\r\n --->\r\n \r\n @case (elementEditorTypes.SelectionOptions) {\r\n \r\n <app-selection-options-editor [errors]=\"(validationErrors)||[]\" [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 \r\n [postmanCollectionConfig]=\"(vm.editorConfigValue)?.postmanCollectionConfig\"\r\n [httpGetDataFunction]=\"(vm.editorConfigValue)?.httpGetDataFunction\"\r\n [id]=\"((vm.editorConfigValue)?.label||'')+((vm.editorConfigValue)?.editType||'')\" [value]=\"(vm.value)\" [errors]=\"(validationErrors)||[]\"\r\n (valueChanged)=\"valueChanged($event)\">\r\n \r\n </lib-rest-api-call-setup>\r\n }\r\n \r\n @case (elementEditorTypes.MongoPipelineBuilder) {\r\n \r\n <app-pipeline-generator [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 \r\n [id]=\"((vm.editorConfigValue)?.label||'')+((vm.editorConfigValue)?.editType||'')\" [value]=\"(vm.value)\"\r\n [errors]=\"(validationErrors)||[]\" [formInputs]=\"formInputs ||[]\" \r\n [postmanCollectionConfig]=\"(vm.editorConfigValue)?.postmanCollectionConfig\"\r\n \r\n [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 [formInputs]=\"formInputs ||[]\" [errors]=\"(validationErrors)||[]\" [value]=\"(vm.value) || []\"\r\n (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 ||[]\" [id]=\"((vm.editorConfigValue)?.label||'')+((vm.editorConfigValue)?.editType||'')\"\r\n [value]=\"(vm.value)\" [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 ||[]\"\r\n [id]=\"((vm.editorConfigValue)?.label||'')+((vm.editorConfigValue)?.editType||'')\" [value]=\"(vm.value)\" [errors]=\"(validationErrors)||[]\"\r\n (valueChanged)=\"valueChanged($event)\" [mapToData]=\"vm.dataOptions\"></app-calculated-field-rules>\r\n }\r\n \r\n @case(elementEditorTypes.Validators){\r\n \r\n <app-validators-config [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 [value]=\"(vm.value)\" [errors]=\"(validationErrors)||[]\" [getMscoaTree]=\"getMscoaTree$\"\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 [id]=\"((vm.editorConfigValue)?.label||'')+((vm.editorConfigValue)?.editType||'')\"\r\n [value]=\"(vm.value)\" [errors]=\"(validationErrors)||[]\" [getMscoaTree]=\"getMscoaTree$\"\r\n (valueChanged)=\"valueChanged($event)\">\r\n </app-config-mscoa-additional-inputs>\r\n \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 { 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 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}","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 { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { RichTextEditorModule } from '@syncfusion/ej2-angular-richtexteditor';\r\nimport { ToolbarService, LinkService, ImageService, HtmlEditorService } from '@syncfusion/ej2-angular-richtexteditor';\r\n\r\n@Component({\r\n selector: 'app-sync-editor',\r\n templateUrl: './sync-editor.component.html',\r\n styleUrls: ['./sync-editor.component.scss'],\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n RichTextEditorModule\r\n ],\r\n providers: [ToolbarService, LinkService, ImageService, HtmlEditorService]\r\n})\r\nexport class SyncEditorComponent {\r\n @Input() readonly: boolean = false;\r\n @Input() initialData: any;\r\n @Output() editorData = new EventEmitter<any>();\r\n \r\n editorValueChanged(e:any){\r\n this.editorData.emit(e.value);\r\n }\r\n}\r\n","<ejs-richtexteditor\r\n[value]=\"initialData\"\r\nid=\"defaultRTE\" (change)=\"editorValueChanged($event)\">\r\n \r\n </ejs-richtexteditor>","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 { FormColumnInputs } 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: FormColumnInputs|undefined;\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}\r\n","\r\n\r\n<mat-icon color=\"primary\" \r\nmatTooltip=\"recently updated\"\r\n*ngIf=\"!busy && recentlyUpdated()\">update\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 }","import { distinctUntilChanged, filter, map } from \"rxjs\";\r\nimport { MscoaComponentStore } from \"./mscoa-component-store.service\";\r\nimport { MscoaSegmentValue } from \"ngx-t-forms-types\";\r\nimport { FormColumnInputs } from \"ngx-t-forms-types\";\r\nimport { IIncludedSegmentConfig } 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 MscoaSegmentValue => segmentValues !== undefined),\r\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\r\n )\r\n const accountTreeKeys$ = store.select((state) => {\r\n let accountTree\r\n const { segments } = state;\r\n \r\n accountTree = [...(segments || []).map((segment: IIncludedSegmentConfig) => segment.segment?.toUpperCase()), ...getInputSegments(state.inputs)]\r\n\r\n \r\n\r\n return accountTree.map(segment => {\r\n const segmemtInSegments = (segments || []).find(s => s.segment?.toLocaleUpperCase() === segment?.toLocaleUpperCase())\r\n console.warn('segmemtInSegments', segmemtInSegments)\r\n return ({\r\n segment,\r\n singleSelect:Boolean(segmemtInSegments?.singleSelect),\r\n segmentTree: state.accountTree[segment||''] || {} ,\r\n inputs: state.inputs || [],\r\n segmentValue: state.segmentValues?.[segment||''] ,\r\n })\r\n })\r\n }\r\n\r\n )\r\n const table$ = accountTreeKeys$.pipe(\r\n map(keys =>\r\n keys.map(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 debit: segment.segmentValue?.debit?.SCOAAccount || segment.segmentValue?.debit,\r\n credit: (segment.segmentValue?.credit?.SCOAAccount || segment.segmentValue?.credit),\r\n ...segment\r\n })),\r\n ),\r\n \r\n )\r\n return {\r\n initiated$,\r\n loadingTree$,\r\n segmentValues$,\r\n accountTreeKeys$,\r\n table$,\r\n state$ \r\n }\r\n\r\n\r\n}\r\n\r\nfunction getInputSegments(inputs: FormColumnInputs[]): string[] {\r\n return (inputs || [])\r\n .filter(i => !(i as any)?.['segment'])\r\n .map(input => input.formControlName.toUpperCase());\r\n}","\r\nimport { IMSCOAAccount, IMscoaInputConfig, MscoaSegmentValue } 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:IMscoaInputConfig|undefined|null) => ({ ...state, ...(config||{}) })),\r\n setInitiated: store.updater((state) => ({ ...state, initiated: true })),\r\n setSegmentValues: store.updater((state, segmentValues: MscoaSegmentValue | 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 MscoaSegmentValue)\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: IMSCOAAccount | undefined; accountType: 'debit' | 'credit' }) => {\r\n const oldSegmentValue = state.segmentValues?.[segment.toUpperCase()] || { debit: undefined, credit: undefined };\r\n const newSegmentValue = { ...oldSegmentValue, [accountType]: account };\r\n return {\r\n ...state,\r\n segmentValues: { ...state.segmentValues, [segment.toUpperCase()]: newSegmentValue }\r\n };\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, MscoaSegmentValue } 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<MscoaSegmentValue>\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 { MscoaInterface } 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: MscoaInterface = {\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 \r\n};\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MscoaComponentStore extends ComponentStore<MscoaInterface> {\r\n constructor() {\r\n super(initialMscoaState);\r\n // if environment is development, setup dev tools\r\n this.setupDevTools();\r\n }\r\n //Add a resetStore method to allow resetting the store to its initial state.\r\n\r\n private setupDevTools() {\r\n this.state$.subscribe(state => {\r\n console.log('MscoaComponentStore state:', state);\r\n });\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\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: '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@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 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 formGroup!: FormGroup;\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 @for (input of getContentInput(); track input.input.id) {\r\n <div style=\"padding: 5px;\" [class]=\"'col-xs-' + input.input.colSize\">\r\n <div [tourAnchor]=\"input.input.id\" class=\"box\">\r\n\r\n @if(activeFormClass){\r\n <!-- <lib-t-form-input [formGroup]=\"(activeFormClass).activeFormGroup()\" [id]=\"input.input.id\"\r\n [inputClass]=\"input\"></lib-t-form-input> -->\r\n }\r\n\r\n </div>\r\n </div>\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 { IMSCOAAccount } 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: IMSCOAAccount | undefined;\r\n @Input() accountInputs: FormColumnInputs[] = [];\r\n @Input() userCanClearAccount = false;\r\n @Output() clearSelectedAccount = new EventEmitter<void>();\r\n @Output() updateAccount = new EventEmitter<IMSCOAAccount>();\r\n get accountDetails() {\r\n if (!this.mscoaAccount) return [];\r\n const li = SCOA_ACCOUNT_COLUMNS.map(col => ({\r\n label: col.label,\r\n value: (this.mscoaAccount || {})[col.key as keyof IMSCOAAccount] || 'N/A',\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 IMSCOAAccount],\r\n formControlName: input.formControlName,\r\n input: true,\r\n }));\r\n\r\n console.log('li', this.mscoaAccount);\r\n return [...li, ...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 IMSCOAAccount]\r\n },\r\n heading: `${this.mscoaAccount?.SCOAAccount} - ${inpu.label}`,\r\n value: this.mscoaAccount?.[inpu.formControlName as keyof IMSCOAAccount],\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-toolbar-container-background-color);\">\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 { IMSCOAAccount } 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: IMSCOAAccount[], account: string } | undefined;\r\n @Output() accountSelected = new EventEmitter<IMSCOAAccount | null>();\r\n dataSource: MatTableDataSource<IMSCOAAccount>;\r\n searchControl = new FormControl('');\r\n @Input() selectedAccount: IMSCOAAccount | 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<IMSCOAAccount>([]);\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: IMSCOAAccount[]) {\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: IMSCOAAccount) {\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: IMSCOAAccount): 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, IMSCOAAccount, MscoaAccountTree } 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: MscoaAccountTree;\r\n segment: string;\r\n value: IMSCOAAccount | 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:IMSCOAAccount[]}>;\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: MscoaAccountTree | undefined = this.dataInjected.data\r\n segment: string | undefined = this.dataInjected.segment\r\n value: IMSCOAAccount | 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&¤tNode.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: IMSCOAAccount | undefined) {\r\n this.dialogRef.close(account)\r\n }\r\n\r\n _selectedAccount: IMSCOAAccount | null = null;\r\n selectAccount(account: IMSCOAAccount | 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 IMSCOAAccount] : true)\r\n\r\n const isDifferent = !_.isEqual(this._selectedAccount, this.value)\r\n return isDifferent && allInputsAreValid\r\n }\r\n updateAccount(account: IMSCOAAccount) {\r\n this._selectedAccount = account\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\" \r\n (updateAccount)=\"updateAccount($event)\"\r\n \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-toolbar-container-background-color) !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 <button *ngIf=\"userCanClearAccount\" mat-raised-button color=\"primary\" [disabled]=\"!saveSelection\"\r\n (click)=\"saveAccount()\">Save</button>\r\n</mat-toolbar>","import { Component, OnInit, OnDestroy, inject, Input, EventEmitter, Output } from '@angular/core';\r\nimport { combineLatest, map, Observable, Subject, take, takeUntil, distinctUntilChanged } from 'rxjs';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { IMSCOAAccount, IMscoaInputConfig, ITableScoaSelectionRow, MscoaSegmentValue } 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\n\r\n\r\n\r\n\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,],\r\n providers: [MscoaComponentStore,],\r\n\r\n\r\n})\r\n\r\nexport class MscoaChartComponent implements OnInit, OnDestroy {\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 segmentValues$ = this.store.selectors.segmentValues$;\r\n initiated$ = this.store.selectors.initiated$;\r\n private destroy$ = new Subject<void>()\r\n _formBuilderFunctions: FormBuilderFunctions |undefined = undefined\r\n\r\n constructor(private store: MscoaComponentStore) {\r\n }\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: MscoaSegmentValue | null) {\r\n this.store.actions.setSegmentValues(segmentValues)\r\n }\r\n @Input() readonly = false\r\n @Input() set config (config:IMscoaInputConfig | undefined | null ){\r\n if(!config) return\r\n this.store.actions.setConfig(config)\r\n \r\n }\r\n\r\n @Output() segmentValuesChanged = new EventEmitter<MscoaSegmentValue>();\r\n @Output() interaction = new EventEmitter<string>();\r\n\r\n\r\n\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 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: IMSCOAAccount | undefined, segment: string, \r\n accountType: \"debit\" | \"credit\" = \"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.singleSelect === false))\r\n )\r\n }\r\n get cols$(): Observable<string[]> {\r\n return this.hasMultiSelect$.pipe(\r\n map(hasMultiSelect => {\r\n const cols = [\"segment\", \"debit\", \"credit\"]\r\n return hasMultiSelect ? cols : cols.filter(col => col !== \"credit\") \r\n })\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 console.error(\"No input found------------------------------\")\r\n this.editSelection = row;\r\n this.activeColumn = col;\r\n const isInput = (row as any)?.input\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 openScoaSelection() {\r\n console.log(this.editSelection, this.config)\r\n const data:IMscoaComputationComponentData = {\r\n segment: this.editSelection.segment,\r\n segmentConfig: this.config?.segments?.find(segment => segment.segment === this.editSelection.segment),\r\n value: this.editSelection.segmentValue?.[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\r\n this.accountNumberSelected(result, this.editSelection.segment, \"debit\")\r\n this.accountNumberSelected(result, this.editSelection.segment, \"credit\")\r\n \r\n }else{\r\n this.accountNumberSelected(result, this.editSelection.segment, this.activeColumn as \"debit\" | \"debit\")\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 // heading: `${this.activeColumn} ${this.editSelection.segment.toLowerCase()}`,\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}","\r\n<section 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-toolbar-container-background-color);\" \r\n mat-header-cell\r\n *matHeaderCellDef>\r\n @if (viewData.hasMultiSelect || i === 0) {\r\n {{col | titlecase}}\r\n } @else if (col === 'debit') {\r\n Debit / Credit\r\n }\r\n </th>\r\n <td mat-cell \r\n *matCellDef=\"let row\" \r\n [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 {{row[col]}}\r\n } @else {\r\n @if (row[col]) {\r\n <button \r\n [disabled]=\"!!row['singleSelect'] === true && col === 'credit'\"\r\n (mousedown)=\"$event.preventDefault(); $event.stopPropagation(); selectAccount(row, col);\" \r\n color=\"primary\"\r\n mat-button \r\n class=\"cell-button\">\r\n <div class=\"content\">\r\n {{row[col]}}\r\n </div>\r\n </button>\r\n } @else {\r\n <button \r\n [disabled]=\"!!row['singleSelect'] === true && col === 'credit'\"\r\n (click)=\"selectAccount(row, col); $event.stopPropagation()\" \r\n mat-stroked-button\r\n class=\"cell-button\">\r\n <div class=\"content\">\r\n {{!!row['singleSelect'] === true && col === 'credit' ? 'auto selected ' : 'Select ' + row['segment'] + ' ' + col + ' account'}}\r\n </div>\r\n </button>\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>","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 return ((!this.value && 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 checkValidationsAndErrors(): void {\r\n const control = this.ngControl?.control;\r\n if (!control || !this.touched) return;\r\n\r\n const errors = { ...control.errors };\r\n if (_isEqual(this.errors, errors)) return;\r\n\r\n this.errors = errors;\r\n\r\n if (this.value && '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 && !this.value) {\r\n control.setErrors({ required: true, ...errors });\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 && 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 { NgControl } from '@angular/forms';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { FormBuilderFunctions } from \"ngx-t-forms-types\";\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';;\r\nimport { MscoaChartComponent } from '../mscoa-chart/mscoa-chart.component';\r\nimport { IMscoaInputConfig, MscoaSegmentValue } 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 providers: [{ provide: MatFormFieldControl, useExisting: MscoaReactiveFormFieldComponent }],\r\n})\r\nexport class MscoaReactiveFormFieldComponent extends BaseCustomInput< MscoaSegmentValue> \r\n{\r\n override get empty(): boolean {\r\n return !this.value;\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 @Input() formBuilderFunctions: FormBuilderFunctions |undefined\r\n\r\n\r\n _inputConfig!:FormColumnInputs\r\n mscoaInputConfig$ = new BehaviorSubject<IMscoaInputConfig | undefined>(undefined)\r\n @Input() set inputConfig(inputConfig:FormColumnInputs){\r\n this._inputConfig = inputConfig\r\n this.mscoaInputConfig$.next({...inputConfig.mscoaConfig})\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: MscoaSegmentValue): 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 \r\n}\r\n","\r\n<div (click)=\"onContainerClick($event)\">\r\n <app-mscoa-chart \r\n (segmentValuesChanged)=\"segmentValuesChanged($event)\" \r\n [config]=\" mscoaInputConfig$|async\"\r\n [readonly]=\"readonly\"\r\n [formBuilderFunctions]=\"formBuilderFunctions\"\r\n [segmentValues]=\"value\"></app-mscoa-chart>\r\n \r\n\r\n</div>\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[startDateControl];\r\n const endControl = formGroup.controls[endDateControl];\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 { FormColumnInputs } 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 ,MscoaSegmentValue } 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!:FormColumnInputs\r\n\r\n @Input() formGroup!: FormGroup;\r\n \r\n @Input() formBuilderFunctions: FormBuilderFunctions |undefined\r\n @Output() valueChange = new EventEmitter<any>();\r\n segmentValuesChanged(event: MscoaSegmentValue) {\r\n if(this.inputConfig.readonly) return;\r\n this.valueChange.emit(event)\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 \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 <lib-mscoa-reactive-form-field \r\n [inputConfig]=\"this.inputConfig\"\r\n [formControlName]=\"this.inputConfig.id\"\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\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) {\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 <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 { FormColumnInputs } 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!: FormColumnInputs ;\r\n @Input() formGroup!: FormGroup;\r\n \r\n @Output() valueChange = new EventEmitter<any>();\r\n changed($event:any){\r\n this.valueChange.emit($event)\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 [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 { FormColumnInputs } from \"ngx-t-forms-types\";\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!: FormColumnInputs;\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, 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 { FormColumnInputs } from \"ngx-t-forms-types\";\r\n\r\n@Component({\r\n selector: 'lib-auto-complete-input-element',\r\n standalone: true,\r\n imports: [MatModulesModule,ReactiveFormsModule,CommonModule, 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!: FormColumnInputs ;\r\n @Input() formGroup!: FormGroup;\r\n \r\n @Input() options!: any;\r\n @Output() valueChange = new EventEmitter<any>();\r\n changed($event:any){\r\n this.valueChange.emit($event)\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 <input [readonly]=\"this.inputConfig.readonly\" [pattern]=\"this.inputConfig.pattern || ''\"\r\n [required]=\"this.inputConfig.required\" [attr.maxlength]=\"this.inputConfig.maxLength\"\r\n [formControlName]=\"this.inputConfig.id\" [attr.minlength]=\"this.inputConfig.minLength\"\r\n [type]=\"this.inputConfig.type||'text'\" \r\n [min]=\"this.inputConfig.min\" [max]=\"this.inputConfig.max\" autocomplete=\"on\"\r\n [matAutocomplete]=\"auto\"\r\n matInput />\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 </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 <!-- <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 \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 { FormColumnInputs } 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\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],\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!: FormColumnInputs ;\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}","\r\n<mat-slide-toggle \r\n\r\nstyle=\"display: block\" \r\n[required]=\"this.inputConfig.required\" \r\n[labelPosition]=\"this.inputConfig.labelPosition || 'after'\"\r\n(change)=\"this.changed($event)\"\r\n[checked]=\"this.value\"\r\n[ariaReadOnly]=\"this.inputConfig.disabled\"\r\n[disabled]=\"this.inputConfig.disabled\"\r\n>\r\n{{this.inputConfig.label | titlecase }}</mat-slide-toggle>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormColumnInputs } 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!: FormColumnInputs ;\r\n @Input() formGroup!: FormGroup;\r\n \r\n @Output() valueChange = new EventEmitter<any>();\r\n changed($event:any){\r\n this.valueChange.emit($event)\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 \r\n [appearance]=\"this.inputConfig.appearance ||'fill' \"\r\n floatLabel=\"always\"\r\n subscriptSizing=\"dynamic\"\r\n *ngIf=\"this.inputConfig as inputConfig\">\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<lib-toggle [inputConfig]=\"this.inputConfig\"\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>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormControl, FormGroup, FormGroupDirective, NgForm, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormColumnInputs } 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\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,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!: FormColumnInputs ;\r\n @Input() formGroup!: FormGroup;\r\n @Output() valueChange = new EventEmitter<any>();\r\n changed($event:any){\r\n this.valueChange.emit($event)\r\n }\r\n getSelectOptions(): any {\r\n if(!this.inputConfig.matOptions) return []\r\n return this.inputConfig.matOptions?.options || []\r\n \r\n }\r\n optionsSearchWordKeyWord!: string;\r\n returnOptions(options: any) {\r\n let results = options.filter((op: any) => {\r\n let ev = op['label'].toUpperCase();\r\n\r\n return ev.indexOf(this.optionsSearchWordKeyWord) > -1;\r\n });\r\n return results;\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 trackOptions(index: number, item: any) {\r\n return JSON.stringify(item);\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 onSelectionChange(event:any){ \r\n this.valueChange.emit(event.value)\r\n\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 <mat-select #select [errorStateMatcher]=\"errorStateMatcher\" \r\n (selectionChange)=\"onSelectionChange($event)\"\r\n \r\n [formControlName]=\"inputConfig.id\" [required]=\"inputConfig.required\">\r\n\r\n <input [placeholder]=\"'search ' + inputConfig.label\" \r\n (keyup.Space)=\"$event.stopPropagation()\"\r\n style=\"--box-shadow: none; padding: 0px\" class=\"bottomLine\"\r\n (keyup.enter)=\"selectInputSearchWord($event)\"\r\n showCancelButton=\"never\">\r\n\r\n <mat-option *ngFor=\"\r\n let option of getSelectOptions();trackBy:trackOptions\" [value]=\"option.value\">\r\n <div [ngSwitch]=\"this.inputConfig.matOptions?.optionType\">\r\n <div *ngSwitchCase=\"'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 </div>\r\n <div *ngSwitchDefault>{{ option.label }}</div>\r\n </div>\r\n </mat-option>\r\n </mat-select>\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 <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, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { FormColumnInputs } 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\n\r\n@Component({\r\n selector: 'lib-textarea-input-element',\r\n standalone: true,\r\n imports: [ReactiveFormsModule,CommonModule,MatModulesModule,TFormInputStatusComponent],\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!: FormColumnInputs ;\r\n @Input() formGroup!: FormGroup;\r\n \r\n @Output() valueChange = new EventEmitter<any>();\r\n changed($event:any){\r\n this.valueChange.emit($event)\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<textarea \r\n [readonly]=\"this.inputConfig.readonly\"\r\n [required]=\"inputConfig.required\" [formControlName]=\"inputConfig.id\"\r\n [attr.maxlength]=\"inputConfig.maxLength\" [attr.minlength]=\"inputConfig.minLength\"\r\n [rows]=\"inputConfig.rows\" [spellcheck]=\"inputConfig.spellcheck\"\r\n [autocapitalize]=\"inputConfig.autocapitalize\" [autocomplete]=\"inputConfig.autocomplete\"\r\n [placeholder]=\"inputConfig.placeholder||''\" [wrap]=\"inputConfig.wrap\" matInput></textarea>\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</form>\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\nimport { DateRange, MatDatepickerInputEvent } from '@angular/material/datepicker';\r\nimport { FormColumnInputs } 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],\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 @Input() inputConfig!: FormColumnInputs ;\r\n @Input() formGroup!: FormGroup;\r\n \r\n @Output() valueChange = new EventEmitter<any>();\r\n\r\n get errorMessage(){\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n }\r\n dateChanged(event: MatDatepickerInputEvent<any, DateRange<any>>,formControlName:string){\r\n this.valueChange.emit({value:event.value,formControlName:formControlName})\r\n\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 <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\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 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 touchUi #picker></mat-date-range-picker>\r\n\r\n @if (formGroup.controls[inputConfig.startDateControl||'startDate']?.hasError('matStartDateInvalid')) {\r\n <mat-error>Invalid start date</mat-error>\r\n }\r\n @if (formGroup.controls[inputConfig.endDateControl||'endDate']?.hasError('matEndDateInvalid')) {\r\n <mat-error>Invalid end date</mat-error>\r\n }\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 <!-- <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 <!-- 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\" 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>","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\nimport { MatDatepickerInputEvent } from '@angular/material/datepicker';\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';\r\n\r\n@Component({\r\n selector: 'lib-date-picker-input-element',\r\n standalone: true,\r\n imports: [CommonModule, MatModulesModule, ReactiveFormsModule, TFormInputStatusComponent],\r\n templateUrl: './date-picker-input-element.component.html',\r\n styleUrl: './date-picker-input-element.component.css'\r\n})\r\nexport class DatePickerInputElementComponent {\r\n @Input() inputConfig!: FormColumnInputs ;\r\n @Input() formGroup!: FormGroup;\r\n \r\n @Output() valueChange = new EventEmitter<any>();\r\n changed(event: MatDatepickerInputEvent<any, any>){\r\n this.valueChange.emit(event.value)\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\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 <input [required]=\"inputConfig.required\" \r\n [formControlName]=\"inputConfig.id\"\r\n [min]=\"inputConfig.min\" \r\n (dateChange)=\"changed($event)\"\r\n [max]=\"inputConfig.max\" matInput \r\n [matDatepicker]=\"picker\" />\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker touchUi #picker></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 @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 </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 } from \"ngx-t-forms-types\";\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';;\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: FormColumnInputs | undefined;\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 { FormColumnInputs } 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!: FormColumnInputs ;\r\n @Input() formGroup!: FormGroup;\r\n \r\n @Output() valueChange = new EventEmitter<any>();\r\n changed($event:any){\r\n this.valueChange.emit($event)\r\n }\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 ></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 { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, Input, Optional, Self } from '@angular/core';\r\n\r\nimport { SyncEditorComponent } from './sync-editor/sync-editor.component';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport _ from 'lodash';\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';;\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';;\r\nimport { NgControl } from '@angular/forms';\r\n\r\nconst customInputConfig: BaseCustomInputConfig = {\r\n controlType: 'app-form-input-rich-text-editor',\r\n nextId: 0\r\n}\r\n@Component({\r\n selector: 'app-form-input-rich-text-editor',\r\n templateUrl: './form-input-rich-text-editor.component.html',\r\n styleUrls: ['./form-input-rich-text-editor.component.scss'],\r\n standalone: true,\r\n imports: [CommonModule,SyncEditorComponent],\r\n providers: [{ provide: MatFormFieldControl, useExisting: FormInputRichTextEditorComponent }]\r\n})\r\nexport class FormInputRichTextEditorComponent extends BaseCustomInput<string | null> {\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 @Input() inputConfig!: FormColumnInputs ;\r\n\r\n\r\n get empty() {\r\n return !this.value\r\n }\r\n\r\n get shouldLabelFloat() {\r\n return true\r\n }\r\n\r\n\r\n\r\n editorChanged(event: any) {\r\n this.value = event;\r\n this.onChange(event);\r\n }\r\n}\r\n","<app-sync-editor \r\n(click)=\"markAsTouched()\"\r\n[readonly]=\"disabled\"\r\n[initialData]=\"value ? value : ''\"\r\n(editorData)=\"editorChanged($event)\"\r\n></app-sync-editor>","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 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: false,\r\n logLevel: 'ERROR' as any,\r\n minHeight: 400,\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, Input, OnDestroy, Optional, 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 { FormColumnInputs } from 'ngx-t-forms-types';;\r\nimport EditorJS, { OutputData } from '@editorjs/editorjs'\r\nimport { editorConfig, EditorJsPayload } from '../form-input-rich-text-editor/config';\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\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: [],\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!: FormColumnInputs ;\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 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\r\n const config: EditorJsPayload = {\r\n holderId: this.inputConfig.id,\r\n imageFetchEndpoint: '',\r\n imageUploadEndpoint: '',\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 console.log('value', value)\r\n this.onChange(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>","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 { FormInputRichTextEditorComponent } from './core/form-input-rich-text-editor/form-input-rich-text-editor.component';\r\n\r\nimport { FormColumnInputs } from \"ngx-t-forms-types\";\r\nimport { EditorJsInputComponent } from './core/editor-js-input/editor-js-input.component';\r\nimport { getInputErrorMessage } from '../../../../services/core/t-input-controller/functions/inputErrorMessage';\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 FormInputRichTextEditorComponent,\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!: FormColumnInputs ;\r\n @Input() formGroup!: FormGroup;\r\n \r\n @Output() valueChange = new EventEmitter<any>();\r\n changed($event:any){\r\n this.valueChange.emit($event)\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 (change)=\"changed($event)\"\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@if (inputConfig.richTextEditorLibrary === 'CkEditor') {\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-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 <mat-hint *ngIf=\"inputConfig.hintLabel\" [matTooltip]=\"inputConfig.hintLabel\" class=\"inputHint\">\r\n {{inputConfig.hintLabel}}\r\n </mat-hint>\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)=\"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 </mat-form-field>\r\n \r\n</form>\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 { FormColumnInputs } 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:FormColumnInputs | 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\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 { FormColumnInputs } 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!: FormColumnInputs ;\r\n @Input() formGroup!: FormGroup;\r\n \r\n @Output() valueChange = new EventEmitter<any>();\r\n get formControl():FormControl<any>{\r\n return this.formGroup.controls[this.inputConfig.id] as FormControl<any>\r\n }\r\n changed($event:any){\r\n this.valueChange.emit($event)\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 [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 [inputConfig]=\"this.inputConfig\"></lib-t-form-input-status>\r\n </mat-label>\r\n <lib-input-custom\r\n [inputConfig]=\"this.inputConfig\"\r\n [formControlName]=\"this.inputConfig.id\" \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\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 { FormColumnInputs } from \"ngx-t-forms-types\";\r\n\r\nexport function configureCols(inputConfig:FormColumnInputs):{displayedColumnsInOrder:string[],columnsConfig:any} \r\n{\r\n try {\r\n \r\n const labelInputs = ((inputConfig?.formInputs || []) as FormColumnInputs[]).filter(input=>input.showAsLabel)\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 }\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}","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 { FormColumnInputs } 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\n\r\n@Component({\r\n selector: 'lib-multiple-input-table-view',\r\n standalone: true,\r\n imports: [MatModulesModule, CommonModule,MatTableModule],\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: FormColumnInputs | undefined;;\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 this.onEditItem.emit(rowId);\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 isNumber(v: any) {\r\n return typeof v === 'number';\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 get configureCols():{displayedColumnsInOrder:string[],columnsConfig:any} {\r\n if(!this.inputConfig) return {\r\n columnsConfig: [],\r\n displayedColumnsInOrder: []\r\n }\r\n return configureCols(this.inputConfig )\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}\r\n","@defer (on viewport) {\r\n\r\n@if (configureCols.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 (configureCols.displayedColumnsInOrder||[]); track col) {\r\n <ng-container [matColumnDef]=\"col\">\r\n <th mat-header-cell mat-sort-header *matHeaderCellDef>\r\n <span style=\"text-align: start; line-height: normal; font-size: 13px\">\r\n {{ configureCols.columnsConfig?.[col]?.[\"label\"] }}\r\n </span>\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, configureCols.columnsConfig?.[col])\r\n \" mat-cell *matCellDef=\"let row\">\r\n <div *ngIf=\" configureCols.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'\r\n \r\n \" \r\n [matMenuTriggerFor]=\"rowOptions\" \r\n [matMenuTriggerData]=\"{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=\"configureCols.columnsConfig && configureCols.columnsConfig?.[col]?.type !== 'removal'\"\r\n class=\"cellClass\">\r\n <span *ngIf=\"isNumber(row[col])\">\r\n {{ row[col] | number }}\r\n </span>\r\n <span *ngIf=\"!isNumber(row[col])\"> {{ row[col] }}\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=\"configureCols.displayedColumnsInOrder \"></tr>\r\n <tr [style.border-top]=\"hasTopBorder(row) ? 'solid 2px' : ''\" mat-row\r\n *matRowDef=\"let row; columns: configureCols.displayedColumnsInOrder\"></tr>\r\n </table>\r\n <div *ngIf=\"(dataSource?._filterData)?.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 items\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 #rowOptions=\"matMenu\">\r\n <ng-template matMenuContent let-row=\"row\">\r\n\r\n <button mat-menu-item (click)=\"editItem(row)\">\r\n <mat-icon>\r\n {{inputConfig?.readonly ? 'visibility' : 'edit'}}\r\n </mat-icon>\r\n <div class=\"option-text\">\r\n <div class=\"option-main-text\">\r\n {{inputConfig?.readonly ? 'View details' : '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 @if(!inputConfig?.readonly){\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>","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\nimport { FormColumnInputs } from 'ngx-t-forms-types';\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 } 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 @Input() inputConfig!: FormColumnInputs | undefined;\r\n @Input() editorMode: boolean = false;\r\n @Input() formGroup:FormGroup | null = null\r\n InputComponent = TFormInputComponent;\r\n @Output() onSaveMultipleInputForm = new EventEmitter<any>();\r\n @Output() editMultipleInput = new EventEmitter<FormColumnInputs>();\r\n @Output() deleteInput = new EventEmitter<FormColumnInputs>();\r\n @Output() showItemAsLabel = new EventEmitter<FormColumnInputs>();\r\n @Output() addFunction = new EventEmitter<IMultipleInputCal>();\r\n @Input() formBuilderFunctions: FormBuilderFunctions |undefined\r\n @Output() reorderItems = new EventEmitter< CdkDragDrop<FormColumnInputs[] , 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: FormColumnInputs) {\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: FormColumnInputs){\r\n this.deleteInput.emit(item)\r\n }\r\n dropItems(event: CdkDragDrop<FormColumnInputs[], any, any>) {\r\n this.reorderItems.emit(event);\r\n\r\n }\r\n overId:string | null = null\r\n editInput(input: FormColumnInputs) {\r\n \r\n this.editMultipleInput.emit(input);\r\n\r\n }\r\n toggleLabel(item: FormColumnInputs) {\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 }\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():FormColumnInputs[]{\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 })) ||[]\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-toolbar-container-background-color)\" 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 {\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\nimport { FormColumnInputs } from 'ngx-t-forms-types';;\r\nimport { IMultiple, IMultipleInputCal } 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\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\r\n }\r\n @Input() editorMode: boolean = false;\r\n\r\n\r\n\r\n\r\n ngOnInit() {\r\n this.configCol();\r\n this.checkItemList(this.value || []);\r\n this.ngControl.valueChanges?.pipe(takeUntil(this.destroy$)).subscribe((value) => {\r\n \r\n this.checkItemList(value );\r\n })\r\n \r\n }\r\n\r\n\r\n\r\n\r\n @Input() inputConfig: FormColumnInputs | undefined;\r\n @Input() formBuilderFunctions: FormBuilderFunctions | undefined\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\n\r\n checkItemList(tableValue: any[]) {\r\n try {\r\n \r\n if (tableValue) {\r\n const TableData: any = (this.inputConfig as IMultiple)\r\n .groupBy\r\n ? addGroups(\r\n tableValue,\r\n (this.inputConfig as IMultiple).groupBy\r\n )\r\n : tableValue;\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 this.dataSource\r\n } else {\r\n this.dataSource.data = data;\r\n }\r\n \r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n\r\n multipleInputRemoveItem(item: any) {\r\n if (!this.value) return;\r\n this.value.splice(this.value.indexOf(item), 1);\r\n this.checkItemList(this.value);\r\n this.applyOptionsTo = undefined;\r\n this.onChange(this.value);\r\n this.stateChanges.next();\r\n }\r\n configCol() {\r\n // this.inputConfig?.configCol();\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 editItem(rowId:string) {\r\n if(!this.formBuilderFunctions || !this.inputConfig) return\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 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 editInput(input: FormColumnInputs) {\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: FormColumnInputs) {\r\n this.formBuilderFunctions?.deleteInput(input)\r\n }\r\n showItemAsLabel(input: FormColumnInputs) {\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<FormColumnInputs[] , 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[inputConfig]=\"inputConfig\"\r\n[dataSource]=\"dataSource\"\r\n[applyOptionsTo]=\"applyOptionsTo\"\r\n[formGroup]=\"parentFormGroup\"\r\n(onEditItem)=\"editItem($event)\"\r\n(onDeleteItem)=\"multipleInputRemoveItem(applyOptionsTo)\"\r\n(onCopy)=\"copy($event)\"\r\n(onApplyOptionsTo)=\"applyOptionsTo = $event\"\r\n></lib-multiple-input-table-view>\r\n\r\n@if(!!inputConfig?.formIsOpen){\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-stroked-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\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 { FormColumnInputs } 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!: FormColumnInputs ;\r\n @Input() formGroup!: FormGroup;\r\n @Input() editorMode: boolean = false;\r\n \r\n @Input() formBuilderFunctions: FormBuilderFunctions |undefined\r\n @Output() valueChange = new EventEmitter<any>();\r\n changed($event:any){\r\n this.valueChange.emit($event)\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 floatLabel=\"always\" *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 \r\n [editorMode]=\"editorMode\"\r\n [formGroup]=\"formGroup\"\r\n [formBuilderFunctions]=\"formBuilderFunctions\"\r\n *ngIf=\"inputConfig.id\" [formControlName]=\"inputConfig.id\"\r\n [inputConfig]=\"inputConfig\"></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\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 } from \"ngx-t-forms-types\";\r\nimport { BaseCustomInput, BaseCustomInputConfig } from '../../../../../../services/core/t-input-controller/functions/baseCustomInput';\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';;\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: FormColumnInputs | undefined;\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 } 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\nimport { FormColumnInputs } from \"ngx-t-forms-types\";\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!: FormColumnInputs;\r\n @Input() formGroup!: FormGroup;\r\n @Input() editorMode: boolean = false;\r\n \r\n @Input() formBuilderFunctions: FormBuilderFunctions |undefined\r\n @Output() valueChange = new EventEmitter<any>();\r\n changed($event:any){\r\n this.valueChange.emit($event)\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 [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 ></lib-geo-location-form-input>\r\n \r\nL\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 } from \"ngx-t-forms-types\";\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';;\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!: FormColumnInputs ;\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 { FormColumnInputs } 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!: FormColumnInputs ;\r\n @Input() formGroup!: FormGroup;\r\n \r\n \r\n @Output() valueChange = new EventEmitter<any>();\r\n changed($event:any){\r\n this.valueChange.emit($event)\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 \r\n [inputConfig]=\"inputConfig\"\r\n [formControlName]=\"inputConfig.id\"\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 { Component, ElementRef, Input, Optional, Self, ViewChild } from '@angular/core';\r\nimport { FormsModule, NgControl } from '@angular/forms';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { returnDeepProperty } from '../../../../../../shared/functions/getDeepObject';\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\nimport { FormColumnInputs } from \"ngx-t-forms-types\";\r\nimport { MatFormFieldControl } from '@angular/material/form-field';\r\nimport _ from 'lodash';\r\n\r\nconst customInputConfig: BaseCustomInputConfig = {\r\n controlType: 'app-input-table',\r\n nextId: 0\r\n}\r\n@Component({\r\n selector: 'app-input-table',\r\n templateUrl: './input-table.component.html',\r\n styleUrls: ['./input-table.component.css'],\r\n providers: [{\r\n provide: MatFormFieldControl,\r\n useExisting: InputTableComponent\r\n }],\r\n standalone: true,\r\n imports: [CommonModule, MatModulesModule, FormsModule]\r\n})\r\nexport class InputTableComponent extends BaseCustomInput<any[]> {\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 override get empty(): boolean {\r\n return !this.dataSource || this.dataSource.data.length === 0;\r\n }\r\n\r\n override get shouldLabelFloat(): boolean {\r\n return true; // Always float label for table input\r\n }\r\n\r\n dataSource: MatTableDataSource<any> | any = new MatTableDataSource([]);\r\n \r\n @Input() inputConfig!: FormColumnInputs ;\r\n\r\n paginatorDOMInstance: MatPaginator | undefined;\r\n @ViewChild(MatPaginator, { static: false }) set paginator(\r\n value: MatPaginator\r\n ) {\r\n this.paginatorDOMInstance = value;\r\n this.dataSource['paginator'] = this.paginatorDOMInstance;\r\n\r\n }\r\n \r\n @ViewChild(MatSort, { static: false }) sort: MatSort | undefined;\r\n \r\n\r\n \r\n override set value(value: any | 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 this.dataSource.data = value;\r\n }\r\n }\r\n\r\n\r\n\r\n ngOnInit() {\r\n this.markAsTouched();\r\n }\r\n\r\n getColor(columnConfig: any, value: any, property: any) {\r\n //FIXME: find interfaces here\r\n const table = this.dataSource;\r\n \r\n const isANumber = !isNaN(Number(value));\r\n if (columnConfig['colorScale'] && isANumber) {\r\n const lowestNumber = Math.min(\r\n ...table.map((v: any) => Number(v[property]))\r\n );\r\n const highesNumber = Math.max(\r\n ...table.map((v: any) => Number(v[property]))\r\n );\r\n let perc = (value - lowestNumber) / highesNumber;\r\n if (columnConfig['colorScale'] === 'lowToHigh') {\r\n return this.percentageToColor(perc, 120, 0);\r\n } else {\r\n let inves = 1 / perc;\r\n return `solid ${this.percentageToColor(inves, 120, 0)}`;\r\n }\r\n } else {\r\n return 'none';\r\n }\r\n }\r\n percentageToColor(percentage: number, maxHue = 120, minHue = 0) {\r\n const hue = percentage * (maxHue - minHue) + minHue;\r\n return `hsl(${hue}, 100%, 50%)`;\r\n }\r\n checklistIsDisabled(columnConfig: any, col: any) {\r\n if (columnConfig['checkUpto']) {\r\n const limitTo = Number(columnConfig['checkUpto']);\r\n const numberOfTrue = this.dataSource.filter((v: any) => !!v[col]).length;\r\n return numberOfTrue == limitTo;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n checkedCell(event: any, row: any, col: any) {\r\n const updatedTable = this.dataSource.map((r: any) => {\r\n if (r === row) {\r\n let updatedRow = { ...r };\r\n updatedRow[col] = event.detail.checked;\r\n return updatedRow;\r\n }\r\n return r;\r\n });\r\n this.dataSource = updatedTable;\r\n this.onChange(this.dataSource);\r\n this.onTouched(); // Manually trigger the \"touched\" state\r\n }\r\n\r\n getDeepProperty(path: any, item: any) {\r\n return returnDeepProperty(item, path);\r\n }\r\n identify(index: any, item: any) {\r\n return item;\r\n }\r\n\r\n getTableCol() {\r\n const input: any = this.inputConfig;\r\n const displayedColumnsInOrder = input.tableConfig?.displayedColumnsInOrder;\r\n return displayedColumnsInOrder\r\n ? displayedColumnsInOrder.filter((v: any) => v !== undefined)\r\n : [];\r\n }\r\n}\r\n","<div class=\"example-container\">\r\n <div style=\" min-height: 50px;\r\n max-height: 400px;\r\n overflow: auto;\" class=\"example-table-container\">\r\n <table\r\n matSort\r\n mat-table\r\n [dataSource]=\"this.dataSource\"\r\n class=\"example-table\"\r\n >\r\n <ng-container\r\n class=\"borderBottomL\"\r\n *ngFor=\"let col of getTableCol(); trackBy: identify\"\r\n [matColumnDef]=\"col\"\r\n >\r\n <th mat-header-cell mat-sort-header *matHeaderCellDef>\r\n <span style=\"text-align: start\">\r\n {{ this.inputConfig.tableConfig?.columnsConfig?.[col][\"label\"] }}\r\n </span>\r\n </th>\r\n \r\n <td\r\n mat-cell\r\n [style.background]=\"\r\n getColor(\r\n this.inputConfig.tableConfig?.columnsConfig?.[col],\r\n row[col],\r\n col\r\n )\r\n \"\r\n *matCellDef=\"let row\"\r\n >\r\n <div\r\n [ngSwitch]=\"\r\n this.inputConfig.tableConfig?.columnsConfig?.[col]['type']\r\n \"\r\n >\r\n <div class=\"cellClass\" *ngSwitchCase=\"'checkBox'\">\r\n <mat-checkbox\r\n [disabled]=\"\r\n row[col]\r\n ? false\r\n : checklistIsDisabled(\r\n this.inputConfig.tableConfig?.columnsConfig?.[col],\r\n col\r\n )\r\n \"\r\n ngDefaultControl\r\n [(ngModel)]=\"row[col]\"\r\n (ionChange)=\"checkedCell($event, row, col)\"\r\n [checked]=\"row[col]\"\r\n ></mat-checkbox>\r\n </div>\r\n <div class=\"cellClass\" *ngSwitchCase=\"'priceCheckImages'\">\r\n \r\n <img\r\n [src]=\"\r\n getDeepProperty(\r\n this.inputConfig.tableConfig?.columnsConfig?.[col][\r\n 'deepBind'\r\n ],\r\n row\r\n )\r\n \"\r\n />\r\n \r\n </div>\r\n <div *ngSwitchDefault class=\"cellClass\">\r\n <div [innerHTML]=\"row[col]\"> </div>\r\n </div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n \r\n <tr\r\n mat-header-row\r\n *matHeaderRowDef=\"\r\n this.inputConfig.tableConfig?.displayedColumnsInOrder\r\n \"\r\n ></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"\r\n let row;\r\n columns: this.inputConfig.tableConfig?.displayedColumnsInOrder\r\n \"\r\n ></tr>\r\n </table>\r\n <div\r\n style=\"min-height: 140px; background: rgb(234 234 234 / 12%)\"\r\n *ngIf=\"!this.dataSource\"\r\n class=\"center\"\r\n >\r\n <label style=\"opacity: 0.6; font-size: 10.5px\">\r\n Nothing yet\r\n </label>\r\n </div>\r\n </div>\r\n </div>\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 { FormColumnInputs } from \"ngx-t-forms-types\";\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatModulesModule } from '../../../../shared/modules/mat-modules.module';\r\nimport { InputTableComponent } from './elements/input-table/input-table.component';\r\nimport { TFormInputStatusComponent } from '../../../t-form-input-status/t-form-input-status.component';\r\n\r\n@Component({\r\n selector: 'lib-select-table-input',\r\n standalone: true,\r\n imports: [CommonModule, MatModulesModule, ReactiveFormsModule, InputTableComponent, TFormInputStatusComponent],\r\n templateUrl: './select-table-input.component.html',\r\n styleUrl: './select-table-input.component.css'\r\n})\r\nexport class SelectTableInputComponent {\r\n @Input() inputConfig!: FormColumnInputs;\r\n @Input() formGroup!: FormGroup;\r\n @Output() valueChange = new EventEmitter<any>();\r\n changed($event: any) {\r\n this.valueChange.emit($event)\r\n }\r\n get errorMessage() {\r\n return getInputErrorMessage(this.inputConfig, this.formGroup);\r\n }\r\n}\r\n","<p>select-table-input works!</p>\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 \r\n <app-input-table\r\n \r\n [inputConfig]=\"inputConfig\"\r\n [formControlName]=\"inputConfig.id\"\r\n ></app-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 \r\n \r\n </mat-form-field>\r\n </form>\r\n ","import { Component, EventEmitter, Input, Output } 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 } 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\nimport { SelectTableInputComponent } from './elements/select-table-input/select-table-input.component';\r\nimport { FormColumnInputs } from 'ngx-t-forms-types';\r\n\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\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 SelectTableInputComponent \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\r\n @Input() inputConfig :FormColumnInputs | 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 @Output() valueChange = new EventEmitter<any>();\r\n optionsSearchWordKeyWord!: string;\r\n elementTypes = ElementTypes\r\n constructor() { \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 changed(event: any) { \r\n this.valueChange.emit(event)\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@if(inputConfig.element !== elementTypes.SectionTitle && !!formGroup && !!hasFormControlInstance){\r\n @switch (inputConfig.element) {\r\n @case (elementTypes.Location) {\r\n <lib-geo-location\r\n [editorMode]=\"editorMode\"\r\n [inputConfig]=\"inputConfig\" \r\n [formGroup]=\"formGroup\"\r\n \r\n (valueChange)=\"changed($event)\"\r\n [formBuilderFunctions]=\"formBuilderFunctions\">\r\n </lib-geo-location>\r\n }\r\n <!-- @case (elementTypes.QrCodeScanner) {\r\n <lib-qr-code-scanner-element [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 \r\n [inputConfig]=\"inputConfig\" \r\n [formGroup]=\"formGroup\"\r\n \r\n [options]=\"[]\"\r\n (valueChange)=\"changed($event)\">\r\n </lib-auto-complete-input-element>\r\n }\r\n @case (elementTypes.Toggle) {\r\n <lib-toggle-input-element \r\n [inputConfig]=\"inputConfig\" \r\n [formGroup]=\"formGroup\" \r\n \r\n (valueChange)=\"changed($event)\">\r\n </lib-toggle-input-element>\r\n\r\n \r\n }\r\n @case (elementTypes.Select) {\r\n <lib-select-input-element \r\n [inputConfig]=\"inputConfig\" \r\n [formGroup]=\"formGroup\" \r\n \r\n (valueChange)=\"changed($event)\">\r\n </lib-select-input-element>\r\n }\r\n @case (elementTypes.Textarea) {\r\n <lib-textarea-input-element \r\n [inputConfig]=\"inputConfig\" \r\n [formGroup]=\"formGroup\" \r\n \r\n (valueChange)=\"changed($event)\">\r\n </lib-textarea-input-element>\r\n }\r\n @case (elementTypes.DateRangePicker) {\r\n <lib-date-range-picker-input-element \r\n [inputConfig]=\"inputConfig\" \r\n [formGroup]=\"formGroup\"\r\n \r\n (valueChange)=\"changed($event)\">\r\n </lib-date-range-picker-input-element>\r\n }\r\n @case (elementTypes.DatePicker){\r\n <lib-date-picker-input-element \r\n [inputConfig]=\"inputConfig\" \r\n [formGroup]=\"formGroup\"\r\n \r\n (valueChange)=\"changed($event)\">\r\n </lib-date-picker-input-element>\r\n }\r\n @case (elementTypes.FileUpload) {\r\n <lib-file-upload-input-element \r\n [inputConfig]=\"inputConfig\" \r\n [formGroup]=\"formGroup\"\r\n (valueChange)=\"changed($event)\">\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\"\r\n (valueChange)=\"changed($event)\"></lib-image-capture-input-element>\r\n\r\n }\r\n @case (elementTypes.Editor) {\r\n <lib-editor-input-element \r\n [inputConfig]=\"inputConfig\" \r\n [formGroup]=\"formGroup\" \r\n \r\n (valueChange)=\"changed($event)\">\r\n </lib-editor-input-element>\r\n }\r\n @case (elementTypes.Signature) {\r\n <lib-signature-input-element \r\n [inputConfig]=\"inputConfig\" \r\n [formGroup]=\"formGroup\" \r\n \r\n (valueChange)=\"changed($event)\">\r\n </lib-signature-input-element>\r\n }\r\n \r\n @case (elementTypes.MultipleInput) {\r\n <lib-multiple-input-input-element\r\n [editorMode]=\"editorMode\"\r\n [inputConfig]=\"inputConfig\" \r\n [formGroup]=\"formGroup\"\r\n \r\n (valueChange)=\"changed($event)\"\r\n [formBuilderFunctions]=\"formBuilderFunctions\"\r\n \r\n >\r\n\r\n </lib-multiple-input-input-element>\r\n }\r\n @case (elementTypes.MscoaSelection) {\r\n <lib-mscoa-form-input\r\n [inputConfig]=\"inputConfig\"\r\n [formGroup]=\"formGroup\"\r\n \r\n [formBuilderFunctions]=\"formBuilderFunctions\"\r\n (valueChange)=\"changed($event)\">\r\n </lib-mscoa-form-input>\r\n\r\n }\r\n @case (elementTypes.TableSelection) {\r\n <lib-select-table-input [inputConfig]=\"inputConfig\"\r\n [formGroup]=\"formGroup\"\r\n (valueChange)=\"changed($event)\">\r\n\r\n </lib-select-table-input>\r\n }\r\n @default {\r\n <lib-basic-input-input-element \r\n [inputConfig]=\"inputConfig\" \r\n [formGroup]=\"formGroup\"\r\n \r\n (valueChange)=\"changed($event)\">\r\n </lib-basic-input-input-element>\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>-->\r\n","import { AutocapitalizeOptions, CalculationFunctions, DataSources, ElementTypes, InputDataTypes, InputFileType, InputTypes, MinInputTypes } from \"ngx-t-forms-types\";\r\n\r\n/** \r\n* Paste one or more documents here\r\n*/\r\n\r\n\r\nexport const TEST_FORM = {\r\n \"userId\": \"6481be9a2eb2110014b5d549\",\r\n \"systemDefault\": false,\r\n \"defaultDepartment\": \"6722345f098d5b000211b182\",\r\n \"defaultOrganisation\": \"64ad0aff23f40300158991e2\",\r\n \"form\": {\r\n \"slides\": [\r\n {\r\n \"sectionId\": \"760b1cb0-c39b-4acf-b644-c863dda34ff5\",\r\n \"columns\": [\r\n {\r\n \"element\": ElementTypes.SectionTitle,\r\n \"dataType\": InputDataTypes.String,\r\n \"colSize\": 12,\r\n \"label\": \"Real-time calculations that update as values change\",\r\n \"formControlName\": \"realTimeCalculationsThatUpdateAsValuesChange\",\r\n \"appearance\": \"fill\",\r\n \"hintLabel\": \"You can test the calculator by adjusting any of the input fields - the calculations will update automatically. The form handles various real-world scenarios like PMI requirements and includes all major components of a typical mortgage payment (PITI - Principal, Interest, Taxes, and Insurance).\",\r\n \"id\": \"52fe672d-7157-4cd1-9510-bb7a8d2f3914\",\r\n \"sectionId\": \"760b1cb0-c39b-4acf-b644-c863dda34ff5\"\r\n },\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.Number,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Number,\r\n \"colSize\": 6,\r\n \"validators\": [],\r\n \"label\": \"Loan Amount\",\r\n \"formControlName\": \"loanAmount\",\r\n \"id\": \"81626c7f-2d74-469b-b379-a89abaad52a4\",\r\n \"sectionId\": \"760b1cb0-c39b-4acf-b644-c863dda34ff5\"\r\n },\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.String,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Number,\r\n \"colSize\": 6,\r\n \"validators\": [],\r\n \"label\": \"Down Payment\",\r\n \"formControlName\": \"downPayment\",\r\n \"id\": \"a6fcea4a-094f-49e9-9839-08a3922f6a27\",\r\n \"sectionId\": \"760b1cb0-c39b-4acf-b644-c863dda34ff5\"\r\n },\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.Number,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Number,\r\n \"colSize\": 6,\r\n \"validators\": [],\r\n \"label\": \"Interest Rate (%)\",\r\n \"formControlName\": \"interestRate\",\r\n \"id\": \"c51ce3fa-aa4a-4806-a005-23c763658e13\",\r\n \"sectionId\": \"760b1cb0-c39b-4acf-b644-c863dda34ff5\"\r\n },\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.Number,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Number,\r\n \"colSize\": 6,\r\n \"validators\": [],\r\n \"label\": \"Loan Term (years)\",\r\n \"formControlName\": \"loanTermYears\",\r\n \"id\": \"05ffcbf4-187e-4051-99d9-bead434a1d7d\",\r\n \"sectionId\": \"760b1cb0-c39b-4acf-b644-c863dda34ff5\"\r\n },\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.Number,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Number,\r\n \"colSize\": 6,\r\n \"validators\": [],\r\n \"label\": \"Annual Property Tax\",\r\n \"formControlName\": \"annualPropertyTax\",\r\n \"id\": \"0c66b3fc-228f-490d-a44f-fbf3cb2f1219\",\r\n \"sectionId\": \"760b1cb0-c39b-4acf-b644-c863dda34ff5\"\r\n },\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.Number,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Number,\r\n \"colSize\": 6,\r\n \"validators\": [],\r\n \"label\": \"Annual Insurance\",\r\n \"formControlName\": \"annualInsurance\",\r\n \"id\": \"81056669-f4de-4ce1-8a5f-7ff67457d699\",\r\n \"sectionId\": \"760b1cb0-c39b-4acf-b644-c863dda34ff5\"\r\n },\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.Number,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Text,\r\n \"colSize\": 12,\r\n \"validators\": [],\r\n \"label\": \"PMI Rate (%)\",\r\n \"formControlName\": \"pMIRate\",\r\n \"id\": \"9166cd5d-6837-4d1c-afc2-fd1328bc3a72\",\r\n \"sectionId\": \"760b1cb0-c39b-4acf-b644-c863dda34ff5\"\r\n },\r\n {\r\n \"element\": ElementTypes.SectionTitle,\r\n \"dataType\": InputDataTypes.String,\r\n \"colSize\": 12,\r\n \"label\": \"OverView\",\r\n \"formControlName\": \"overView\",\r\n \"appearance\": \"fill\",\r\n \"hintLabel\": \"Calculation actuals and overview of arrangement\",\r\n \"id\": \"8f13cc34-5df9-4b6c-944a-55b78f4b1407\",\r\n \"sectionId\": \"760b1cb0-c39b-4acf-b644-c863dda34ff5\"\r\n },\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.Number,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": true,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Number,\r\n \"colSize\": 6,\r\n \"validators\": [],\r\n \"label\": \"Actual Loan Amount: \",\r\n \"formControlName\": \"actualLoanAmount\",\r\n \"readonly\": true,\r\n \"hintLabel\": \"This is the loan amount minus the down payment\",\r\n \"calculatedFieldRules\": {\r\n \"variables\": [\r\n {\r\n \"formControlName\": \"downPayment\",\r\n \"label\": \"Down Payment\",\r\n \"inputId\": \"a6fcea4a-094f-49e9-9839-08a3922f6a27\",\r\n \"variable\": \"downPayment\",\r\n \"id\": \"9c213efb-eadf-4433-b1f6-1eff81c18df5\"\r\n },\r\n {\r\n \"formControlName\": \"loanAmount\",\r\n \"label\": \"Loan Amount\",\r\n \"inputId\": \"81626c7f-2d74-469b-b379-a89abaad52a4\",\r\n \"variable\": \"loanAmount\",\r\n \"id\": \"bfd05f4b-efc6-46bb-8e47-e9ff0172e02d\"\r\n }\r\n ],\r\n \"formula\": \"loanAmount - downPayment\"\r\n },\r\n \"id\": \"6e9e6660-5553-4a16-af0f-f8e0d0aeb7f4\",\r\n \"sectionId\": \"760b1cb0-c39b-4acf-b644-c863dda34ff5\"\r\n },\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.Number,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": true,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Number,\r\n \"colSize\": 6,\r\n \"validators\": [],\r\n \"label\": \"Monthly Interest Rate\",\r\n \"formControlName\": \"monthlyInterestRate\",\r\n \"hintLabel\": \"Annual rate divided by 12 months\",\r\n \"calculatedFieldRules\": {\r\n \"variables\": [\r\n {\r\n \"formControlName\": \"interestRate\",\r\n \"label\": \"Interest Rate (%)\",\r\n \"inputId\": \"c51ce3fa-aa4a-4806-a005-23c763658e13\",\r\n \"variable\": \"InterestRate\",\r\n \"id\": \"e5cf9125-2bd6-4f2f-a6d7-3d5739f48601\"\r\n }\r\n ],\r\n \"formula\": \"InterestRate/12\"\r\n },\r\n \"id\": \"2c1805bf-51de-4ab0-9548-1db96ba2ea16\",\r\n \"sectionId\": \"760b1cb0-c39b-4acf-b644-c863dda34ff5\"\r\n },\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.Number,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": true,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Number,\r\n \"colSize\": 5,\r\n \"validators\": [],\r\n \"label\": \"Total Payments\",\r\n \"formControlName\": \"totalPayments\",\r\n \"readonly\": true,\r\n \"hintLabel\": \"Simple multiplication of years by months\",\r\n \"calculatedFieldRules\": {\r\n \"variables\": [\r\n {\r\n \"formControlName\": \"loanTermYears\",\r\n \"label\": \"Loan Term (years)\",\r\n \"inputId\": \"05ffcbf4-187e-4051-99d9-bead434a1d7d\",\r\n \"variable\": \"loanTerm\",\r\n \"id\": \"2c76d745-dc53-4e6b-9a2a-09f1db0708ba\"\r\n }\r\n ],\r\n \"formula\": \"loanTerm*12\"\r\n },\r\n \"id\": \"3f0511f8-5a85-42bf-830a-eaaf6d040f35\",\r\n \"sectionId\": \"760b1cb0-c39b-4acf-b644-c863dda34ff5\"\r\n }\r\n ],\r\n \"label\": \"Mortgage\"\r\n },\r\n {\r\n \"sectionId\": \"8bc05950-fe9a-4840-8edd-9f37bf5245f4\",\r\n \"columns\": [\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.Number,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": true,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Number,\r\n \"colSize\": 12,\r\n \"validators\": [],\r\n \"label\": \"Monthly Principal & Interest\",\r\n \"formControlName\": \"monthlyPrincipalInterest\",\r\n \"hintLabel\": \"Uses the standard mortgage amortization formula:`P * (r * (1 + r)^n) / ((1 + r)^n - 1) Where: P = Principal ($240,000) r = Monthly interest rate (0.004583) n = Total number of payments (360)`\",\r\n \"calculatedFieldRules\": {\r\n \"variables\": [\r\n {\r\n \"formControlName\": \"monthlyInterestRate\",\r\n \"label\": \"Monthly Interest Rate\",\r\n \"inputId\": \"2c1805bf-51de-4ab0-9548-1db96ba2ea16\",\r\n \"variable\": \"r\",\r\n \"id\": \"18ce3591-c8b4-45e0-a279-6c71052fbcc7\"\r\n },\r\n {\r\n \"formControlName\": \"totalPayments\",\r\n \"label\": \"Total Payments\",\r\n \"inputId\": \"3f0511f8-5a85-42bf-830a-eaaf6d040f35\",\r\n \"variable\": \"n\",\r\n \"id\": \"8166c555-1443-4b8e-8c1c-eab70528a80a\"\r\n },\r\n {\r\n \"formControlName\": \"actualLoanAmount\",\r\n \"label\": \"Actual Loan Amount: \",\r\n \"inputId\": \"6e9e6660-5553-4a16-af0f-f8e0d0aeb7f4\",\r\n \"variable\": \"P\",\r\n \"id\": \"22799f66-28d9-467d-9c04-e0d6f60e8166\"\r\n }\r\n ],\r\n \"formula\": \"P * (r * (1 + r)^n) / ((1 + r)^n - 1)\"\r\n },\r\n \"id\": \"4533588e-4f42-4ef8-b4d7-292fc94ad90b\",\r\n \"sectionId\": \"8bc05950-fe9a-4840-8edd-9f37bf5245f4\"\r\n }\r\n ],\r\n \"label\": \"Secondary sectio\"\r\n },\r\n\r\n {\r\n \"sectionId\": \"d7b422a1-66fc-4420-9ee0-4298e5d8cef7\",\r\n \"columns\": [\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.String,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Text,\r\n \"colSize\": 6,\r\n \"validators\": [],\r\n \"label\": ElementTypes.Input,\r\n \"formControlName\": ElementTypes.Input,\r\n \"id\": \"41ae987e-ffcb-45d7-8d8e-3edbe6b2bb8c\",\r\n \"sectionId\": \"d7b422a1-66fc-4420-9ee0-4298e5d8cef7\"\r\n },\r\n {\r\n \"element\": ElementTypes.Select,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"colSize\": 6,\r\n \"validators\": [],\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"dataType\": InputDataTypes.String,\r\n \"label\": \"Select\",\r\n \"formControlName\": \"select\",\r\n \"matOptions\": {\r\n \"fetch\": {\r\n \"options\": {\r\n \"source\": DataSources.CustomOptions\r\n } as any\r\n },\r\n \"options\": [\r\n {\r\n \"label\": \"Option one\",\r\n \"value\": \"Option one\",\r\n \"id\": \"7d28fad3-63ae-432f-809d-5c0a34582dfb\"\r\n }\r\n ]\r\n },\r\n \"id\": \"1957618a-6d7f-4702-a906-1d829b568a53\",\r\n \"sectionId\": \"d7b422a1-66fc-4420-9ee0-4298e5d8cef7\"\r\n },\r\n {\r\n \"element\": ElementTypes.AutoCompleteInput,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Text,\r\n \"colSize\": 12,\r\n \"validators\": [],\r\n \"dataType\": InputDataTypes.String,\r\n \"label\": \"Auto Complete\",\r\n \"formControlName\": \"autoComplete\",\r\n \"matOptions\": {\r\n \"fetch\": {\r\n \"options\": {\r\n \"source\": \"customOptions\"\r\n } as any\r\n },\r\n \"options\": [\r\n {\r\n \"label\": \"Option one\",\r\n \"value\": \"Option one\",\r\n \"id\": \"14dc2df0-6960-4608-a603-c690dc33797c\"\r\n }\r\n ]\r\n },\r\n \"hintLabel\": \"Auto complete can be set like a drop down select\",\r\n \"id\": \"529d53e7-f962-470d-b008-231c8617a502\",\r\n \"sectionId\": \"d7b422a1-66fc-4420-9ee0-4298e5d8cef7\"\r\n },\r\n {\r\n \"element\": ElementTypes.Textarea,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"maxLength\": 150,\r\n \"minLength\": 5,\r\n \"colSize\": 12,\r\n \"dataType\": InputDataTypes.String,\r\n \"validators\": [],\r\n \"rows\": 4,\r\n \"spellcheck\": true,\r\n \"wrap\": \"hard\",\r\n \"autocapitalize\": AutocapitalizeOptions.Words,\r\n \"label\": \"Text area\",\r\n \"formControlName\": \"textArea\",\r\n \"id\": \"009da0df-ebb2-4dc4-bf29-07044c47e949\",\r\n \"sectionId\": \"d7b422a1-66fc-4420-9ee0-4298e5d8cef7\"\r\n },\r\n {\r\n \"element\": ElementTypes.Toggle,\r\n \"labelPosition\": \"after\" as any,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"value\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"colSize\": 12,\r\n \"validators\": [],\r\n \"dataType\": InputDataTypes.Boolean,\r\n \"label\": \"Toggle inputs\",\r\n \"formControlName\": \"toggleInputs\",\r\n \"id\": \"6a840bd5-0c05-4a72-a2c8-02058582f41d\",\r\n \"sectionId\": \"d7b422a1-66fc-4420-9ee0-4298e5d8cef7\"\r\n },\r\n {\r\n \"element\": ElementTypes.DatePicker,\r\n \"dataType\": InputDataTypes.Date,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"colSize\": 12,\r\n \"validators\": [],\r\n \"label\": \"Date picker\",\r\n \"formControlName\": \"datePicker\",\r\n \"type\": InputTypes.Date,\r\n \"id\": \"08172453-c42b-4bde-aca7-bb087a3ceae9\",\r\n \"sectionId\": \"d7b422a1-66fc-4420-9ee0-4298e5d8cef7\"\r\n },\r\n {\r\n \"element\": ElementTypes.DateRangePicker,\r\n \"dataType\": InputDataTypes.Date,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"colSize\": 12,\r\n \"validators\": [],\r\n \"label\": \"Date range picker\",\r\n \"formControlName\": \"dateRangePicker\",\r\n \"startDateControl\": \"start\",\r\n \"endDateControl\": \"end\",\r\n \"hintLabel\": \"Choose a range by choosing a start and end date\",\r\n \"script\": {},\r\n \"id\": \"eebd11de-e727-4dc2-a20b-3756bf1bc2dd\",\r\n \"sectionId\": \"d7b422a1-66fc-4420-9ee0-4298e5d8cef7\"\r\n }\r\n ],\r\n \"label\": \"All common form inputs\"\r\n },\r\n {\r\n \"sectionId\": \"3aad6ef8-2253-4d47-803f-09f516f62bec\",\r\n \"columns\": [\r\n {\r\n \"element\": ElementTypes.SectionTitle,\r\n \"dataType\": InputDataTypes.String,\r\n \"colSize\": 12,\r\n \"label\": \"Title explainer\",\r\n \"formControlName\": \"titleExplainer\",\r\n \"appearance\": \"outline\",\r\n \"hintLabel\": \"Use this component to add a section explainer or separator \",\r\n \"script\": {},\r\n \"id\": \"4cfe60ee-4853-40aa-9dc0-1530a3e09c25\",\r\n \"sectionId\": \"3aad6ef8-2253-4d47-803f-09f516f62bec\"\r\n },\r\n {\r\n \"element\": ElementTypes.Location,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"colSize\": 4,\r\n \"dataType\": InputDataTypes.Object,\r\n \"validators\": [],\r\n \"label\": \"Location \",\r\n \"formControlName\": \"location\",\r\n \"script\": {},\r\n \"id\": \"bd77415c-4e48-49bd-8450-cf8747cae3ed\",\r\n \"sectionId\": \"3aad6ef8-2253-4d47-803f-09f516f62bec\"\r\n },\r\n {\r\n \"element\": ElementTypes.FileUpload,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"dataType\": InputDataTypes.Object,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"colSize\": 8,\r\n \"fileType\": InputFileType.Image,\r\n \"singleSelect\": true,\r\n \"validators\": [],\r\n \"accept\": \"image/gif, image/jpeg, image/png\",\r\n \"label\": \"File upload\",\r\n \"formControlName\": \"fileUpload\",\r\n \"script\": {},\r\n \"id\": \"9f6d93d2-c462-4bec-ab3f-771c1384ace9\",\r\n \"sectionId\": \"3aad6ef8-2253-4d47-803f-09f516f62bec\"\r\n },\r\n {\r\n \"element\": ElementTypes.Signature,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"dataType\": InputDataTypes.String,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"colSize\": 12,\r\n \"validators\": [],\r\n \"label\": \"signature\",\r\n \"formControlName\": \"signature\",\r\n \"script\": {},\r\n \"id\": \"5c49e108-a7f6-4d4b-9095-d01fea04068a\",\r\n \"sectionId\": \"3aad6ef8-2253-4d47-803f-09f516f62bec\"\r\n },\r\n {\r\n \"element\": ElementTypes.ImageCapture,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"dataType\": InputDataTypes.Object,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"colSize\": 12,\r\n \"validators\": [],\r\n \"label\": \"iimage capture\",\r\n \"formControlName\": \"iimageCapture\",\r\n \"script\": {},\r\n \"id\": \"10ff9bc0-0654-4988-915a-ea39b01082c5\",\r\n \"sectionId\": \"3aad6ef8-2253-4d47-803f-09f516f62bec\"\r\n },\r\n {\r\n \"element\": ElementTypes.MultipleInput,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"colSize\": 12,\r\n \"dataType\": InputDataTypes.Array,\r\n \"validators\": [],\r\n \"handleLabel\": \"Add to list\",\r\n \"formInputs\": [\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.String,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Text,\r\n \"colSize\": 6,\r\n \"validators\": [],\r\n \"multipleInputInEditId\": \"e208b430-7da2-4ca1-b683-68cbf2985eed\",\r\n \"label\": \"name\",\r\n \"formControlName\": \"name\",\r\n\r\n \"script\": {},\r\n \"id\": \"ffb7c9de-6183-4df8-adfc-d6569c9c993f\",\r\n \"sectionId\": \"3aad6ef8-2253-4d47-803f-09f516f62bec\",\r\n \"showAsLabel\": true\r\n },\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.Number,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Number,\r\n \"colSize\": 3,\r\n \"validators\": [],\r\n \"multipleInputInEditId\": \"e208b430-7da2-4ca1-b683-68cbf2985eed\",\r\n \"label\": \"number\",\r\n \"formControlName\": \"number\",\r\n\r\n \"script\": {},\r\n \"id\": \"95609765-a44c-4b39-a64e-37ec9010382b\",\r\n \"sectionId\": \"3aad6ef8-2253-4d47-803f-09f516f62bec\",\r\n \"showAsLabel\": true\r\n },\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.Number,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": true,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Number,\r\n \"colSize\": 3,\r\n \"validators\": [],\r\n \"multipleInputInEditId\": \"e208b430-7da2-4ca1-b683-68cbf2985eed\",\r\n \"label\": \"timkes\",\r\n \"formControlName\": \"timkes\",\r\n\r\n \"hintLabel\": \"List items by using a secondary list form\",\r\n \"script\": {},\r\n \"calculatedFieldRules\": {\r\n \"variables\": [\r\n {\r\n \"formControlName\": \"number\",\r\n \"label\": \"number\",\r\n \"inputId\": \"95609765-a44c-4b39-a64e-37ec9010382b\",\r\n \"parentInputId\": \"e208b430-7da2-4ca1-b683-68cbf2985eed\",\r\n \"variable\": \"a\",\r\n \"id\": \"27f46bf0-dbd3-4f8a-aecd-7bb91ad56458\"\r\n }\r\n ],\r\n \"formula\": \"a*2\"\r\n },\r\n \"id\": \"1891df4b-9353-44fb-b5c0-d92e9579f215\",\r\n \"sectionId\": \"3aad6ef8-2253-4d47-803f-09f516f62bec\",\r\n \"showAsLabel\": true\r\n }\r\n ],\r\n \"calculateListFunctions\": [\r\n {\r\n \"id\": \"1891df4b-9353-44fb-b5c0-d92e9579f215\",\r\n \"func\": CalculationFunctions.Sum\r\n }\r\n ],\r\n \"label\": \"List of Items \",\r\n \"formControlName\": \"listOfItems\",\r\n \"script\": {},\r\n \"id\": \"e208b430-7da2-4ca1-b683-68cbf2985eed\",\r\n \"sectionId\": \"3aad6ef8-2253-4d47-803f-09f516f62bec\"\r\n },\r\n {\r\n \"element\": ElementTypes.Editor,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"dataType\": InputDataTypes.String,\r\n \"colSize\": 12,\r\n \"validators\": [],\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"richTextEditorLibrary\": \"EditorJS\" as any,\r\n \"label\": \"Rich text editor\",\r\n \"formControlName\": \"richTextEditor\",\r\n \"script\": {},\r\n \"id\": \"9fd2cc6e-3f41-488d-b37a-5fd3330b3d34\",\r\n \"sectionId\": \"3aad6ef8-2253-4d47-803f-09f516f62bec\"\r\n }\r\n ],\r\n \"label\": \"Special form input\"\r\n },\r\n {\r\n \"sectionId\": \"90405bc2-f766-4373-8cdb-3b10f1239def\",\r\n \"columns\": [\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.String,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": false,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Text,\r\n \"colSize\": 12,\r\n \"validators\": [],\r\n \"label\": \"optional field\",\r\n \"formControlName\": \"optionalField\",\r\n \"id\": \"b9f96ffd-805a-48c4-9ac9-147d07110c53\",\r\n \"sectionId\": \"90405bc2-f766-4373-8cdb-3b10f1239def\"\r\n },\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.String,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Text,\r\n \"colSize\": 12,\r\n \"validators\": [],\r\n \"label\": \"required field\",\r\n \"formControlName\": \"requiredField\",\r\n \"id\": \"59c83963-842c-4cc7-ab12-250321904fe9\",\r\n \"sectionId\": \"90405bc2-f766-4373-8cdb-3b10f1239def\",\r\n\r\n \"script\": {}\r\n }\r\n ],\r\n \"label\": \"Default system validation\"\r\n },\r\n {\r\n \"sectionId\": \"c1098287-1e35-4aaf-a2b1-200b8c6d11ae\",\r\n \"columns\": [\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.String,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Number,\r\n \"colSize\": 6,\r\n \"validators\": [],\r\n \"label\": \"Income\",\r\n \"formControlName\": \"income\",\r\n \"id\": \"f9548321-2ffc-42cf-a224-5a20307b4378\",\r\n \"sectionId\": \"c1098287-1e35-4aaf-a2b1-200b8c6d11ae\"\r\n },\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.Number,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Text,\r\n \"colSize\": 6,\r\n \"validators\": [],\r\n \"label\": \"expenses\",\r\n \"formControlName\": \"expenses\",\r\n \"id\": \"8f64030e-dcf9-495d-9d2a-3f5814bca1a3\",\r\n \"sectionId\": \"c1098287-1e35-4aaf-a2b1-200b8c6d11ae\"\r\n },\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.Number,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": true,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Number,\r\n \"colSize\": 6,\r\n \"validators\": [\r\n {\r\n \"message\": \"expenses cant be higher than income\",\r\n \"expression\": \"profitLoss < 0\",\r\n \"canOverride\": false,\r\n \"inputsObservedForChanges\": [\r\n {inputId:\"8e5a74c9-b913-487b-84a4-c883cf56fd8b\",variable: \"profitLoss\"}\t\r\n \r\n ],\r\n \"id\": \"84209df1-e1cc-4cdc-ad8c-f27d027fe8e6\"\r\n }\r\n ],\r\n \"label\": \"profit loss\",\r\n \"formControlName\": \"profitLoss\",\r\n \"calculatedFieldRules\": {\r\n \"variables\": [\r\n {\r\n \"formControlName\": \"income\",\r\n \"label\": \"Income\",\r\n \"inputId\": \"f9548321-2ffc-42cf-a224-5a20307b4378\",\r\n \"variable\": \"i\",\r\n \"id\": \"59039491-71c6-4185-b563-40b8f2533d3c\"\r\n },\r\n {\r\n \"formControlName\": \"expenses\",\r\n \"label\": \"expenses\",\r\n \"inputId\": \"8f64030e-dcf9-495d-9d2a-3f5814bca1a3\",\r\n \"variable\": \"e\",\r\n \"id\": \"efbcc165-90c2-4f04-b2f4-8d9066e3c2de\"\r\n }\r\n ],\r\n \"formula\": \"i-e\"\r\n },\r\n \"id\": \"8e5a74c9-b913-487b-84a4-c883cf56fd8b\",\r\n \"sectionId\": \"c1098287-1e35-4aaf-a2b1-200b8c6d11ae\",\r\n \"matOptions\": {\r\n \"fetch\": {\r\n\r\n }\r\n },\r\n \"script\": {}\r\n }\r\n ],\r\n \"label\": \"custom validation\"\r\n },\r\n {\r\n \"sectionId\": \"135a74a5-2d87-4fd0-ade1-ee1c5af709bd\",\r\n \"columns\": [\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.String,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Email,\r\n \"colSize\": 12,\r\n \"validators\": [],\r\n \"label\": \"Get user email\",\r\n \"formControlName\": \"getUserEmail\",\r\n \"matOptions\": {\r\n \"fetch\": {\r\n \"value\": {\r\n \"_id\": \"ad7f35c4-d4d8-44d5-9fc4-412ad4bf268c\",\r\n \"name\": \"getProfile\",\r\n \"httpEndPoint\": \"{{$iserve-back-end-url}}/api/users/profile\",\r\n \"httpMethod\": \"GET\",\r\n \"source\": DataSources.Api,\r\n \"postFormData\": false,\r\n \"backEndConfig\": {\r\n \"minimumInputRequired\": []\r\n },\r\n \"httpHeaderOptions\": {\r\n credentials: 'include',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n }\r\n },\r\n \"valueAccessRules\": [\r\n {\r\n \"key\": \"email\",\r\n \"name\": \"email\",\r\n \"path\": [\r\n \"email\"\r\n ],\r\n \"functions\": [],\r\n value: undefined\r\n }\r\n ]\r\n }\r\n }\r\n },\r\n \"id\": \"9769ec56-f754-490f-9f0a-fe4e47d18f9c\",\r\n \"sectionId\": \"135a74a5-2d87-4fd0-ade1-ee1c5af709bd\"\r\n },\r\n {\r\n \"element\": ElementTypes.Select,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"colSize\": 12,\r\n \"validators\": [],\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"dataType\": InputDataTypes.String,\r\n \"label\": \"workflows\",\r\n \"formControlName\": \"users\",\r\n \"matOptions\": {\r\n \"fetch\": {\r\n\r\n \"options\": {\r\n \"_id\": \"5872a09c-d8a9-42b5-b246-8d1e4eb0f268\",\r\n \"name\": \"Get Default Team/Department Workflows\",\r\n \"httpEndPoint\": \"{{$iserve-back-end-url}}/api/workflow/getDepartmentWorkflows\",\r\n \"httpMethod\": \"GET\",\r\n \"source\": DataSources.Api,\r\n \"postFormData\": false,\r\n \"backEndConfig\": {\r\n \"minimumInputRequired\": []\r\n },\r\n \"httpHeaderOptions\": {\r\n credentials: 'include',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n }\r\n },\r\n \"valueAccessRules\": [\r\n {\r\n \"key\": \"0\",\r\n \"name\": \"0\",\r\n \"functions\": [\r\n {\r\n \"expression\": \"value:{_id},label:{name}\",\r\n \"id\": \"dcd8bfa0-357c-45b2-89b2-dd7feaa6d247\",\r\n \"inEdit\": false,\r\n \"function\": \"map\"\r\n }\r\n ],\r\n \"keyIsArrayIndex\": true,\r\n \"path\": [\r\n \"0\"\r\n ],\r\n value: undefined\r\n }\r\n ]\r\n }\r\n }\r\n },\r\n \"id\": \"04911642-93d0-41df-b87a-07c2f96d0fe8\",\r\n \"sectionId\": \"135a74a5-2d87-4fd0-ade1-ee1c5af709bd\"\r\n }\r\n ],\r\n \"label\": \"Value and option\"\r\n },\r\n {\r\n \"sectionId\": \"8b7ac484-152d-4971-87f4-1f62122857bc\",\r\n \"columns\": [\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.String,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Number,\r\n \"colSize\": 5,\r\n \"validators\": [],\r\n \"label\": \"per page\",\r\n \"formControlName\": \"perPage\",\r\n \"id\": \"c4a55e8e-5f84-48c3-827a-a5e16c01b847\",\r\n \"sectionId\": \"8b7ac484-152d-4971-87f4-1f62122857bc\"\r\n },\r\n {\r\n \"element\": ElementTypes.Input,\r\n \"dataType\": InputDataTypes.String,\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"type\": InputTypes.Number,\r\n \"colSize\": 5,\r\n \"validators\": [],\r\n \"label\": \"page\",\r\n \"formControlName\": \"page\",\r\n \"id\": \"dbec2fec-f78a-4e15-a0ef-78005c7c6152\",\r\n \"sectionId\": \"8b7ac484-152d-4971-87f4-1f62122857bc\"\r\n },\r\n {\r\n \"element\": ElementTypes.Select,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"colSize\": 12,\r\n \"validators\": [],\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"dataType\": InputDataTypes.String,\r\n \"label\": \"Transactions \",\r\n \"formControlName\": \"transactions\",\r\n \"matOptions\": {\r\n \"fetch\": {\r\n \"options\": {\r\n \"_id\": \"5128f7c7-71bf-45d7-91cc-450b70eccf29\",\r\n \"name\": \"Get Documents by WF-ID\",\r\n \"httpEndPoint\": \"{{$iserve-back-end-url}}/api/form/getFormValByWorkflow\",\r\n \"httpMethod\": \"POST\",\r\n \"source\": DataSources.Api,\r\n \"postFormData\": true,\r\n \"httpHeaderOptions\": {\r\n credentials: 'include',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n }\r\n },\r\n \"backEndConfig\": {\r\n \"minimumInputRequired\": [\r\n {\r\n \"name\": \"workflowId\",\r\n \"type\": MinInputTypes.MapTo,\r\n \"primaryKey\": true,\r\n \"mapTo\": {\r\n \"formControlName\": \"users\",\r\n \"dataType\": InputDataTypes.String,\r\n \"element\": ElementTypes.Select,\r\n \"inputId\": \"04911642-93d0-41df-b87a-07c2f96d0fe8\"\r\n }\r\n },\r\n {\r\n \"name\": \"page\",\r\n \"type\": MinInputTypes.MapTo,\r\n \"primaryKey\": true,\r\n \"mapTo\": {\r\n \"formControlName\": \"page\",\r\n \"dataType\": InputDataTypes.String,\r\n \"element\": ElementTypes.Input,\r\n \"inputId\": \"dbec2fec-f78a-4e15-a0ef-78005c7c6152\"\r\n }\r\n },\r\n {\r\n \"name\": \"itemsPerPage\",\r\n \"type\": MinInputTypes.MapTo,\r\n \"primaryKey\": true,\r\n \"mapTo\": {\r\n \"formControlName\": \"perPage\",\r\n \"dataType\": InputDataTypes.String,\r\n \"element\": ElementTypes.Input,\r\n \"inputId\": \"c4a55e8e-5f84-48c3-827a-a5e16c01b847\"\r\n }\r\n },\r\n {\r\n \"name\":\"sort\",\r\n \"type\": MinInputTypes.Default,\r\n \"primaryKey\": true,\r\n \"defaultValue\": \"{}\"\r\n }\r\n ]\r\n },\r\n \"valueAccessRules\": [\r\n {\r\n \"key\": \"formValues\",\r\n \"name\": \"formValues\",\r\n \"path\": [\r\n \"formValues\"\r\n ],\r\n \"functions\": [],\r\n value: undefined\r\n },\r\n {\r\n \"key\": \"0\",\r\n \"name\": \"0\",\r\n \"functions\": [\r\n {\r\n \"expression\": \"value:{_id},label:{docType}\",\r\n \"id\": \"1d687d70-8857-473c-83d5-1069df92c910\",\r\n \"inEdit\": false,\r\n \"function\": \"map\"\r\n }\r\n ],\r\n \"keyIsArrayIndex\": true,\r\n \"path\": [\r\n \"formValues\",\r\n \"0\"\r\n ],\r\n value: undefined\r\n }\r\n ]\r\n }\r\n }\r\n },\r\n \"id\": \"6d5dbb7f-bb7d-4c4f-a974-696452ab30f6\",\r\n \"sectionId\": \"8b7ac484-152d-4971-87f4-1f62122857bc\"\r\n },\r\n\r\n ],\r\n \"label\": \"Input linked variable\"\r\n },\r\n {\r\n \"sectionId\": \"00467024-fcbd-48c9-857b-b2efe8e6c362\",\r\n \"columns\": [\r\n {\r\n \"element\": ElementTypes.Select,\r\n \"required\": true,\r\n \"onlySetTempErrorOnTouch\": false,\r\n \"colSize\": 12,\r\n \"validators\": [],\r\n \"appearance\": \"outline\",\r\n \"isCalculatedField\": false,\r\n \"dataType\": InputDataTypes.String,\r\n \"label\": \"Drop down transactions\",\r\n \"formControlName\": \"dropDownTransactions\",\r\n \"id\": \"62a70bfd-5de5-4ce4-8117-b3a210cdfbab\",\r\n \"sectionId\": \"00467024-fcbd-48c9-857b-b2efe8e6c362\",\r\n \"matOptions\": {\r\n \"fetch\": {\r\n\r\n \"options\": {\r\n \"workflowId\": \"67223aa1098d5b000211b1e3\",\r\n \"pipeline\": [\r\n {\r\n \"$sort\": {\r\n \"createdAt\": -1\r\n }\r\n },\r\n {\r\n \"$limit\": 10\r\n },\r\n {\r\n \"$project\": {\r\n \"value\": \"$_id\",\r\n \"label\": \"$reference\"\r\n }\r\n }\r\n ],\r\n\r\n \"source\": DataSources.MongoDb\r\n }\r\n }\r\n },\r\n \"script\": {}\r\n }\r\n ],\r\n \"label\": \"Pipeline for drop dow\"\r\n }\r\n ],\r\n \"submissionHandle\": {\r\n \"submissionAPI\": [\r\n {\r\n \"_id\": \"99223db4-efa3-459f-a8b4-020f0e5c313a\",\r\n \"name\": \"Generate Document FormVal\",\r\n \"httpEndPoint\": \"http://localhost:5000/api/form/generateWorkflowFormValues\",\r\n \"httpMethod\": \"POST\",\r\n \"source\": DataSources.Api,\r\n \"postFormData\": true,\r\n \"backEndConfig\": {\r\n \"minimumInputRequired\": [\r\n {\r\n \"name\": \"submissionId\",\r\n \"type\": \"string\" as any,\r\n \"primaryKey\": true\r\n },\r\n {\r\n \"name\": \"formId\",\r\n \"type\": \"string\" as any,\r\n \"primaryKey\": true\r\n },\r\n {\r\n \"name\": \"workflowId\",\r\n \"type\": \"string\" as any,\r\n \"primaryKey\": true\r\n },\r\n {\r\n \"name\": \"value\",\r\n \"type\": \"string\" as any,\r\n \"primaryKey\": false\r\n }\r\n ]\r\n }\r\n }\r\n ]\r\n },\r\n \"formTitle\": \"V2 Form calculations\"\r\n },\r\n \"archive\": false,\r\n \"createdAt\": new Date(\"2025-02-03T11:24:58.578Z\"),\r\n \"updatedAt\": new Date(\"2025-02-03T11:24:58.578Z\"),\r\n \"__v\": 0\r\n}","import { Component, 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 { 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 { TEST_FORM } from '../../../testForm';\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\r\n\r\n @Input() set formId(value: string | undefined) {\r\n if (!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) => {\r\n this.loading = false;\r\n if (!!form?._id || null) {\r\n this.initialize(TEST_FORM.form as any);\r\n console.error(form, \"Form init success\");\r\n }\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 @Input() set initialValues(initialFormValues: any) {\r\n if(!!initialFormValues && typeof initialFormValues === 'object'){\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 } 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\ngetStepState(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\n\r\n\r\n\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 \r\n [stepControl]=\"step.sectionForm\" [completed]=\"step.sectionIsSeen && !step.sectionIsInvalid\"\r\n [editable]=\"isEditable\" \r\n [errorMessage]=\"step.sectionFormErrorMessage||''\" \r\n [state]=\"getStepState(step,$index)\"\r\n [hasError]=\"!step.sectionForm.valid && !!step.sectionForm.touched\"\r\n >\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 class=\"tour-trigger \" *ngIf=\"(step)?.activeSectionHasTour&&!!step.isActive \">\r\n <button tourAnchor=\"Form-Tour-trigger\" matTooltip=\"Start section tour\" mat-flat-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\" \r\n (valueChange)=\"updateValue(col.id,$event)\"\r\n [editorMode]=\"false\" \r\n [formBuilderFunctions]=\"formBuilderFunctions\"\r\n [inputConfig]=\"col\" [formGroup]=\"step.sectionForm\" [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</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 <!-- 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\" \r\n (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/*\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\n\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","i12","i13","i1.MscoaComponentStore","customInputConfig"],"mappings":"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"}
|