@piserve-tech/form-submission 1.3.314 → 1.3.316
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/README.md +24 -24
- package/ng-package.json +30 -0
- package/package.json +33 -46
- package/{assets → src/assets}/icons/close-sidebar-mark-icon.svg +3 -3
- package/{assets → src/assets}/icons/copy-icon.svg +5 -5
- package/{assets → src/assets}/icons/delete-icon.svg +7 -7
- package/{assets → src/assets}/icons/delete-no-outline-icon.svg +7 -7
- package/src/environment/environment.ts +6 -0
- package/src/form-fields/aggregate-function/aggregate-function.component.html +63 -0
- package/src/form-fields/aggregate-function/aggregate-function.component.scss +1 -0
- package/src/form-fields/aggregate-function/aggregate-function.component.spec.ts +21 -0
- package/src/form-fields/aggregate-function/aggregate-function.component.ts +148 -0
- package/src/form-fields/check-box-fields/check-box-fields.component.html +81 -0
- package/src/form-fields/check-box-fields/check-box-fields.component.scss +28 -0
- package/src/form-fields/check-box-fields/check-box-fields.component.spec.ts +21 -0
- package/src/form-fields/check-box-fields/check-box-fields.component.ts +538 -0
- package/src/form-fields/currency-fields/currency-fields.component.html +85 -0
- package/src/form-fields/currency-fields/currency-fields.component.scss +48 -0
- package/src/form-fields/currency-fields/currency-fields.component.spec.ts +21 -0
- package/src/form-fields/currency-fields/currency-fields.component.ts +589 -0
- package/src/form-fields/date-time-fields/date-time-fields.component.html +268 -0
- package/src/form-fields/date-time-fields/date-time-fields.component.scss +88 -0
- package/src/form-fields/date-time-fields/date-time-fields.component.spec.ts +21 -0
- package/src/form-fields/date-time-fields/date-time-fields.component.ts +693 -0
- package/src/form-fields/drop-down-fields/drop-down-fields.component.html +77 -0
- package/src/form-fields/drop-down-fields/drop-down-fields.component.scss +12 -0
- package/src/form-fields/drop-down-fields/drop-down-fields.component.spec.ts +21 -0
- package/src/form-fields/drop-down-fields/drop-down-fields.component.ts +698 -0
- package/src/form-fields/file-picker-fields/file-picker-fields.component.html +72 -0
- package/src/form-fields/file-picker-fields/file-picker-fields.component.scss +33 -0
- package/src/form-fields/file-picker-fields/file-picker-fields.component.spec.ts +21 -0
- package/src/form-fields/file-picker-fields/file-picker-fields.component.ts +256 -0
- package/src/form-fields/form-fields.module.ts +110 -0
- package/src/form-fields/hidden-field/hidden-field.component.scss +0 -0
- package/src/form-fields/hidden-field/hidden-field.component.spec.ts +21 -0
- package/src/form-fields/hidden-field/hidden-field.component.ts +156 -0
- package/src/form-fields/iframe-fields/iframe-fields.component.html +31 -0
- package/src/form-fields/iframe-fields/iframe-fields.component.scss +0 -0
- package/src/form-fields/iframe-fields/iframe-fields.component.spec.ts +21 -0
- package/src/form-fields/iframe-fields/iframe-fields.component.ts +225 -0
- package/src/form-fields/location-fields/location-fields.component.html +54 -0
- package/src/form-fields/location-fields/location-fields.component.scss +22 -0
- package/src/form-fields/location-fields/location-fields.component.spec.ts +21 -0
- package/src/form-fields/location-fields/location-fields.component.ts +83 -0
- package/src/form-fields/mail-fields/mail-fields.component.html +66 -0
- package/src/form-fields/mail-fields/mail-fields.component.scss +10 -0
- package/src/form-fields/mail-fields/mail-fields.component.spec.ts +21 -0
- package/src/form-fields/mail-fields/mail-fields.component.ts +127 -0
- package/src/form-fields/mobile-fields/mobile-fields.component.html +97 -0
- package/src/form-fields/mobile-fields/mobile-fields.component.scss +52 -0
- package/src/form-fields/mobile-fields/mobile-fields.component.spec.ts +21 -0
- package/src/form-fields/mobile-fields/mobile-fields.component.ts +310 -0
- package/src/form-fields/number-fields/number-fields.component.html +70 -0
- package/src/form-fields/number-fields/number-fields.component.scss +17 -0
- package/src/form-fields/number-fields/number-fields.component.spec.ts +21 -0
- package/src/form-fields/number-fields/number-fields.component.ts +256 -0
- package/src/form-fields/password-fields/password-fields.component.html +113 -0
- package/src/form-fields/password-fields/password-fields.component.scss +61 -0
- package/src/form-fields/password-fields/password-fields.component.spec.ts +21 -0
- package/src/form-fields/password-fields/password-fields.component.ts +273 -0
- package/src/form-fields/radio-button-fields/radio-button-fields.component.html +82 -0
- package/src/form-fields/radio-button-fields/radio-button-fields.component.scss +28 -0
- package/src/form-fields/radio-button-fields/radio-button-fields.component.spec.ts +21 -0
- package/src/form-fields/radio-button-fields/radio-button-fields.component.ts +391 -0
- package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.html +67 -0
- package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.scss +23 -0
- package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.spec.ts +21 -0
- package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.ts +145 -0
- package/src/form-fields/section-fields/section-fields.component.html +4 -0
- package/src/form-fields/section-fields/section-fields.component.scss +37 -0
- package/src/form-fields/section-fields/section-fields.component.spec.ts +21 -0
- package/src/form-fields/section-fields/section-fields.component.ts +25 -0
- package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.html +93 -0
- package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.scss +52 -0
- package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.spec.ts +21 -0
- package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.ts +155 -0
- package/src/form-fields/signature-fields/signature-fields.component.html +43 -0
- package/src/form-fields/signature-fields/signature-fields.component.scss +10 -0
- package/src/form-fields/signature-fields/signature-fields.component.spec.ts +21 -0
- package/src/form-fields/signature-fields/signature-fields.component.ts +25 -0
- package/src/form-fields/slider-fields/slider-fields.component.html +67 -0
- package/src/form-fields/slider-fields/slider-fields.component.scss +55 -0
- package/src/form-fields/slider-fields/slider-fields.component.spec.ts +21 -0
- package/src/form-fields/slider-fields/slider-fields.component.ts +63 -0
- package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.html +52 -0
- package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.scss +85 -0
- package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.spec.ts +21 -0
- package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.ts +62 -0
- package/src/form-fields/text-area-fields/text-area-fields.component.html +68 -0
- package/src/form-fields/text-area-fields/text-area-fields.component.scss +19 -0
- package/src/form-fields/text-area-fields/text-area-fields.component.spec.ts +21 -0
- package/src/form-fields/text-area-fields/text-area-fields.component.ts +166 -0
- package/src/form-fields/text-fields/text-fields.component.html +67 -0
- package/src/form-fields/text-fields/text-fields.component.scss +26 -0
- package/src/form-fields/text-fields/text-fields.component.spec.ts +21 -0
- package/src/form-fields/text-fields/text-fields.component.ts +248 -0
- package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.html +70 -0
- package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.scss +112 -0
- package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.spec.ts +21 -0
- package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.ts +74 -0
- package/src/form-fields/url-fields/url-fields.component.html +109 -0
- package/src/form-fields/url-fields/url-fields.component.scss +22 -0
- package/src/form-fields/url-fields/url-fields.component.spec.ts +21 -0
- package/src/form-fields/url-fields/url-fields.component.ts +123 -0
- package/src/form-submission/form-submission.module.ts +40 -0
- package/src/form-submission/header/header.component.html +6 -0
- package/src/form-submission/header/header.component.scss +26 -0
- package/src/form-submission/header/header.component.spec.ts +21 -0
- package/src/form-submission/header/header.component.ts +12 -0
- package/src/form-submission/navigation-tabs/navigation-tabs.component.html +134 -0
- package/src/form-submission/navigation-tabs/navigation-tabs.component.scss +200 -0
- package/src/form-submission/navigation-tabs/navigation-tabs.component.spec.ts +21 -0
- package/src/form-submission/navigation-tabs/navigation-tabs.component.ts +134 -0
- package/src/form-submission/next-prev-navigation/next-prev-navigation.component.html +207 -0
- package/src/form-submission/next-prev-navigation/next-prev-navigation.component.scss +208 -0
- package/src/form-submission/next-prev-navigation/next-prev-navigation.component.spec.ts +21 -0
- package/src/form-submission/next-prev-navigation/next-prev-navigation.component.ts +74 -0
- package/src/form-submission/save-as-draft/saveDraftModalComponent .ts +60 -0
- package/src/form-submission/save-as-draft/saveDraftModalComponent.html +33 -0
- package/src/form-submission/save-as-draft/saveDraftModalComponent.scss +195 -0
- package/src/form-submission/submission-container/submission-container.component.html +30 -0
- package/src/form-submission/submission-container/submission-container.component.scss +67 -0
- package/src/form-submission/submission-container/submission-container.component.spec.ts +21 -0
- package/src/form-submission/submission-container/submission-container.component.ts +14 -0
- package/src/form-submission/submit-form/submit-form.component.html +76 -0
- package/src/form-submission/submit-form/submit-form.component.scss +88 -0
- package/src/form-submission/submit-form/submit-form.component.spec.ts +21 -0
- package/src/form-submission/submit-form/submit-form.component.ts +1953 -0
- package/src/lib/form-submission.component.html +15 -0
- package/src/lib/form-submission.component.scss +1 -0
- package/src/lib/form-submission.component.ts +120 -0
- package/src/lib/form-submission.module.ts +31 -0
- package/src/lib/form-submission.service.spec.ts +16 -0
- package/src/lib/form-submission.service.ts +9 -0
- package/src/models/aggregate.model.ts +4 -0
- package/{models/answer.model.d.ts → src/models/answer.model.ts} +25 -23
- package/src/models/appearance.model.ts +64 -0
- package/{models/attachment.model.d.ts → src/models/attachment.model.ts} +6 -6
- package/{models/defaultAnswerEntry.model.d.ts → src/models/defaultAnswerEntry.model.ts} +7 -5
- package/{models/defaultAnswersModel.model.d.ts → src/models/defaultAnswersModel.model.ts} +5 -4
- package/{models/defaultQuestionAnswer.model.d.ts → src/models/defaultQuestionAnswer.model.ts} +6 -6
- package/src/models/elementOptionAPI.model.ts +13 -0
- package/src/models/elementOptionAPIData.model.ts +5 -0
- package/src/models/elementOptionDB.model.ts +9 -0
- package/src/models/elementOptionDBCriteria.model.ts +7 -0
- package/{models/emitters.model.d.ts → src/models/emitters.model.ts} +8 -8
- package/{models/enum/condition.enum.d.ts → src/models/enum/condition.enum.ts} +2 -2
- package/src/models/enum/elementType .enum.ts +22 -0
- package/src/models/enum/entityType.enum.ts +10 -0
- package/{models/formConfiguration.model.d.ts → src/models/formConfiguration.model.ts} +2 -2
- package/{models/formElement.model.d.ts → src/models/formElement.model.ts} +22 -22
- package/{models/formElementType.model.d.ts → src/models/formElementType.model.ts} +3 -2
- package/{models/grid.model.d.ts → src/models/grid.model.ts} +14 -13
- package/{models/hiddenField.model.d.ts → src/models/hiddenField.model.ts} +5 -5
- package/{models/iFrameProperties.model.d.ts → src/models/iFrameProperties.model.ts} +13 -13
- package/src/models/logic.model.ts +11 -0
- package/src/models/multifields.model.ts +12 -0
- package/{models/option.model.d.ts → src/models/option.model.ts} +5 -5
- package/src/models/page.model.ts +7 -0
- package/src/models/publicForm.model.ts +19 -0
- package/src/models/question.model.ts +27 -0
- package/src/models/questionAnswer.model.ts +8 -0
- package/src/models/questionGroup.model.ts +12 -0
- package/src/models/response.model.ts +9 -0
- package/src/models/result.model.ts +5 -0
- package/{models/row.model.d.ts → src/models/row.model.ts} +2 -1
- package/src/models/scoring.model.ts +10 -0
- package/src/models/section.model.ts +6 -0
- package/src/models/subForm.model.ts +25 -0
- package/src/models/subformConfiguration.model.ts +4 -0
- package/src/models/subformPropery.model.ts +8 -0
- package/{models/submission.model.d.ts → src/models/submission.model.ts} +16 -14
- package/{models/submissionCopyConfig.mopdel.d.ts → src/models/submissionCopyConfig.mopdel.ts} +4 -4
- package/{models/terms&condition.model.d.ts → src/models/terms&condition.model.ts} +1 -1
- package/src/models/validation.model.ts +48 -0
- package/src/models/whenClause.model.ts +7 -0
- package/{models/whenClauseCondition.model.d.ts → src/models/whenClauseCondition.model.ts} +6 -6
- package/{models/whenClauseElements.model.d.ts → src/models/whenClauseElements.model.ts} +6 -5
- package/{public-api.d.ts → src/public-api.ts} +4 -0
- package/src/question/card-subform/card-subform.component.html +282 -0
- package/src/question/card-subform/card-subform.component.scss +49 -0
- package/src/question/card-subform/card-subform.component.spec.ts +21 -0
- package/src/question/card-subform/card-subform.component.ts +407 -0
- package/src/question/confirm-dialog/confirm-dialog.component.html +32 -0
- package/src/question/confirm-dialog/confirm-dialog.component.scss +109 -0
- package/src/question/confirm-dialog/confirm-dialog.component.spec.ts +21 -0
- package/src/question/confirm-dialog/confirm-dialog.component.ts +24 -0
- package/src/question/form-elements/form-elements.component.html +28 -0
- package/src/question/form-elements/form-elements.component.scss +0 -0
- package/src/question/form-elements/form-elements.component.spec.ts +21 -0
- package/src/question/form-elements/form-elements.component.ts +41 -0
- package/src/question/inline-multiple-subform/inline-multiple-subform.component.html +321 -0
- package/src/question/inline-multiple-subform/inline-multiple-subform.component.scss +78 -0
- package/src/question/inline-multiple-subform/inline-multiple-subform.component.spec.ts +21 -0
- package/src/question/inline-multiple-subform/inline-multiple-subform.component.ts +425 -0
- package/src/question/multifields/multifields.component.html +78 -0
- package/src/question/multifields/multifields.component.scss +6 -0
- package/src/question/multifields/multifields.component.spec.ts +21 -0
- package/src/question/multifields/multifields.component.ts +27 -0
- package/src/question/multiple-subform/multiple-subform.component.html +185 -0
- package/src/question/multiple-subform/multiple-subform.component.scss +52 -0
- package/src/question/multiple-subform/multiple-subform.component.spec.ts +21 -0
- package/src/question/multiple-subform/multiple-subform.component.ts +481 -0
- package/src/question/question/question.component.html +51 -0
- package/src/question/question/question.component.scss +0 -0
- package/src/question/question/question.component.spec.ts +21 -0
- package/src/question/question/question.component.ts +129 -0
- package/src/question/question-group/question-group.component.html +147 -0
- package/src/question/question-group/question-group.component.scss +36 -0
- package/src/question/question-group/question-group.component.spec.ts +21 -0
- package/src/question/question-group/question-group.component.ts +94 -0
- package/src/question/question.module.ts +22 -0
- package/src/question/recursive-logic/recursive-logic.component.html +33 -0
- package/src/question/recursive-logic/recursive-logic.component.scss +0 -0
- package/src/question/recursive-logic/recursive-logic.component.spec.ts +21 -0
- package/src/question/recursive-logic/recursive-logic.component.ts +29 -0
- package/src/question/sub-form/sub-form.component.html +254 -0
- package/src/question/sub-form/sub-form.component.scss +83 -0
- package/src/question/sub-form/sub-form.component.spec.ts +21 -0
- package/src/question/sub-form/sub-form.component.ts +421 -0
- package/src/services/aggregate.service.ts +148 -0
- package/src/services/countryService.ts +92 -0
- package/src/services/data.service.ts +36 -0
- package/src/services/element-tracker.service.spec.ts +16 -0
- package/src/services/element-tracker.service.ts +24 -0
- package/src/services/form-validation.service.ts +151 -0
- package/src/services/form.service.spec.ts +16 -0
- package/src/services/form.service.ts +407 -0
- package/src/services/mapper.service.ts +625 -0
- package/src/services/recaptcha.service.spec.ts +16 -0
- package/src/services/recaptcha.service.ts +179 -0
- package/src/services/score.service.ts +352 -0
- package/src/services/subform-copy.service.ts +148 -0
- package/src/services/validation.service.spec.ts +16 -0
- package/src/services/validation.service.ts +33 -0
- package/src/services/whenClause.service.ts +502 -0
- package/src/shared/shared.module.ts +58 -0
- package/src/styles/shared-style.scss +86 -0
- package/src/sub-form/sub-form.module.ts +24 -0
- package/src/sub-form/submission-modal/submission-modal.component.html +160 -0
- package/src/sub-form/submission-modal/submission-modal.component.scss +54 -0
- package/src/sub-form/submission-modal/submission-modal.component.spec.ts +21 -0
- package/src/sub-form/submission-modal/submission-modal.component.ts +127 -0
- package/tsconfig.lib.json +14 -0
- package/tsconfig.lib.prod.json +10 -0
- package/tsconfig.spec.json +14 -0
- package/environment/environment.d.ts +0 -5
- package/esm2022/environment/environment.mjs +0 -6
- package/esm2022/form-fields/aggregate-function/aggregate-function.component.mjs +0 -146
- package/esm2022/form-fields/check-box-fields/check-box-fields.component.mjs +0 -473
- package/esm2022/form-fields/currency-fields/currency-fields.component.mjs +0 -502
- package/esm2022/form-fields/date-time-fields/date-time-fields.component.mjs +0 -608
- package/esm2022/form-fields/drop-down-fields/drop-down-fields.component.mjs +0 -585
- package/esm2022/form-fields/file-picker-fields/file-picker-fields.component.mjs +0 -224
- package/esm2022/form-fields/form-fields.module.mjs +0 -174
- package/esm2022/form-fields/hidden-field/hidden-field.component.mjs +0 -137
- package/esm2022/form-fields/iframe-fields/iframe-fields.component.mjs +0 -198
- package/esm2022/form-fields/location-fields/location-fields.component.mjs +0 -85
- package/esm2022/form-fields/mail-fields/mail-fields.component.mjs +0 -131
- package/esm2022/form-fields/mobile-fields/mobile-fields.component.mjs +0 -270
- package/esm2022/form-fields/number-fields/number-fields.component.mjs +0 -242
- package/esm2022/form-fields/password-fields/password-fields.component.mjs +0 -257
- package/esm2022/form-fields/radio-button-fields/radio-button-fields.component.mjs +0 -346
- package/esm2022/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.mjs +0 -148
- package/esm2022/form-fields/section-fields/section-fields.component.mjs +0 -29
- package/esm2022/form-fields/selection-matrix-fields/selection-matrix-fields.component.mjs +0 -158
- package/esm2022/form-fields/signature-fields/signature-fields.component.mjs +0 -32
- package/esm2022/form-fields/slider-fields/slider-fields.component.mjs +0 -73
- package/esm2022/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.mjs +0 -66
- package/esm2022/form-fields/text-area-fields/text-area-fields.component.mjs +0 -159
- package/esm2022/form-fields/text-fields/text-fields.component.mjs +0 -245
- package/esm2022/form-fields/toggle-switch-fields/toggle-switch-fields.component.mjs +0 -85
- package/esm2022/form-fields/url-fields/url-fields.component.mjs +0 -124
- package/esm2022/form-submission/form-submission.module.mjs +0 -64
- package/esm2022/form-submission/header/header.component.mjs +0 -20
- package/esm2022/form-submission/navigation-tabs/navigation-tabs.component.mjs +0 -171
- package/esm2022/form-submission/next-prev-navigation/next-prev-navigation.component.mjs +0 -124
- package/esm2022/form-submission/save-as-draft/saveDraftModalComponent .mjs +0 -50
- package/esm2022/form-submission/submission-container/submission-container.component.mjs +0 -17
- package/esm2022/form-submission/submit-form/submit-form.component.mjs +0 -1610
- package/esm2022/lib/form-submission.component.mjs +0 -113
- package/esm2022/lib/form-submission.module.mjs +0 -56
- package/esm2022/lib/form-submission.service.mjs +0 -14
- package/esm2022/models/aggregate.model.mjs +0 -2
- package/esm2022/models/answer.model.mjs +0 -2
- package/esm2022/models/appearance.model.mjs +0 -2
- package/esm2022/models/attachment.model.mjs +0 -2
- package/esm2022/models/defaultAnswerEntry.model.mjs +0 -2
- package/esm2022/models/defaultAnswersModel.model.mjs +0 -2
- package/esm2022/models/defaultQuestionAnswer.model.mjs +0 -2
- package/esm2022/models/elementOptionAPI.model.mjs +0 -2
- package/esm2022/models/elementOptionAPIData.model.mjs +0 -2
- package/esm2022/models/elementOptionDB.model.mjs +0 -2
- package/esm2022/models/elementOptionDBCriteria.model.mjs +0 -2
- package/esm2022/models/emitters.model.mjs +0 -2
- package/esm2022/models/enum/condition.enum.mjs +0 -18
- package/esm2022/models/enum/elementType .enum.mjs +0 -24
- package/esm2022/models/enum/entityType.enum.mjs +0 -12
- package/esm2022/models/formConfiguration.model.mjs +0 -2
- package/esm2022/models/formElement.model.mjs +0 -2
- package/esm2022/models/formElementType.model.mjs +0 -2
- package/esm2022/models/grid.model.mjs +0 -2
- package/esm2022/models/hiddenField.model.mjs +0 -2
- package/esm2022/models/iFrameProperties.model.mjs +0 -2
- package/esm2022/models/logic.model.mjs +0 -2
- package/esm2022/models/multifields.model.mjs +0 -2
- package/esm2022/models/option.model.mjs +0 -2
- package/esm2022/models/page.model.mjs +0 -2
- package/esm2022/models/publicForm.model.mjs +0 -2
- package/esm2022/models/question.model.mjs +0 -2
- package/esm2022/models/questionAnswer.model.mjs +0 -2
- package/esm2022/models/questionGroup.model.mjs +0 -2
- package/esm2022/models/row.model.mjs +0 -2
- package/esm2022/models/scoring.model.mjs +0 -2
- package/esm2022/models/section.model.mjs +0 -2
- package/esm2022/models/subForm.model.mjs +0 -2
- package/esm2022/models/subformConfiguration.model.mjs +0 -2
- package/esm2022/models/subformPropery.model.mjs +0 -2
- package/esm2022/models/submission.model.mjs +0 -2
- package/esm2022/models/submissionCopyConfig.mopdel.mjs +0 -2
- package/esm2022/models/terms&condition.model.mjs +0 -2
- package/esm2022/models/validation.model.mjs +0 -2
- package/esm2022/models/whenClause.model.mjs +0 -2
- package/esm2022/models/whenClauseCondition.model.mjs +0 -2
- package/esm2022/models/whenClauseElements.model.mjs +0 -2
- package/esm2022/piserve-tech-form-submission.mjs +0 -5
- package/esm2022/public-api.mjs +0 -7
- package/esm2022/question/card-subform/card-subform.component.mjs +0 -354
- package/esm2022/question/confirm-dialog/confirm-dialog.component.mjs +0 -27
- package/esm2022/question/form-elements/form-elements.component.mjs +0 -62
- package/esm2022/question/inline-multiple-subform/inline-multiple-subform.component.mjs +0 -384
- package/esm2022/question/multifields/multifields.component.mjs +0 -54
- package/esm2022/question/multiple-subform/multiple-subform.component.mjs +0 -413
- package/esm2022/question/question/question.component.mjs +0 -145
- package/esm2022/question/question-group/question-group.component.mjs +0 -102
- package/esm2022/question/recursive-logic/recursive-logic.component.mjs +0 -49
- package/esm2022/question/sub-form/sub-form.component.mjs +0 -351
- package/esm2022/services/aggregate.service.mjs +0 -139
- package/esm2022/services/countryService.mjs +0 -89
- package/esm2022/services/data.service.mjs +0 -36
- package/esm2022/services/element-tracker.service.mjs +0 -27
- package/esm2022/services/form-validation.service.mjs +0 -128
- package/esm2022/services/form.service.mjs +0 -333
- package/esm2022/services/mapper.service.mjs +0 -519
- package/esm2022/services/recaptcha.service.mjs +0 -136
- package/esm2022/services/score.service.mjs +0 -268
- package/esm2022/services/subform-copy.service.mjs +0 -122
- package/esm2022/services/validation.service.mjs +0 -35
- package/esm2022/services/whenClause.service.mjs +0 -423
- package/esm2022/shared/shared.module.mjs +0 -97
- package/esm2022/sub-form/submission-modal/submission-modal.component.mjs +0 -133
- package/fesm2022/piserve-tech-form-submission.mjs +0 -11658
- package/fesm2022/piserve-tech-form-submission.mjs.map +0 -1
- package/form-fields/aggregate-function/aggregate-function.component.d.ts +0 -43
- package/form-fields/check-box-fields/check-box-fields.component.d.ts +0 -73
- package/form-fields/currency-fields/currency-fields.component.d.ts +0 -62
- package/form-fields/date-time-fields/date-time-fields.component.d.ts +0 -96
- package/form-fields/drop-down-fields/drop-down-fields.component.d.ts +0 -88
- package/form-fields/file-picker-fields/file-picker-fields.component.d.ts +0 -72
- package/form-fields/form-fields.module.d.ts +0 -40
- package/form-fields/hidden-field/hidden-field.component.d.ts +0 -38
- package/form-fields/iframe-fields/iframe-fields.component.d.ts +0 -35
- package/form-fields/location-fields/location-fields.component.d.ts +0 -29
- package/form-fields/mail-fields/mail-fields.component.d.ts +0 -41
- package/form-fields/mobile-fields/mobile-fields.component.d.ts +0 -71
- package/form-fields/number-fields/number-fields.component.d.ts +0 -53
- package/form-fields/password-fields/password-fields.component.d.ts +0 -57
- package/form-fields/radio-button-fields/radio-button-fields.component.d.ts +0 -70
- package/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.d.ts +0 -46
- package/form-fields/section-fields/section-fields.component.d.ts +0 -10
- package/form-fields/selection-matrix-fields/selection-matrix-fields.component.d.ts +0 -45
- package/form-fields/signature-fields/signature-fields.component.d.ts +0 -13
- package/form-fields/slider-fields/slider-fields.component.d.ts +0 -32
- package/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.d.ts +0 -26
- package/form-fields/text-area-fields/text-area-fields.component.d.ts +0 -49
- package/form-fields/text-fields/text-fields.component.d.ts +0 -49
- package/form-fields/toggle-switch-fields/toggle-switch-fields.component.d.ts +0 -29
- package/form-fields/url-fields/url-fields.component.d.ts +0 -41
- package/form-submission/form-submission.module.d.ts +0 -20
- package/form-submission/header/header.component.d.ts +0 -7
- package/form-submission/navigation-tabs/navigation-tabs.component.d.ts +0 -57
- package/form-submission/next-prev-navigation/next-prev-navigation.component.d.ts +0 -46
- package/form-submission/save-as-draft/saveDraftModalComponent .d.ts +0 -17
- package/form-submission/submission-container/submission-container.component.d.ts +0 -7
- package/form-submission/submit-form/submit-form.component.d.ts +0 -237
- package/index.d.ts +0 -5
- package/lib/form-submission.component.d.ts +0 -30
- package/lib/form-submission.module.d.ts +0 -16
- package/lib/form-submission.service.d.ts +0 -6
- package/models/aggregate.model.d.ts +0 -4
- package/models/appearance.model.d.ts +0 -64
- package/models/elementOptionAPI.model.d.ts +0 -12
- package/models/elementOptionAPIData.model.d.ts +0 -5
- package/models/elementOptionDB.model.d.ts +0 -8
- package/models/elementOptionDBCriteria.model.d.ts +0 -7
- package/models/enum/elementType .enum.d.ts +0 -22
- package/models/enum/entityType.enum.d.ts +0 -10
- package/models/logic.model.d.ts +0 -9
- package/models/multifields.model.d.ts +0 -11
- package/models/page.model.d.ts +0 -6
- package/models/publicForm.model.d.ts +0 -18
- package/models/question.model.d.ts +0 -26
- package/models/questionAnswer.model.d.ts +0 -7
- package/models/questionGroup.model.d.ts +0 -11
- package/models/scoring.model.d.ts +0 -10
- package/models/section.model.d.ts +0 -6
- package/models/subForm.model.d.ts +0 -24
- package/models/subformConfiguration.model.d.ts +0 -4
- package/models/subformPropery.model.d.ts +0 -7
- package/models/validation.model.d.ts +0 -48
- package/models/whenClause.model.d.ts +0 -6
- package/question/card-subform/card-subform.component.d.ts +0 -44
- package/question/confirm-dialog/confirm-dialog.component.d.ts +0 -12
- package/question/form-elements/form-elements.component.d.ts +0 -20
- package/question/inline-multiple-subform/inline-multiple-subform.component.d.ts +0 -47
- package/question/multifields/multifields.component.d.ts +0 -11
- package/question/multiple-subform/multiple-subform.component.d.ts +0 -39
- package/question/question/question.component.d.ts +0 -30
- package/question/question-group/question-group.component.d.ts +0 -29
- package/question/recursive-logic/recursive-logic.component.d.ts +0 -19
- package/question/sub-form/sub-form.component.d.ts +0 -70
- package/services/aggregate.service.d.ts +0 -29
- package/services/countryService.d.ts +0 -21
- package/services/data.service.d.ts +0 -19
- package/services/element-tracker.service.d.ts +0 -10
- package/services/form-validation.service.d.ts +0 -16
- package/services/form.service.d.ts +0 -27
- package/services/mapper.service.d.ts +0 -31
- package/services/recaptcha.service.d.ts +0 -46
- package/services/score.service.d.ts +0 -27
- package/services/subform-copy.service.d.ts +0 -10
- package/services/validation.service.d.ts +0 -14
- package/services/whenClause.service.d.ts +0 -45
- package/shared/shared.module.d.ts +0 -25
- package/sub-form/submission-modal/submission-modal.component.d.ts +0 -31
- /package/{assets → src/assets}/fonts/Garamond.woff2 +0 -0
- /package/{assets → src/assets}/fonts/Georgia.woff2 +0 -0
- /package/{assets → src/assets}/fonts/Poppins.woff2 +0 -0
- /package/{assets → src/assets}/fonts/Tahoma.woff2 +0 -0
- /package/{assets → src/assets}/fonts/Tajawal.woff2 +0 -0
- /package/{assets → src/assets}/fonts/Verdana.woff2 +0 -0
- /package/{assets → src/assets}/icons/left_arrow.svg +0 -0
- /package/{assets → src/assets}/icons/right_arrow.svg +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"piserve-tech-form-submission.mjs","sources":["../../../projects/form-submission/src/lib/form-submission.service.ts","../../../projects/form-submission/src/environment/environment.ts","../../../projects/form-submission/src/services/mapper.service.ts","../../../projects/form-submission/src/services/validation.service.ts","../../../projects/form-submission/src/services/form-validation.service.ts","../../../projects/form-submission/src/services/whenClause.service.ts","../../../projects/form-submission/src/form-fields/section-fields/section-fields.component.ts","../../../projects/form-submission/src/form-fields/section-fields/section-fields.component.html","../../../projects/form-submission/src/services/data.service.ts","../../../projects/form-submission/src/services/form.service.ts","../../../projects/form-submission/src/services/element-tracker.service.ts","../../../projects/form-submission/src/services/score.service.ts","../../../projects/form-submission/src/form-fields/check-box-fields/check-box-fields.component.ts","../../../projects/form-submission/src/form-fields/check-box-fields/check-box-fields.component.html","../../../projects/form-submission/src/form-fields/date-time-fields/date-time-fields.component.ts","../../../projects/form-submission/src/form-fields/date-time-fields/date-time-fields.component.html","../../../projects/form-submission/src/form-fields/drop-down-fields/drop-down-fields.component.ts","../../../projects/form-submission/src/form-fields/drop-down-fields/drop-down-fields.component.html","../../../projects/form-submission/src/form-fields/file-picker-fields/file-picker-fields.component.ts","../../../projects/form-submission/src/form-fields/file-picker-fields/file-picker-fields.component.html","../../../projects/form-submission/src/form-fields/location-fields/location-fields.component.ts","../../../projects/form-submission/src/form-fields/location-fields/location-fields.component.html","../../../projects/form-submission/src/form-fields/mail-fields/mail-fields.component.ts","../../../projects/form-submission/src/form-fields/mail-fields/mail-fields.component.html","../../../projects/form-submission/src/services/countryService.ts","../../../projects/form-submission/src/form-fields/mobile-fields/mobile-fields.component.ts","../../../projects/form-submission/src/form-fields/mobile-fields/mobile-fields.component.html","../../../projects/form-submission/src/services/aggregate.service.ts","../../../projects/form-submission/src/form-fields/number-fields/number-fields.component.ts","../../../projects/form-submission/src/form-fields/number-fields/number-fields.component.html","../../../projects/form-submission/src/form-fields/password-fields/password-fields.component.ts","../../../projects/form-submission/src/form-fields/password-fields/password-fields.component.html","../../../projects/form-submission/src/form-fields/radio-button-fields/radio-button-fields.component.ts","../../../projects/form-submission/src/form-fields/radio-button-fields/radio-button-fields.component.html","../../../projects/form-submission/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.ts","../../../projects/form-submission/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.html","../../../projects/form-submission/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.ts","../../../projects/form-submission/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.html","../../../projects/form-submission/src/form-fields/signature-fields/signature-fields.component.ts","../../../projects/form-submission/src/form-fields/signature-fields/signature-fields.component.html","../../../projects/form-submission/src/form-fields/slider-fields/slider-fields.component.ts","../../../projects/form-submission/src/form-fields/slider-fields/slider-fields.component.html","../../../projects/form-submission/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.ts","../../../projects/form-submission/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.html","../../../projects/form-submission/src/form-fields/text-area-fields/text-area-fields.component.ts","../../../projects/form-submission/src/form-fields/text-area-fields/text-area-fields.component.html","../../../projects/form-submission/src/form-fields/text-fields/text-fields.component.ts","../../../projects/form-submission/src/form-fields/text-fields/text-fields.component.html","../../../projects/form-submission/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.ts","../../../projects/form-submission/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.html","../../../projects/form-submission/src/form-fields/url-fields/url-fields.component.ts","../../../projects/form-submission/src/form-fields/url-fields/url-fields.component.html","../../../projects/form-submission/src/form-fields/aggregate-function/aggregate-function.component.ts","../../../projects/form-submission/src/form-fields/aggregate-function/aggregate-function.component.html","../../../projects/form-submission/src/form-fields/currency-fields/currency-fields.component.ts","../../../projects/form-submission/src/form-fields/currency-fields/currency-fields.component.html","../../../projects/form-submission/src/form-fields/hidden-field/hidden-field.component.ts","../../../projects/form-submission/src/form-fields/iframe-fields/iframe-fields.component.ts","../../../projects/form-submission/src/form-fields/iframe-fields/iframe-fields.component.html","../../../projects/form-submission/src/question/question/question.component.ts","../../../projects/form-submission/src/question/question/question.component.html","../../../projects/form-submission/src/question/confirm-dialog/confirm-dialog.component.ts","../../../projects/form-submission/src/question/confirm-dialog/confirm-dialog.component.html","../../../projects/form-submission/src/services/subform-copy.service.ts","../../../projects/form-submission/src/sub-form/submission-modal/submission-modal.component.ts","../../../projects/form-submission/src/sub-form/submission-modal/submission-modal.component.html","../../../projects/form-submission/src/question/multiple-subform/multiple-subform.component.ts","../../../projects/form-submission/src/question/multiple-subform/multiple-subform.component.html","../../../projects/form-submission/src/question/inline-multiple-subform/inline-multiple-subform.component.ts","../../../projects/form-submission/src/question/inline-multiple-subform/inline-multiple-subform.component.html","../../../projects/form-submission/src/question/card-subform/card-subform.component.ts","../../../projects/form-submission/src/question/card-subform/card-subform.component.html","../../../projects/form-submission/src/question/sub-form/sub-form.component.ts","../../../projects/form-submission/src/question/sub-form/sub-form.component.html","../../../projects/form-submission/src/question/question-group/question-group.component.ts","../../../projects/form-submission/src/question/question-group/question-group.component.html","../../../projects/form-submission/src/question/multifields/multifields.component.ts","../../../projects/form-submission/src/question/multifields/multifields.component.html","../../../projects/form-submission/src/question/recursive-logic/recursive-logic.component.ts","../../../projects/form-submission/src/question/recursive-logic/recursive-logic.component.html","../../../projects/form-submission/src/question/form-elements/form-elements.component.ts","../../../projects/form-submission/src/question/form-elements/form-elements.component.html","../../../projects/form-submission/src/form-submission/navigation-tabs/navigation-tabs.component.ts","../../../projects/form-submission/src/form-submission/navigation-tabs/navigation-tabs.component.html","../../../projects/form-submission/src/form-submission/save-as-draft/saveDraftModalComponent .ts","../../../projects/form-submission/src/form-submission/save-as-draft/saveDraftModalComponent.html","../../../projects/form-submission/src/services/recaptcha.service.ts","../../../projects/form-submission/src/form-submission/header/header.component.ts","../../../projects/form-submission/src/form-submission/header/header.component.html","../../../projects/form-submission/src/form-submission/next-prev-navigation/next-prev-navigation.component.ts","../../../projects/form-submission/src/form-submission/next-prev-navigation/next-prev-navigation.component.html","../../../projects/form-submission/src/form-submission/submission-container/submission-container.component.ts","../../../projects/form-submission/src/form-submission/submission-container/submission-container.component.html","../../../projects/form-submission/src/form-submission/submit-form/submit-form.component.ts","../../../projects/form-submission/src/form-submission/submit-form/submit-form.component.html","../../../projects/form-submission/src/lib/form-submission.component.ts","../../../projects/form-submission/src/lib/form-submission.component.html","../../../projects/form-submission/src/form-fields/form-fields.module.ts","../../../projects/form-submission/src/shared/shared.module.ts","../../../projects/form-submission/src/form-submission/form-submission.module.ts","../../../projects/form-submission/src/lib/form-submission.module.ts","../../../projects/form-submission/src/public-api.ts","../../../projects/form-submission/src/piserve-tech-form-submission.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FormSubmissionService {\n\n constructor() { }\n}\n","export let environment = {\n production: false,\n googleRecaptchaSiteKey: '',\n htmlDirection: 'ltr'\n };\n ","import { Appearance } from '../models/appearance.model';\nimport { ElementOptionAPI } from '../models/elementOptionAPI.model';\nimport { elementOptionAPIData } from '../models/elementOptionAPIData.model';\nimport { ElementOptionDB } from '../models/elementOptionDB.model';\nimport { ElementOptionDBCriteria } from '../models/elementOptionDBCriteria.model';\nimport { FormElement } from '../models/formElement.model';\nimport { Grid } from '../models/grid.model';\nimport { Page } from '../models/page.model';\nimport { PublicForm } from '../models/publicForm.model';\nimport { Question } from '../models/question.model';\nimport { Row } from '../models/row.model';\nimport { Validation } from '../models/validation.model';\nimport { Option } from '../models/option.model';\nimport { Section } from '../models/section.model';\nimport { SubForm } from '../models/subForm.model';\nimport { FormElementType } from '../models/formElementType.model';\nimport { Logic } from '../models/logic.model';\nimport { Attachment } from '../models/attachment.model';\nimport { Submission } from '../models/submission.model';\nimport { Answer } from '../models/answer.model';\nimport { termsAndConditionType } from '../models/terms&condition.model';\nimport { FormConfiguration } from '../models/formConfiguration.model';\nimport { QuestionGroup } from '../models/questionGroup.model';\nimport { SubformProperty } from '../models/subformPropery.model';\nimport { Multifields } from '../models/multifields.model';\nimport { AggregateFunction } from '../models/aggregate.model';\nimport { DefaultAnswersModel } from '../models/defaultAnswersModel.model';\nimport { DefaultAnswerEntry } from '../models/defaultAnswerEntry.model';\nimport { DefaultQuestionAnswer } from '../models/defaultQuestionAnswer.model';\nimport { SubformConfiguration } from '../models/subformConfiguration.model';\nimport { EmitterDTO } from '../models/emitters.model';\nimport { add } from 'ngx-bootstrap/chronos';\nimport { Scoring } from '../models/scoring.model';\nimport { HiddenField } from '../models/hiddenField.model';\nimport { IFrameProperties } from '../models/iFrameProperties.model';\nimport { SubmissionCopyConfig } from '../models/submissionCopyConfig.mopdel';\n\nexport function mapPublicFormToModel(apiPublicForm: any): PublicForm {\n return {\n name: apiPublicForm.result.name,\n formConfiguration: mapFormConfigurationToModel(\n apiPublicForm.result.moduleConfiguration\n ),\n currency:apiPublicForm?.result?.currency,\n defautlCurrency:apiPublicForm?.result?.defaultCurrency,\n pages: apiPublicForm.result.pages.map((apiPage: any) =>\n mapPageToModel(apiPage,apiPublicForm?.result?.currency,apiPublicForm?.result?.defaultCurrency)\n ),\n questionAnswers:apiPublicForm.result.questionAnswers,\n parentId:apiPublicForm.result.parentId,\n emitters: apiPublicForm.result.emittersDTOS\n ? apiPublicForm.result.emittersDTOS.map((emitter: any) => mapEmitterToModel(emitter))\n : [],\n score:apiPublicForm.score,\n maximumPossibleScore:apiPublicForm.maximumPossibleScore,\n };\n}\n\n\nexport function mapEmitterToModel(apiEmitter: any): EmitterDTO {\n return {\n id: apiEmitter.id,\n keyName: apiEmitter.keyName,\n valueSource: apiEmitter.valueSource,\n questionId: apiEmitter.questionId,\n inputValue: apiEmitter.inputValue,\n isConflict: apiEmitter.isConflict ?? false\n };\n}\n\n\nfunction mapFormConfigurationToModel(\n apiFormConfiguration: any\n): FormConfiguration {\n return {\n saveAutomatically: apiFormConfiguration?.saveAutomatically,\n saveInterval: apiFormConfiguration?.saveInterval,\n customizeFont: apiFormConfiguration?.customizeFont,\n fontFamily: apiFormConfiguration?.fontFamily,\n fontSize: apiFormConfiguration?.fontSize,\n enableDataExport: apiFormConfiguration?.enableDataExport,\n fileFormats: apiFormConfiguration?.fileFormats,\n enableQuestionNumbering: apiFormConfiguration?.enableQuestionNumbering,\n questionNumbering: apiFormConfiguration?.questionNumbering,\n enableGoogleRecaptcha: apiFormConfiguration?.enableGoogleRecaptcha,\n googleRecaptchaKey: apiFormConfiguration?.googleRecaptchaKey,\n googleRecaptchaSecret: apiFormConfiguration?.googleRecaptchaSecret,\n navigation: apiFormConfiguration?.navigation,\n markAllQuestionsAsRequired: apiFormConfiguration?.markAllQuestionsAsRequired,\n };\n}\n\n\n\nexport function mapPageToModel(apiPage: any, currency:any, defaultCurrency:any): Page {\n return {\n title: apiPage.title,\n testElementName: apiPage.testElementName,\n rows: apiPage?.rows?.map((apiRow: any) => mapRowToModel(apiRow,currency,defaultCurrency)),\n };\n}\n\nfunction mapRowToModel(apiRow: any, currency:any,defaultCurrency:any): Row {\n return {\n grid: apiRow.grid.map((apiGrid: any) => mapGridToModel(apiGrid,currency,defaultCurrency)),\n };\n}\n\nfunction mapGridToModel(apiGrid: any, currency:any,defaultCurrency:any): Grid {\n let entity: Section | Question | SubForm | QuestionGroup | Multifields | undefined;\n\n switch (apiGrid.entityType) {\n case 'QUESTION':\n entity = mapQuestionToModel(apiGrid.element,currency,defaultCurrency);\n break;\n case 'SECTION':\n entity = mapSectionToModel(apiGrid.element);\n break;\n case 'SUBFORM':\n entity = mapSubFormToModel(apiGrid.element,currency,defaultCurrency);\n break;\n case 'QUESTION_GROUP':\n entity = mapQuestionGroupToModel(apiGrid.element,currency,defaultCurrency);\n break;\n case 'MULTIFIELD':\n entity = mapMultifieldsToModel(apiGrid.element,currency,defaultCurrency);\n break;\n default:\n throw new Error(`Unknown entity type: ${apiGrid.entityType}`);\n }\n\n const whenClause = mapWhenClauseModel(apiGrid.whenClauseDTO);\n // read actions safely\n const actions: string[] = Array.isArray(whenClause?.whenClauseActions)\n ? whenClause.whenClauseActions\n : [];\n\n // pick last action if multiple (your UI prevents that but safe handling)\n const action = actions.length > 0 ? actions[actions.length - 1] : undefined;\n\n let shouldShow = true; // default visible\n\n if (action === 'SHOW') {\n shouldShow = false; // default hidden when action = SHOW\n }\n if (action === 'HIDE') {\n shouldShow = true; // default shown when action = HIDE\n }\n\n return {\n entityType: apiGrid.entityType,\n element: entity,\n whenClause: whenClause,\n show: shouldShow\n };\n}\n\nexport function mapWhenClauseModel(whenClauseDTO: any) {\n // 🧩 Guard: Handle undefined/null or malformed data\n if (!whenClauseDTO || !Array.isArray(whenClauseDTO.whenClauseCondition)) {\n\n return {\n activate: false,\n whenClauseCondition: [],\n whenClauseActions: []\n };\n }\n\n return {\n activate: !!whenClauseDTO.activate,\n whenClauseActions: whenClauseDTO.whenClauseActions || [],\n whenClauseCondition: whenClauseDTO.whenClauseCondition.map((condition: any) => ({\n logic: condition.logic || '',\n questionid: condition.questionid || '',\n condition: condition.condition || '',\n value: condition.value ?? '' // handle null/undefined gracefully\n }))\n };\n}\n\nexport function mapSectionToModel(apiSection: any): Section {\n return {\n id: apiSection.id,\n title: apiSection.title,\n description: apiSection.description,\n testElementName: apiSection.testElementName\n };\n}\n\nexport function mapQuestionToModel(apiQuestion: any, currency:any, defaultCurrency:any): Question {\n return {\n count: apiQuestion.count,\n id: apiQuestion.id,\n questionNumber: apiQuestion.questionNumber,\n required: apiQuestion.required,\n hint: apiQuestion.hint,\n question: apiQuestion.question,\n testElementName: apiQuestion.testElementName,\n answer: apiQuestion?.answer,\n validation: true,\n formElement: mapFormElementToModel(apiQuestion.formElement,currency,defaultCurrency),\n childLogics: apiQuestion?.childLogics?.map((logic: any) =>\n mapLogicToModel(logic, currency,defaultCurrency)\n ),\n answerId: apiQuestion?.answerId,\n attachments: apiQuestion?.attachments?.map((attachment: any) => mapAttachmentToModel(attachment)) || [],\n deleteFiles: [],\n defaultValue:apiQuestion?.defaultValue,\n disableEdit:apiQuestion?.disableEdit,\n score:apiQuestion.score,\n maximumPossibleScore:apiQuestion.maximumPossibleScore,\n amountInWords: apiQuestion?.amountInWords,\n answerCurrency:apiQuestion?.currencySymbol\n };\n}\n\nfunction mapAttachmentToModel(apiAttachment: any): Attachment {\n return {\n fileId: apiAttachment.fileId,\n fileName: apiAttachment.fileName,\n fileUrl: apiAttachment.fileUrl,\n fileSize:apiAttachment?.fileSize\n };\n}\n\nfunction mapFormElementToModel(apiFormElement: any, currency:any, defaultCurrency:any): FormElement {\n return {\n elementType: apiFormElement.elementType,\n appearance: mapAppearanceToModel(apiFormElement.appearance,currency,defaultCurrency),\n validation: mapValidationToModel(apiFormElement.validation),\n option: mapOptionToModel(apiFormElement?.option),\n aggregateFunction: mapAggregateFunction(apiFormElement?.aggregateFunction),\n selectionMatrixLabel: apiFormElement.selectionMatrixLabel,\n selectionMatrixColumn: apiFormElement.selectionMatrixColumn,\n termsAndConditionType: maptermsAndCondition(apiFormElement),\n scoring: mapScoringToModel(apiFormElement.scoring),\n hiddenField: mapHiddenFieldToModel(apiFormElement?.hiddenField),\n iFrameProperties: mapIframeProperties(apiFormElement?.iFrameProperties)\n };\n}\n\nfunction mapIframeProperties(iFrameProperties: any): IFrameProperties {\n return {\n contentType: iFrameProperties?.contentType,\n url: iFrameProperties?.url,\n html: iFrameProperties?.html,\n style: iFrameProperties?.style,\n script: iFrameProperties?.script\n }\n}\n\nfunction mapHiddenFieldToModel(hiddenField: any): HiddenField {\n return {\n value: hiddenField?.value,\n valueSource: hiddenField?.valueSource,\n key: hiddenField?.key\n }\n}\n\nfunction mapAggregateFunction(aggregateFunction: any): AggregateFunction | undefined {\n if (!aggregateFunction) {\n return undefined;\n }\n\n return {\n aggregateOperation: aggregateFunction.aggregateOperation,\n formula: aggregateFunction.formula\n };\n}\n\nfunction maptermsAndCondition(Element: any): termsAndConditionType {\n if(Element.termsAndCondition != undefined){\n let data = Element.termsAndCondition\n return {\n termsAndConditionType: data.termsAndConditionType,\n fileUrl: data.fileUrl,\n fileName: data.fileName,\n };\n }\n else{\n return {\n termsAndConditionType: '',\n fileUrl: '',\n fileName: '',\n }\n }\n\n}\n\nfunction mapLogicToModel(apiLogic: any, currency:any,defaultCurrency:any): Logic {\n return {\n id: apiLogic.id,\n inputValue: apiLogic.inputValue,\n condition: apiLogic.condition,\n showLogic: false,\n rows: apiLogic?.rows?.map((element: any) =>\n mapRowToModel(element,currency,defaultCurrency)\n ),\n };\n}\n\nexport function mapSubFormToModel(apiSubForm: any, currency:any,defaultCurrency:any): SubForm {\n return {\n id: apiSubForm.id,\n count: apiSubForm.count,\n title: apiSubForm.title,\n description: apiSubForm.description,\n testElementName: apiSubForm.testElementName,\n rows: apiSubForm.rows.map((element: any) => mapRowToModel(element,currency,defaultCurrency)),\n submissions: apiSubForm?.submissions?.map((submission: any) => mapSubmissionToModel(submission)),\n property: apiSubForm.property ? mapPropertyToModel(apiSubForm.property) : undefined,\n defaultAnswers: apiSubForm.defaultAnswers ? mapDefaultAnswersToModel(apiSubForm.defaultAnswers) : undefined,\n deleted: false,\n scores:apiSubForm.scores,\n maximumPossibleScore:apiSubForm.maximumPossibleScore,\n submissionCopyConfig: mapSubmissionCopyConfig(apiSubForm.submissionCopyConfig),\n required: apiSubForm.required\n };\n}\n\nexport function mapSubmissionCopyConfig(copyConfig:any): SubmissionCopyConfig | undefined {\n if(!copyConfig) return undefined;\n return {\n allowCopyFromOtherSubmissions: copyConfig.allowCopyFromOtherSubmissions,\n editableQuestions: copyConfig.editableQuestions,\n };\n}\n\nexport function mapDefaultAnswersToModel(apiDefaultAnswers: any): DefaultAnswersModel {\n return {\n answers: apiDefaultAnswers.answers.map((entry: any) => mapDefaultAnswerEntry(entry))\n };\n}\n\nexport function mapDefaultAnswerEntry(apiEntry: any): DefaultAnswerEntry {\n return {\n isDeleteEnable: apiEntry.isDeleteEnable,\n defaultQuestionsAnswers: apiEntry.defaultQuestionsAnswers.map((question: any) => mapDefaultQuestionAnswer(question))\n };\n}\n\nexport function mapDefaultQuestionAnswer(apiQuestion: any): DefaultQuestionAnswer {\n return {\n defaultAnswer: apiQuestion.defaultAnswer,\n readOnly: apiQuestion.readOnly,\n isDeleteEnable: apiQuestion.isDeleteEnable,\n questionId: apiQuestion.questionId\n };\n}\n\nfunction mapPropertyToModel(apiProperty: any): SubformProperty {\n return {\n subFormStructure: apiProperty.subFormStructure,\n subFormType: apiProperty.subFormType,\n allowDelete: apiProperty.allowDelete,\n allowCopy: apiProperty.allowCopy,\n addButtonLabel: apiProperty.addButtonLabel\n };\n}\n\nexport function mapQuestionGroupToModel(apiQuestionGroup: any,currency:any,defaultCurrency:any): QuestionGroup {\n return {\n id: apiQuestionGroup.id,\n count: apiQuestionGroup.count,\n title: apiQuestionGroup.title,\n description: apiQuestionGroup.description,\n testElementName: apiQuestionGroup.testElementName,\n rows: apiQuestionGroup.rows.map((element: any) => mapRowToModel(element,currency,defaultCurrency)),\n submissions: apiQuestionGroup?.submissions?.map((submission: any) => mapSubmissionToModel(submission)),\n };\n}\n\nexport function mapMultifieldsToModel(apiQuestionGroup: any,currency:any,defaultCurrency:any): Multifields {\n return {\n id: apiQuestionGroup.id,\n question: apiQuestionGroup.question,\n questionNumber: apiQuestionGroup.questionNumber,\n count: apiQuestionGroup.count,\n testElementName: apiQuestionGroup.testElementName,\n rows: apiQuestionGroup.rows.map((element: any) => mapRowToModel(element,currency,defaultCurrency)),\n submissions: apiQuestionGroup?.submissions?.map((submission: any) => mapSubmissionToModel(submission)),\n };\n}\n\nfunction mapSubmissionToModel(apiSubmission: any): Submission {\n return {\n submissionId: apiSubmission?.submissionId,\n answers: apiSubmission?.answers?.map((answer: any) => mapAnswerToModel(answer)),\n configuration: mapSubformConfiguration(apiSubmission?.configuration),\n scores:apiSubmission.scores,\n sourceSubmissionId:apiSubmission.sourceSubmissionId,\n isCopied:apiSubmission.isCopied\n };\n}\n\nfunction mapAnswerToModel(apiAnswer: any): Answer {\n return {\n questionId: apiAnswer.questionId,\n answer: apiAnswer?.answer,\n answerId: apiAnswer?.answerId,\n attachments: apiAnswer?.attachments?.map((attachment: any) => mapAttachmentToModel(attachment)),\n scores:apiAnswer.scores,\n maximumPossibleScore:apiAnswer.maximumPossibleScore,\n show:apiAnswer?.show,\n amountInWords: apiAnswer?.amountInWords,\n answerCurrency:apiAnswer?.currencySymbol\n };\n}\n\nfunction mapSubformConfiguration(config: any): SubformConfiguration | undefined {\n if (!config) return undefined;\n return {\n allowDelete: !!config.allowDelete,\n isDefault: !!config.isDefault,\n };\n}\n\nexport function mapFormElementTypeToModel(\n apiFormElementType: any\n): FormElementType<any> {\n return {\n entityType: apiFormElementType?.entityType,\n element: apiFormElementType?.element,\n };\n}\n\nfunction mapAppearanceToModel(apiAppearance: any, currency:any, defaultCurrency:any): Appearance {\n return {\n placeholder: apiAppearance?.placeholder,\n fontSize: apiAppearance?.fontSize,\n textAlign: apiAppearance?.textAlign,\n font: apiAppearance?.font,\n underline: apiAppearance?.underline,\n bold: apiAppearance?.bold,\n italics: apiAppearance?.italics,\n defaultValue: apiAppearance?.defaultValue,\n numberOfRows: apiAppearance?.numberOfRows,\n singleSelection: apiAppearance?.singleSelection,\n displayCountryCode: apiAppearance?.displayCountryCode,\n displayFlag: apiAppearance?.displayFlag,\n displayCode: apiAppearance?.displayCode,\n showCountryName: apiAppearance?.showCountryName,\n beautifyNumbers: apiAppearance?.beautifyNumbers,\n upAndDownButton: apiAppearance?.upAndDownButton,\n allowNegativeValues: apiAppearance?.allowNegativeValues,\n showPreviewButton: apiAppearance?.showPreviewButton,\n confirmPassword: apiAppearance?.confirmPassword,\n viewButton: apiAppearance?.viewButton,\n displayStrong: apiAppearance?.displayStrong,\n dateType: apiAppearance?.dateType,\n format: apiAppearance?.format,\n setCurrentPosition: apiAppearance?.setCurrentPosition,\n defaultZoomLevel: apiAppearance?.defaultZoomLevel,\n allowFullScreen: apiAppearance?.allowFullScreen,\n latitude: apiAppearance?.latitude,\n longitude: apiAppearance?.longitude,\n showAcceptButton: apiAppearance?.showAcceptButton,\n labelOnValue: apiAppearance?.labelOnValue,\n labelOffValue: apiAppearance?.labelOffValue,\n labelOnColor: apiAppearance?.labelOnColor,\n labelOffColor: apiAppearance?.labelOffColor,\n minValue: apiAppearance?.minValue,\n maxValue: apiAppearance?.maxValue,\n stepValue: apiAppearance?.stepValue,\n changeSliderColor: apiAppearance?.changeSliderColor,\n sliderColor: apiAppearance?.sliderColor,\n canvasOption: apiAppearance?.canvasOption,\n selectionType: apiAppearance?.selectionType,\n dragAndDrop: apiAppearance?.dragAndDrop,\n previewUploadedFiles: apiAppearance?.previewUploadedFiles,\n multiFileUploads: apiAppearance?.multiFileUploads,\n selectionColorRequired: apiAppearance?.selectionColorRequired,\n selectionColor: apiAppearance?.selectionColor,\n color: apiAppearance?.color,\n avatarPicker:apiAppearance?.avatarPicker,\n timeFormat:apiAppearance?.timeFormat,\n displayOptionsInColumn:apiAppearance?.displayOptionsInColumn,\n currencySymbol:apiAppearance?.currencySymbol,\n decimalPrecision:apiAppearance?.decimalPrecision,\n symbolPosition:apiAppearance?.symbolPosition,\n thousandSeparator:apiAppearance?.thousandSeparator,\n currency:currency,\n limitCurrencies:apiAppearance?.limitCurrencies,\n currencyOption:apiAppearance?.currencyOption,\n specificCurrencySymbol:apiAppearance?.specificCurrencySymbol,\n limitCurrencySymbol:apiAppearance?.limitCurrencySymbol,\n width: apiAppearance?.width,\n height: apiAppearance?.height,\n showAmountInWords: apiAppearance?.showAmountInWords,\n defaultCurrency:defaultCurrency\n };\n}\n\nfunction mapValidationToModel(apiValidation: any): Validation {\n return {\n regexValidation: apiValidation?.regexValidation,\n regex: apiValidation?.regex,\n validationMessage: apiValidation?.validationMessage,\n limitedCharacters: apiValidation?.limitedCharacters,\n count: apiValidation?.count,\n minimumSelection: apiValidation?.minimumSelection,\n maximumSelection: apiValidation?.maximumSelection,\n countryWiseValidation: apiValidation?.countryWiseValidation,\n restrictCountry: apiValidation?.restrictCountry,\n allowedCountries: apiValidation?.allowedCountries,\n blockedCountries: apiValidation?.blockedCountries,\n regularExpression: apiValidation?.regularExpression,\n expectedDomains: apiValidation?.expectedDomains,\n min: apiValidation?.min,\n max: apiValidation?.max,\n minLength: apiValidation?.minLength,\n maxLength: apiValidation?.maxLength,\n requireLowercaseLetters: apiValidation?.requireLowercaseLetters,\n requireUppercaseLetters: apiValidation?.requireUppercaseLetters,\n requireNumbers: apiValidation?.requireNumbers,\n requireSpecialCharacters: apiValidation?.requireSpecialCharacters,\n allowedSpecialCharacters: apiValidation?.allowedSpecialCharacters,\n minDateOption: apiValidation?.minDateOption,\n minDate: apiValidation?.minDate,\n maxDateOption: apiValidation?.maxDateOption,\n maxDate: apiValidation?.maxDate,\n regionBoundary: apiValidation?.regionBoundary,\n region: apiValidation?.region,\n preventFromProceedingWithoutAgree:\n apiValidation?.preventFromProceedingWithoutAgree,\n buttonColour: apiValidation?.buttonColour,\n maxFileSize: apiValidation?.maxFileSize,\n minFileSize: apiValidation?.minFileSize,\n minSelection: apiValidation?.minSelection,\n maxSelection: apiValidation?.maxSelection,\n fileTypes: apiValidation?.fileTypes,\n fileSize: apiValidation?.fileSize,\n fileSizeUnit: apiValidation?.fileSizeUnit,\n totalFileSize: apiValidation?.totalFileSize,\n minSelectionRequired: apiValidation?.minSelectionRequired,\n minSelectionValue: apiValidation?.minSelectionValue,\n validationType: apiValidation?.validationType,\n validation: apiValidation?.validation,\n minTime: apiValidation?.minTime,\n maxTime:apiValidation?.maxTime,\n minTimeOption:apiValidation?.minTimeOption,\n maxTimeOption: apiValidation?.maxTimeOption,\n };\n}\n\nfunction mapElementOptionDBToModel(apiElementOptionDB: any): ElementOptionDB {\n return {\n tableName: apiElementOptionDB.tableName,\n valueField: apiElementOptionDB.valueField,\n labelField: apiElementOptionDB.labelField,\n labelPattern: apiElementOptionDB.labelPattern,\n criteria: apiElementOptionDB?.criteria.map((apiCriteria: any) =>\n mapElementOptionDBCriteriaToModel(apiCriteria)\n ),\n };\n}\n\nfunction mapElementOptionDBCriteriaToModel(\n apiElementOptionDBCriteria: any\n): ElementOptionDBCriteria {\n return {\n field: apiElementOptionDBCriteria?.field,\n condition: apiElementOptionDBCriteria?.condition,\n valueSource: apiElementOptionDBCriteria?.valueSource,\n inputValue: apiElementOptionDBCriteria?.inputValue,\n logicalOperator: apiElementOptionDBCriteria?.logicalOperator,\n };\n}\n\nfunction mapElementOptionAPIToModel(\n apiElementOptionAPI: any\n): ElementOptionAPI {\n return {\n external: apiElementOptionAPI?.external,\n url: apiElementOptionAPI?.url,\n valueField: apiElementOptionAPI?.valueField,\n labelField: apiElementOptionAPI?.labelField,\n pathToValue: apiElementOptionAPI?.pathToValue,\n headers: apiElementOptionAPI?.headers?.map(mapElementOptionAPIDataToModel),\n params: apiElementOptionAPI?.params?.map(mapElementOptionAPIDataToModel),\n pathVariables: apiElementOptionAPI?.pathVariables?.map(\n mapElementOptionAPIDataToModel\n ),\n labelPattern:apiElementOptionAPI?.labelPattern\n };\n}\n\nfunction mapElementOptionAPIDataToModel(\n apiElementOptionAPIData: any\n): elementOptionAPIData {\n return {\n keyName: apiElementOptionAPIData?.keyName,\n valueSource: apiElementOptionAPIData?.valueSource,\n inputValue: apiElementOptionAPIData?.inputValue,\n };\n}\n\nfunction mapOptionToModel(apiOption: any): Option {\n return {\n optionType: apiOption?.optionType,\n lookupTable: apiOption?.lookupTable,\n customOptions: apiOption?.customOptions?.map((option: { value: any }) => ({\n value: option.value,\n })),\n database: apiOption?.database\n ? mapElementOptionDBToModel(apiOption?.database)\n : undefined,\n api: apiOption?.api ? mapElementOptionAPIToModel(apiOption.api) : undefined,\n };\n}\n\nfunction mapScoringToModel(apiScoring: any): Scoring | undefined {\n if (!apiScoring) return undefined;\n\n return {\n enableScoring: apiScoring.enableScoring,\n defaultScore: apiScoring.defaultScore,\n enableScoringType: apiScoring.enableScoringType,\n score: apiScoring.score?.map((s: any) => ({\n label: s.label || [],\n score: s.score,\n scoreType: s.scoreType\n }))\n };\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ValidationService {\n private invalidQuestions: {[key: string]: {message: string, pageIndex: number}} = {};\n\n setInvalid(questionId: string, message: string, pageIndex: number) {\n this.invalidQuestions[questionId] = {message, pageIndex};\n }\n\n clearInvalid(questionId: string) {\n delete this.invalidQuestions[questionId];\n }\n\n getFirstInvalid(): {id: string, pageIndex: number} | null {\n const keys = Object.keys(this.invalidQuestions);\n return keys.length > 0 ? {\n id: keys[0],\n pageIndex: this.invalidQuestions[keys[0]].pageIndex\n } : null;\n }\n\n getErrorMessage(questionId: string): string | null {\n return this.invalidQuestions[questionId]?.message || null;\n }\n\n clearAll() {\n this.invalidQuestions = {};\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ValidationService } from './validation.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormValidationService {\n constructor(private validationService: ValidationService) {}\n\n /**\n * Validate all required questions on a page.\n * Assumes your `page` object has a `pageIndex: number` property.\n */\n validateRequiredQuestions(page: any): { isValid: boolean; message: string } {\n // clear any previous errors for this page\n // this.validationService.clearAll();\n\n const validateQuestions = (\n formElements: any[],\n submissionContext: any = null\n ): { isValid: boolean; message: string } => {\n for (let element of formElements) {\n if (element.entityType === 'QUESTION') {\n const question = element.element;\n const required = question.required;\n const questionId = question.id;\n const elementType = question.formElement?.elementType;\n\n // pick up the answer (either in a subform or normal)\n let answer: any;\n if (submissionContext?.isInMultipleSubform) {\n const { submission } = submissionContext;\n answer = submission.answers.find(\n (a: any) => a.questionId === questionId\n )?.answer;\n } else {\n answer = question.answer;\n }\n\n const isEmpty =\n answer === null ||\n answer === undefined ||\n (typeof answer === 'string' && answer.trim() === '') ||\n (typeof answer === 'object' && Object.keys(answer).length === 0);\n\n if (required && isEmpty) {\n const message = submissionContext?.isInMultipleSubform\n ? `Required question ${question.questionNumber} is not answered in a subform.`\n : `Required question ${question.questionNumber} is not answered.`;\n\n // register the invalid question\n this.validationService.setInvalid(\n questionId,\n message,\n page.pageIndex ?? 0\n );\n\n return { isValid: false, message };\n }\n\n // recurse into child logics\n if (question.childLogics) {\n for (let logic of question.childLogics) {\n if (!logic.showLogic) continue;\n for (let row of logic.rows) {\n const result = validateQuestions(row.grid, submissionContext);\n if (!result.isValid) return result;\n }\n }\n }\n } else if (element.entityType === 'SUBFORM') {\n const subform = element.element;\n\n if (subform.property?.subFormStructure === 'multiple') {\n const submissions = subform.submissions || [];\n\n if (submissions.length > 0) {\n const hasRequired = subform.rows.some((r: any) =>\n r.grid.some(\n (f: any) => f.entityType === 'QUESTION' && f.element.required\n )\n );\n\n if (hasRequired && submissions.length === 0) {\n const message = `Subform \"${\n subform.title || 'Untitled'\n }\" is missing required submissions.`;\n this.validationService.setInvalid(\n subform.id,\n message,\n page.pageIndex ?? 0\n );\n return { isValid: false, message };\n }\n\n // map questions and validate only if more than one submission\n const questionMap = new Map<string, any>();\n subform.rows.forEach((r: any) =>\n r.grid.forEach((f: any) => {\n if (f.entityType === 'QUESTION') {\n questionMap.set(f.element.id, f.element);\n }\n })\n );\n\n for (let submission of submissions) {\n for (let row of subform.rows) {\n const result = validateQuestions(row.grid, {\n isInMultipleSubform: true,\n submission,\n questionMap,\n });\n if (!result.isValid) return result;\n }\n }\n }\n } else {\n // single‐entry subform\n for (let row of subform.rows || []) {\n const result = validateQuestions(row.grid);\n if (!result.isValid) return result;\n }\n }\n } else if (\n (element.entityType === 'QUESTION_GROUP' ||\n element.entityType === 'MULTIFIELD') &&\n element.element.rows\n ) {\n for (let row of element.element.rows) {\n const result = validateQuestions(row.grid, submissionContext);\n if (!result.isValid) return result;\n }\n }\n }\n\n return { isValid: true, message: 'All required questions are answered.' };\n };\n\n // start validation\n for (const row of page.rows) {\n const result = validateQuestions(row.grid);\n if (!result.isValid) {\n // we already called setInvalid above\n return result;\n }\n }\n\n // if we get here, everything passed\n return { isValid: true, message: 'All required questions are answered.' };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Submission } from '../models/submission.model';\nimport { Subject } from 'rxjs/internal/Subject';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WhenClauseService {\n private activeWhenClauseGrids: any[] = [];\n private questionAnswerMap: { [questionId: string]: any } = {};\nprivate questionChange$ = new Subject<{ questionId: string }>();\n\n\n\n isInitialLoad: boolean = true;\n constructor() {}\n\n markLoadCompleted() {\n this.isInitialLoad = false;\n }\n\n onQuestionChange() {\n return this.questionChange$.asObservable();\n}\n\n\n /**\n * Check if a grid has an active when clause\n */\n isActiveWhenClause(grid: any): boolean {\n const when = grid?.whenClause;\n return !!(\n when &&\n when.activate &&\n Array.isArray(when.whenClauseCondition) &&\n when.whenClauseCondition.length > 0\n );\n }\n\n /**\n * Add a grid to tracking list if it has an active when clause\n */\n addGrid(grid: any): void {\n if (!grid) return;\n\n if (this.isActiveWhenClause(grid)) {\n const exists = this.activeWhenClauseGrids.some(\n (g) => g.element?.id === grid.element?.id\n );\n\n if (!exists) {\n this.activeWhenClauseGrids.push(grid);\n }\n }\n }\n\n setQuestionAnswer(questionId: string, answer: any,initial:boolean = false): void {\n if (!questionId) return;\n this.questionAnswerMap[questionId] = answer;\n this.evaluateAllWhenClauses(initial);\n this.questionChange$.next({ questionId });\n }\n\n getAnswer(questionId: string): any {\n return this.questionAnswerMap[questionId];\n }\n\n private evaluateAllWhenClauses(initial:boolean): void {\n const visibleGrids: any[] = [];\n\n for (const grid of this.activeWhenClauseGrids) {\n const when = grid.whenClause;\n const conditions = when.whenClauseCondition;\n\n if (!conditions || !conditions.length) continue;\n\n let overallResult = true;\n\n for (let i = 0; i < conditions.length; i++) {\n const clause = conditions[i];\n const logic = (clause.logic || (i === 0 ? 'AND' : 'AND')).toUpperCase(); // Default to AND for first\n const answer = this.getAnswer(clause.questionid);\n const result = this.evaluateCondition(\n answer,\n clause.condition,\n clause.value\n );\n\n // Combine results based on logic (AND / OR)\n if (i === 0) {\n overallResult = result; // initialize with first condition\n } else {\n if (logic === 'AND') {\n overallResult = overallResult && result;\n } else if (logic === 'OR') {\n overallResult = overallResult || result;\n }\n }\n }\n // safe read actions (could be undefined)\n const actions: string[] = Array.isArray(when?.whenClauseActions)\n ? when.whenClauseActions.map(String)\n : [];\n\n // choose the decisive action (use last if multiple)\n const action = actions.length > 0 ? actions[actions.length - 1] : undefined;\n\n if (overallResult) {\n // Condition(s) satisfied -> perform the action\n switch (action) {\n case 'SHOW':\n grid.show = true;\n break;\n case 'HIDE':\n grid.show = false;\n break;\n case 'MARK_AS_REQUIRED':\n if (grid.element) grid.element.required = true;\n break;\n case 'MARK_AS_OPTIONAL':\n if (grid.element) grid.element.required = false;\n break;\n default:\n // no show/hide action — keep current behavior (you can choose default here)\n // For safety, if no explicit action, we'll leave grid.show unchanged.\n break;\n }\n\n // if visible, collect\n if (grid.show) visibleGrids.push(grid);\n } else {\n // Condition(s) not satisfied -> revert the action's effect\n switch (action) {\n case 'SHOW':\n // condition no longer true => hide (revert)\n grid.show = false;\n break;\n case 'HIDE':\n // condition no longer true => show (revert)\n grid.show = true;\n break;\n case 'MARK_AS_REQUIRED':\n if (grid.element) grid.element.required = false;\n break;\n case 'MARK_AS_OPTIONAL':\n if (grid.element) grid.element.required = true;\n break;\n default:\n // nothing to revert\n break;\n }\n // if we hid it because overallResult false and it's not initial, clear answer\n if (!overallResult && !initial && !grid.show) {\n grid.element.answer = null;\n }\n }\n if (overallResult) visibleGrids.push(grid);\n }\n }\n\n evaluateCondition(answer: any, operator: string, value: any): boolean {\n\n // treat null/undefined/empty-string/empty-array as \"no answer\"\n if (answer === null || answer === undefined) return false;\n // if (typeof answer === 'string' && answer === '') return false;\n if (Array.isArray(answer) && answer.length === 0) return false;\n\n // helpers to normalize values to arrays of lower-case strings (for string ops)\n const toStr = (v: any) =>\n v === null || v === undefined ? '' : String(v).toLowerCase();\n\n const ensureArray = (v: any): string[] => {\n if (Array.isArray(v)) return v.map((x) => toStr(x));\n // if comma-separated string => split, else single element array\n if (typeof v === 'string' && v.indexOf(',') !== -1) {\n return v\n .split(',')\n .map((x) => x.trim())\n .map((x) => toStr(x));\n }\n return [toStr(v)];\n };\n\n const ansArr = ensureArray(answer);\n const valArr = ensureArray(value);\n\n // numeric comparisons: only when both sides are scalars (non-array) and numeric\n const isNumericScalar = (x: any) =>\n !Array.isArray(x) && x !== null && x !== undefined && !Number.isNaN(Number(x));\n\n switch (operator) {\n case '<':\n if (isNumericScalar(answer) && isNumericScalar(value))\n return Number(answer) < Number(value);\n return false;\n case '>':\n if (isNumericScalar(answer) && isNumericScalar(value))\n return Number(answer) > Number(value);\n return false;\n case '<=':\n if (isNumericScalar(answer) && isNumericScalar(value))\n return Number(answer) <= Number(value);\n return false;\n case '>=':\n if (isNumericScalar(answer) && isNumericScalar(value))\n return Number(answer) >= Number(value);\n return false;\n\n // equality: true if any answer element equals any value element\n case '=':\n return ansArr.some((a) => valArr.some((v) => a === v));\n\n case '!=':\n return !ansArr.some((a) => valArr.some((v) => a === v));\n\n // LIKE / NOT LIKE: check substring match anywhere in any answer element\n case 'LIKE':\n return ansArr.some((a) => valArr.some((v) => a.includes(v)));\n case 'NOT LIKE':\n return !ansArr.some((a) => valArr.some((v) => a.includes(v)));\n\n case 'BEGIN WITH':\n return ansArr.some((a) => valArr.some((v) => a.startsWith(v)));\n case 'END WITH':\n return ansArr.some((a) => valArr.some((v) => a.endsWith(v)));\n\n // IN / NOT IN: true if any answer element exists in value list\n case 'IN':\n return ansArr.some((a) => valArr.includes(a));\n case 'NOT IN':\n return !ansArr.some((a) => valArr.includes(a));\n\n default:\n return false;\n }\n }\n\n addGridsFromSubform(subform: any): void {\n if (!subform || !Array.isArray(subform.rows)) return;\n\n for (const row of subform.rows) {\n if (!row.grid || !Array.isArray(row.grid)) continue;\n\n for (const grid of row.grid) {\n // 1️⃣ Add this grid itself if it has an active whenClause\n this.addGrid(grid);\n\n // 2️⃣ Then, recursively process nested childLogics inside its element\n if (grid.element?.childLogics?.length) {\n this.processChildLogics(grid.element.childLogics);\n }\n }\n }\n }\n\n /**\n * Recursively process childLogics structure\n */\n private processChildLogics(childLogics: any[]): void {\n if (!Array.isArray(childLogics)) return;\n\n for (const logic of childLogics) {\n // 1️⃣ Each logic may have its own rows (similar to subform rows)\n if (Array.isArray(logic.rows)) {\n for (const row of logic.rows) {\n if (Array.isArray(row.grid)) {\n for (const grid of row.grid) {\n // Check whenClause for this nested grid\n this.addGrid(grid);\n\n // 2️⃣ Recurse again if this nested question also has its own childLogics\n if (grid.element?.childLogics?.length) {\n this.processChildLogics(grid.element.childLogics);\n }\n }\n }\n }\n }\n\n // 3️⃣ A logic itself might directly contain nested logics\n if (Array.isArray(logic.childLogics)) {\n this.processChildLogics(logic.childLogics);\n }\n }\n }\n\n /**\n * Return ALL elements with an active whenClause inside a subform,\n * including nested childLogics (recursive)\n */\n getWhenClauseElements(subform: any): any[] {\n const result: any[] = [];\n\n if (!subform || !Array.isArray(subform.rows)) {\n return result;\n }\n\n for (const row of subform.rows) {\n if (!Array.isArray(row.grid)) continue;\n\n for (const grid of row.grid) {\n // 1️⃣ Add this grid if it has an active whenClause\n if (this.isActiveWhenClause(grid)) {\n result.push(grid);\n }\n\n // 2️⃣ Process nested childLogics inside this element\n if (Array.isArray(grid.element?.childLogics)) {\n result.push(\n ...this.getElementsFromChildLogics(grid.element.childLogics)\n );\n }\n }\n }\n\n return result;\n }\n\n /**\n * Recursively gather grids with active whenClause inside childLogics\n */\n private getElementsFromChildLogics(childLogics: any[]): any[] {\n const found: any[] = [];\n\n if (!Array.isArray(childLogics)) return found;\n\n for (const logic of childLogics) {\n // Each logic can have rows\n if (Array.isArray(logic.rows)) {\n for (const row of logic.rows) {\n if (!Array.isArray(row.grid)) continue;\n\n for (const grid of row.grid) {\n if (this.isActiveWhenClause(grid)) {\n found.push(grid);\n }\n\n // Recurse deeper if this grid has nested childLogics\n if (Array.isArray(grid.element?.childLogics)) {\n found.push(\n ...this.getElementsFromChildLogics(grid.element.childLogics)\n );\n }\n }\n }\n }\n\n // Logic itself may have nested childLogics\n if (Array.isArray(logic.childLogics)) {\n found.push(...this.getElementsFromChildLogics(logic.childLogics));\n }\n }\n\n return found;\n }\n\n checkElementVisibility(id: string, submission: Submission): boolean {\n if (!id || !submission || !Array.isArray(submission.answers)) {\n return true; // default visible if invalid input\n }\n\n const matchedAnswer = submission.answers.find(\n (ans) => ans.questionId === id\n );\n\n // Return the 'show' flag if found, else default to true\n return matchedAnswer ? matchedAnswer.show ?? true : true;\n }\n\n evaluateSubformWhenClauses(\n changedAnswer: any,\n submission: Submission,\n changedQuestionId: string,\n elementsWithWhenClause: any\n ) {\n if (!elementsWithWhenClause.length) return;\n\n for (const grid of elementsWithWhenClause) {\n const elementId = grid.element.id;\n const when = grid.whenClause;\n const conditions = when.whenClauseCondition;\n\n if (!conditions?.length) continue;\n\n let overallResult = true;\n\n for (let i = 0; i < conditions.length; i++) {\n const clause = conditions[i];\n\n const logic = (clause.logic || (i === 0 ? 'AND' : 'AND')).toUpperCase();\n\n // Determine which answer to use for this condition\n let answerToCheck: any;\n\n if (clause.questionid === changedQuestionId) {\n // Use updated answer for the changed question\n answerToCheck = changedAnswer;\n } else {\n // Fetch existing value from submission for other questions\n const existing = submission.answers.find(\n (a) => a.questionId === clause.questionid\n );\n answerToCheck = existing?.answer;\n }\n\n const result = this.evaluateCondition(\n answerToCheck,\n clause.condition,\n clause.value\n );\n\n // Apply AND/OR logic\n if (i === 0) {\n overallResult = result;\n } else {\n overallResult =\n logic === 'AND' ? overallResult && result : overallResult || result;\n }\n }\n\n // Update show flag for the element controlled by this whenClause\n const matchedAnswer = submission.answers.find(\n (ans) => ans.questionId === elementId\n );\n\n const actions: string[] = Array.isArray(when?.whenClauseActions)\n ? when.whenClauseActions.map(String)\n : [];\n\n // choose the decisive action (use last if multiple)\n const action = actions.length > 0 ? actions[actions.length - 1] : undefined;\n\n\n if (matchedAnswer) {\n if (overallResult) {\n // Condition(s) satisfied -> perform the action\n switch (action) {\n case 'SHOW':\n matchedAnswer.show = true;\n break;\n case 'HIDE':\n matchedAnswer.show = false;\n break;\n case 'MARK_AS_REQUIRED':\n matchedAnswer.required = true;\n break;\n case 'MARK_AS_OPTIONAL':\n matchedAnswer.required = false;\n break;\n default:\n // no show/hide action — keep current behavior (you can choose default here)\n // For safety, if no explicit action, we'll leave grid.show unchanged.\n break;\n }\n\n } else {\n // Condition(s) not satisfied -> revert the action's effect\n switch (action) {\n case 'SHOW':\n // condition no longer true => hide (revert)\n matchedAnswer.show = false;\n break;\n case 'HIDE':\n // condition no longer true => show (revert)\n matchedAnswer.show = true;\n break;\n case 'MARK_AS_REQUIRED':\n matchedAnswer.required = false;\n break;\n case 'MARK_AS_OPTIONAL':\n matchedAnswer.required = true;\n break;\n default:\n // nothing to revert\n break;\n }\n }\n }\n\n\n\n\n // if (matchedAnswer) {\n // matchedAnswer.show = overallResult;\n // }\n }\n }\n\n resetService(): void {\n // Clear tracked grids\n this.activeWhenClauseGrids = [];\n\n // Clear stored question → answer map\n this.questionAnswerMap = {};\n\n // Reset visibility logic to initial state\n }\n\n getActiveWhenClauseGrids(): any[] {\n return this.activeWhenClauseGrids;\n }\n}\n","import { Component, Input, OnChanges } from '@angular/core';\n\n@Component({\n selector: 'lib-section-fields',\n templateUrl: './section-fields.component.html',\n styleUrls: ['./section-fields.component.scss']\n})\nexport class SectionFieldsComponent implements OnChanges {\n @Input() section: any = {};\n decodedDescription: string = '';\n\n // Method to decode HTML entities\n decodeHtml(html: string): string {\n const textArea = document.createElement('textarea');\n textArea.innerHTML = html; \n return textArea.value;\n }\n\n // Lifecycle hook to handle updates to the input\n ngOnChanges(): void {\n if (this.section.description) {\n this.decodedDescription = this.decodeHtml(this.section.description);\n }\n }\n}\n","<div class=\"mb-4 px-3\" [attr.name]=\"section.testElementName\">\n <p class=\"sectionTitle\">{{ section.title }}</p>\n <p [innerHTML]=\"decodedDescription\" class=\"description\"></p>\n</div>\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DataService {\n constructor() {}\n\n private dataSubject = new BehaviorSubject<string>('');\n public apiUrl$: Observable<string> = this.dataSubject.asObservable();\n private headerSubject = new BehaviorSubject<any>({});\n public header$: Observable<any> = this.headerSubject.asObservable();\n\n private subformSubject = new BehaviorSubject<any>({});\n public subform$: Observable<any> = this.subformSubject.asObservable();\n\n private parentQuestionsSubject = new BehaviorSubject<any>(null);\n public parentQuestions$: Observable<any> = this.parentQuestionsSubject.asObservable();\n\n setApiUrl(data: string): void {\n this.dataSubject.next(data);\n }\n\n setHeader(data: any) {\n this.headerSubject.next(data);\n }\n\n setParentQuestions(data: any): void {\n this.parentQuestionsSubject.next(data);\n }\n\n setSubformData(data: any) {\n this.subformSubject.next(data);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { DataService } from './data.service';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormService {\n private apiUrl: string = '';\n header: any = {};\n parentQuestions: any;\n subformData: any;\n\n constructor(private http: HttpClient, private dataService: DataService) {\n this.dataService.apiUrl$.subscribe((data) => {\n this.apiUrl = data;\n });\n\n this.dataService.header$.subscribe((data) => {\n this.header = data;\n });\n\n this.dataService.parentQuestions$.subscribe((questions) => {\n if (questions) {\n this.parentQuestions = questions;\n }\n });\n\n this.dataService.subform$.subscribe((data) => {\n this.subformData = data;\n });\n }\n\n getQuestions(\n moduleName: string,\n pageNumber: number = 1,\n rowSet: number = 0,\n progressiveLoading: boolean = true,\n country: string = ''\n ) {\n const headers = new HttpHeaders(this.getSafeHeaders());\n const params = new HttpParams()\n .set('pageNumber', pageNumber.toString())\n .set('rowSet', rowSet.toString())\n .set('country', country)\n .set('progressiveLoading', progressiveLoading);\n\n return this.http.get<any>(`${this.apiUrl}/api/public/forms/${moduleName}`, {\n headers,\n params,\n });\n }\n\n fetchDataFromDatabase(database: any, pageNumber:number=0, pageSize:number=10, searchString:string='',enablePagination:boolean=false): Observable<any> {\n const headers = new HttpHeaders({ 'Content-Type': 'application/json' });\n const params = new HttpParams()\n .set('page', pageNumber.toString())\n .set('size', pageSize.toString())\n .set('enablePagination', enablePagination.toString())\n .set('searchKey', searchString);\n return this.http.post<any>(`${this.apiUrl}/api/load-from-db`, database, {\n headers,params\n });\n }\n\n fetchDataFromLookup(tableName: string) {\n return this.http.get<any>(`${this.apiUrl}/api/public/lookup/${tableName}`);\n }\n\n fetchDataFromExternalAPI(\n apiConfig: any,\n selectedValues: any[] = []\n ): Observable<any> {\n // ✅ Check if pagination exists\n const hasPagination =\n apiConfig.params?.some((p: any) => p.valueSource === 'PAGE_INDEX') &&\n apiConfig.params?.some((p: any) => p.valueSource === 'PAGE_SIZE');\n\n // ---------------------- HEADERS ----------------------\n let headers = new HttpHeaders();\n // helper: resolve a value (or values) based on valueSource\n\n // Apply to headers (assuming `headers` is an HttpHeaders instance)\n if (apiConfig.headers) {\n apiConfig.headers.forEach((header: any) => {\n if (!header.keyName) return;\n\n const rawValue = resolveValueFromSource(\n header.valueSource,\n header.inputValue,\n selectedValues\n );\n\n if (header.valueSource === 'SELECTED_VALUES') {\n // Only add header if we have selected values\n if (Array.isArray(rawValue) && rawValue.length > 0) {\n if (header.inputValue === 'SINGLE_VALUE') {\n headers = headers.set(header.keyName, String(rawValue[0]));\n } else if (header.inputValue === 'ARRAY_OF_VALUES') {\n // join by comma for headers (common pattern)\n headers = headers.set(header.keyName, rawValue.join(','));\n } else {\n // fallback: join\n headers = headers.set(header.keyName, rawValue.join(','));\n }\n }\n // no selected values -> skip header\n return;\n }\n\n // For non-selected sources: skip when unresolved\n if (rawValue === null || rawValue === undefined) return;\n\n // If rawValue is array -> join by comma (headers expect single string)\n const headerValue = Array.isArray(rawValue)\n ? rawValue.join(',')\n : String(rawValue);\n\n if (header.keyName.toLowerCase() === 'authorization') {\n // add Bearer only when headerValue is truthy (and not already prefixed)\n const token = headerValue.startsWith('Bearer ')\n ? headerValue\n : `Bearer ${headerValue}`;\n headers = headers.set(header.keyName, token);\n } else {\n headers = headers.set(header.keyName, headerValue);\n }\n });\n }\n\n // ---------------------- PARAMS ----------------------\n let params = new HttpParams();\n // helper: resolve a value (or values) based on valueSource\n function resolveValueFromSource(\n valueSource: string | undefined,\n inputValue: any,\n selectedValues: any[] = []\n ) {\n if (!valueSource) return null;\n\n switch (valueSource) {\n case 'LOCAL_STORAGE':\n return localStorage.getItem(inputValue); // string or null\n\n case 'SESSION_STORAGE':\n return sessionStorage.getItem(inputValue); // string or null\n\n case 'CUSTOM_INPUT':\n case 'QUESTION':\n case 'PAGE_INDEX':\n case 'PAGE_SIZE':\n case 'SEARCH_STRING':\n // inputValue may be a single value or an array/CSV depending on usage\n return inputValue;\n\n case 'SELECTED_VALUES':\n // For SELECTED_VALUES, return the selectedValues array (caller decides SINGLE/ARRAY behavior)\n return Array.isArray(selectedValues) ? selectedValues : [];\n\n default:\n console.warn(`Unsupported valueSource for params: ${valueSource}`);\n return null;\n }\n }\n\n // Usage: build params (assuming `params` is an HttpParams instance)\n if (apiConfig.params) {\n apiConfig.params.forEach((param: any) => {\n if (!param.keyName) return;\n\n // Resolve raw value based on source\n const rawValue = resolveValueFromSource(\n param.valueSource,\n param.inputValue,\n selectedValues\n );\n\n // If param expects selected values, handle SINGLE_VALUE vs ARRAY_OF_VALUES\n if (param.valueSource === 'SELECTED_VALUES') {\n // Only add if there are actual selected values\n if (Array.isArray(rawValue) && rawValue.length > 0) {\n if (param.inputValue === 'SINGLE_VALUE') {\n // set to first selected value\n params = params.set(param.keyName, rawValue[0]);\n } else if (param.inputValue === 'ARRAY_OF_VALUES') {\n // append each selected value as repeated param\n rawValue.forEach((val: any) => {\n params = params.append(param.keyName, val);\n });\n } else {\n // if inputValue not provided, default to array behavior\n rawValue.forEach((val: any) => {\n params = params.append(param.keyName, val);\n });\n }\n }\n // if no selected values, skip adding this param\n return;\n }\n\n // For non-selected valueSources: rawValue could be null/undefined/string/array\n if (rawValue === null || rawValue === undefined) {\n // skip adding param when value not found\n return;\n }\n\n // If inputValue indicates array-of-values (e.g., param.inputValue === 'ARRAY_OF_VALUES'),\n // accept either an array or a comma-separated string\n if (param.inputValue === 'ARRAY_OF_VALUES') {\n if (Array.isArray(rawValue)) {\n rawValue.forEach((val: any) => {\n params = params.append(param.keyName, val);\n });\n } else if (typeof rawValue === 'string') {\n // support comma separated string\n rawValue\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n .forEach((val: string) => {\n params = params.append(param.keyName, val);\n });\n } else {\n // fallback: convert to string and append\n params = params.append(param.keyName, String(rawValue));\n }\n } else {\n // default: set single value\n params = params.set(param.keyName, String(rawValue));\n }\n });\n }\n\n // ---------------------- PATH VARIABLES ----------------------\n let url = apiConfig.url;\n if (apiConfig.pathVariables) {\n apiConfig.pathVariables.forEach((pathVar: any) => {\n if (pathVar.keyName) {\n let valueToBind: any = null;\n\n switch (pathVar.valueSource) {\n case 'LOCAL_STORAGE':\n valueToBind = localStorage.getItem(pathVar.inputValue);\n break;\n\n case 'SESSION_STORAGE':\n valueToBind = sessionStorage.getItem(pathVar.inputValue);\n break;\n\n case 'CUSTOM_INPUT':\n case 'QUESTION':\n valueToBind = pathVar.inputValue;\n break;\n\n default:\n console.warn(`Unsupported valueSource: ${pathVar.valueSource}`);\n }\n\n if (valueToBind !== null && valueToBind !== undefined) {\n url = url.replace(`{${pathVar.keyName}}`, valueToBind);\n }\n }\n });\n }\n\n // ---------------------- FINAL CALL ----------------------\n return this.http.get<any>(url, { headers, params });\n }\n\n submitForm(\n moduleName: string,\n formData: FormData,\n reCAPTCHAToken?: string\n ): Observable<any> {\n // const headers = new HttpHeaders({\n // 'Auth-user': this.header.authUser,\n // });\n const headers = new HttpHeaders(this.getSafeHeaders());\n const url = `${this.apiUrl}/api/public/forms/${moduleName}/submissions`;\n if (reCAPTCHAToken) {\n formData.append('recaptchaToken', reCAPTCHAToken);\n }\n return this.http.post(url, formData, {\n headers,\n observe: 'events',\n reportProgress: true,\n });\n }\n\n getSubmittedForm(\n moduleName: string,\n submissionId: string,\n pageNumber: number = 1,\n rowSet: number = 0,\n navigateTo?: string\n ): Observable<any> {\n let params = new HttpParams()\n .set('pageNumber', pageNumber.toString())\n .set('rowSet', rowSet.toString());\n if (navigateTo) {\n params = params.set('navigateId', navigateTo);\n }\n\n if (this.parentQuestions) {\n this.parentQuestions.forEach((q: any) => {\n params = params.append('parentQuestions', q);\n });\n }\n // const headers = new HttpHeaders({\n // 'Accept-Language': this.header.acceptedLanguage,\n // });\n const headers = new HttpHeaders(this.getSafeHeaders());\n return this.http.get<any>(\n `${this.apiUrl}/api/forms/${moduleName}/submissions/${submissionId}`,\n { headers, params }\n );\n }\n\n updateForm(\n moduleName: string,\n submissionId: string,\n formData: FormData,\n reCAPTCHAToken?: string\n ): Observable<any> {\n // const headers = new HttpHeaders({\n // 'Auth-user': this.header.authUser,\n // });\n const headers = new HttpHeaders(this.getSafeHeaders());\n const url = `${this.apiUrl}/api/public/forms/${moduleName}/submissions/${submissionId}`;\n if (reCAPTCHAToken) {\n formData.append('recaptchaToken', reCAPTCHAToken);\n }\n return this.http.put<any>(url, formData, {\n headers,\n observe: 'events',\n reportProgress: true,\n },);\n }\n\n previewFile(url: any): Observable<any> {\n // const headers = new HttpHeaders({\n // 'Accept-Language': this.header.acceptedLanguage,\n // 'Content-Type': this.header.contentType,\n // 'auth-user': this.header.authUser,\n // 'Authorization': `Bearer ${this.header.authorization}`,\n // });\n const headers = new HttpHeaders(this.getSafeHeaders());\n const options = {\n headers: headers,\n };\n const fileUrl = url;\n const encodedFileUrl = encodeURIComponent(fileUrl);\n const fullUrl = `?url=${encodedFileUrl}`;\n return this.http.get<any>(\n this.apiUrl + `/api/cdn/preview${fullUrl}`,\n options\n );\n }\n\n getSubformSubmissions(subFormData: any) {\n if (\n !subFormData?.moduleName ||\n !subFormData?.duplicateSubmission?.sourceSubmissionIds\n ) {\n return;\n }\n\n const headers = new HttpHeaders(this.getSafeHeaders());\n\n // Extract data\n const moduleName = subFormData.moduleName;\n const submissionIds: string[] =\n subFormData.duplicateSubmission.sourceSubmissionIds;\n\n // Build query string\n const queryParams = submissionIds\n .map((id) => `submissionIds=${encodeURIComponent(id)}`)\n .join('&');\n\n // Final URL\n const url = `${this.apiUrl}/api/public/${moduleName}/subform-submissions?${queryParams}`;\n\n // Now make API call\n return this.http.get(url, {\n headers\n });\n\n }\n\n getSafeHeaders(): { [key: string]: string } {\n const safe: { [key: string]: string } = {};\n if (this.header && typeof this.header === 'object') {\n for (const key of Object.keys(this.header)) {\n const val = this.header[key];\n if (val !== undefined && val !== null) {\n let headerKey = key;\n if (key === 'authUser') {\n headerKey = 'auth-user';\n }\n safe[headerKey] = String(val);\n }\n }\n }\n console.log('[FormService] getSafeHeaders, input header:', this.header, 'output safe:', safe);\n return safe;\n }\n}\n","// element-tracker.service.ts\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class ElementTrackerService {\n private elementIds = new Set<string>();\n\n registerElement(id: string) {\n this.elementIds.add(id);\n }\n\n unregisterElement(id: string) {\n this.elementIds.delete(id);\n }\n\n getAllElementIds(): string[] {\n return Array.from(this.elementIds);\n }\n\n clear() {\n this.elementIds.clear();\n }\n}","import { Injectable } from '@angular/core';\nimport { Answer } from '../models/answer.model';\nimport { Submission } from '../models/submission.model';\n\ninterface SubmissionScore {\n scoreType: string;\n score: number;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ScoreCalculationService {\n constructor() {}\n\n calculateScoreFromAnswer(\n newAnswer: string[] | string,\n question: any\n ): { scores: { scoreType: string; score: number }[] } | null {\n \n const scoring = question?.formElement?.scoring;\n if (!scoring || !scoring.enableScoring || !newAnswer || (Array.isArray(newAnswer) && newAnswer.length === 0)) {\n return null;\n }\n \n const defaultScore = scoring.defaultScore ?? 0;\n const scoreRules = scoring.score || [];\n \n const answers = Array.isArray(newAnswer) ? newAnswer : [newAnswer];\n \n // If scoringType is NOT enabled, behave like the old logic\n if (!scoring.enableScoringType) {\n let totalScore = 0;\n const scoreByOption: Record<string, number> = {};\n \n for (const answer of answers) {\n const value = answer.split('|')[1]; // Extract actual value\n const matchingScore = scoreRules.find((rule: any) => rule.label.includes(value));\n \n if (matchingScore && typeof matchingScore.score === 'number') {\n scoreByOption[answer] = matchingScore.score;\n totalScore += matchingScore.score;\n } else {\n scoreByOption[answer] = defaultScore;\n totalScore += defaultScore;\n }\n }\n \n return { scores: [{ scoreType: 'NOT_APPLICABLE', score:totalScore }] };\n }\n \n // ✅ Scoring Type ENABLED → separate Good/Bad scoring\n const groupedScores: Record<string, number> = {};\n \n for (const answer of answers) {\n const value = answer.split('|')[1];\n const matchingScore = scoreRules.find((rule: any) => rule.label.includes(value));\n \n if (matchingScore && typeof matchingScore.score === 'number') {\n const type = matchingScore.scoreType || 'NOT_APPLICABLE';\n groupedScores[type] = (groupedScores[type] || 0) + matchingScore.score;\n } else {\n // if no matching score, add default under NOT_APPLICABLE\n groupedScores['NOT_APPLICABLE'] = (groupedScores['NOT_APPLICABLE'] || 0) + defaultScore;\n }\n }\n \n // Convert grouped results into required array format\n const resultScores = Object.keys(groupedScores).map((type) => ({\n scoreType:type,\n score: groupedScores[type],\n }));\n \n return { scores: resultScores };\n }\n\n\n getMaxPossibleScore(subform: any): { goodMax: number; badMax: number } {\n let goodMaxProduct = 1;\n let badMaxProduct = 1;\n \n subform.rows.forEach((row: any) => {\n row.grid.forEach((gridItem: any) => {\n if (gridItem.entityType === \"QUESTION\") {\n const element = gridItem.element;\n const formElement = element?.formElement;\n \n if (\n formElement?.elementType === \"DROP_DOWN\" &&\n formElement?.scoring?.enableScoring &&\n Array.isArray(formElement.scoring.score)\n ) {\n // ---- GOOD SCORE CALC ----\n let maxGoodForQuestion = 0;\n const goodScores = formElement.scoring.score.filter(\n (s: any) => s.scoreType === \"GOOD_SCORE\"\n );\n \n if (formElement.appearance?.selectionType === \"SINGLE\") {\n if (goodScores.length > 0) {\n // Pick max abs, but return real value\n const maxAbs = goodScores.reduce(\n (max: any, s: any) =>\n Math.abs(s.score ?? 0) > Math.abs(max.score ?? 0) ? s : max,\n { score: 0 }\n );\n maxGoodForQuestion = maxAbs.score ?? 0;\n } else {\n maxGoodForQuestion = Math.max(\n ...formElement.scoring.score.map((s: any) => s.score ?? 0)\n );\n }\n } else if (formElement.appearance?.selectionType === \"MULTIPLE\") {\n const maxSelection = formElement.validation?.maximumSelection;\n \n if (maxSelection && maxSelection > 0) {\n const labelScores: number[] = [];\n const src = goodScores.length > 0 ? goodScores : formElement.scoring.score;\n \n src.forEach((s: any) => {\n const scoreValue = s.score ?? 0;\n const count = s.label?.length ?? 0;\n for (let i = 0; i < count; i++) {\n labelScores.push(scoreValue);\n }\n });\n \n labelScores.sort((a, b) => Math.abs(b) - Math.abs(a));\n maxGoodForQuestion = labelScores\n .slice(0, maxSelection)\n .reduce((sum, score) => sum + score, 0);\n } else {\n maxGoodForQuestion = formElement.scoring.score.reduce(\n (sum: number, s: any) =>\n sum + (s.score ?? 0) * (s.label?.length ?? 0),\n 0\n );\n }\n }\n \n // ---- BAD SCORE CALC ----\n let maxBadForQuestion = 0;\n const badScores = formElement.scoring.score.filter(\n (s: any) => s.scoreType === \"BAD_SCORE\"\n );\n \n if (formElement.appearance?.selectionType === \"SINGLE\") {\n if (badScores.length > 0) {\n maxBadForQuestion = Math.max(\n ...badScores.map((s: any) => s.score ?? 0)\n );\n } else {\n maxBadForQuestion = Math.max(\n ...formElement.scoring.score.map((s: any) => s.score ?? 0)\n );\n }\n } else if (formElement.appearance?.selectionType === \"MULTIPLE\") {\n const maxSelection = formElement.validation?.maximumSelection;\n \n if (maxSelection && maxSelection > 0) {\n const labelScores: number[] = [];\n const src = badScores.length > 0 ? badScores : formElement.scoring.score;\n \n src.forEach((s: any) => {\n const scoreValue = s.score ?? 0;\n const count = s.label?.length ?? 0;\n for (let i = 0; i < count; i++) {\n labelScores.push(scoreValue);\n }\n });\n \n labelScores.sort((a, b) => b - a);\n maxBadForQuestion = labelScores\n .slice(0, maxSelection)\n .reduce((sum, score) => sum + score, 0);\n } else {\n maxBadForQuestion = formElement.scoring.score.reduce(\n (sum: number, s: any) =>\n sum + (s.score ?? 0) * (s.label?.length ?? 0),\n 0\n );\n }\n }\n \n goodMaxProduct *= maxGoodForQuestion;\n badMaxProduct *= maxBadForQuestion;\n }\n }\n });\n });\n \n return { goodMax: goodMaxProduct, badMax: badMaxProduct };\n }\n \n \n \n\n calculateSubmissionScore = (answers: Answer[], enableScoringType = true): SubmissionScore[] => {\n let submissionScoreType: string | null = null;\n let totalScore = 1;\n for (const ans of answers) {\n if (!ans.scores) continue;\n \n for (const s of ans.scores) {\n // ✅ Always add scores (ignore type during summation)\n totalScore *= s.score ?? 1;\n \n // ✅ Decide submission-level scoreType\n if (enableScoringType) {\n if (s.scoreType === \"GOOD_SCORE\") {\n submissionScoreType = \"GOOD_SCORE\";\n } else if (s.scoreType === \"BAD_SCORE\") {\n submissionScoreType = \"BAD_SCORE\";\n }\n } else if (s.scoreType === \"NOT_APPLICABLE\") {\n submissionScoreType = \"NOT_APPLICABLE\";\n }\n }\n }\n \n // ✅ Default type if none found\n if (!submissionScoreType) {\n submissionScoreType = enableScoringType ? \"GOOD_SCORE\" : \"NOT_APPLICABLE\";\n }\n \n return [\n {\n scoreType: submissionScoreType,\n score: totalScore,\n },\n ];\n };\n\n calculateFinalScore(\n submissions: Submission[],\n maxPossibleGoodScore: number,\n maxPossibleBadScore: number\n ): SubmissionScore[] {\n let totalGood = 0;\n let totalBad = 0;\n \n const hasGood = (s: Submission) => s.scores?.some(x => x.scoreType === 'GOOD_SCORE');\n const hasBad = (s: Submission) => s.scores?.some(x => x.scoreType === 'BAD_SCORE');\n \n const goodCount = submissions.filter(hasGood).length;\n const badCount = submissions.filter(hasBad).length;\n \n for (const sub of submissions) {\n if (!sub.scores) continue;\n for (const s of sub.scores) {\n if (s.scoreType === 'GOOD_SCORE') totalGood += s.score ?? 0;\n if (s.scoreType === 'BAD_SCORE') totalBad += s.score ?? 0;\n }\n }\n \n const totalSubmissions = submissions.length;\n \n const maxGood = totalSubmissions * maxPossibleGoodScore;\n const maxBad = totalSubmissions * maxPossibleBadScore;\n \n const result: SubmissionScore[] = [];\n \n // use !== 0 (not > 0) because maxGood may be negative by design\n if (goodCount > 0 && maxGood !== 0) {\n result.push({\n scoreType: 'GOOD_SCORE',\n score: Math.round(100 - (totalGood / maxGood) * 100)\n });\n }\n \n if (badCount > 0 && maxBad !== 0) {\n result.push({\n scoreType: 'BAD_SCORE',\n score: Math.round(100 - (totalBad / maxBad) * 100)\n });\n }\n \n return result;\n }\n \n \n\n getMaxPossibleScoreForQuestion(question: any): number {\n const formElement = question?.formElement;\n \n if (\n !formElement?.scoring?.enableScoring ||\n !Array.isArray(formElement.scoring.score)\n ) {\n return 0; // No scoring or invalid config \n }\n \n let maxScoreForQuestion = 0;\n \n if (formElement.appearance?.selectionType === \"SINGLE\") {\n // For single selection: take the highest score\n maxScoreForQuestion = Math.max(\n ...formElement.scoring.score.map((s: any) => s.score ?? 0)\n );\n } \n else if (formElement.appearance?.selectionType === \"MULTIPLE\") {\n const maxSelection = formElement.validation?.maximumSelection;\n \n if (maxSelection && maxSelection > 0) {\n // Flatten scores per label\n const labelScores: number[] = [];\n formElement.scoring.score.forEach((s: any) => {\n const scoreValue = s.score ?? 0;\n const count = s.label?.length ?? 0;\n for (let i = 0; i < count; i++) {\n labelScores.push(scoreValue);\n }\n });\n \n // Sort descending & take top N\n labelScores.sort((a, b) => b - a);\n maxScoreForQuestion = labelScores\n .slice(0, maxSelection)\n .reduce((sum, score) => sum + score, 0);\n } else {\n // Sum all scores × label count\n maxScoreForQuestion = formElement.scoring.score.reduce(\n (sum: number, s: any) =>\n sum + (s.score ?? 0) * (s.label?.length ?? 0),\n 0\n );\n }\n }\n return maxScoreForQuestion;\n }\n\n\n shouldCalculateScore(subForm: any, submission: any): boolean {\n // Get all dropdown-like questions in subform that have scoring enabled\n const scoringQuestions = subForm.rows\n .flatMap((row: any) => row.grid)\n .filter((g: any) => g.entityType === 'QUESTION')\n .map((g: any) => g.element)\n .filter((q: any) =>\n q.formElement &&\n ['DROP_DOWN', 'RADIO_BUTTON', 'CHECK_BOX'].includes(q.formElement.elementType) &&\n q.formElement.scoring?.enableScoring\n );\n \n // Check if all scoring-enabled dropdown questions are answered in submission\n return scoringQuestions.every((q: any) => {\n const ans = submission.answers.find((a: any) => a.questionId === q.id);\n return ans && ans.answer !== '' && !(Array.isArray(ans.answer) && ans.answer.length === 0);\n });\n }\n \n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormService } from '../../services/form.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ValidationService } from '../../services/validation.service';\nimport { ScoreCalculationService } from '../../services/score.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\n\n@Component({\n selector: 'lib-check-box-fields',\n templateUrl: './check-box-fields.component.html',\n styleUrls: ['./check-box-fields.component.scss'],\n})\nexport class CheckBoxFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Output() answerChange = new EventEmitter<{\n answer: any;\n maxPossibleScore?: number;\n }>();\n @Input() rowId: number = 0;\n\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n selectionType: string = '';\n minimumSelection?: number;\n maximumSelection?: number;\n optionType: string = '';\n lookupTable: any = {};\n customOptions: any[] = [];\n database: any = {};\n api: any = {};\n apiOptions: any[] = [];\n selectedOptions: any[] = [];\n validationFailed: boolean = false;\n displayOptionsInColumn: boolean = false;\n validationMessage: string = '';\n private elementId: string = '';\n maxPossibleScore?: number;\n @Input() disableEdit: boolean = false;\n\n constructor(\n private formService: FormService,\n private validationService: ValidationService,\n private tracker: ElementTrackerService,\n private scoreCalcService: ScoreCalculationService,\n private whenClauseService:WhenClauseService\n ) {}\n\n ngOnInit() {\n this.valueAssigned();\n }\n\n valueAssigned() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.selectionType = this.question.formElement.appearance.selectionType;\n this.displayOptionsInColumn =\n this.question.formElement.appearance.displayOptionsInColumn ?? false;\n this.minimumSelection =\n this.question.formElement.validation.minimumSelection;\n this.maximumSelection =\n this.question.formElement.validation.maximumSelection;\n this.optionType = this.question.formElement.option.optionType;\n switch (this.optionType) {\n case 'OPTION':\n this.customOptions = this.question.formElement.option.customOptions;\n this.customOptions = this.question.formElement.option.customOptions.map(\n (option: any) => ({\n value: option.value,\n label: option.value,\n })\n );\n if (this.question.answer) {\n this.initializeCustomOption();\n }\n break;\n case 'LOOKUP':\n this.lookupTable = this.question.formElement.option.lookupTable;\n this.fetchDataFromLookup();\n break;\n case 'DATABASE':\n this.database = this.question.formElement.option.database;\n this.fetchDataFromDatabase();\n break;\n case 'API':\n this.api = this.question.formElement.option.api;\n this.fetchDataFromAPI();\n break;\n default:\n console.warn('Unknown option type:', this.optionType);\n }\n\n if (this.selectionType === 'SINGLE') {\n this.minimumSelection = 1;\n this.maximumSelection = 1;\n }\n\n if (\n this.selectionType === 'MULTIPLE' &&\n !this.minimumSelection &&\n !this.maximumSelection\n ) {\n this.minimumSelection = undefined;\n this.maximumSelection = undefined;\n }\n if (\n this.question.formElement.scoring &&\n this.question.formElement.scoring.enableScoring\n ) {\n this.maxPossibleScore =\n this.scoreCalcService.getMaxPossibleScoreForQuestion(this.question);\n this.question.maxPossibleScore = this.maxPossibleScore;\n }\n }\n\n initializeCustomOption() {\n this.selectedOptions = [];\n this.customOptions?.forEach((option: any) => {\n if (\n this.question?.answer?.find((a: any) => {\n if (typeof a === 'string' && a.includes('|')) {\n const parts = a.split('|');\n return parts[1] === option.value.toString();\n }\n return a.toString() === option.value.toString();\n })\n ) {\n this.selectedOptions.push(option);\n }\n });\n setTimeout(() => {\n const answers = Array.isArray(this.question.answer) ? this.question.answer : [];\n const parsedAnswers = answers.map((ans:any) => ans.split('|')[1]);\n this.whenClauseService.setQuestionAnswer(this.question.id,parsedAnswers,true);\n });\n if (this.question.childLogics && this.question.answer) {\n this.updateChildLogics(this.question);\n }\n }\n\n onCheckboxChange(option: any, event: any) {\n if (this.selectionType === 'SINGLE') {\n if (event.target.checked) {\n this.selectedOptions = [option];\n this.question.answer = [`${option.label}|${option.value}`];\n } else {\n this.selectedOptions = [];\n this.question.answer = [];\n }\n this.isMinimumSelectionValid();\n } else if (this.selectionType === 'MULTIPLE') {\n if (event.target.checked) {\n if (!this.selectedOptions.includes(option)) {\n this.selectedOptions.push(option);\n }\n } else {\n this.selectedOptions = this.selectedOptions.filter(\n (item) => item !== option\n );\n }\n this.question.answer = this.selectedOptions.map(\n (item) => `${item.label}|${item.value}`\n );\n this.isMinimumSelectionValid();\n }\n\n if (\n this.maximumSelection !== undefined &&\n this.selectedOptions.length > this.maximumSelection\n ) {\n event.target.checked = false;\n this.selectedOptions = this.selectedOptions.filter(\n (item) => item !== option\n );\n this.question.answer = this.selectedOptions.map(\n (item) => `${item.label}|${item.value}`\n );\n this.isMinimumSelectionValid();\n }\n\n if (this.question.childLogics) {\n this.updateChildLogics(this.question);\n }\n const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(\n this.question.answer,\n this.question\n );\n this.question.score = scoreResult?.scores;\n this.answerChange.emit({\n answer: this.question.answer,\n maxPossibleScore: this.maxPossibleScore,\n });\n const answers = Array.isArray(this.question.answer) ? this.question.answer : [];\n const parsedAnswers = answers.map((ans:any) => ans.split('|')[1]);\n this.whenClauseService.setQuestionAnswer(this.question.id,parsedAnswers);\n }\n\n updateChildLogics(question: any) {\n if (question.childLogics && Array.isArray(question.childLogics)) {\n question.childLogics.forEach((childLogic: any) => {\n if (this.selectionType === 'SINGLE') {\n if (this.selectedOptions.length === 0) {\n childLogic.showLogic = false;\n this.clearAnswersRecursively(childLogic);\n } else {\n if (\n this.evaluateCondition(\n this.selectedOptions[0]?.label,\n childLogic.condition,\n childLogic.inputValue\n )\n ) {\n childLogic.showLogic = true;\n } else {\n childLogic.showLogic = false;\n this.clearAnswersRecursively(childLogic);\n }\n }\n } else if (this.selectionType === 'MULTIPLE') {\n if (this.selectedOptions.length === 0) {\n childLogic.showLogic = false;\n this.clearAnswersRecursively(childLogic);\n } else {\n const selectedLabels = this.selectedOptions.map(\n (item: any) => item.label\n );\n if (\n this.evaluateMultipleCondition(\n selectedLabels,\n childLogic.condition,\n childLogic.inputValue\n )\n ) {\n childLogic.showLogic = true;\n } else {\n childLogic.showLogic = false;\n this.clearAnswersRecursively(childLogic);\n }\n }\n }\n });\n }\n }\n\n clearAnswersRecursively(logic: any) {\n if (!logic || !logic.rows) return;\n\n logic.rows.forEach((row: any) => {\n row.grid.forEach((item: any) => {\n const element = item.element;\n\n if (item.entityType === 'QUESTION' && element) {\n // Clear answer if present\n if ('answer' in element) {\n element.answer = '';\n }\n\n // Recursively clear childLogics if any\n if (element.childLogics && element.childLogics.length > 0) {\n element.childLogics.forEach((childLogic: any) => {\n this.clearAnswersRecursively(childLogic);\n });\n }\n }\n\n if (item.entityType === 'SUBFORM' && element && element.rows) {\n // SUBFORM contains its own rows structure like a form\n this.clearAnswersRecursively({ rows: element.rows });\n }\n });\n });\n }\n\n evaluateCondition(answer: any, condition: string, inputValue: any): boolean {\n const inputValues = Array.isArray(inputValue)\n ? inputValue.map((val) => val.toString())\n : [inputValue.toString()];\n\n switch (condition) {\n case '!=':\n return !inputValues.includes(answer);\n case '=':\n return inputValues.includes(answer);\n case 'IN':\n return inputValues.includes(answer);\n case 'NOT IN':\n return !inputValues.includes(answer);\n default:\n return false;\n }\n }\n\n evaluateMultipleCondition(\n answers: any[],\n condition: string,\n inputValue: any\n ): boolean {\n const inputValues = Array.isArray(inputValue)\n ? inputValue.map((val) => val.toString())\n : [inputValue.toString()];\n\n switch (condition) {\n case '!=':\n return answers.every((answer) => !inputValues.includes(answer));\n case '=':\n return answers.some((answer) => inputValues.includes(answer));\n case 'IN':\n return answers.some((answer) => inputValues.includes(answer));\n case 'NOT IN':\n return answers.every((answer) => !inputValues.includes(answer));\n default:\n return false;\n }\n }\n\n fetchDataFromLookup() {\n this.formService.fetchDataFromLookup(this.lookupTable).subscribe(\n (response) => {\n this.customOptions = response.result.values.map(\n (item: { value: string; label: string }) => ({\n value: item.value,\n label: item.label,\n })\n );\n if (this.question.answer) {\n this.initializeCustomOption();\n }\n },\n (error) => {\n console.error('HTTP Error:', error);\n }\n );\n }\n\n fetchDataFromDatabase() {\n const transformedDatabase = this.transformDatabaseObject(this.database);\n this.formService.fetchDataFromDatabase(transformedDatabase).subscribe(\n (response) => {\n if (response.success) {\n this.customOptions = response.result?.content?.map(\n (item: { value: string; label: string }) => ({\n value: item.value,\n label: item.label,\n })\n );\n if (this.question.answer) {\n this.initializeCustomOption();\n }\n } else {\n console.error('Error fetching data from database:', response.message);\n }\n },\n (error) => {\n console.error('HTTP Error:', error);\n }\n );\n }\n\n transformDatabaseObject(database: any) {\n return {\n tableName: database.tableName,\n valueField: database.valueField,\n labelField: database.labelField,\n labelPattern: database?.labelPattern,\n criteria: database.criteria.map((criteria: any) => ({\n field: criteria?.field,\n valueSource: criteria?.valueSource,\n condition: criteria?.condition,\n value: criteria?.inputValue,\n logicalOperator: criteria?.logicalOperator,\n })),\n };\n }\n\n fetchDataFromAPI() {\n const allowedChars = ['.', ',', '-', '_', '(', ')', ''];\n const apiConfig = this.api;\n this.formService.fetchDataFromExternalAPI(apiConfig).subscribe(\n (response) => {\n let data;\n if (apiConfig.pathToValue) {\n data = this.extractDataByPath(response, apiConfig.pathToValue);\n } else {\n data = response;\n }\n\n this.customOptions = data.map((item: any) => {\n if (\n apiConfig.labelPattern &&\n Array.isArray(apiConfig.labelPattern) &&\n apiConfig.labelPattern.length > 0\n ) {\n let label = '';\n apiConfig.labelPattern.forEach((pattern: string) => {\n pattern = pattern.trim();\n if (allowedChars.includes(pattern)) {\n label += pattern;\n } else {\n if (item[pattern] !== undefined && item[pattern] !== null) {\n label += item[pattern] + ' ';\n }\n }\n });\n return {\n value: item[apiConfig.valueField.trim()],\n label: label,\n };\n } else {\n return {\n value: item[apiConfig.valueField.trim()],\n label: item[apiConfig.labelField.trim()],\n };\n }\n });\n if (this.question.answer) {\n this.initializeCustomOption();\n }\n },\n (error) => {\n console.error('HTTP Error:', error);\n }\n );\n }\n\n extractDataByPath(data: any, path: string) {\n return path.split('.').reduce((acc, part) => acc && acc[part], data);\n }\n\n isMinimumSelectionValid() {\n this.validationFailed = false;\n\n if (this.selectedOptions.length == 0 && this.required) {\n this.validationService.clearInvalid(this.buildElementId());\n this.validationFailed = true;\n this.validationMessage = 'This is a required question';\n this.question.validationMessage = 'This is a required question';\n this.question.validation = false;\n } else if (this.minimumSelection !== undefined) {\n if (this.selectionType == 'SINGLE') {\n this.validationService.clearInvalid(this.buildElementId());\n if (\n this.selectedOptions.length < this.minimumSelection &&\n this.required\n ) {\n this.validationFailed = true;\n this.validationMessage = `Minimum ${this.minimumSelection} selection(s) required.`;\n this.question.validationMessage = `Minimum ${this.minimumSelection} selection(s) required.`;\n this.question.validation = false;\n } else {\n this.validationService.clearInvalid(this.buildElementId());\n this.question.validation = true;\n }\n } else {\n if (this.selectedOptions.length < this.minimumSelection) {\n this.validationService.clearInvalid(this.buildElementId());\n this.validationFailed = true;\n this.validationMessage = `Minimum ${this.minimumSelection} selection(s) required.`;\n this.question.validationMessage = `Minimum ${this.minimumSelection} selection(s) required.`;\n this.question.validation = false;\n } else {\n this.validationService.clearInvalid(this.buildElementId());\n this.question.validation = true;\n }\n }\n } else {\n this.validationService.clearInvalid(this.buildElementId());\n this.question.validation = true;\n }\n }\n\n getOptions() {\n if (this.optionType === 'OPTION') {\n return this.customOptions;\n } else if (this.optionType === 'LOOKUP') {\n return Object.values(this.lookupTable);\n } else if (this.optionType === 'API') {\n return this.apiOptions.map((option) => option.valueField);\n } else {\n return [];\n }\n }\n\n isOptionDisabled(option: any): boolean {\n return (\n this.maximumSelection !== undefined &&\n this.selectedOptions.length >= this.maximumSelection &&\n !this.selectedOptions.includes(option)\n );\n }\n\n handleValidation(\n isValid: boolean,\n message: string = 'This field is required'\n ) {\n if (isValid) {\n this.validationService.clearInvalid(this.buildElementId());\n } else {\n // this.validationService.setInvalid(this.question.id, message);\n }\n }\n\n private buildElementId(): string {\n return this.inLine || this.inCard\n ? `${this.submissionIndex}-${this.question.id}`\n : `${this.question.id}`;\n }\n\n get isInvalid(): boolean {\n return !!this.validationService.getErrorMessage(this.buildElementId());\n }\n\n get errorMessage(): string | null {\n return this.validationService.getErrorMessage(this.buildElementId());\n }\n\n ngAfterViewInit() {\n if (this.inLine || this.inCard) {\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n } else {\n this.elementId = `question-${this.question.id}`;\n }\n\n this.tracker.registerElement(this.elementId);\n setTimeout(() => {\n this.whenClauseService.markLoadCompleted();\n });\n }\n\n ngOnDestroy() {\n if (this.elementId) {\n this.tracker.unregisterElement(this.elementId);\n }\n }\n}\n","<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-3\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <div\n class=\"checkboxField-container\"\n [class.two-column]=\"displayOptionsInColumn\"\n >\n <div class=\"form-check\" *ngFor=\"let option of customOptions\">\n <input\n class=\"form-check-input\"\n type=\"checkbox\"\n [id]=\"question.id+'-'+rowId+'-'+option.value\"\n [name]=\"option.value + 'Checkbox'\"\n [value]=\"option.value\"\n (change)=\"onCheckboxChange(option, $event)\"\n [disabled]=\"isOptionDisabled(option)\"\n [checked]=\"selectedOptions.includes(option)\"\n [attr.data-value]=\"selectedOptions.includes(option)\"\n [disabled]=\"disableEdit\"\n />\n <label\n class=\"formCheckLabel me-4 mb-2\"\n [for]=\"question.id+'-'+rowId+'-'+option.value\"\n >{{ option.label }}</label\n >\n </div>\n </div>\n <div\n *ngIf=\"isInvalid && (!inLine || selectedOptions.length === 0)\"\n class=\"error-message\"\n >\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n {{ validationMessage }}\n </div>\n</div>\n","import { DatePipe } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport {\n BsDatepickerConfig,\n BsDatepickerDirective,\n} from 'ngx-bootstrap/datepicker';\nimport { NgxMaterialTimepickerComponent } from 'ngx-material-timepicker';\nimport { Subscription } from 'rxjs';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ValidationService } from '../../services/validation.service';\n\n@Component({\n selector: 'lib-date-time-fields',\n templateUrl: './date-time-fields.component.html',\n styleUrls: ['./date-time-fields.component.scss'],\n providers: [DatePipe],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DateTimeFieldsComponent {\n bsConfig: Partial<BsDatepickerConfig> = {\n containerClass: 'theme-custom',\n isAnimated: true,\n adaptivePosition: true,\n showWeekNumbers: false,\n };\n \n rangeBsConfig: Partial<BsDatepickerConfig> = {};\n\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n required: boolean = false;\n hint: string = '';\n count: number = 0;\n minTime: string = '';\n maxTime: string = '';\n dateType: string = '';\n format: string = '';\n Dateformat: string = '';\n timeFormat: string = '';\n minDateOption: string = '';\n minDate: Date | undefined;\n maxDateOption: string = '';\n maxDate: Date | undefined;\n todayDate: Date = new Date();\n selectedDate: Date | null = null;\n selectedTime: string = '';\n selectedDateRange: string = '';\n selectedDateAndTime: Date | null = null;\n validationFailed!: boolean;\n timeValidationFailed!: boolean;\n validationMessage: string = '';\n maxTimeOption: string = '';\n minTimeOption: string = '';\n @Input() disableEdit: boolean = false;\n private elementId: string='';\n private timePickerOpened = false;\n private subscriptions: Subscription[] = [];\n private timePickersOpened: { [key: string]: boolean } = {};\n\n @ViewChild('datepickerYMD') datepicker!: BsDatepickerDirective;\n @ViewChild('daterangepicker') dateRangePicker!: BsDatepickerDirective;\n @ViewChild('dateAndTimePicker') dateAndTimePicker!: BsDatepickerDirective;\n @ViewChild('fullTime3') fullTime3!: NgxMaterialTimepickerComponent;\n @ViewChild('fullTime4') fullTime4!: NgxMaterialTimepickerComponent;\n\n\n constructor(\n private datePipe: DatePipe,\n private router: Router,\n private validationService: ValidationService,\n private tracker: ElementTrackerService\n ) { }\n\n ngOnInit() {\n this.valueAssigned();\n this.setRangeConfig();\n }\n\n private setRangeConfig() {\n this.rangeBsConfig = {\n containerClass: 'theme-custom',\n isAnimated: true,\n adaptivePosition: true,\n showWeekNumbers: false,\n dateInputFormat: this.format,\n rangeInputFormat: this.format,\n displayOneMonthRange: true, // ← only one month if start/end in same month\n };\n }\n\n valueAssigned() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.dateType = this.question.formElement.appearance.dateType;\n this.minDateOption = this.question.formElement.validation.minDateOption;\n this.Dateformat = this.question.formElement.appearance.format.replace(\n /DD/g,\n 'dd'\n ).replace(/YYYY/g, 'yyyy');\n\n this.minDate = this.getMinDate();\n\n\n this.maxDateOption = this.question.formElement.validation.maxDateOption;\n this.maxDate = this.getMaxDate();\n this.setDateTimeFormat();\n if (this.question?.answer && (this.question?.answer).length > 0)\n this.selectedDate = this.question?.answer;\n this.selectedTime = this.question.answer;\n if (this.question?.answer && (this.question?.answer).length > 0)\n this.selectedDateAndTime = new Date(this.question.answer);\n this.selectedDateRange = this.question.answer;\n this.minTimeOption = this.question.formElement.validation.minTimeOption;\n this.maxTimeOption = this.question.formElement.validation.maxTimeOption;\n if (this.dateType !== 'DATE_AND_TIME') {\n this.minTime = this.getMinTime().toString();\n this.maxTime = this.getMaxTime().toString();\n }\n if (this.dateType === 'DATE_AND_TIME' && this.question?.answer) {\n const dateTimeArray = this.question.answer\n ? this.question.answer.split(',')\n : []; // Fallback to an empty array if `this.question.answer` is undefined\n\n if (dateTimeArray.length === 2) {\n const fetchedDate = dateTimeArray[0].trim();\n const fetchedTime = dateTimeArray[1].trim();\n this.selectedDate = fetchedDate;\n this.selectedTime = fetchedTime;\n }\n\n const formattedDate = this.datePipe.transform(\n this.selectedDateAndTime,\n this.Dateformat\n );\n const formatteminDate = this.datePipe.transform(\n this.minDate,\n this.Dateformat\n );\n const formattemaxDate = this.datePipe.transform(\n this.maxDate,\n this.Dateformat\n );\n\n if (formattedDate === formatteminDate) {\n this.minTime = this.getMinTime().toString();\n if (this.timeFormat === '12') {\n this.maxTime = '12:00 pm';\n } else {\n this.maxTime = '23:59';\n }\n }\n if (formattedDate === formattemaxDate) {\n this.maxTime = this.getMaxTime().toString();\n if (this.timeFormat === '12') {\n this.minTime = '12:00 am';\n } else {\n this.minTime = '00:00';\n }\n }\n if (\n formattedDate !== formatteminDate &&\n formattedDate !== formattemaxDate\n ) {\n if (this.timeFormat === '12') {\n this.minTime = '12:00 am';\n this.maxTime = '12:00 pm';\n } else {\n this.minTime = '00:00';\n this.maxTime = '23:59';\n }\n }\n }\n\n if (!this.minTime || this.minTime.length === 0) {\n if (this.timeFormat === '12') {\n this.minTime = '12:00 am';\n } else {\n this.minTime = '00:00';\n }\n }\n\n if (!this.maxTime || this.maxTime.length === 0) {\n if (this.timeFormat === '12') {\n this.maxTime = '11:59 pm';\n } else {\n this.maxTime = '23:59';\n }\n }\n }\n\n setDateTimeFormat() {\n switch (this.dateType) {\n case 'DATE_ONLY':\n this.format = this.question.formElement.appearance.format;\n break;\n case 'TIME_ONLY':\n this.timeFormat = this.question.formElement.appearance.timeFormat;\n break;\n case 'DATE_AND_TIME':\n this.format = this.question.formElement.appearance.format;\n this.timeFormat = this.question.formElement.appearance.timeFormat;\n break;\n case 'DATE_RANGE':\n this.format = this.question.formElement.appearance.format;\n break;\n case 'MONTH_YEAR':\n this.format = this.question.formElement.appearance.format;\n break\n default:\n this.format = 'DD/MM/YYYY';\n }\n }\n\n getMinDate(): Date | undefined {\n if (this.minDateOption === 'CURRENT_DATE') {\n return this.todayDate;\n } else if (this.minDateOption === 'CUSTOM') {\n return new Date(this.question.formElement.validation.minDate);\n }\n else if(this.dateType==='MONTH_YEAR')\n {\n const minDateStr = this.question.formElement.validation.minDate;\n const year = new Date(minDateStr).getFullYear(); \n return new Date(year, 0, 1);\n \n }\n return undefined; // Return undefined if no valid option\n }\n\n getMaxDate(): Date | undefined {\n if (this.maxDateOption === 'CURRENT_DATE') {\n return this.todayDate;\n } else if (this.maxDateOption === 'CUSTOM') {\n return new Date(this.question.formElement.validation.maxDate);\n }\n else if(this.dateType==='MONTH_YEAR')\n {\n const minDateStr = this.question.formElement.validation.maxDate;\n const year = new Date(minDateStr).getFullYear(); // Extracts the year\n return new Date(year, 11, 31); \n \n }\n return undefined;\n }\n\n getMinTime() {\n if (this.minTimeOption) {\n const format = this.timeFormat === '24' ? 'HH:mm' : 'hh:mm a';\n\n if (this.minTimeOption === 'CURRENT_TIME') {\n const now = new Date();\n return this.datePipe.transform(now, format) || '';\n } else if (this.minTimeOption === 'CUSTOM') {\n const customTime = this.question.formElement.validation.minTime;\n const [hours, minutes] = customTime.split(':'); // Split by colon to get hours and minutes\n\n // Create a Date object with a fixed date and custom time\n const customDate = new Date();\n customDate.setHours(parseInt(hours, 10), parseInt(minutes, 10), 0, 0); // Set hours and minutes\n\n return this.datePipe.transform(customDate, format) || '';\n }\n }\n\n // Ensure a default return if no condition is met\n return '';\n }\n\n getMaxTime() {\n if (this.maxTimeOption) {\n const format = this.timeFormat === '24' ? 'HH:mm' : 'hh:mm a';\n if (this.maxTimeOption === 'CURRENT_TIME') {\n const now = new Date();\n return this.datePipe.transform(now, format) || '';\n } else if (this.maxTimeOption === 'CUSTOM') {\n const customTime = this.question.formElement.validation.maxTime;\n const [hours, minutes] = customTime.split(':'); // Split by colon to get hours and minutes\n\n // Create a Date object with a fixed date and custom time\n const customDate = new Date();\n customDate.setHours(parseInt(hours, 10), parseInt(minutes, 10), 0, 0); // Set hours and minutes\n\n return this.datePipe.transform(customDate, format) || '';\n }\n }\n\n return '';\n }\n\n openDatePicker() {\n this.datepicker.toggle();\n }\n\n openDateRangePicker() {\n this.dateRangePicker.toggle();\n }\n\n openDateAndTimePicker() {\n this.dateAndTimePicker.toggle();\n }\n\n closeDatepicker() {\n if (this.dateAndTimePicker) {\n this.dateAndTimePicker.hide(); // Close the datepicker\n }\n }\n\n validateField() {\n if (this.dateType === 'DATE_ONLY' || this.dateType === 'MONTH_YEAR') {\n if (this.selectedDate) {\n this.question.answer = this.formatDate(this.selectedDate.toString());\n } else {\n this.question.answer = '';\n }\n\n this.validateDateOnly();\n } else if (this.dateType === 'TIME_ONLY') {\n this.question.answer = String(this.selectedTime);\n this.validateTimeOnly();\n } else if (this.dateType === 'DATE_AND_TIME') {\n if (this.selectedDateAndTime) {\n this.question.answer = this.formatDate(\n this.selectedDateAndTime.toString()\n );\n } else {\n this.question.answer = '';\n }\n\n this.validateDateAndTime();\n } else {\n this.question.answer = this.formatDate(this.selectedDateRange);\n this.validateDateRange();\n }\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n }\n\n formatDate(date: string | Date, type: string = 'dateTime'): string {\n switch (this.dateType) {\n case 'DATE_ONLY':\n return this.datePipe.transform(this.selectedDate, this.Dateformat) || '';\n \n case 'MONTH_YEAR': \n const extracted = this.extractMonthYear(this.selectedDate?.toString());\n \n if (!extracted) {\n console.error(\"Invalid date format\");\n return '';\n }\n \n // Create a Date object with the extracted month and year\n this.selectedDate = new Date(extracted.year, extracted.month - 1, 1); // Month is 0-based in JS\n \n // Return formatted date\n return this.datePipe.transform(this.selectedDate, this.Dateformat) || '';\n \n \n // return this.datePipe.transform(this.selectedDate, this.Dateformat) || '';\n case 'DATE_AND_TIME':\n const formattedDate = this.datePipe.transform(\n this.selectedDateAndTime,\n this.Dateformat\n );\n const formatteminDate = this.datePipe.transform(\n this.minDate,\n this.Dateformat\n );\n const formattemaxDate = this.datePipe.transform(\n this.maxDate,\n this.Dateformat\n );\n\n if (formattedDate === formatteminDate) {\n this.minTime = this.getMinTime().toString();\n this.maxTime = this.timeFormat === '12' ? '11:59 pm' : '23:59';\n }\n\n if (formattedDate === formattemaxDate) {\n this.maxTime = this.getMaxTime().toString();\n this.minTime = this.timeFormat === '12' ? '12:00 am' : '00:00';\n }\n\n if (\n formattedDate !== formatteminDate &&\n formattedDate !== formattemaxDate\n ) {\n this.minTime = this.timeFormat === '12' ? '12:00 am' : '00:00';\n this.maxTime = this.timeFormat === '12' ? '11:59 pm' : '23:59';\n }\n\n const formattedTime = this.selectedTime || ''; // Ensure selectedTime is handled properly\n if (formattedDate && formattedTime) {\n return `${formattedDate}, ${formattedTime}`;\n }\n return '';\n case 'DATE_RANGE':\n const dates = date as unknown as Date[];\n\n // Ensure dates is defined and is an array\n if (Array.isArray(dates) && dates.length === 2) {\n const start = this.datePipe.transform(dates[0], this.Dateformat);\n const end = this.datePipe.transform(dates[1], this.Dateformat);\n return `${start} - ${end}`;\n }\n\n return '';\n default:\n return this.datePipe.transform(date, this.Dateformat) || '';\n }\n }\n\nextractMonthYear(dateInput: string | Date | null | undefined): { month: number, year: number } | null {\n if (!dateInput) {\n return null;\n }\n\n // Handle string case where date is passed as a stringified Date object\n if (typeof dateInput === \"string\") {\n const parsedDate = new Date(dateInput);\n if (!isNaN(parsedDate.getTime())) {\n return { month: parsedDate.getMonth() + 1, year: parsedDate.getFullYear() };\n }\n\n // Handle string formats like \"MM/YYYY\" or \"YYYY/MM\"\n const parts = dateInput.split(/[-/]/); // Split by '-' or '/'\n if (parts.length !== 2) {\n return null; // Invalid format\n }\n\n let year = 0, month = 0;\n\n\n if (parts[0].length === 4) {\n // Format: YYYY/MM or YYYY-MM\n year = parseInt(parts[0], 10);\n month = parseInt(parts[1], 10);\n } else {\n // Format: MM/YYYY or MM-YYYY\n month = parseInt(parts[0], 10);\n year = parseInt(parts[1], 10);\n }\n\n return { month, year };\n }\n\n // Handle actual Date object case\n if (dateInput instanceof Date && !isNaN(dateInput.getTime())) {\n return { month: dateInput.getMonth() + 1, year: dateInput.getFullYear() };\n }\n\n return null; // Invalid input\n}\n\n\n \n validateDateOnly() {\n this.validationFailed = false;\n this.validationMessage = '';\n if (this.required && !this.selectedDate) {\n this.validationFailed = true;\n this.validationService.clearInvalid(this.buildElementId());\n this.validationMessage = 'This is a required question';\n this.question.validation = false;\n this.question.validationMessage = 'This is a required question';\n } else {\n this.validationService.clearInvalid(this.buildElementId());\n this.question.validation = true;\n }\n }\n validateTimeOnly() {\n this.validationFailed = false;\n this.validationMessage = '';\n if (this.required && !this.selectedTime) {\n this.validationService.clearInvalid(this.buildElementId());\n this.validationFailed = true;\n this.validationMessage = 'This is a required question';\n this.question.validation = false;\n this.question.validationMessage = 'This is a required question';\n } else {\n this.validationService.clearInvalid(this.buildElementId());\n this.question.validation = true;\n }\n }\n validateDateRange() {\n this.validationService.clearInvalid(this.buildElementId());\n this.validationFailed = false;\n this.validationMessage = '';\n if (this.required && !this.selectedDateRange) {\n this.validationFailed = true;\n this.validationMessage = 'This is a required question';\n this.question.validation = false;\n this.question.validationMessage = 'This is a required question';\n } else {\n this.question.validation = true;\n }\n }\n validateDateAndTime() {\n this.validationService.clearInvalid(this.buildElementId());\n this.validationFailed = false;\n this.timeValidationFailed = false;\n this.validationMessage = '';\n if (this.required && !this.selectedDateAndTime) {\n this.validationFailed = true;\n this.validationMessage = 'This is a required question';\n this.question.validation = false;\n this.question.validationMessage = 'This is a required question';\n } else if (this.required && !this.selectedTime) {\n this.timeValidationFailed = true;\n this.validationMessage = 'This is a required question';\n this.question.validation = false;\n this.question.validationMessage = 'This is a required question';\n } else {\n this.question.validation = true;\n }\n }\n\n convertToISODate(\n dateInput: [number, number, number] | string | null | undefined\n ): Date | null {\n if (!dateInput) {\n return null; // Return null if dateInput is null, undefined, or any falsy value\n }\n\n let year, month, day;\n\n if (Array.isArray(dateInput)) {\n // Extract year, month, and day from array input\n [year, month, day] = dateInput;\n\n // Validate the array format\n if (\n typeof year !== 'number' ||\n typeof month !== 'number' ||\n typeof day !== 'number' ||\n isNaN(year) ||\n isNaN(month) ||\n isNaN(day) ||\n !Number.isInteger(year) ||\n !Number.isInteger(month) ||\n !Number.isInteger(day) ||\n month < 1 ||\n month > 12 ||\n day < 1 ||\n day > 31\n ) {\n return null;\n }\n } else if (typeof dateInput === 'string') {\n // Check if the string matches the YYYY-MM-DD format\n const dateParts = dateInput.split('-');\n if (dateParts.length !== 3) return null;\n\n [year, month, day] = dateParts.map(Number);\n\n // Validate the parsed parts\n if (\n isNaN(year) ||\n isNaN(month) ||\n isNaN(day) ||\n !Number.isInteger(year) ||\n !Number.isInteger(month) ||\n !Number.isInteger(day) ||\n month < 1 ||\n month > 12 ||\n day < 1 ||\n day > 31\n ) {\n return null;\n }\n } else {\n return null; // Unsupported input type\n }\n\n // Create a Date object (month is 0-based, so subtract 1)\n const date = new Date(year, month - 1, day);\n\n // Verify if the Date object matches the provided year, month, and day\n if (\n date.getFullYear() !== year ||\n date.getMonth() !== month - 1 ||\n date.getDate() !== day\n ) {\n return null;\n }\n\n return date;\n }\n\n ngAfterViewInit(): void {\n this.initializeTimePickers();\n if (this.inLine || this.inCard) {\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n } else {\n this.elementId = `question-${this.question.id}`;\n }\n \n this.tracker.registerElement(this.elementId);\n\n if (this.subscriptions.length === 0) {\n const routerSub = this.router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) {\n this.closeTimepickers();\n }\n });\n this.subscriptions.push(routerSub);\n }\n }\n\n ngAfterViewChecked(): void {\n // Ensure time picker subscriptions are attached even after conditional rendering\n this.initializeTimePickers();\n }\n\n ngOnDestroy(): void {\n this.closeTimepickers();\n if (this.elementId) {\n this.tracker.unregisterElement(this.elementId);\n }\n // Unsubscribe from all subscriptions\n this.subscriptions.forEach((sub) => {\n if (sub && typeof sub.unsubscribe === 'function') {\n sub.unsubscribe();\n }\n });\n }\n\n /**\n * Initialize and track time pickers\n */\n private initializeTimePickers(): void {\n // Track fullTime3 if available\n if (this.fullTime3 && !this.timePickersOpened['fullTime3']) {\n this.trackTimePicker(this.fullTime3, 'fullTime3');\n }\n\n // Track fullTime4 if it exists after conditional rendering\n if (this.fullTime4 && !this.timePickersOpened['fullTime4']) {\n this.trackTimePicker(this.fullTime4, 'fullTime4');\n }\n }\n\n private trackTimePicker(picker: NgxMaterialTimepickerComponent, pickerName: string): void {\n if (picker) {\n const sub = picker.opened.subscribe(() => {\n this.timePickersOpened[pickerName] = true; \n });\n\n this.subscriptions.push(sub);\n }\n }\n\n private closeTimepickers(): void {\n if (this.fullTime3 && this.timePickersOpened['fullTime3'] && typeof this.fullTime3.close === 'function') {\n this.fullTime3.close();\n this.timePickersOpened['fullTime3'] = false;\n }\n\n // Check for fullTime4 only if it exists\n if (this.fullTime4 && this.timePickersOpened['fullTime4'] && typeof this.fullTime4.close === 'function') {\n this.fullTime4.close();\n this.timePickersOpened['fullTime4'] = false;\n }\n }\n\n handleValidation(isValid: boolean, message: string = 'This field is required') {\n if (isValid) {\n this.validationService.clearInvalid(this.buildElementId());\n } else {\n // this.validationService.setInvalid(this.question.id, message);\n }\n }\n\n private buildElementId(): string {\n return (this.inLine || this.inCard)\n ? `${this.submissionIndex}-${this.question.id}`\n : `${this.question.id}`;\n }\n\n get isInvalid(): boolean {\n return !!this.validationService.getErrorMessage(this.buildElementId());\n }\n\n get errorMessage(): string | null {\n return this.validationService.getErrorMessage(this.buildElementId());\n }\n\n\n}\n","<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <ng-container *ngIf=\"dateType === 'DATE_ONLY'\">\n <!-- Date only picker -->\n <div class=\"input-container\">\n <input\n class=\"form-control height\"\n #datepickerYMD=\"bsDatepicker\"\n bsDatepicker\n [minDate]=\"minDate ? minDate : undefined\"\n [maxDate]=\"maxDate ? maxDate : undefined\"\n [bsConfig]=\"{ dateInputFormat: format, containerClass: 'theme-custom' }\"\n [(ngModel)]=\"selectedDate\"\n (blur)=\"validateField()\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"validationFailed\"\n placeholder=\"Select date\"\n container=\"body\"\n placement=\"top\"\n [class.invalid-question]=\"isInvalid && (!inLine || !selectedDate)\"\n [disabled]=\"disableEdit\"\n />\n <i\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n (click)=\"openDatePicker()\"\n ></i>\n </div>\n <div *ngIf=\"isInvalid && (!inLine || !selectedDate)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message mt-2\">\n {{ validationMessage }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"dateType === 'MONTH_YEAR'\">\n <div class=\"input-container\">\n <input\n class=\"form-control height\"\n #datepickerYMD=\"bsDatepicker\"\n bsDatepicker\n [minDate]=\"minDate ? minDate : undefined\"\n [maxDate]=\"maxDate ? maxDate : undefined\"\n [bsConfig]=\"{\n containerClass: 'theme-dark-blue',\n isAnimated: true,\n adaptivePosition: true,\n showWeekNumbers: false,\n minMode: 'month',\n dateInputFormat: format\n }\"\n [(ngModel)]=\"selectedDate\"\n (blur)=\"validateField()\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"validationFailed\"\n placeholder=\"Select date\"\n container=\"body\"\n placement=\"top\"\n [class.invalid-question]=\"isInvalid && (!inLine || !selectedDate)\"\n [disabled]=\"disableEdit\"\n />\n <i\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n (click)=\"openDatePicker()\"\n ></i>\n </div>\n <div *ngIf=\"isInvalid && (!inLine || !selectedDate)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger mt-2\">\n {{ validationMessage }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"dateType === 'TIME_ONLY'\">\n <!-- Time picker -->\n\n <div class=\"input-container\">\n <input\n class=\"form-control height appearanceInput mt-3\"\n aria-label=\"Select time\"\n placeholder=\"Select time\"\n readonly\n [format]=\"timeFormat === '24' ? 24 : 12\"\n [ngxTimepicker]=\"fullTime3\"\n [(ngModel)]=\"selectedTime\"\n [max]=\"maxTime\"\n [min]=\"minTime\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"validationFailed\"\n [class.invalid-question]=\"isInvalid && (!inLine || !selectedTime)\"\n container=\"body\"\n placement=\"top\"\n [disabled]=\"disableEdit\"\n />\n\n <i\n id=\"startDateIcon\"\n class=\"fa-solid fa-clock text-primary fs-6 clock-icon\"\n (click)=\"fullTime3.open()\"\n style=\"cursor: pointer\"\n ></i>\n <ngx-material-timepicker #fullTime3></ngx-material-timepicker>\n </div>\n <div *ngIf=\"isInvalid && (!inLine || !selectedTime)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger mt-2\">\n {{ validationMessage }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"dateType === 'DATE_AND_TIME'\">\n <!-- Date and time picker -->\n <div class=\"input-container\">\n <input\n #dateAndTimePicker=\"bsDatepicker\"\n type=\"text\"\n class=\"form-control height\"\n [minDate]=\"minDate ? minDate : undefined\"\n [maxDate]=\"maxDate ? maxDate : undefined\"\n [bsConfig]=\"{\n dateInputFormat: format,\n containerClass: 'theme-custom'\n }\"\n placeholder=\"Select date\"\n container=\"body\"\n placement=\"top\"\n bsDatepicker\n [class.invalid]=\"validationFailed\"\n [(ngModel)]=\"selectedDateAndTime\"\n (blur)=\"validateField()\"\n (ngModelChange)=\"validateField()\"\n [class.invalid-question]=\"isInvalid\"\n [disabled]=\"disableEdit\"\n />\n <i\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n (click)=\"openDateAndTimePicker()\"\n ></i>\n </div>\n <div\n class=\"input-container\"\n *ngIf=\"selectedDateAndTime && selectedDateAndTime != null\"\n >\n <input\n class=\"form-control height appearanceInput mt-3\"\n aria-label=\"Select time\"\n placeholder=\"Select time\"\n readonly\n [format]=\"timeFormat === '24' ? 24 : 12\"\n [ngxTimepicker]=\"fullTime4\"\n [(ngModel)]=\"selectedTime\"\n [max]=\"maxTime\"\n [min]=\"minTime\"\n (ngModelChange)=\"validateField()\"\n (focus)=\"closeDatepicker()\"\n [class.invalid]=\"timeValidationFailed\"\n [class.invalid-question]=\"isInvalid && (!inLine || !selectedTime)\"\n container=\"body\"\n placement=\"top\"\n [disabled]=\"disableEdit\"\n />\n\n <i\n id=\"startDateIcon\"\n class=\"fa-solid fa-clock text-primary fs-6 clock-icon\"\n (click)=\"fullTime4.open()\"\n style=\"cursor: pointer\"\n ></i>\n <ngx-material-timepicker #fullTime4></ngx-material-timepicker>\n </div>\n <!-- <div *ngIf=\"isInvalid\" class=\"error-message\"> -->\n <div *ngIf=\"isInvalid && (!inLine || !selectedTime)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div\n *ngIf=\"(validationFailed || timeValidationFailed) && !isInvalid\"\n class=\"text-danger mt-2\"\n >\n {{ validationMessage }}\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"dateType === 'DATE_RANGE'\">\n <!-- Date range picker -->\n <div class=\"input-container\">\n <input\n type=\"text\"\n class=\"form-control height\"\n #daterangepicker=\"bsDaterangepicker\"\n bsDaterangepicker\n placeholder=\"Select date\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [bsConfig]=\"{\n rangeInputFormat: format,\n dateInputFormat: format,\n containerClass: 'theme-custom',\n displayOneMonthRange: true\n }\"\n [(ngModel)]=\"selectedDateRange\"\n (blur)=\"validateField()\"\n (ngModelChange)=\"validateField()\"\n [class.invalid]=\"validationFailed\"\n [class.invalid-question]=\"isInvalid && (!inLine || !selectedDateRange)\"\n container=\"body\"\n placement=\"top\"\n [disabled]=\"disableEdit\"\n />\n <i\n class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n (click)=\"openDateRangePicker()\"\n ></i>\n </div>\n <div *ngIf=\"isInvalid && (!inLine || !selectedDateRange)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger mt-2\">\n {{ validationMessage }}\n </div>\n </ng-container>\n</div>\n","import { Logic } from './../../models/logic.model';\nimport {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n} from '@angular/core';\nimport { FormService } from '../../services/form.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ValidationService } from '../../services/validation.service';\nimport { ScoreCalculationService } from '../../services/score.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\n\ninterface DropDownData {\n value: string;\n label: string;\n image: string;\n}\n\n@Component({\n selector: 'lib-drop-down-fields',\n templateUrl: './drop-down-fields.component.html',\n styleUrls: ['./drop-down-fields.component.scss'],\n})\nexport class DropDownFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Output() answerChange = new EventEmitter<{\n answer: any;\n maxPossibleScore?: number;\n }>();\n\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n selectionType: string = '';\n minimumSelection: number = 0;\n maximumSelection: number = 0;\n optionType: string = '';\n lookupTable: string = '';\n customOptions: DropDownData[] = [];\n originalOptions: DropDownData[] = [];\n database: any = {};\n api: any = {};\n originalApi: any = {};\n selectedValue: any[] = [];\n validationFailed!: boolean;\n validationMessage: string = '';\n private elementId: string = '';\n hasMoreData: boolean = true;\n maxPossibleScore?: number;\n selectedValues: any[] = [];\n dbPageIndex: number = 0;\n dbPageSize: number = 10;\n dbTotalPages: number = 0;\n @Input() disableEdit: boolean = false;\n\n constructor(\n private formService: FormService,\n private cdr: ChangeDetectorRef,\n private validationService: ValidationService,\n private tracker: ElementTrackerService,\n private scoreCalcService: ScoreCalculationService,\n private whenClauseService:WhenClauseService\n ) {}\n\n ngOnInit() {\n this.valueAssigned();\n }\n\n onValueChange(newValue: any) {\n this.selectedValue = newValue;\n this.selectItems();\n }\n\n valueAssigned() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.selectionType = this.question.formElement.appearance.selectionType;\n this.minimumSelection =\n this.question.formElement.validation.minimumSelection;\n this.maximumSelection =\n this.question.formElement.validation.maximumSelection;\n this.optionType = this.question.formElement.option.optionType;\n\n // --- Check if answer is present ---\n if (this.question.answer && Array.isArray(this.question.answer)) {\n if (this.optionType === 'API') {\n this.api = this.question.formElement.option.api;\n this.originalApi = JSON.parse(JSON.stringify(this.api));\n // ✅ Check if pagination is enabled (pageIndex + pageSize exist in params with valueSource)\n const hasPagination =\n this.api?.params?.some((p: any) => p.valueSource === 'PAGE_INDEX') &&\n this.api?.params?.some((p: any) => p.valueSource === 'PAGE_SIZE');\n\n if (hasPagination) {\n // ✅ Populate selected values from answer\n this.selectedValues = this.question.answer.map((ans: string) => {\n const parts = ans.split('|');\n return parts.length > 1 ? parts[1] : parts[0];\n });\n }\n }\n\n else if (this.optionType === 'DATABASE') {\n this.selectedValues = this.question.answer.map((ans: string) => {\n const parts = ans.split('|');\n return parts.length > 1 ? parts[1] : parts[0];\n })};\n }\n\n\n // --- Handle different option types ---\n switch (this.optionType) {\n case 'OPTION':\n this.customOptions = this.question.formElement.option.customOptions.map(\n (option: { value: string }) => ({\n label: option.value,\n value: option.value,\n image: '',\n })\n );\n this.originalOptions = [...this.customOptions];\n if (this.question.answer) {\n this.initializeCustomOption();\n }\n break;\n\n case 'LOOKUP':\n this.lookupTable = this.question.formElement.option.lookupTable;\n this.fetchDataFromLookup();\n break;\n\n case 'DATABASE':\n this.database = this.question.formElement.option.database;\n this.fetchDataFromDatabase();\n break;\n\n case 'API':\n if (!this.api || Object.keys(this.api).length === 0) {\n this.api = this.question.formElement.option.api;\n this.originalApi = JSON.parse(JSON.stringify(this.api));\n }\n this.fetchDataFromAPI();\n break;\n\n default:\n console.warn('Unknown option type:', this.optionType);\n }\n\n // --- Scoring ---\n if (\n this.question.formElement.scoring &&\n this.question.formElement.scoring.enableScoring\n ) {\n this.maxPossibleScore =\n this.scoreCalcService.getMaxPossibleScoreForQuestion(this.question);\n this.question.maxPossibleScore = this.maxPossibleScore;\n }\n }\n\n initializeCustomOption() {\n\n this.customOptions.forEach((option: any) => {\n const isMatch = this.question?.answer?.some((a: any) => {\n const parts = a.trim().split('|');\n if (parts.length === 2) {\n const label = parts[0];\n const value = parts[1];\n return value == option.value && label == option.label;\n } else {\n return false;\n }\n });\n if (isMatch) {\n const alreadyExists = this.selectedValue.some(\n (item: any) => item.value === option.value\n );\n\n if (!alreadyExists) {\n this.selectedValue = [...this.selectedValue, option];\n }\n\n setTimeout(() => {\n const answers = Array.isArray(this.question.answer) ? this.question.answer : [];\n const parsedAnswers = answers.map((ans:any) => ans.split('|')[1]);\n this.whenClauseService.setQuestionAnswer(this.question.id,parsedAnswers,true);\n });\n }\n if (this.question.childLogics && this.question.answer) {\n this.updateChildLogics(this.question);\n }\n });\n\n this.cdr.detectChanges();\n }\n\n transformDatabaseObject(database: any,selectedValues:string[]=[]) {\n return {\n tableName: database.tableName,\n valueField: database.valueField,\n labelField: database.labelField,\n labelPattern: database?.labelPattern,\n selectedValues: selectedValues,\n criteria: database.criteria.map((criteria: any) => ({\n field: criteria.field,\n valueSource: criteria?.valueSource,\n condition: criteria.condition,\n value: criteria.inputValue,\n logicalOperator: criteria.logicalOperator,\n })),\n };\n }\n\n fetchDataFromDatabase(searchString:string='') {\n const value= this.question?.answer?.map((a: string) => {\n const [label, value] = a.split('|');\n return {\n label,\n value\n };\n })\n const transformedDatabase = this.transformDatabaseObject(this.database,value);\n this.formService.fetchDataFromDatabase(transformedDatabase,this.dbPageIndex,this.dbPageSize,searchString,true).subscribe(\n (response) => {\n if (response.success) {\n this.dbTotalPages = response.result.totalPages;\n const newOptions =\n response.result?.content?.map(\n (item: { value: string; label: string }) => ({\n value: item.value,\n label: item.label,\n })\n ) || [];\n if (this.dbPageIndex === 0) {\n this.customOptions = [...newOptions];\n }\n else {\n this.customOptions = [\n ...this.customOptions,\n ...newOptions,\n ];\n }\n\n\n this.originalOptions = [...this.customOptions];\n\n if (this.question.answer) {\n this.initializeCustomOption();\n }\n } else {\n console.error('Error fetching data from database:', response.message);\n }\n this.cdr.detectChanges();\n },\n (error) => {\n console.error('HTTP Error:', error);\n this.cdr.detectChanges();\n }\n );\n }\n\n fetchDataFromLookup() {\n this.formService.fetchDataFromLookup(this.lookupTable).subscribe(\n (response) => {\n this.customOptions = response.result.values.map(\n (item: { value: string; label: string }) => ({\n value: item.value,\n label: item.label,\n })\n );\n this.originalOptions = [...this.customOptions];\n if (this.question.answer) {\n this.initializeCustomOption();\n }\n },\n (error) => {\n console.error('HTTP Error:', error);\n }\n );\n }\n\n fetchDataFromAPI(append: boolean = false, search: boolean = false) {\n const apiConfig = JSON.parse(JSON.stringify(this.api));\n if (!this.hasMoreData && append) {\n // If no more data from last call and this is an append call, skip API\n return;\n }\n const allowedChars = ['.', ',', '-', '_', '(', ')', ''];\n\n if (search) {\n if (apiConfig.params) {\n apiConfig.params = apiConfig.params.filter(\n (p: any) => p.valueSource !== 'SELECTED_VALUES'\n );\n }\n if (apiConfig.headers) {\n apiConfig.headers = apiConfig.headers.filter(\n (h: any) => h.valueSource !== 'SELECTED_VALUES'\n );\n }\n }\n\n this.formService\n .fetchDataFromExternalAPI(apiConfig, this.selectedValues)\n .subscribe(\n (response) => {\n let data;\n if (apiConfig.pathToValue) {\n data = this.extractDataByPath(response, apiConfig.pathToValue);\n } else {\n data = response;\n }\n\n const newOptions = data.map((item: any) => {\n if (\n apiConfig.labelPattern &&\n Array.isArray(apiConfig.labelPattern) &&\n apiConfig.labelPattern.length > 0\n ) {\n let label = '';\n apiConfig.labelPattern.forEach((pattern: string) => {\n pattern = pattern.trim();\n if (allowedChars.includes(pattern)) {\n label += pattern;\n } else {\n if (item[pattern] !== undefined && item[pattern] !== null) {\n label += item[pattern]+' ';\n }\n }\n });\n return {\n value: item[apiConfig.valueField.trim()],\n label: label,\n };\n } else {\n return {\n value: item[apiConfig.valueField.trim()],\n label: item[apiConfig.labelField.trim()],\n };\n }\n });\n\n if (append) {\n this.customOptions = [...this.customOptions, ...newOptions];\n } else {\n this.customOptions = newOptions;\n }\n this.originalOptions = [...this.customOptions];\n\n // If no new data returned, mark as last page\n if (!newOptions.length) {\n this.hasMoreData = false;\n }\n\n if (this.question.answer && !append && !search) {\n this.initializeCustomOption();\n }\n },\n (error) => {\n console.error('HTTP Error:', error);\n }\n );\n }\n\n extractDataByPath(data: any, path: string) {\n return path.split('.').reduce((acc, part) => acc && acc[part], data);\n }\n\n selectItems(event?: any) {\n this.selectedValue = event;\n\n const valuesArray = this.selectedValue.map(\n (item) => `${item.label}|${item.value}`\n );\n this.question.answer = valuesArray;\n const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(\n this.question.answer,\n this.question\n );\n this.question.score = scoreResult?.scores;\n\n this.validationFailed = false;\n this.validationMessage = '';\n if (this.selectedValue.length == 0 && this.required) {\n this.validationFailed = true;\n this.validationService.clearInvalid(this.buildElementId());\n this.validationMessage = `This is a required question`;\n this.question.validation = false;\n this.question.validationMessage = `This is a required question`;\n } else if (\n this.selectedValue.length < this.minimumSelection ||\n this.selectedValue.length > this.maximumSelection\n ) {\n this.validationService.clearInvalid(this.buildElementId());\n this.validationFailed = true;\n this.validationMessage = `selected options must be between ${this.minimumSelection} & ${this.maximumSelection}`;\n this.question.validation = false;\n this.question.validationMessage = `selected options must be between ${this.minimumSelection} & ${this.maximumSelection}`;\n } else {\n this.validationService.clearInvalid(this.buildElementId());\n this.question.validation = true;\n }\n if (this.question.childLogics) {\n this.updateChildLogics(this.question);\n }\n this.answerChange.emit({\n answer: this.question.answer,\n maxPossibleScore: this.maxPossibleScore,\n });\n const answers = Array.isArray(this.question.answer) ? this.question.answer : [];\n const parsedAnswers = answers.map((ans:any) => ans.split('|')[1]);\n this.whenClauseService.setQuestionAnswer(this.question.id,parsedAnswers);\n }\n\n updateChildLogics(question: any) {\n if (question.childLogics && Array.isArray(question.childLogics)) {\n question.childLogics.forEach((childLogic: any) => {\n if (this.selectionType == 'SINGLE') {\n if (this.selectedValue.length == 0) {\n childLogic.show = false;\n this.clearAnswersRecursively(childLogic);\n } else {\n const selectedValue = this.selectedValue[0]?.label;\n if (\n this.evaluateCondition(\n selectedValue,\n childLogic.condition,\n childLogic.inputValue\n )\n ) {\n childLogic.showLogic = true;\n } else {\n childLogic.showLogic = false;\n this.clearAnswersRecursively(childLogic);\n }\n }\n } else if (this.selectionType === 'MULTIPLE') {\n if (this.selectedValue.length == 0) {\n childLogic.show = false;\n this.clearAnswersRecursively(childLogic);\n } else {\n const selectedValues = this.selectedValue.map(\n (item: any) => item.label\n );\n if (\n this.evaluateMultipleCondition(\n selectedValues,\n childLogic.condition,\n childLogic.inputValue\n )\n ) {\n childLogic.showLogic = true;\n } else {\n childLogic.showLogic = false;\n this.clearAnswersRecursively(childLogic);\n }\n }\n }\n });\n }\n }\n\n clearAnswersRecursively(logic: any) {\n if (!logic || !logic.rows) return;\n\n logic.rows.forEach((row: any) => {\n row.grid.forEach((item: any) => {\n const element = item.element;\n\n if (item.entityType === 'QUESTION' && element) {\n // Clear answer if present\n if ('answer' in element) {\n element.answer = '';\n }\n\n // Recursively clear childLogics if any\n if (element.childLogics && element.childLogics.length > 0) {\n element.childLogics.forEach((childLogic: any) => {\n this.clearAnswersRecursively(childLogic);\n });\n }\n }\n\n if (item.entityType === 'SUBFORM' && element && element.rows) {\n // SUBFORM contains its own rows structure like a form\n this.clearAnswersRecursively({ rows: element.rows });\n }\n });\n });\n }\n\n evaluateCondition(answer: any, condition: string, inputValue: any): boolean {\n const stringInputValue = Array.isArray(inputValue)\n ? inputValue.map((val) => val.toString().toLowerCase())\n : inputValue.toLowerCase();\n answer = Array.isArray(answer)\n ? answer?.map((ans) => ans.toLowerCase())\n : answer.toLowerCase();\n switch (condition) {\n case '!=':\n return answer != inputValue;\n case '=':\n return answer == inputValue;\n case 'IN':\n return stringInputValue.includes(answer);\n case 'NOT IN':\n return !stringInputValue.includes(answer);\n default:\n return false;\n }\n }\n\n evaluateMultipleCondition(\n answers: any,\n condition: string,\n inputValue: any\n ): boolean {\n const stringInputValue = Array.isArray(inputValue)\n ? inputValue.map((val) => val.toString())\n : inputValue.toString();\n answers = Array.isArray(answers)\n ? answers?.map((answer) => answer.toLowerCase())\n : answers.toLowerCase();\n switch (condition) {\n case '!=':\n return answers.every((answer: any) => answer != stringInputValue);\n case '=':\n return answers.some((answer: any) => answer == stringInputValue);\n case 'IN':\n return answers.some((answer: any) => stringInputValue.includes(answer));\n case 'NOT IN':\n return answers.every(\n (answer: any) => !stringInputValue.includes(answer)\n );\n default:\n return false;\n }\n }\n\n handleValidation(\n isValid: boolean,\n message: string = 'This field is required'\n ) {\n if (isValid) {\n this.validationService.clearInvalid(this.buildElementId());\n } else {\n // this.validationService.setInvalid(this.question.id, message);\n }\n }\n\n private buildElementId(): string {\n return this.inLine || this.inCard\n ? `${this.submissionIndex}-${this.question.id}`\n : `${this.question.id}`;\n }\n\n get isInvalid(): boolean {\n return !!this.validationService.getErrorMessage(this.buildElementId());\n }\n\n get errorMessage(): string | null {\n return this.validationService.getErrorMessage(this.buildElementId());\n }\n\n private hasPagination(apiConfig: any): boolean {\n const checkValueSource = (arr: any[]) =>\n Array.isArray(arr) &&\n arr.some(\n (item) =>\n item?.valueSource === 'PAGE_INDEX' ||\n item?.valueSource === 'PAGE_SIZE'\n );\n\n return (\n checkValueSource(apiConfig.headers) ||\n checkValueSource(apiConfig.params) ||\n checkValueSource(apiConfig.pathVariables)\n );\n }\n\n getNextSetOfItems(event: any) {\n const element = event.target;\n if (\n Math.floor(element.scrollHeight - element.scrollTop) <=\n element.clientHeight &&\n this.hasPagination(this.api) // Only if pagination is configured\n ) {\n this.loadNextPage();\n }\n\n\n\n else if( this.optionType === 'DATABASE' && this.dbPageIndex < this.dbTotalPages){\n this.dbPageIndex +=1;\n this.fetchDataFromDatabase();\n }\n }\n\n private loadNextPage() {\n if (!this.hasMoreData) return;\n // Find the PAGE_INDEX param/header/pathVar and increment it\n const updateValueSource = (arr: any[]) => {\n if (!Array.isArray(arr)) return;\n arr.forEach((item) => {\n if (item.valueSource === 'PAGE_INDEX') {\n let currentPage = parseInt(item.inputValue || '0', 10);\n item.inputValue = (currentPage + 1).toString();\n }\n });\n };\n\n updateValueSource(this.api.headers);\n updateValueSource(this.api.params);\n updateValueSource(this.api.pathVariables);\n\n // Call your fetch function again\n this.fetchDataFromAPI(true);\n }\n\n search(searchTerm: string) {\n if( this.optionType ==='DATABASE'){\n this.dbPageIndex =0;\n this.fetchDataFromDatabase(searchTerm.trim());\n }\n else if (this.optionType !== 'API') {\n // 🔹 Local search\n if (searchTerm && searchTerm.trim() !== '') {\n const lowerSearch = searchTerm.toLowerCase();\n this.customOptions = this.originalOptions.filter((option) =>\n option.label?.toLowerCase().includes(lowerSearch)\n );\n } else {\n // Reset to full list when search is cleared\n this.customOptions = [...this.originalOptions];\n }\n }\n else {\n // 🔹 API search\n if (searchTerm && searchTerm.trim() !== '') {\n // Inject search term into API config (headers or params)\n this.injectSearchString(searchTerm.trim());\n } else {\n // 🔹 Clear the search string from API config when input is empty\n this.injectSearchString('');\n }\n\n // Reset pagination\n this.hasMoreData = true;\n // Fetch fresh results\n this.fetchDataFromAPI(false, true);\n }\n }\n\n injectSearchString(searchTerm: string) {\n // Always work on a fresh copy, don’t mutate this.api directly\n this.api = JSON.parse(JSON.stringify(this.originalApi));\n\n if (this.api?.params) {\n this.api.params.forEach((p: any) => {\n if (p.valueSource === 'SEARCH_STRING') {\n p.inputValue = searchTerm;\n }\n });\n }\n\n if (this.api?.headers) {\n this.api.headers.forEach((h: any) => {\n if (h.valueSource === 'SEARCH_STRING') {\n h.inputValue = searchTerm;\n }\n });\n }\n }\n\n ngAfterViewInit() {\n if (this.inLine || this.inCard) {\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n } else {\n this.elementId = `question-${this.question.id}`;\n }\n\n this.tracker.registerElement(this.elementId);\n setTimeout(() => {\n this.whenClauseService.markLoadCompleted();\n });\n }\n\n ngOnDestroy() {\n if (this.elementId) {\n this.tracker.unregisterElement(this.elementId);\n }\n }\n}\n","<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <!-- <lib-dropdown\n [items]=\"customOptions\"\n [multiple]=\"selectionType === 'SINGLE' ? false : true\"\n (click)=\"selectItems()\"\n [(selectedItems)]=\"selectedValue\"\n ></lib-dropdown> -->\n\n <lib-dropdown\n [placeholder]=\"'select'\"\n [items]=\"customOptions\"\n [multiple]=\"selectionType === 'SINGLE' ? false : true\"\n [disable]=\"disableEdit\"\n (selectedItemsChange)=\"selectItems($event)\"\n [(selectedItems)]=\"selectedValue\"\n (onDropdownScroll)=\"getNextSetOfItems($event)\"\n (onSearch)=\"search($event)\"\n ></lib-dropdown>\n\n <!-- (onDropdownScroll)=\"getNextSetOfItems($event)\"\n (onSearch)=\"search($event)\" -->\n <div\n *ngIf=\"isInvalid && (!inLine || selectedValue.length === 0)\"\n class=\"error-message\"\n >\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message mb-2\">\n {{ validationMessage }}\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ValidationService } from '../../services/validation.service';\nimport { DataService } from '../../services/data.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\n\nexport interface Attachment {\n fileId: string;\n fileName: string;\n fileUrl: string;\n previewUrl?: string;\n}\n\n@Component({\n selector: 'lib-file-picker-fields',\n templateUrl: './file-picker-fields.component.html',\n styleUrls: ['./file-picker-fields.component.scss'],\n})\nexport class FilePickerFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n @Output() inlineDeleteFiles = new EventEmitter<any>();\n\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n multiFileUploads: boolean = true;\n fileTypes: string[] = [];\n fileSize: number = 0;\n fileSizeUnit: string = '';\n totalFileSize: number = 0;\n initialFileSize: number = 0;\n initialTotalSize: number = 0;\n dragAndDrop: boolean = false;\n previewUploadedFiles: boolean = true;\n validationFailed: boolean = false;\n validationMessage: string = '';\n attachments: Attachment[] = [];\n timeoutId: any;\n\n avatarPicker: boolean = false;\n files: any;\n private elementId: string='';\n apiUrl:string = '';\n selectedFile!: File;\n selectedFiles: any = [];\n @Input() disableEdit: boolean = false;\n header:any;\n \n constructor(\n private validationService: ValidationService,\n private tracker: ElementTrackerService,\n private dataService: DataService,\n private whenClauseService:WhenClauseService,\n private http: HttpClient\n ) {\n this.dataService.apiUrl$.subscribe((data) => {\n this.apiUrl = data+'/api/cdn/preview?url=';\n });\n\n this.dataService.header$.subscribe((data) => {\n this.header = data;\n });\n }\n\n\n ngOnInit() {\n this.valueAssigned();\n }\n \n valueAssigned() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.multiFileUploads =\n this.question.formElement.appearance.multiFileUploads;\n this.dragAndDrop = this.question.formElement.appearance.dragAndDrop;\n this.previewUploadedFiles =\n this.question.formElement.appearance.previewUploadedFiles;\n this.fileTypes = this.question.formElement.validation.fileTypes;\n this.fileSizeUnit = this.question.formElement.validation.fileSizeUnit;\n this.avatarPicker = this.question.formElement.appearance.avatarPicker;\n this.initialFileSize = this.question.formElement.validation?.fileSize;\n this.fileSize = this.convertToBytes(\n this.initialFileSize,\n this.fileSizeUnit\n );\n this.initialTotalSize = this.question.formElement.validation?.totalFileSize;\n this.totalFileSize = this.convertToBytes(\n this.initialTotalSize,\n this.fileSizeUnit\n );\n \n if (this.question.answer) {\n this.files = this.question.answer;\n }\n \n \n this.attachments = this.question?.attachments;\n setTimeout(() => {\n this.whenClauseService.setQuestionAnswer(this.question.id,this.attachments.length,true);\n });\n this.convertUrl();\n }\n \n convertUrl(){\n const token = this.header.authToken;\n\n if (!this.attachments || !token) return;\n\n this.attachments.forEach((attachment, index) => {\n const fileUrl = `${this.apiUrl}${attachment.fileUrl.replace(/\\//g, \"%2F\")}`; \n const headers = new HttpHeaders().set('authorization', `Bearer ${token}`);\n \n this.http.get(fileUrl, { headers, responseType: 'blob' }).subscribe((blob) => {\n const blobUrl = URL.createObjectURL(blob);\n this.attachments[index].previewUrl = blobUrl;\n });\n }); \n }\n \n convertToBytes(size: number, unit: string): number {\n const units: { [key: string]: number } = {\n B: 1,\n KB: 1024,\n MB: 1024 * 1024,\n GB: 1024 * 1024 * 1024,\n };\n return size * (units[unit.toUpperCase()] || 1);\n }\n \n\n handleFileTypeNotAllowed(fileType: string): void {\n this.validationFailed = true;\n this.validationMessage = 'File type not allowed';\n this.clearValidationMessageAfterTimeout();\n }\n\n handleFileSize(event: string): void {\n this.validationFailed = true;\n if (event === 'File size exceeds the limit') {\n this.validationMessage = `${event} ${this.initialFileSize} ${this.fileSizeUnit}`;\n } else if (event === 'Total size exceeds the limit') {\n this.validationMessage = `${event} ${this.initialTotalSize} ${this.fileSizeUnit}`;\n } else {\n this.validationMessage = event;\n }\n this.clearValidationMessageAfterTimeout();\n }\n\n clearValidationMessageAfterTimeout(): void {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n }\n\n this.timeoutId = setTimeout(() => {\n this.validationMessage = '';\n this.validationFailed = false;\n this.timeoutId = null;\n }, 5000);\n} \n\n onFileChange(event: any) {\n const file: File = event.target.files[0];\n this.selectedFile = file;\n this.selectedFiles.push(this.selectedFile);\n this.question.answer = this.selectedFiles;\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n }\n\n handleFinalArray(fileType: any[]): void {\n const extractedData = fileType.map((item: any) => ({\n name: item._file.name,\n size: item._file.size,\n type: item._file.type,\n }));\n\n\n const jsonString = JSON.stringify(extractedData);\n this.question.answer = fileType;\n const fileLength = fileType.length;\n \n setTimeout(() => {\n this.whenClauseService.setQuestionAnswer(this.question.id,fileLength);\n });\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n this.validationService.clearInvalid(this.buildElementId());\n }\n deleteFiles(event: any) {\n this.question.deleteFiles = event;\n this.question.attachments = this.question.attachments.filter(\n (item: any) => {\n return !event.includes(item.fileId);\n }\n );\n this.question.copiedAttachments = this.question.copiedAttachments.filter(\n (item: any) => {\n return !event.includes(item);\n }\n );\n setTimeout(() => {\n // Check current file count after delay\n const attachmentsLength = this.question?.attachments?.length || 0;\n const currentFileCount = this.question?.answer?.length || 0;\n \n // Only call when clause if no new files were added recently\n // (assuming handleFinalArray would have updated this.question.answer)\n if (attachmentsLength === currentFileCount) {\n this.whenClauseService.setQuestionAnswer(this.question.id, attachmentsLength);\n }\n }, 50);\n this.inlineDeleteFiles.emit(this.question.deleteFiles);\n }\n\n handleValidation(isValid: boolean, message: string = 'This field is required') {\n if (isValid) {\n this.validationService.clearInvalid(this.buildElementId());\n } else {\n // this.validationService.setInvalid(this.question.id, message);\n }\n }\n\n private buildElementId(): string {\n return (this.inLine || this.inCard)\n ? `${this.submissionIndex}-${this.question.id}`\n : `${this.question.id}`;\n }\n\n get isInvalid(): boolean {\n return !!this.validationService.getErrorMessage(this.buildElementId());\n }\n\n get errorMessage(): string | null {\n return this.validationService.getErrorMessage(this.buildElementId());\n }\n\n ngAfterViewInit() {\n if (this.inLine || this.inCard) {\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n } else {\n this.elementId = `question-${this.question.id}`;\n }\n \n this.tracker.registerElement(this.elementId);\n }\n\n ngOnDestroy() {\n if (this.elementId) {\n this.tracker.unregisterElement(this.elementId);\n }\n }\n}\n","<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <div\n [ngClass]=\"{'field-disabled':disableEdit}\"\n >\n <lib-docUpload\n [totalSize]=\"totalFileSize\"\n [fileAllowed]=\"fileTypes\"\n [multiple]=\"multiFileUploads\"\n [fileSize]=\"fileSize\"\n [files]=\"files\"\n [avatarPicker]=\"avatarPicker\"\n (fileTypeNotAllowed)=\"handleFileTypeNotAllowed($event)\"\n (fileSizeAllowed)=\"handleFileSize($event)\"\n (finalArray)=\"handleFinalArray($event)\"\n [attachments]=\"attachments\"\n (deleteFiles)=\"deleteFiles($event)\"\n ></lib-docUpload>\n </div>\n\n <div *ngIf=\"isInvalid && (!inLine || (!question.answer||!attachments))\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n {{ validationMessage }}\n </div>\n</div>\n","import { Component, Input, ViewChild, ElementRef, Output, EventEmitter } from '@angular/core';\nimport { GoogleMap } from '@angular/google-maps';\n\n@Component({\n selector: 'lib-location-fields',\n templateUrl: './location-fields.component.html',\n styleUrls: ['./location-fields.component.scss'],\n})\nexport class LocationFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n @ViewChild('mapSearchField')\n searchField!: ElementRef;\n @ViewChild(GoogleMap) map!: GoogleMap;\n\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n defaultZoomLevel: number = 0;\n setCurrentPosition: boolean = false;\n allowFullScreen: boolean = false;\n latitude: number = 0;\n longitude: number = 0;\n regionBoundary: boolean = false;\n region: string = '';\n showGoogleMap!: boolean;\n mapConfigurations: any = {};\n\n ngOnInit() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.defaultZoomLevel =\n this.question.formElement.appearance.defaultZoomLevel;\n this.setCurrentPosition =\n this.question.formElement.appearance.setCurrentPosition;\n this.allowFullScreen = this.question.formElement.appearance.allowFullScreen;\n this.latitude = this.question.formElement.appearance.latitude;\n this.longitude = this.question.formElement.appearance.longitude;\n this.regionBoundary = this.question.formElement.validation.regionBoundary;\n this.region = this.question.formElement.validation.region;\n this.mapConfigurations = {\n disableDefaultUI: true,\n fullscreenControl: this.allowFullScreen,\n zoomControl: true,\n };\n }\n\n ngAfterViewInit(): void {\n const searchBox = new google.maps.places.SearchBox(\n this.searchField.nativeElement\n );\n\n this.map.controls[google.maps.ControlPosition.TOP_CENTER].push(\n this.searchField.nativeElement\n );\n\n searchBox.addListener('places_changed', () => {\n const places = searchBox.getPlaces();\n if (places?.length === 0) {\n return;\n }\n\n const bounds = new google.maps.LatLngBounds();\n places?.forEach((place) => {\n if (!place.geometry || !place.geometry.location) {\n return;\n }\n\n if (place.geometry.viewport) {\n // Only geocodes have viewport.\n bounds.union(place.geometry.viewport);\n } else {\n bounds.extend(place.geometry.location);\n }\n });\n\n this.map.fitBounds(bounds);\n });\n }\n}\n","<div [ngClass]=\"{ 'mb-4': !inLine }\" class=\"px-3\" [attr.name]=\"question.testElementName\">\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <div class=\"input-group\">\n <input\n type=\"text\"\n class=\"form-control location-input\"\n placeholder=\"Enter location\"\n #locationInput\n />\n </div>\n\n <input #mapSearchField class=\"my-map-search-field\" type=\"text\" />\n <google-map width=\"100%\" [options]=\"mapConfigurations\"></google-map>\n</div>\n","import { Component, ElementRef, EventEmitter, Input, Output } from '@angular/core';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\n\n@Component({\n selector: 'lib-mail-fields',\n templateUrl: './mail-fields.component.html',\n styleUrls: ['./mail-fields.component.scss'],\n})\nexport class MailFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n placeholder: string = '';\n expectedDomains: string[] = [];\n regularExpression: string = '';\n email: string = '';\n validationFailed: boolean = false;\n validationMessage: string = '';\n defaultValue: string = '';\n @Input() disableEdit: boolean = false;\n private elementId: string='';\n constructor(\n private validationService: ValidationService,\n private tracker: ElementTrackerService\n ) {\n }\n\n\n ngOnInit() {\n this.valueAssigned();\n }\n\n valueAssigned() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.placeholder = this.question.formElement?.appearance?.placeholder || '';\n this.expectedDomains =\n this.question?.formElement?.validation?.expectedDomains\n ?.split(',')\n .map((domain: any) => domain.trim());\n this.regularExpression =\n this.question.formElement.validation.regularExpression;\n this.defaultValue = this.question?.defaultValue;\n this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\n this.email = this.defaultValue;\n if(this.question.answer){\n this.email = this.question?.answer \n }else if(this.defaultValue && !this.question.answer){\n this.question.answer = this.defaultValue;\n }\n }\n\n validateEmail() {\n this.validationFailed = false;\n this.validationMessage = '';\n const enteredEmail = this.email?.trim().toLowerCase();\n if (this.required && !this.email) {\n this.validationFailed = true;\n this.validationMessage = 'This is a required question';\n this.question.validation = false;\n this.question.validationMessage = 'This is a required question';\n } else if (this.expectedDomains && this.expectedDomains.some(d => d.trim() !== '')) { \n const isValidEmail = this.expectedDomains.some((domain) =>\n enteredEmail?.endsWith(domain)\n );\n this.validationFailed = !isValidEmail;\n this.validationMessage = 'Please enter valid email address';\n this.question.validation = !this.validationFailed;\n this.question.validationMessage = 'Please enter valid email address';\n }\n else {\n this.question.validation = true;\n }\n }\n validateInput(event: any) {\n this.validationService.clearInvalid(this.buildElementId())\n this.question.answer = event.target.value;\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n this.validateEmail();\n }\n\n handleValidation(isValid: boolean, message: string = 'This field is required') {\n if (isValid) {\n this.validationService.clearInvalid(this.buildElementId());\n } else {\n // this.validationService.setInvalid(this.question.id, message);\n }\n }\n\n private buildElementId(): string {\n return (this.inLine || this.inCard)\n ? `${this.submissionIndex}-${this.question.id}`\n : `${this.question.id}`;\n }\n\n get isInvalid(): boolean {\n return !!this.validationService.getErrorMessage(this.buildElementId());\n }\n\n get errorMessage(): string | null {\n return this.validationService.getErrorMessage(this.buildElementId());\n }\n\n ngAfterViewInit() {\n if (this.inLine || this.inCard) {\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n } else {\n this.elementId = `question-${this.question.id}`;\n }\n \n this.tracker.registerElement(this.elementId);\n }\n\n ngOnDestroy() {\n if (this.elementId) {\n this.tracker.unregisterElement(this.elementId);\n }\n }\n}\n","<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <input\n type=\"email\"\n class=\"form-control mb-2 height\"\n [placeholder]=\"placeholder\"\n [(ngModel)]=\"email\"\n (blur)=\"validateEmail()\"\n (input)=\"validateInput($event)\"\n [class.invalid]=\"validationFailed\"\n [class.invalid-question]=\"isInvalid && (!inLine || !email)\"\n [disabled]=\"disableEdit\"\n />\n <!-- <div *ngIf=\"isInvalid\" class=\"error-message\"> -->\n <div *ngIf=\"isInvalid && (!inLine || !email)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n {{ validationMessage }}\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { DataService } from './data.service';\n\ninterface CountryData {\n value: string;\n label: string;\n image: string;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class CountryService {\n private apiUrl: string = '';\n header: any = {};\n\n constructor(private http: HttpClient, private dataService: DataService) {\n this.dataService.apiUrl$.subscribe((data) => {\n this.apiUrl = data;\n });\n }\n\n loadCountryDetails(questionId: string, page: number, size: number, searchKey: string): Observable<any> {\n return this.http.get<any>(`${this.apiUrl}/api/public/json/country?page=${page}&size=${size}&searchKey=${encodeURIComponent(searchKey)}`);\n }\n\n processCountryDetails(\n data: any[],\n displayFlag: boolean,\n displayCode: boolean,\n showCountryName: boolean\n ): CountryData[] {\n const countryDetails: CountryData[] = [];\n data.forEach((country) => {\n const flag = displayFlag && country.flag ? country.flag : '';\n const name = showCountryName ? country.name || '' : '';\n const isdRoot = country.isd?.root || '';\n const isdSuffixes = country.isd?.suffixes || [];\n \n if (isdRoot && isdSuffixes.length > 0) {\n isdSuffixes.forEach((suffix: string) => {\n const isdCode = `${isdRoot}${suffix}`;\n \n // Special case: Only flag should be displayed, but value must have ISD code\n if (displayFlag && !displayCode && !showCountryName) {\n countryDetails.push({\n value: isdCode, // Keep ISD code in value\n label: '', // No text in label\n image: flag, // Only flag should be displayed\n });\n } else {\n // Handle all other cases\n let label = '';\n if (showCountryName) label += name;\n if (displayCode) label += (label ? ' ' : '') + isdCode;\n if (!label) label = isdCode; // Ensure label is not empty\n \n countryDetails.push({\n value: isdCode,\n label: label.trim(),\n image: flag,\n });\n }\n });\n } else {\n const fallbackCode = isdRoot || country.code || ''; // Fallback if no suffixes\n \n if (displayFlag && !displayCode && !showCountryName) {\n countryDetails.push({\n value: fallbackCode,\n label: '',\n image: flag,\n });\n } else {\n let label = '';\n if (showCountryName) label += name;\n if (displayCode) label += (label ? ' ' : '') + fallbackCode;\n if (!label) label = fallbackCode;\n \n countryDetails.push({\n value: fallbackCode,\n label: label.trim(),\n image: flag,\n });\n }\n }\n });\n return countryDetails;\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { CountryService } from '../../services/countryService';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ValidationService } from '../../services/validation.service';\n\ninterface CountryData {\n value: string;\n label: string;\n image: string;\n}\n\n@Component({\n selector: 'lib-mobile-fields',\n templateUrl: './mobile-fields.component.html',\n styleUrls: ['./mobile-fields.component.scss'],\n})\nexport class MobileFieldsComponent implements OnInit {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n placeholder: string = '';\n displayCountryCode: boolean = true;\n displayFlag: boolean = true;\n displayCode: boolean = true;\n showCountryName: boolean = true;\n beautifyNumbers: boolean = true;\n countryWiseValidation: boolean = true;\n countryDetails: CountryData[] = [];\n selectedCountry: CountryData[] = [];\n validationFailed: boolean = false;\n validationMessage: string = '';\n mobileNumber: string = '';\n questionId: string = '';\n currentPage: number = 0;\n size: number = 30;\n totalPages: number = 0;\n searchKey: string = '';\n lastPage:boolean=false;\n isFirstPage: boolean = false;\n defaultValue: string = '';\n @Input() disableEdit: boolean = false;\n\n private elementId: string='';\n\n constructor(\n private countryService: CountryService,\n private validationService: ValidationService,\n private tracker: ElementTrackerService\n ) { }\n\n ngOnInit() {\n this.valueAssigned();\n }\n\n valueAssigned() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.placeholder = this.question.formElement.appearance.placeholder;\n this.displayCountryCode =\n this.question.formElement.appearance.displayCountryCode;\n this.displayFlag = this.question.formElement.appearance.displayFlag;\n this.displayCode = this.question.formElement.appearance.displayCode;\n this.showCountryName = this.question.formElement.appearance.showCountryName;\n this.beautifyNumbers = this.question.formElement.appearance.beautifyNumbers;\n this.countryWiseValidation =\n this.question.formElement.validation.countryWiseValidation;\n this.questionId = this.question.id;\n this.defaultValue = this.question?.defaultValue;\n this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\n this.loadCountry(this.questionId, this.currentPage, this.size, this.searchKey);\n }\n\n\n initializeAnswer(param?: string): void {\n let countryCode: string | undefined;\n let mobileNumber: string | undefined;\n \n const value = param === 'answer' && this.question?.answer\n ? this.question.answer\n : this.question?.defaultValue;\n \n if (this.displayCountryCode) {\n // Expect \"countryCode mobileNumber\"\n [countryCode, mobileNumber] = (value || '').split(' ');\n } else {\n // Only mobile number present\n mobileNumber = value || '';\n }\n \n this.mobileNumber = mobileNumber || '';\n \n if (this.displayCountryCode) {\n if (!this.selectedCountry) {\n this.selectedCountry = [];\n }\n \n let matchedCountry = this.countryDetails.find(\n (country) => country.value === countryCode\n );\n \n if (matchedCountry) {\n this.selectedCountry= [matchedCountry];\n }\n\n\n else if (countryCode) {\n // Not found? Fetch from API directly\n this.countryService.loadCountryDetails(this.questionId, 0, 1, countryCode).subscribe((data) => {\n const extraCountries = this.countryService.processCountryDetails(\n data.result.content,\n this.displayFlag,\n this.displayCode,\n this.showCountryName\n );\n matchedCountry = extraCountries.find(\n (country) => country.value === countryCode\n );\n if (matchedCountry) {\n // Add to dropdown list if missing\n if (!this.countryDetails.some((c) => c.value === matchedCountry!.value)) {\n this.countryDetails = [matchedCountry, ...this.countryDetails];\n }\n // Preselect it\n this.selectedCountry = [matchedCountry];\n }\n });\n } \n }\n }\n \n\n onCountryChange() {\n this.validationFailed = false;\n this.validationMessage = '';\n this.updateAnswer();\n }\n\n onInput(event: Event) {\n this.validationService.clearInvalid(this.buildElementId());\n const input = event.target as HTMLInputElement;\n \n // Regular expression to allow only numbers and multiple hyphens, but ensure only one hyphen between numbers\n const regex = /^(\\d+)(-\\d+)*$/;\n \n if (!regex.test(input.value)) {\n // Remove invalid characters\n input.value = input.value.replace(/[^\\d-]/g, '');\n \n // Ensure only one hyphen is present between numbers\n input.value = input.value\n .split('-')\n .filter((segment, index, array) => segment || index === 0 || index === array.length - 1)\n .join('-');\n }\n \n // Update the model\n this.mobileNumber = input.value;\n \n this.updateAnswer();\n }\n onMobileNumberChange() {\n }\n\n updateAnswer() { \n if(this.displayCountryCode){\n if (this.selectedCountry.length > 0 && this.mobileNumber) {\n const countryCode = this.selectedCountry[0].value;\n this.question.answer = `${countryCode} ${this.mobileNumber}`;\n }\n }else {\n this.question.answer = this.mobileNumber;\n }\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n }\n\n validateMobile() {\n this.validationFailed = false;\n this.validationMessage = '';\n \n if (this.required && (!this.mobileNumber || (this.displayCountryCode && this.selectedCountry.length === 0))) {\n this.validationFailed = true;\n this.validationService.clearInvalid(this.buildElementId());\n this.validationMessage = 'This is a required question';\n } else {\n this.updateAnswer();\n }\n }\n\n loadCountry(id: string, currentPage: number, size: number, searchKey: string, isSearch: boolean = false) {\n this.countryService.loadCountryDetails(this.questionId, currentPage, size, searchKey).subscribe((data) => {\n if (this.totalPages === 0) {\n this.totalPages = data.result.totalPages;\n }\n this.lastPage=data.result.last;\n this.isFirstPage = data.result.first;\n let newCountries=this.countryService.processCountryDetails(\n data.result.content,\n this.displayFlag,\n this.displayCode,\n this.showCountryName\n ) \n\n if (this.currentPage > 0) {\n this.countryDetails = [\n ...this.countryDetails,\n ...newCountries.filter(item => !this.countryDetails.some((existing: any) => existing.value === item.value))\n ];\n } else {\n this.countryDetails = [\n ...newCountries.filter(item => !this.countryDetails.some((existing: any) => existing.value === item.value)),\n ...this.countryDetails\n ];\n }\n if(this.defaultValue && !isSearch){\n this.initializeAnswer('default')\n }\n if (this.question.answer && !isSearch) {\n this.initializeAnswer('answer');\n }\n });\n\n }\n\n getNextSetOfItems(event: any) {\n const element = event.target;\n if(!this.lastPage){\n if (Math.floor(element.scrollHeight - element.scrollTop) <= element.clientHeight) {\n this.loadMoreData();\n }\n }\n if (!this.isFirstPage && element.scrollTop <= 150) {\n this.loadPreviousData();\n }\n }\n\n loadMoreData() {\n setTimeout(() => {\n this.currentPage++;\n if (this.currentPage >= 0) {\n this.loadCountry(this.questionId,this.currentPage, this.size, \"\");\n }\n }, 0);\n }\n\n loadPreviousData() {\n setTimeout(() => {\n this.currentPage--;\n if (this.currentPage >= 0) {\n this.loadCountry(this.questionId,this.currentPage, this.size, \"\");\n }\n }, 0);\n }\n\n search(searchTerm: any) {\n if (searchTerm == '') {\n this.loadCountry(this.questionId,this.currentPage, this.size, \"\",true);\n }\n else {\n this.countryDetails = []; \n this.loadCountry(this.questionId,this.currentPage, this.size, searchTerm,true);\n }\n }\n\n handleValidation(isValid: boolean, message: string = 'This field is required') {\n if (isValid) {\n this.validationService.clearInvalid(this.buildElementId());\n } else {\n // this.validationService.setInvalid(this.question.id, message);\n }\n }\n\n private buildElementId(): string {\n return (this.inLine || this.inCard)\n ? `${this.submissionIndex}-${this.question.id}`\n : `${this.question.id}`;\n }\n\n get isInvalid(): boolean {\n return !!this.validationService.getErrorMessage(this.buildElementId());\n }\n\n get errorMessage(): string | null {\n return this.validationService.getErrorMessage(this.buildElementId());\n }\n\n ngAfterViewInit() {\n if (this.inLine || this.inCard) {\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n } else {\n this.elementId = `question-${this.question.id}`;\n }\n \n this.tracker.registerElement(this.elementId);\n }\n\n ngOnDestroy() {\n if (this.elementId) {\n this.tracker.unregisterElement(this.elementId);\n }\n }\n\n}\n\n","<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <div class=\"input-group mb-2\">\n <ng-container *ngIf=\"displayCountryCode; else fullWidthInput\">\n <div class=\"col-xs-5 col-5 col-md-3 px-0 pe-2 ps-2\"\n [ngClass]=\"{'disable':disableEdit}\">\n <lib-dropdown\n [items]=\"countryDetails\"\n [multiple]=\"false\"\n [(selectedItems)]=\"selectedCountry\"\n (selectedItemsChange)=\"onCountryChange()\"\n [disable]=\"disableEdit\"\n (onDropdownScroll)=\"getNextSetOfItems($event)\"\n (onSearch)=\"search($event)\"\n ></lib-dropdown>\n </div>\n <input\n type=\"text\"\n class=\"form-control col-xs-7 col-7 col-md-9 height mobileField\"\n [placeholder]=\"placeholder\"\n aria-label=\"Mobile Number\"\n (blur)=\"validateMobile()\"\n [(ngModel)]=\"mobileNumber\"\n (ngModelChange)=\"onMobileNumberChange()\"\n (input)=\"onInput($event)\"\n [disabled]=\"disableEdit\"\n />\n </ng-container>\n\n <!-- Full-width input when displayCountryCode is false -->\n <ng-template #fullWidthInput>\n <input\n type=\"text\"\n class=\"form-control col-12 height mobileField\"\n [placeholder]=\"placeholder\"\n aria-label=\"Mobile Number\"\n [class.invalid]=\"validationFailed\"\n [class.invalid-question]=\"isInvalid\"\n (blur)=\"validateMobile()\"\n [(ngModel)]=\"mobileNumber\"\n (ngModelChange)=\"onMobileNumberChange()\"\n (input)=\"onInput($event)\"\n />\n </ng-template>\n </div>\n <div *ngIf=\"isInvalid && (!inLine || !mobileNumber)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n {{ validationMessage }}\n </div>\n</div>\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AggregationFunctionService {\n\n // New structure: { [rowId]: Map<fieldId, fieldData> }\nprivate aggregateFieldsMap = new Map<string, Map<string, { id: string; operation: string; formula: string; result?: number }>>();\nprivate numberFieldsMap = new Map<string, Map<string, { id: string; answer: number }>>();\n\n private aggregateFieldResultsSubject = new BehaviorSubject<{ id: string; result: number,evaluated:boolean } | null>(null);\n aggregateFieldResults$ = this.aggregateFieldResultsSubject.asObservable();\n\n constructor() {}\n\n /**\n * Store or update an aggregate field in the map\n */\n setAggregateField(rowId: string, fieldId: string, operation: string, formula: string): void {\n if (!this.aggregateFieldsMap.has(rowId)) {\n this.aggregateFieldsMap.set(rowId, new Map());\n }\n this.aggregateFieldsMap.get(rowId)!.set(fieldId, { id: fieldId, operation, formula });\n }\n\n /**\n * Store or update a number field in the map\n */\n setNumberField(rowId: string, fieldId: string, answer: number): void {\n if (!this.numberFieldsMap.has(rowId)) {\n this.numberFieldsMap.set(rowId, new Map());\n }\n this.numberFieldsMap.get(rowId)!.set(fieldId, { id: fieldId, answer });\n this.checkAndEvaluateFormulas(rowId);\n }\n\n private emitAggregateResult(id: string, result: number,evaluated:boolean): void {\n this.aggregateFieldResultsSubject.next({ id, result,evaluated });\n }\n\n\n evaluateCustomFormula(rowId: string, formula: string): number | null {\n \n const rowNumberFields = this.numberFieldsMap.get(rowId);\n if (!formula || !rowNumberFields) return null;\n \n const uuidRegex = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}/g;/[0-9a-fA-F\\-]{36}/g;\n const uuidMatches = formula.match(uuidRegex) || [];\n \n const allHaveAnswers = uuidMatches.every(uuid => {\n const field = rowNumberFields.get(uuid);\n return field !== undefined && \n field.answer !== undefined && \n field.answer !== null &&\n String(field.answer).trim() !== '';\n });\n \n if (!allHaveAnswers) return null;\n \n const replacedFormula = formula.replace(uuidRegex, (match) => {\n const field = rowNumberFields.get(match);\n return field?.answer?.toString() || '0';\n });\n \n try {\n return new Function(`return ${replacedFormula};`)();\n } catch (error) {\n console.error('Error evaluating formula:', error);\n return null;\n }\n }\n \n evaluatePredefinedOperation(rowId: string, operation: string, formula: string): number | null {\n const rowNumberFields = this.numberFieldsMap.get(rowId);\n if (!rowNumberFields) return null;\n \n const uuidList = formula.split(',').map(id => id.trim());\n const values: number[] = [];\n let hasAnyAnswer = false;\n\n for (const uuid of uuidList) {\n const field = rowNumberFields.get(uuid);\n const val = field?.answer;\n \n // If the field doesn't exist or value is invalid, push 0 as default\n if (val !== undefined && val !== null && String(val).trim() !== '') {\n hasAnyAnswer = true;\n values.push(Number(val));\n } else {\n values.push(0); // Still push 0 to keep array length, but flag stays false unless at least one answer exists\n }\n }\n if (!hasAnyAnswer) return null;\n let result = 0;\n switch (operation) {\n case 'SUM':\n result = values.reduce((acc, val) => acc + val, 0);\n break;\n case 'SUBTRACTION':\n result = values.reduce((acc, val) => acc - val);\n break;\n case 'MULTIPLICATION':\n result = values.reduce((acc, val) => acc * val, 1);\n break;\n default:\n console.warn(`Unsupported operation: ${operation}`);\n return null;\n }\n \n return result;\n }\n\n checkAndEvaluateFormulas(rowId: string): void {\n const aggregateFields = this.aggregateFieldsMap.get(rowId);\n if (!aggregateFields) return;\n \n aggregateFields.forEach((aggregateField, id) => {\n let result: number | null = null;\n \n if (aggregateField.operation === 'CUSTOM') {\n result = this.evaluateCustomFormula(rowId, aggregateField.formula);\n } else {\n result = this.evaluatePredefinedOperation(rowId, aggregateField.operation, aggregateField.formula);\n }\n \n if (result !== null) {\n aggregateField.result = result;\n this.aggregateFieldsMap.get(rowId)!.set(id, aggregateField);\n this.emitAggregateResult(`${rowId}:${id}`, result,true);\n } else {\n this.emitAggregateResult(`${rowId}:${id}`, 0,false);\n }\n });\n }\n\n clearAll(): void {\n this.aggregateFieldsMap.clear();\n this.numberFieldsMap.clear();\n this.aggregateFieldResultsSubject.next(null);\n }\n \n ngOnDestroy(): void {\n this.clearAll();\n }\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Logic } from '../../models/logic.model';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { AggregationFunctionService } from '../../services/aggregate.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\n\n@Component({\n selector: 'lib-number-fields',\n templateUrl: './number-fields.component.html',\n styleUrls: ['./number-fields.component.scss'],\n})\nexport class NumberFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n @Input() rowId: any;\n\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n upDown!: boolean;\n allowNegativeValues!: boolean;\n placeholder: string = '';\n min!: number;\n max!: number;\n enteredNumber!: number;\n validationFailed: boolean = false;\n validationMessage: string = '';\n defaultValue!: number;\n @Input() disableEdit: boolean = false;\n private elementId: string='';\n private subscribedToWhenClause = false;\n constructor(\n private validationService: ValidationService,\n private tracker: ElementTrackerService,\n private aggregateService:AggregationFunctionService,\n private whenClauseService:WhenClauseService\n ) {\n }\n\n\n ngOnInit() {\n this.valueAssigned();\n }\n\n valueAssigned() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.upDown = this.question.formElement.appearance.upAndDownButton;\n this.allowNegativeValues =\n this.question.formElement.appearance.allowNegativeValues;\n this.placeholder = this.question.formElement?.appearance?.placeholder || '';\n this.min = this.question.formElement.validation.min;\n this.max = this.question.formElement.validation.max;\n this.defaultValue = this.question?.defaultValue;\n this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\n this.enteredNumber = this.defaultValue;\n if(this.question.answer){\n this.enteredNumber = this.question?.answer;\n setTimeout(() => {\n this.whenClauseService.setQuestionAnswer(this.question.id,this.enteredNumber,true);\n });\n }else if(this.defaultValue && !this.question.answer){\n this.question.answer = this.defaultValue;\n setTimeout(() => {\n this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer,true);\n });\n } else{\n setTimeout(() => {\n this.whenClauseService.setQuestionAnswer(this.question.id,'',true);\n });\n }\n if (this.question.childLogics && this.question.answer) {\n this.updateChildLogics(this.question);\n }\n this.aggregateService.setNumberField(this.rowId,this.question.id,this.question.answer);\n }\n\n preventNumberScroll(event: WheelEvent) {\n if (document.activeElement === event.target) {\n event.preventDefault();\n }\n }\n\n validateNumber() {\n this.validationFailed = false;\n this.validationService.clearInvalid(this.buildElementId());\n this.validationMessage = '';\n if (this.required && !this.enteredNumber && this.question.required) {\n this.validationFailed = true;\n this.validationMessage = `Please enter a valid number`;\n this.question.validation = false;\n this.question.validationMessage = `Please enter a valid number`;\n if (!this.subscribedToWhenClause) {\n this.subscribedToWhenClause = true;\n this.whenClauseService.onQuestionChange().subscribe(change => {\n this.validateNumber();\n });\n }\n } else if (!this.allowNegativeValues && this.enteredNumber < 0) {\n this.validationFailed = true;\n this.validationMessage = 'Please enter a positive number';\n this.question.validation = false;\n this.question.validationMessage = 'Please enter a positive number';\n } else if (\n (this.min !== undefined && this.enteredNumber < this.min) ||\n (this.max !== undefined && this.enteredNumber > this.max)\n ) {\n this.validationFailed = true;\n\n // Construct appropriate validation message based on whether min, max, or both are provided\n if (this.min !== undefined && this.max !== undefined) {\n this.validationMessage = `Please enter a valid number between ${this.min} and ${this.max}`;\n this.question.validationMessage = `Please enter a valid number between ${this.min} and ${this.max}`;\n } else if (this.min !== undefined) {\n this.validationMessage = `Please enter a number greater than or equal to ${this.min}`;\n this.question.validationMessage = `Please enter a number greater than or equal to ${this.min}`;\n } else if (this.max !== undefined) {\n this.validationMessage = `Please enter a number less than or equal to ${this.max}`;\n this.question.validationMessage = `Please enter a number less than or equal to ${this.max}`;\n }\n\n this.question.validation = false;\n } else {\n this.question.validation = true;\n }\n if (this.question.childLogics) {\n this.updateChildLogics(this.question);\n }\n }\n\n validateInput(event: any) {\n this.validationService.clearInvalid(this.buildElementId());\n this.question.answer = event.target.value;\n this.aggregateService.setNumberField(this.rowId,this.question.id, event.target.value);\n if (this.question.childLogics) {\n this.updateChildLogics(this.question);\n }\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer);\n }\n\n updateChildLogics(question: any) {\n if (question.childLogics && Array.isArray(question.childLogics)) {\n question.childLogics.forEach((childLogic: any) => {\n if (\n this.evaluateCondition(\n question.answer,\n childLogic.condition,\n childLogic.inputValue\n )\n ) {\n childLogic.showLogic = true;\n } else {\n childLogic.showLogic = false;\n this.clearAnswersRecursively(childLogic);\n }\n });\n }\n }\n\n clearAnswersRecursively(logic: any) {\n if (!logic || !logic.rows) return;\n\n logic.rows.forEach((row: any) => {\n row.grid.forEach((item: any) => {\n const element = item.element;\n\n if (item.entityType === 'QUESTION' && element) {\n // Clear answer if present\n if ('answer' in element) {\n element.answer = '';\n }\n\n // Recursively clear childLogics if any\n if (element.childLogics && element.childLogics.length > 0) {\n element.childLogics.forEach((childLogic: any) => {\n this.clearAnswersRecursively(childLogic);\n });\n }\n }\n\n if (item.entityType === 'SUBFORM' && element && element.rows) {\n // SUBFORM contains its own rows structure like a form\n this.clearAnswersRecursively({ rows: element.rows });\n }\n });\n });\n }\n\n evaluateCondition(answer: any, condition: any, inputValue: any) {\n switch (condition) {\n case '>':\n return answer > Number(inputValue);\n case '<':\n return answer < Number(inputValue);\n case '>=':\n return answer >= Number(inputValue);\n case '<=':\n return answer <= Number(inputValue);\n case '=':\n return answer == inputValue;\n case '!=':\n return answer != inputValue;\n default:\n return false;\n }\n }\n\n\n\n handleValidation(isValid: boolean, message: string = 'This field is required') {\n if (isValid) {\n this.validationService.clearInvalid(this.buildElementId());\n } else {\n // this.validationService.setInvalid(this.question.id, message);\n }\n }\n\n private buildElementId(): string {\n return (this.inLine || this.inCard)\n ? `${this.submissionIndex}-${this.question.id}`\n : `${this.question.id}`;\n }\n\n get isInvalid(): boolean {\n return !!this.validationService.getErrorMessage(this.buildElementId());\n }\n\n get errorMessage(): string | null {\n return this.validationService.getErrorMessage(this.buildElementId());\n }\n\n ngAfterViewInit() {\n if (this.inLine || this.inCard) {\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n } else {\n this.elementId = `question-${this.question.id}`;\n }\n\n this.tracker.registerElement(this.elementId);\n setTimeout(() => {\n this.whenClauseService.markLoadCompleted();\n });\n }\n\n ngOnDestroy() {\n if (this.elementId) {\n this.tracker.unregisterElement(this.elementId);\n }\n }\n}\n","<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span>\n <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <input\n type=\"number\"\n class=\"form-control mb-2 height\"\n [placeholder]=\"placeholder\"\n [class.hide-spin-buttons]=\"!upDown\"\n (blur)=\"validateNumber()\"\n [(ngModel)]=\"enteredNumber\"\n [class.invalid]=\"validationFailed\"\n [class.invalid-question]=\"isInvalid && (!inLine || !enteredNumber)\"\n (input)=\"validateInput($event)\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n (wheel)=\"preventNumberScroll($event)\"\n [disabled]=\"disableEdit\"\n />\n <div *ngIf=\"isInvalid && (!inLine || !enteredNumber)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n {{ validationMessage }}\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ValidationService } from '../../services/validation.service';\n\n@Component({\n selector: 'lib-password-fields',\n templateUrl: './password-fields.component.html',\n styleUrls: ['./password-fields.component.scss'],\n})\nexport class PasswordFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n confirmPassword!: boolean;\n displayStrength!: boolean;\n viewButton!: boolean;\n maxLength!: number;\n minLength!: number;\n requireLowercaseLetters!: boolean;\n requireUppercaseLetters!: boolean;\n requireNumbers!: boolean;\n requireSpecialCharacters!: boolean;\n allowedSpecialCharacters: string[] = [];\n validationMessage: string = '';\n cnfrmValidationMessage: string = '';\n validationFailed: boolean = false;\n validatedCnfrmPassword: boolean = false;\n enteredPassword: string = '';\n enteredCnfrmPassword: string = '';\n passwordStrength: number = 0;\n questionId:string='';\n private elementId: string='';\n @Input() disableEdit: boolean = false;\n \n constructor(\n private validationService: ValidationService,\n private tracker: ElementTrackerService\n ) {\n }\n ngOnInit() {\n this.valueAssigned();\n }\n\n valueAssigned() {\n this.questionId=this.question.id;\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.confirmPassword = this.question.formElement.appearance.confirmPassword;\n this.displayStrength = this.question.formElement.appearance.displayStrong;\n this.viewButton = this.question.formElement.appearance.viewButton;\n this.maxLength = this.question.formElement.validation.maxLength;\n this.minLength = this.question.formElement.validation.minLength;\n this.requireLowercaseLetters =\n this.question.formElement.validation.requireLowercaseLetters;\n this.requireUppercaseLetters =\n this.question.formElement.validation.requireUppercaseLetters;\n this.requireNumbers = this.question.formElement.validation.requireNumbers;\n this.requireSpecialCharacters =\n this.question.formElement.validation.requireSpecialCharacters;\n if (this.requireSpecialCharacters) {\n this.allowedSpecialCharacters =\n this.question.formElement.validation.allowedSpecialCharacters\n .split(',')\n .map((char: any) => char.trim());\n }\n this.enteredPassword = this.question?.answer;\n }\n\n togglePasswordVisibility() {\n let passwordField = document.getElementById(\n 'passwordField'+this.questionId\n ) as HTMLInputElement;\n let eyeIcon = document.getElementById(\n 'passwordEyeIcon'+this.questionId\n ) as HTMLInputElement;\n\n if (passwordField.type === 'password') {\n passwordField.type = 'text';\n eyeIcon.classList.remove('bi-eye-fill');\n eyeIcon.classList.add('bi-eye-slash-fill');\n } else {\n passwordField.type = 'password';\n eyeIcon.classList.remove('bi-eye-slash-fill');\n eyeIcon.classList.add('bi-eye-fill');\n }\n }\n toggleCnfrmPasswordVisibility() {\n let passwordField = document.getElementById(\n 'cnfrmPasswordField'+this.questionId\n ) as HTMLInputElement;\n let eyeIcon = document.getElementById(\n 'CnfrmPasswordEyeIcon'+this.questionId\n ) as HTMLInputElement;\n\n if (passwordField.type === 'password') {\n passwordField.type = 'text';\n eyeIcon.classList.remove('bi-eye-fill');\n eyeIcon.classList.add('bi-eye-slash-fill');\n } else {\n passwordField.type = 'password';\n eyeIcon.classList.remove('bi-eye-slash-fill');\n eyeIcon.classList.add('bi-eye-fill');\n }\n }\n\n checkPasswordMatch() {\n this.validationService.clearInvalid(this.buildElementId());\n this.validatedCnfrmPassword = false;\n this.cnfrmValidationMessage = '';\n if (this.required && this.confirmPassword && !this.enteredCnfrmPassword) {\n this.validatedCnfrmPassword = true;\n this.cnfrmValidationMessage = `Please enter a valid password`;\n this.question.validation = false;\n }\n else if (this.enteredPassword != this.enteredCnfrmPassword && this.confirmPassword) {\n this.validatedCnfrmPassword = true;\n this.cnfrmValidationMessage = 'Passwords do not match';\n this.question.validation = false;\n }\n else{\n this.question.validation = true;\n }\n this.validatePassword();\n }\n\n \n\n validatePassword() {\n this.validationFailed = false;\n this.validationService.clearInvalid(this.buildElementId());\n this.validationMessage = '';\n if (this.required && !this.enteredPassword) {\n this.validationFailed = true;\n this.validationMessage = `Please enter a valid password`;\n this.question.validation = false;\n this.question.validationMessage = `Please enter a valid password`;\n } else if (\n this.requireLowercaseLetters ||\n this.requireUppercaseLetters ||\n this.requireNumbers ||\n this.requireSpecialCharacters ||\n this.minLength ||\n this.maxLength\n ) { \n const lowercaseRegex = /[a-z]/;\n const uppercaseRegex = /[A-Z]/;\n const numberRegex = /\\d/;\n const specialCharacterRegex = new RegExp(`[${this.allowedSpecialCharacters.join('')}]`);\n const otherSpecialCharacterRegex = new RegExp(`[^a-zA-Z0-9${this.allowedSpecialCharacters.join('')}]`);\n \n let lowerCaseValidate = lowercaseRegex.test(this.enteredPassword);\n let upperCaseValidate = uppercaseRegex.test(this.enteredPassword);\n let containsNumber = numberRegex.test(this.enteredPassword);\n let containsSpecialCharacter = specialCharacterRegex.test(this.enteredPassword);\n let containsOtherSpecialCharacter = otherSpecialCharacterRegex.test(this.enteredPassword);\n \n if (!lowerCaseValidate && this.requireLowercaseLetters) {\n this.validationFailed = true;\n this.validationMessage = 'Password must contain at least one lowercase letter';\n this.question.validation = false;\n this.question.validationMessage = 'Password must contain at least one lowercase letter';\n } else if (!upperCaseValidate && this.requireUppercaseLetters) {\n this.validationFailed = true;\n this.validationMessage = 'Password must contain at least one uppercase letter';\n this.question.validation = false;\n this.question.validationMessage = 'Password must contain at least one uppercase letter';\n } else if (!containsNumber && this.requireNumbers) {\n this.validationFailed = true;\n this.validationMessage = 'Password must contain at least one number';\n this.question.validation = false;\n this.question.validationMessage = 'Password must contain at least one number';\n }else if (this.enteredPassword.length < this.minLength) {\n this.validationFailed = true;\n this.validationMessage = `Password must contain at least ${this.minLength} characters`;\n this.question.validation = false;\n this.question.validationMessage = `Password must contain at least ${this.minLength} characters`;\n } else if (this.enteredPassword.length > this.maxLength) {\n this.validationFailed = true;\n this.validationMessage = `Password must be less than ${this.maxLength} characters`;\n this.question.validation = false;\n this.question.validationMessage = `Password must be less than ${this.maxLength} characters`;\n } else if (!containsSpecialCharacter && this.allowedSpecialCharacters.length>0) {\n this.validationFailed = true;\n this.validationMessage = `Password must contain at least one special character from ${this.allowedSpecialCharacters}`;\n this.question.validation = false;\n this.question.validationMessage = `Password must contain at least one special character from ${this.allowedSpecialCharacters}`;\n } else if(containsOtherSpecialCharacter && this.allowedSpecialCharacters.length>0){\n this.validationFailed = true;\n this.validationMessage = 'Password contains an invalid special character';\n this.question.validation = false;\n this.question.validationMessage = 'Password contains an invalid special character';\n } else if(this.confirmPassword){\n this.checkPasswordMatch();\n }\n else {\n this.question.validation = true;\n } \n } else { \n this.passwordStrength=this.calculateStrength(this.enteredPassword);\n }\n this.passwordStrength = this.calculateStrength(this.enteredPassword)\n}\n\n validateInput(event:any){\n const sanitizedValue = event.target.value.replace(/\\s+/g, '');\n this.enteredPassword = sanitizedValue;\n this.question.answer=sanitizedValue;\n this.validatePassword(); \n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0}); \n }\n\n validateCnfrm(event:any){\n const sanitizedValue = event.target.value.replace(/\\s+/g, '');\n this.enteredCnfrmPassword = sanitizedValue;\n this.checkPasswordMatch();\n }\n\n calculateStrength(password:any) {\n const lengthStrength = Math.min(100, (password.length / 12) * 100); // Assume maximum length of 12 for full points\n const lowercaseStrength = /[a-z]/.test(password) ? 20 : 0;\n const uppercaseStrength = /[A-Z]/.test(password) ? 20 : 0;\n const numberStrength = /\\d/.test(password) ? 20 : 0;\n const specialCharacterStrength = /[!@#$%^&*(),.?\":{}|<>]/.test(password) ? 20 : 0; // Adjust this regex based on your allowed special characters\n \n return lengthStrength + lowercaseStrength + uppercaseStrength + numberStrength + specialCharacterStrength;\n }\n\n handleValidation(isValid: boolean, message: string = 'This field is required') {\n if (isValid) {\n this.validationService.clearInvalid(this.buildElementId());\n } else {\n // this.validationService.setInvalid(this.question.id, message);\n }\n }\n\n private buildElementId(): string {\n return (this.inLine || this.inCard)\n ? `${this.submissionIndex}-${this.question.id}`\n : `${this.question.id}`;\n }\n \n get isInvalid(): boolean {\n return !!this.validationService.getErrorMessage(this.buildElementId());\n }\n \n get errorMessage(): string | null {\n return this.validationService.getErrorMessage(this.buildElementId());\n }\n \n ngAfterViewInit() {\n if (this.inLine || this.inCard) {\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n } else {\n this.elementId = `question-${this.question.id}`;\n }\n \n this.tracker.registerElement(this.elementId);\n }\n \n ngOnDestroy() {\n if (this.elementId) {\n this.tracker.unregisterElement(this.elementId);\n }\n }\n}\n\n","<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span>\n <label [for]=\"'passwordField' + questionId\">{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <div class=\"passwordWrapper\">\n <input\n type=\"password\"\n class=\"form-control mb-2 height\"\n [id]=\"'passwordField' + questionId\"\n (blur)=\"validatePassword()\"\n [(ngModel)]=\"enteredPassword\"\n [class.invalid]=\"validationFailed\"\n [class.invalid-question]=\"isInvalid && (!inLine || !enteredPassword)\"\n (input)=\"validateInput($event)\"\n [disabled]=\"disableEdit\"\n />\n <button\n id=\"togglePasswordBtn\"\n class=\"toggle-password-btn\"\n (click)=\"togglePasswordVisibility()\"\n *ngIf=\"viewButton\"\n >\n <i class=\"bi bi-eye-fill\" [id]=\"'passwordEyeIcon' + questionId\"></i>\n </button>\n </div>\n <div class=\"password-strength-meter\" *ngIf=\"displayStrength\">\n <div class=\"progress\">\n <div\n class=\"progress-bar\"\n role=\"progressbar\"\n [style.width]=\"passwordStrength + '%'\"\n [class.bg-danger]=\"passwordStrength < 30\"\n [class.bg-warning]=\"passwordStrength >= 30 && passwordStrength < 70\"\n [class.bg-success]=\"passwordStrength >= 70\"\n ></div>\n </div>\n </div>\n <div *ngIf=\"isInvalid && (!inLine || !enteredPassword)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger mb-2\">\n {{ validationMessage }}\n </div>\n\n <div class=\"cnfrmPasswordWrapper\" *ngIf=\"confirmPassword\">\n <label for=\"'cnfrmPasswordField'+questionId\">Confirm password</label>\n <input\n type=\"password\"\n class=\"form-control mb-2 height\"\n [id]=\"'cnfrmPasswordField' + questionId\"\n (blur)=\"checkPasswordMatch()\"\n [(ngModel)]=\"enteredCnfrmPassword\"\n [class.invalid]=\"validatedCnfrmPassword\"\n (input)=\"validateCnfrm($event)\"\n [disabled]=\"disableEdit\"\n />\n <button\n id=\"toggleCnfrmPasswordBtn\"\n class=\"toggle-password-btn\"\n (click)=\"toggleCnfrmPasswordVisibility()\"\n *ngIf=\"viewButton\"\n >\n <i class=\"bi bi-eye-fill\" [id]=\"'CnfrmPasswordEyeIcon' + questionId\"></i>\n </button>\n </div>\n <div *ngIf=\"validatedCnfrmPassword\" class=\"text-danger error-message\">\n {{ cnfrmValidationMessage }}\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormService } from '../../services/form.service';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ScoreCalculationService } from '../../services/score.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\n\n@Component({\n selector: 'lib-radio-button-fields',\n templateUrl: './radio-button-fields.component.html',\n styleUrls: ['./radio-button-fields.component.scss'],\n})\nexport class RadioButtonFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Output() answerChange = new EventEmitter<{\n answer: any;\n maxPossibleScore?: number;\n }>();\n @Input() rowId: number = 0;\n\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n color: string = '';\n minimumSelection: number = 0;\n maximumSelection: number = 0;\n optionType: string = '';\n lookupTable: string = '';\n customOptions: any[] = [];\n database: any = {};\n api: any = {};\n apiOptions: any[] = [];\n selectedOption: any;\n validationFailed!: boolean;\n validationMessage: string = '';\n displayOptionsInColumn: boolean = false;\n maxPossibleScore?: number;\n @Input() disableEdit: boolean = false;\n\n private elementId: string = '';\n private subscribedToWhenClause = false;\n\n constructor(\n private formService: FormService,\n private validationService: ValidationService,\n private tracker: ElementTrackerService,\n private scoreCalcService: ScoreCalculationService,\n private whenClauseService:WhenClauseService\n ) {}\n\n ngOnInit() {\n this.valueAssigned();\n }\n\n valueAssigned() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.color = this.question.formElement.appearance.color;\n this.displayOptionsInColumn =\n this.question.formElement.appearance.displayOptionsInColumn;\n this.optionType = this.question.formElement.option.optionType;\n\n switch (this.optionType) {\n case 'OPTION':\n this.customOptions = this.question.formElement.option.customOptions.map(\n (option: any) => ({\n value: option.value,\n label: option.value,\n })\n );\n this.initializeOption();\n break;\n case 'LOOKUP':\n this.lookupTable = this.question.formElement.option.lookupTable;\n this.fetchDataFromLookup();\n break;\n case 'DATABASE':\n this.database = this.question.formElement.option.database;\n this.fetchDataFromDatabase();\n break;\n case 'API':\n this.api = this.question.formElement.option.api;\n this.fetchDataFromAPI();\n break;\n default:\n console.warn('Unknown option type:', this.optionType);\n }\n\n if (this.question.childLogics && this.question.answer) {\n this.updateChildLogics(this.question);\n }\n if (\n this.question.formElement.scoring &&\n this.question.formElement.scoring.enableScoring\n ) {\n this.maxPossibleScore =\n this.scoreCalcService.getMaxPossibleScoreForQuestion(this.question);\n this.question.maxPossibleScore = this.maxPossibleScore;\n }\n }\n\n initializeOption() {\n if (this.question.answer) {\n const dataType = typeof this.customOptions[0]?.value;\n let convertedAnswer;\n\n switch (dataType) {\n case 'number':\n convertedAnswer = Number(this.question.answer);\n break;\n case 'boolean':\n convertedAnswer = this.question.answer === 'true';\n break;\n case 'string':\n convertedAnswer = String(this.question.answer);\n break;\n default:\n convertedAnswer = this.question.answer;\n }\n this.selectedOption = convertedAnswer;\n setTimeout(() => {\n const answers = this.question.answer.split('|')[1]\n this.whenClauseService.setQuestionAnswer(this.question.id,answers,true);\n });\n }\n }\n\n fetchDataFromLookup() {\n this.formService.fetchDataFromLookup(this.lookupTable).subscribe(\n (response) => {\n this.customOptions = response.result.values.map(\n (item: { value: string; label: string }) => ({\n value: item.value,\n label: item.label,\n })\n );\n this.initializeOption();\n },\n (error) => {\n console.error('HTTP Error:', error);\n }\n );\n }\n\n fetchDataFromDatabase() {\n const transformedDatabase = this.transformDatabaseObject(this.database);\n this.formService.fetchDataFromDatabase(transformedDatabase).subscribe(\n (response) => {\n if (response.success) {\n this.customOptions = response.result?.content?.map(\n (item: { value: string; label: string }) => ({\n value: item.value,\n label: item.label,\n })\n );\n this.initializeOption();\n } else {\n console.error('Error fetching data from database:', response.message);\n }\n },\n (error) => {\n console.error('HTTP Error:', error);\n }\n );\n }\n\n transformDatabaseObject(database: any) {\n return {\n tableName: database.tableName,\n valueField: database.valueField,\n labelField: database.labelField,\n labelPattern: database?.labelPattern,\n criteria: database.criteria.map((criteria: any) => ({\n field: criteria.field,\n valueSource: criteria?.valueSource,\n condition: criteria.condition,\n value: criteria.inputValue,\n logicalOperator: criteria.logicalOperator,\n })),\n };\n }\n\n fetchDataFromAPI() {\n const apiConfig = this.api;\n const allowedChars = ['.', ',', '-', '_', '(', ')', ''];\n\n this.formService.fetchDataFromExternalAPI(apiConfig).subscribe(\n (response) => {\n let data;\n if(apiConfig.pathToValue) {\n data = this.extractDataByPath(response, apiConfig.pathToValue);\n } else {\n data = response;\n }\n\n this.customOptions = data.map((item: any) => {\n if (\n apiConfig.labelPattern &&\n Array.isArray(apiConfig.labelPattern) &&\n apiConfig.labelPattern.length > 0\n ) {\n let label = '';\n apiConfig.labelPattern.forEach((pattern: string) => {\n pattern = pattern.trim();\n if (allowedChars.includes(pattern)) {\n label += pattern;\n } else {\n if (item[pattern] !== undefined && item[pattern] !== null) {\n label += item[pattern]+' ';\n }\n }\n });\n return {\n value: item[apiConfig.valueField.trim()],\n label: label,\n };\n } else {\n return {\n value: item[apiConfig.valueField.trim()],\n label: item[apiConfig.labelField.trim()],\n };\n }\n });\n this.initializeOption();\n },\n (error) => {\n console.error('HTTP Error:', error);\n }\n );\n }\n\n extractDataByPath(data: any, path: string) {\n return path.split('.').reduce((acc, part) => acc && acc[part], data);\n }\n\n validateInput() {\n this.question.answer = this.selectedOption;\n const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(\n this.question.answer,\n this.question\n );\n this.question.score = scoreResult?.scores;\n this.validationFailed = false;\n this.validationService.clearInvalid(this.buildElementId());\n this.validationMessage = '';\n if (this.required && !this.selectedOption && this.question.required) {\n this.validationFailed = true;\n this.validationMessage = 'This is a required question';\n this.question.validation = false;\n this.question.validationMessage = 'This is a required question';\n\n if (!this.subscribedToWhenClause) {\n this.subscribedToWhenClause = true;\n this.whenClauseService.onQuestionChange().subscribe(change => {\n this.validateInput();\n });\n }\n } else {\n this.question.validation = true;\n }\n if (this.question.childLogics) {\n this.updateChildLogics(this.question);\n }\n this.answerChange.emit({\n answer: this.question.answer,\n maxPossibleScore: this.maxPossibleScore,\n });\n const answers = this.question.answer.split('|')[1]\n this.whenClauseService.setQuestionAnswer(this.question.id,answers);\n }\n\n updateChildLogics(question: any) {\n if (question.childLogics && Array.isArray(question.childLogics)) {\n question.childLogics.forEach((childLogic: any) => {\n if (\n this.evaluateCondition(\n this.selectedOption,\n childLogic.condition,\n childLogic.inputValue\n )\n ) {\n childLogic.showLogic = true;\n } else {\n childLogic.showLogic = false;\n this.clearAnswersRecursively(childLogic);\n }\n });\n }\n }\n\n clearAnswersRecursively(logic: any) {\n if (!logic || !logic.rows) return;\n\n logic.rows.forEach((row: any) => {\n row.grid.forEach((item: any) => {\n const element = item.element;\n\n if (item.entityType === 'QUESTION' && element) {\n // Clear answer if present\n if ('answer' in element) {\n element.answer = '';\n }\n\n // Recursively clear childLogics if any\n if (element.childLogics && element.childLogics.length > 0) {\n element.childLogics.forEach((childLogic: any) => {\n this.clearAnswersRecursively(childLogic);\n });\n }\n }\n\n if (item.entityType === 'SUBFORM' && element && element.rows) {\n // SUBFORM contains its own rows structure like a form\n this.clearAnswersRecursively({ rows: element.rows });\n }\n });\n });\n }\n\n evaluateCondition(answer: any, condition: string, inputValue: any): boolean {\n let answerLabel = answer;\n if (typeof answer === 'string' && answer.includes('|')) {\n answerLabel = answer.split('|')[0];\n }\n\n const stringInputValue = Array.isArray(inputValue)\n ? inputValue.map((val) => val.toString())\n : inputValue;\n\n switch (condition) {\n case '!=':\n return answerLabel != stringInputValue;\n case '=':\n return answerLabel == stringInputValue;\n case 'IN':\n return stringInputValue.includes(answerLabel);\n case 'NOT IN':\n return !stringInputValue.includes(answerLabel);\n default:\n return false;\n }\n }\n\n handleValidation(\n isValid: boolean,\n message: string = 'This field is required'\n ) {\n if (isValid) {\n this.validationService.clearInvalid(this.buildElementId());\n } else {\n // this.validationService.setInvalid(this.question.id, message);\n }\n }\n\n private buildElementId(): string {\n return this.inLine || this.inCard\n ? `${this.submissionIndex}-${this.question.id}`\n : `${this.question.id}`;\n }\n\n get isInvalid(): boolean {\n return !!this.validationService.getErrorMessage(this.buildElementId());\n }\n\n get errorMessage(): string | null {\n return this.validationService.getErrorMessage(this.buildElementId());\n }\n\n ngAfterViewInit() {\n if (this.inLine || this.inCard) {\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n } else {\n this.elementId = `question-${this.question.id}`;\n }\n\n this.tracker.registerElement(this.elementId);\n setTimeout(() => {\n this.whenClauseService.markLoadCompleted();\n });\n }\n\n ngOnDestroy() {\n if (this.elementId) {\n this.tracker.unregisterElement(this.elementId);\n }\n }\n}\n","<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-3\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n\n <div\n class=\"checkboxField-container\"\n [class.two-column]=\"displayOptionsInColumn\"\n >\n <div class=\"checkboxField\" *ngFor=\"let option of customOptions\">\n <input\n class=\"formCheckbox mb-2\"\n type=\"radio\"\n [name]=\"question.id+'-'+rowId\"\n [id]=\"question.id+'-'+rowId+'-'+option.value\"\n [value]=\"option.label + '|' + option.value\"\n [style.accent-color]=\"color\"\n (blur)=\"validateInput()\"\n [(ngModel)]=\"selectedOption\"\n (ngModelChange)=\"validateInput()\"\n [attr.data-state]=\"option.label + '|' + option.value\"\n [attr.data-value]=\"selectedOption == option.label + '|' + option.value\"\n [disabled]=\"disableEdit\"\n />\n <label class=\"formCheckLabel ms-2 me-2 mb-2\" [for]=\"question.id+'-'+rowId+'-'+option.value\">{{\n option.label\n }}</label>\n </div>\n </div>\n <div\n *ngIf=\"isInvalid && (!inLine || !selectedOption)\"\n class=\"error-message\"\n >\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n {{ validationMessage }}\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\n\n@Component({\n selector: 'lib-rich-text-editor-fields',\n templateUrl: './rich-text-editor-fields.component.html',\n styleUrls: ['./rich-text-editor-fields.component.scss'],\n})\nexport class RichTextEditorFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inSubForm: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n numberOfRows!: number;\n limitedCharacters: boolean = false;\n counts: number = 0;\n htmlContent: string = '';\n characterCount!: number;\n validationFailed: boolean = false;\n validationMessage: string = '';\n private elementId: string='';\n defaultValue: string = '';\n @Input() disableEdit: boolean = false;\n constructor(\n private validationService: ValidationService,\n private tracker: ElementTrackerService\n ) { }\n editor: any;\n\n ngOnInit() {\n this.valueAssigned(); \n }\n\n valueAssigned() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.numberOfRows = this.question.formElement.appearance.numberOfRows;\n this.limitedCharacters =\n this.question.formElement.validation.limitedCharacters;\n this.counts = this.question.formElement.validation.count;\n this.numberOfRows = this.question.formElement.appearance.numberOfRows;\n this.limitedCharacters =\n this.question.formElement.validation.limitedCharacters;\n if (this.limitedCharacters) {\n this.characterCount = this.question.formElement.validation.count;\n }\n this.defaultValue = this.question?.defaultValue;\n this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\n this.htmlContent = this.defaultValue;\n if(this.question.answer){\n this.htmlContent = this.question?.answer;\n }else if(this.defaultValue && !this.question.answer){\n this.question.answer = this.defaultValue;\n }\n }\n editorCreated(editorInstance: any) {\n this.editor = editorInstance;\n this.updateEditorContent(this.htmlContent);\n this.editor.on('selection-change', (range: any) => {\n if (range === null) {\n this.validateEditor();\n }\n });\n }\n\n // When you receive data from API\n updateEditorContent(content: string) {\n if (this.editor) {\n // this.editor.clipboard.dangerouslyPasteHTML(content);\n const delta = this.editor.clipboard.convert(content);\n this.editor.setContents(delta, 'silent');\n }\n this.htmlContent = content;\n }\n validateEditor() {\n this.validationService.clearInvalid(this.buildElementId());\n this.validationFailed = false;\n this.validationMessage = '';\n if (!this.htmlContent && this.required) {\n this.validationFailed = true;\n this.validationMessage = 'This is a required question';\n this.question.validationMessage = 'This is a required question';\n }\n }\n\n\n\n updateAnswer(content: string) {\n this.question.answer = content;\n this.validationService.clearInvalid(this.buildElementId());\n if (this.htmlContent?.length >= this.characterCount) {\n this.htmlContent = this.htmlContent.substring(0, this.characterCount);\n }\n this.question.answer = this.htmlContent;\n this.validateEditor();\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n }\n\n \n handleValidation(isValid: boolean, message: string = 'This field is required') {\n if (isValid) {\n this.validationService.clearInvalid(this.buildElementId());\n } else {\n // this.validationService.setInvalid(this.question.id, message);\n }\n }\n\n private buildElementId(): string {\n return (this.inLine || this.inCard)\n ? `${this.submissionIndex}-${this.question.id}`\n : `${this.question.id}`;\n }\n\n get isInvalid(): boolean {\n return !!this.validationService.getErrorMessage(this.buildElementId());\n }\n\n get errorMessage(): string | null {\n return this.validationService.getErrorMessage(this.buildElementId());\n }\n\n ngAfterViewInit() {\n if (this.inLine || this.inCard) {\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n } else {\n this.elementId = `question-${this.question.id}`;\n }\n \n this.tracker.registerElement(this.elementId);\n }\n\n ngOnDestroy() {\n if (this.elementId) {\n this.tracker.unregisterElement(this.elementId);\n }\n }\n}\n","<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <quill-editor\n [(ngModel)]=\"htmlContent\"\n (ngModelChange)=\"updateAnswer($event)\"\n (onEditorCreated)=\"editorCreated($event)\"\n (blur)=\"validateEditor()\"\n class=\"editor\"\n [ngClass]=\"{\n 'inSubform': inSubForm && !disableEdit,\n 'disable': disableEdit\n }\"\n placeholder=\"\"\n [disabled]=\"disableEdit\"\n ></quill-editor>\n <div *ngIf=\"isInvalid && (!inLine || !htmlContent)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n {{ validationMessage }}\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ValidationService } from '../../services/validation.service';\n\n@Component({\n selector: 'lib-selection-matrix-fields',\n templateUrl: './selection-matrix-fields.component.html',\n styleUrls: ['./selection-matrix-fields.component.scss'],\n})\nexport class SelectionMatrixFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() acceptedLanguage: string = '';\n @Input() rowId: number = 0;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n selectionMatrixColumn: any[] = [];\n selectionMatrixLabel: any[] = [];\n selectedOptions: string[] = [];\n validationFailed!: boolean;\n validationMessage: string = '';\n minSelectionValue!: number;\n private elementId: string='';\n selectionColor : string = '';\n selectionColorRequired: boolean = false;\n @Input() disableEdit: boolean = false;\n \n constructor(\n private validationService: ValidationService,\n private tracker: ElementTrackerService\n ) { }\n ngOnInit() {\n this.valueAssigned();\n }\n\n valueAssigned() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.selectionColorRequired = this.question.formElement.appearance.selectionColorRequired;\n if(this.selectionColorRequired){\n this.selectionColor = this.question.formElement.appearance.selectionColor; \n }\n if (\n this.question?.formElement?.selectionMatrixLabel ||\n this.question?.element?.formElement?.selectionMatrixColumn\n ) {\n this.selectionMatrixLabel = (\n this.question?.formElement?.selectionMatrixLabel || []\n )\n .flatMap((label: any) => {\n const lab = this.isParsableJSON(label) ? JSON.parse(label) : label;\n return Array.isArray(lab)\n ? lab.map((value) => ({ label: value }))\n : { label: lab };\n })\n .filter((labelObj: any) => labelObj.label !== '');\n\n this.selectionMatrixColumn = (\n this.question?.formElement?.selectionMatrixColumn || []\n )\n .flatMap((column: any) => {\n const col = this.isParsableJSON(column) ? JSON.parse(column) : column;\n return Array.isArray(col)\n ? col.map((value) => ({ column: value }))\n : { column: col };\n })\n .filter((columnObj: any) => columnObj.column !== '');\n }\n this.minSelectionValue =\n this.question?.formElement?.validation?.minSelectionValue;\n if (this.question.answer) {\n this.selectedOptions = this.question.answer;\n }\n }\n\n private isParsableJSON(value: any): boolean {\n if (typeof value !== 'string') return false;\n try {\n JSON.parse(value);\n return true;\n } catch {\n return false;\n }\n }\n\n onSelectionChange(rowIndex: number, value: string) {\n this.selectedOptions[rowIndex] = value;\n this.validateInput();\n }\n\n validateInput() {\n this.validationService.clearInvalid(this.buildElementId());\n this.validationFailed = false;\n this.validationMessage = '';\n this.question.answer = this.selectedOptions;\n if (this.required && this.selectedOptions.length == 0) {\n this.validationFailed = true;\n this.validationMessage = 'This is a required question';\n this.question.validation = false;\n this.question.validationMessage = 'This is a required question';\n } else if (this.selectedOptions.length < this.minSelectionValue) {\n this.validationFailed = true;\n this.validationMessage = `selected options must be greater than ${this.minSelectionValue}`;\n this.question.validation = false;\n this.question.validationMessage = `selected options must be greater than ${this.minSelectionValue}`;\n } else {\n this.question.validation = true;\n }\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n }\n\n \n handleValidation(isValid: boolean, message: string = 'This field is required') {\n if (isValid) {\n this.validationService.clearInvalid(this.buildElementId());\n } else {\n // this.validationService.setInvalid(this.question.id, message);\n }\n }\n\n private buildElementId(): string {\n return (this.inLine || this.inCard)\n ? `${this.submissionIndex}-${this.question.id}`\n : `${this.question.id}`;\n }\n\n get isInvalid(): boolean {\n return !!this.validationService.getErrorMessage(this.buildElementId());\n }\n\n get errorMessage(): string | null {\n return this.validationService.getErrorMessage(this.buildElementId());\n }\n\n ngAfterViewInit() {\n if (this.inLine || this.inCard) {\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n } else {\n this.elementId = `question-${this.question.id}`;\n }\n \n this.tracker.registerElement(this.elementId);\n }\n\n ngOnDestroy() {\n if (this.elementId) {\n this.tracker.unregisterElement(this.elementId);\n }\n }\n}\n","<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n\n <div [ngClass]=\"{ 'labelBorder-rtl': acceptedLanguage === 'ara' }\">\n <table class=\"selectionMatrix\">\n <thead>\n <tr>\n <th></th>\n <th\n class=\"text-center table-cell-wrap\"\n *ngFor=\"let column of selectionMatrixColumn\"\n >\n {{ column.column }}\n </th>\n </tr>\n </thead>\n <tbody class=\"table-group-divider\">\n <tr *ngFor=\"let label of selectionMatrixLabel; let rowIndex = index\">\n <td class=\"table-cell-wrap\">{{ label.label }}</td>\n <td\n *ngFor=\"let column of selectionMatrixColumn; let colIndex = index\"\n class=\"text-center\"\n >\n <input\n type=\"radio\"\n [attr.id]=\"'radio-' + rowIndex + '-' + colIndex + '-' + rowId\"\n [name]=\"'radio-' + rowIndex + '-' + colIndex + '-' + rowId\"\n class=\"selectionRadio\"\n [style.accent-color]=\"selectionColor\"\n [value]=\"label.label + '_' + column.column\"\n [(ngModel)]=\"selectedOptions[rowIndex]\"\n (ngModelChange)=\"\n onSelectionChange(rowIndex, label.label + '_' + column.column)\n \"\n [disabled]=\"disableEdit\"\n />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n <div *ngIf=\"isInvalid && (!inLine || selectedOptions.length == 0)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message mt-2\">\n {{ validationMessage }}\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-signature-fields',\n templateUrl: './signature-fields.component.html',\n styleUrls: ['./signature-fields.component.scss'],\n})\nexport class SignatureFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n \n count: number = 0;\n required: boolean = false;\n hint: string = '';\n maxFileSize: number = 0;\n minFileSize: number = 0;\n\n ngOnInit() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.maxFileSize = this.question.formElement.validation.maxFileSize;\n this.minFileSize = this.question.formElement.validation.minFileSize;\n }\n}\n","<div [ngClass]=\"{ 'mb-4': !inLine }\" class=\"px-3\" [attr.name]=\"question.testElementName\">\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n</div>\n","import { Component, Input, Renderer2, ElementRef, Output, EventEmitter } from '@angular/core';\n\n@Component({\n selector: 'lib-slider-fields',\n templateUrl: './slider-fields.component.html',\n styleUrls: ['./slider-fields.component.scss'],\n})\nexport class SliderFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n minValue: number = 0;\n maxValue: number = 0;\n stepValue: number = 0;\n changeSliderColor: boolean = false;\n sliderColor: string = '';\n validationFailed: boolean = false;\n validationMessage: string = '';\n selectedValue: number = 0;\n @Input() disableEdit: boolean = false;\n\n constructor(private renderer: Renderer2, private el: ElementRef) { }\n\n ngOnInit() {\n\n this.valueAssigned();\n }\n\n valueAssigned() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.minValue = this.question.formElement.appearance.minValue;\n this.maxValue = this.question.formElement.appearance.maxValue;\n this.stepValue = this.question.formElement.appearance.stepValue;\n this.changeSliderColor =\n this.question.formElement.appearance.changeSliderColor;\n\n if (this.changeSliderColor) {\n this.sliderColor = this.question.formElement.appearance.sliderColor;\n }\n\n if (this.question.answer && Object.keys(this.question.answer).length>0) {\n this.selectedValue = this.question?.answer;\n } else {\n this.selectedValue = this.minValue;\n }\n }\n\n\n validateInput(event: any) {\n this.question.answer = String(this.selectedValue);\n this.question.validation = true;\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n }\n\n}\n","<div [ngClass]=\"{ 'mb-4': !inLine }\" class=\"px-3\" [attr.name]=\"question.testElementName\">\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <div class=\"sliderRow\">\n <div class=\"sliderLeft\">\n <mat-slider\n [min]=\"minValue\"\n [max]=\"maxValue\"\n [step]=\"stepValue\"\n [ngStyle]=\"{\n '--mdc-slider-active-track-color': changeSliderColor\n ? sliderColor\n : ''\n }\"\n >\n <input\n matSliderThumb\n [(ngModel)]=\"selectedValue\"\n (input)=\"validateInput($event)\"\n [disabled]=\"disableEdit\"\n />\n </mat-slider>\n </div>\n <div class=\"sliderRight\">\n <label class=\"selected-count font-weight-bold\">{{ selectedValue }}</label>\n </div>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { FormService } from '../../services/form.service';\nimport { DataService } from '../../services/data.service';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n@Component({\n selector: 'lib-terms-and-condition-fields',\n templateUrl: './terms-and-condition-fields.component.html',\n styleUrls: ['./terms-and-condition-fields.component.scss'],\n})\nexport class TermsAndConditionFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n \n count: number = 0;\n required: boolean = false;\n hint: string = '';\n fileDataUrl:any;\n private apiUrl: string = '';\n imgUrl:any\n header: any = {};\n visible:boolean=false;\n constructor(\n private formService: FormService,\n private http: HttpClient, \n private dataService: DataService\n ) {\n this.dataService.apiUrl$.subscribe((data) => {\n this.apiUrl = data;\n });\n }\n ngOnInit() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.fileDataUrl=this.question.formElement.termsAndConditionType.fileUrl\n this.question;\n this.count;\n }\n preview(): Observable<any> {\n const headers = new HttpHeaders({\n 'Content-Type': this.header.contentType,\n 'auth-user': this.header.authUser,\n });\n const body = {\n // Your request body content here\n };\n const options = {\n headers: headers,\n body: body,\n };\n const fileUrl =this.fileDataUrl;\n const encodedFileUrl = encodeURIComponent(fileUrl);\n const fullUrl = `?url=${encodedFileUrl}`;\n this.imgUrl= (this.apiUrl + `/api/cdn/preview${fullUrl}`);\n this.visible= true;\n return this.http.get<any>(this.apiUrl + `/api/cdn/preview${fullUrl}`, options);\n }\n closeModal() {\n this.visible = false;\n }\n}\n","<div [ngClass]=\"{ 'mb-4': !inLine }\" class=\"px-3\" [attr.name]=\"question.testElementName\">\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\" ></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label (click)=\"preview()\">{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <div class=\"modal1\" *ngIf=\"visible\">\n <div class=\"modal-content1\">\n <span class=\"close\" (click)=\"closeModal()\">×</span>\n <div class=\"imgContiner\">\n <img [src]=\"imgUrl\" alt=\"Image\">\n </div>\n </div>\n </div>\n</div>\n\n","import { Component, Input, ElementRef, ViewChild, AfterViewInit, Output, EventEmitter } from '@angular/core';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\n\n@Component({\n selector: 'lib-text-area-fields',\n templateUrl: './text-area-fields.component.html',\n styleUrls: ['./text-area-fields.component.scss'],\n})\nexport class TextAreaFieldsComponent implements AfterViewInit {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @ViewChild('textarea') textarea!: ElementRef<HTMLTextAreaElement>;\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n answer: string = '';\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n numberOfRows!: number;\n limitedCharacters!: boolean;\n characterCount!: number;\n validationFailed: boolean = false;\n validationMessage: string = '';\n enteredText: string = '';\n maxHeight!: number;\n lineHeight!: number;\n defaultValue: string = '';\n @Input() disableEdit: boolean = false;\n private subscribedToWhenClause = false;\n\n ngOnInit() {\n this.valueAssigned();\n }\n private elementId: string='';\n\n constructor(\n private validationService: ValidationService,\n private tracker: ElementTrackerService,\n private whenClauseService:WhenClauseService\n ) { }\n\n ngAfterViewInit() {\n if (this.textarea?.nativeElement) {\n this.calculateMaxHeight();\n }\n\n this.elementId = `question-${this.question.id}`;\n this.tracker.registerElement(this.elementId);\n }\n\n valueAssigned() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.numberOfRows = this.question.formElement.appearance.numberOfRows;\n this.limitedCharacters = this.question.formElement.validation.limitedCharacters;\n this.defaultValue = this.question?.defaultValue;\n this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\n this.enteredText = this.defaultValue;\n if (this.limitedCharacters) {\n this.characterCount = this.question.formElement.validation.count;\n }\n if(this.question.answer){\n this.enteredText = this.question?.answer;\n setTimeout(() => {\n this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer,true);\n });\n }else if(this.defaultValue && !this.question.answer){\n this.question.answer = this.defaultValue;\n } else{\n setTimeout(() => {\n this.whenClauseService.setQuestionAnswer(this.question.id,'',true);\n });\n }\n }\n\n calculateMaxHeight() {\n const textareaEl = this.textarea.nativeElement;\n const computedStyles = window.getComputedStyle(textareaEl);\n\n // Get accurate line height\n this.lineHeight = parseFloat(computedStyles.lineHeight); // Default fallback to 20px\n\n // Consider padding and borders\n const paddingTop = parseFloat(computedStyles.paddingTop) || 0;\n const paddingBottom = parseFloat(computedStyles.paddingBottom) || 0;\n const borderTop = parseFloat(computedStyles.borderTopWidth) || 0;\n const borderBottom = parseFloat(computedStyles.borderBottomWidth) || 0;\n\n // Correct height calculation\n this.maxHeight = (this.lineHeight * this.numberOfRows) + paddingTop + paddingBottom + borderTop + borderBottom;\n\n textareaEl.style.height = `${this.maxHeight}px`; // Set exact height\n }\n\n validateInput(event: Event) {\n const textarea = event.target as HTMLTextAreaElement;\n\n // Restrict overflow beyond max height\n while (textarea.scrollHeight > this.maxHeight) {\n textarea.value = textarea.value.slice(0, -1);\n }\n\n this.question.answer = textarea.value;\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n setTimeout(() => {\n this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer,true);\n });\n this.validateTextarea();\n }\n\n validateTextarea() {\n this.validationFailed = false;\n this.validationService.clearInvalid(this.buildElementId());\n this.validationMessage = '';\n\n if (!this.enteredText && this.required && this.question.required) {\n this.validationFailed = true;\n this.validationMessage = 'This is a required question';\n this.question.validation = false;\n this.question.validationMessage = 'This is a required question';\n if (!this.subscribedToWhenClause) {\n this.subscribedToWhenClause = true;\n this.whenClauseService.onQuestionChange().subscribe(change => {\n this.validateTextarea();\n });\n }\n } else {\n this.question.validation = true;\n }\n }\n\n\n handleValidation(isValid: boolean, message: string = 'This field is required') {\n if (isValid) {\n this.validationService.clearInvalid(this.buildElementId());\n } else {\n // this.validationService.setInvalid(this.question.id, message);\n }\n }\n\n private buildElementId(): string {\n return (this.inLine || this.inCard)\n ? `${this.submissionIndex}-${this.question.id}`\n : `${this.question.id}`;\n }\n\n get isInvalid(): boolean {\n return !!this.validationService.getErrorMessage(this.buildElementId());\n }\n\n get errorMessage(): string | null {\n return this.validationService.getErrorMessage(this.buildElementId());\n }\n\n\n ngOnDestroy() {\n if (this.elementId) {\n this.tracker.unregisterElement(this.elementId);\n }\n }\n}\n","<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <textarea\n #textarea\n class=\"form-control mb-2\"\n [ngClass]=\"{ 'no-scroll': numberOfRows }\"\n [rows]=\"numberOfRows\"\n wrap=\"hard\"\n (input)=\"validateInput($event)\"\n (blur)=\"validateTextarea()\"\n [(ngModel)]=\"enteredText\"\n [class.invalid]=\"validationFailed\"\n [class.invalid-question]=\"isInvalid && (!inLine || !enteredText)\"\n [maxlength]=\"characterCount\"\n [disabled]=\"disableEdit\"\n ></textarea>\n <div *ngIf=\"isInvalid && (!inLine || !enteredText)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n {{ validationMessage }}\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\nimport { Logic } from '../../models/logic.model';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\n\n@Component({\n selector: 'lib-text-fields',\n templateUrl: './text-fields.component.html',\n styleUrls: ['./text-fields.component.scss'],\n})\nexport class TextFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n answer: string = '';\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n placeholder: string = '';\n defaultValue: string = '';\n @Input() disableEdit: boolean = false;\n validationType: string = '';\n validation: string = '';\n regex!: RegExp;\n enteredText: string = '';\n validationFailed: boolean = false;\n validationMessage: string = '';\n private elementId: string='';\n private subscribedToWhenClause = false;\n\n\n constructor(\n private validationService: ValidationService,\n private tracker: ElementTrackerService,\n private whenClauseService:WhenClauseService\n ) { }\n\n ngOnInit() {\n this.valueAssigned();\n }\n\n valueAssigned() {\n this.count = this.question?.count;\n this.required = this.question?.required;\n this.hint = this.question?.hint;\n this.placeholder = this.question.formElement?.appearance?.placeholder || '';\n this.defaultValue = this.question?.defaultValue;\n this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\n this.enteredText = this.defaultValue;\n this.validationType = this.question.formElement.validation?.validationType;\n if (this.validationType == 'CUSTOM_VALIDATION') {\n this.validation = this.question.formElement.validation?.validation;\n } else if (this.validationType == 'REGULAR_EXPRESSION') {\n this.regex = this.question.formElement.validation?.regex;\n }\n\n if (\n this.question.answer !== null &&\n this.question.answer !== undefined &&\n ((typeof this.question.answer === 'string' &&\n this.question.answer.trim() !== '') ||\n (Array.isArray(this.question.answer) &&\n this.question.answer.length > 0) ||\n (typeof this.question.answer === 'object' &&\n Object.keys(this.question.answer).length > 0))\n ) {\n this.enteredText = this.question.answer;\n setTimeout(() => {\n this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer,true);\n });\n }else if(this.defaultValue && !this.question.answer){\n this.question.answer = this.defaultValue;\n setTimeout(() => {\n this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer,true);\n });\n } else{\n setTimeout(() => {\n this.whenClauseService.setQuestionAnswer(this.question.id,'',true);\n });\n }\n if (this.question.childLogics && this.question.answer) {\n this.updateChildLogics(this.question)\n }\n }\n\n validatetextField() {\n this.validationService.clearInvalid(this.buildElementId());\n this.validationFailed = false;\n this.validationMessage = '';\n if (this.required && !this.enteredText && this.question.required) {\n this.validationFailed = true;\n this.validationMessage = 'This is a required question';\n this.question.validation = false;\n this.question.validationMessage = 'This is a required question';\n if (!this.subscribedToWhenClause) {\n this.subscribedToWhenClause = true;\n this.whenClauseService.onQuestionChange().subscribe(change => {\n this.validatetextField();\n });\n }\n } else {\n this.question.validation = true;\n }\n if (this.question.childLogics) {\n this.updateChildLogics(this.question);\n }\n }\n\n validateInput(event: any) {\n this.validationService.clearInvalid(this.buildElementId());\n let value = event.target.value;\n if (this.validation == 'Numbers only') {\n event.target.value = value?.replace(/\\D/g, '');\n } else if (this.validation == 'Alphanumeric') {\n event.target.value = value?.replace(/[^a-zA-Z0-9]/g, '');\n } else if (this.validationType == 'REGULAR_EXPRESSION' && this.regex) {\n //event.target.value = value?.replace(this.regex, '');\n const regex = new RegExp(this.regex);\n\n if (regex.test(value)) {\n event.target.value = value;\n } else {\n event.target.value = value.slice(0, -1);\n }\n }\n this.question.answer = event.target.value;\n this.answerChange.emit({answer:event.target.value,maxPossibleScore:0});\n this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer);\n this.validatetextField();\n if(!this.inLine && !this.inCard) {\n setTimeout(() => {\n const el = document.getElementById(this.question.id);\n if (el) {\n (el as HTMLElement).focus();\n }\n });\n }\n\n }\n\n updateChildLogics(question: any) {\n if (question.childLogics && Array.isArray(question.childLogics)) {\n question.childLogics.forEach((childLogic: any) => {\n if (this.evaluateCondition(this.enteredText, childLogic.condition, childLogic.inputValue)) {\n childLogic.showLogic = true;\n }\n else {\n childLogic.showLogic = false;\n this.clearAnswersRecursively(childLogic);\n }\n });\n }\n }\n\n evaluateCondition(answer: any, condition: string, inputValue: any): boolean {\n const stringInputValue = inputValue;\n\n switch (condition) {\n case '!=':\n return answer != inputValue;\n case '=':\n return answer == inputValue;\n case 'LIKE':\n return answer.includes(inputValue);\n case 'NOT LIKE':\n return !answer.includes(inputValue);\n case 'BEGIN WITH':\n return answer.startsWith(inputValue);\n case 'END WITH':\n return answer.endsWith(inputValue);\n default:\n return false;\n }\n }\n\n clearAnswersRecursively(logic: any) {\n if (!logic || !logic.rows) return;\n\n logic.rows.forEach((row: any) => {\n row.grid.forEach((item: any) => {\n const element = item.element;\n\n if (item.entityType === 'QUESTION' && element) {\n // Clear answer if present\n if ('answer' in element) {\n element.answer = '';\n }\n\n // Recursively clear childLogics if any\n if (element.childLogics && element.childLogics.length > 0) {\n element.childLogics.forEach((childLogic: any) => {\n this.clearAnswersRecursively(childLogic);\n });\n }\n }\n\n if (item.entityType === 'SUBFORM' && element && element.rows) {\n // SUBFORM contains its own rows structure like a form\n this.clearAnswersRecursively({ rows: element.rows });\n }\n });\n });\n }\n\n handleValidation(isValid: boolean, message: string = 'This field is required') {\n if (isValid) {\n this.validationService.clearInvalid(this.buildElementId());\n } else {\n // this.validationService.setInvalid(this.question.id, message);\n }\n }\n\n private buildElementId(): string {\n return (this.inLine || this.inCard)\n ? `${this.submissionIndex}-${this.question.id}`\n : `${this.question.id}`;\n }\n\n get isInvalid(): boolean {\n return !!this.validationService.getErrorMessage(this.buildElementId());\n }\n\n get errorMessage(): string | null {\n return this.validationService.getErrorMessage(this.buildElementId());\n }\n\n ngAfterViewInit() {\n if (this.inLine || this.inCard) {\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n } else {\n this.elementId = `question-${this.question.id}`;\n }\n\n this.tracker.registerElement(this.elementId);\n setTimeout(() => {\n this.whenClauseService.markLoadCompleted();\n });\n }\n\n ngOnDestroy() {\n if (this.elementId) {\n this.tracker.unregisterElement(this.elementId);\n }\n }\n}\n","<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n\n <input\n type=\"text\"\n class=\"form-control mb-2 height\"\n [placeholder]=\"placeholder\"\n [(ngModel)]=\"enteredText\"\n (blur)=\"validatetextField()\"\n (input)=\"validateInput($event)\"\n [class.invalid]=\"validationFailed\"\n [class.invalid-question]=\"isInvalid && (!inLine || !enteredText)\"\n [id]=\"question.id\"\n [disabled]=\"disableEdit\"\n />\n <div *ngIf=\"isInvalid && (!inLine || !enteredText)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n {{ validationMessage }}\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'lib-toggle-switch-fields',\n templateUrl: './toggle-switch-fields.component.html',\n styleUrls: ['./toggle-switch-fields.component.scss'],\n})\nexport class ToggleSwitchFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Input() acceptedLanguage: string ='';\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n labelOnValue: string = '';\n labelOffValue: string = '';\n labelOnColor: string = '';\n labelOffColor: string = '';\n toggleBackgroundColor: string = '';\n selectedValue : string ='';\n @Input() disableEdit: boolean = false;\n \n ngOnInit() {\n this.valueAssigned();\n }\n\n getDirectionClass(): string {\n return this.acceptedLanguage === 'ara' ? 'direction-rtl' : 'direction-ltr';\n }\n\n valueAssigned() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.labelOnValue = this.question.formElement.appearance.labelOnValue;\n this.labelOffValue = this.question.formElement.appearance.labelOffValue;\n this.labelOnColor = this.question.formElement.appearance.labelOnColor;\n this.labelOffColor = this.question.formElement.appearance.labelOffColor;\n \n if (!this.question.answer) {\n this.question.answer = this.labelOffValue;\n this.question.validation = true;\n this.selectedValue=this.labelOffValue;\n this.toggleBackgroundColor = this.labelOffColor;\n }\n if (this.question.answer) {\n if(this.question.answer===this.labelOnValue){\n this.selectedValue=this.labelOnValue;\n this.toggleBackgroundColor = this.labelOnColor;\n }\n else{\n this.selectedValue=this.labelOffValue;\n this.toggleBackgroundColor = this.labelOffColor;\n }\n \n this.question.validation = true;\n }\n }\n\n toggleSliderColor(event: any): void {\n let isChecked = event.target.checked; \n this.question.answer = isChecked ?this.labelOnValue:this.labelOffValue;\n this.question.validation = true;\n this.selectedValue=this.question.answer;\n this.toggleBackgroundColor = isChecked\n ? this.question.formElement.appearance.labelOnColor\n : this.question.formElement.appearance.labelOffColor;\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n }\n}\n","<div [ngClass]=\"{ 'mb-4': !inLine }\" class=\"px-3\" [attr.name]=\"question.testElementName\">\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <div class=\"mt-2\">\n <label\n class=\"switch\"\n [ngClass]=\"{\n 'direction-rtl': acceptedLanguage === 'ara',\n 'direction-ltr': acceptedLanguage !== 'ara'\n }\"\n [attr.name]=\"question.testElementName\"\n >\n <input\n type=\"checkbox\"\n id=\"togBtn\"\n (change)=\"toggleSliderColor($event)\"\n [checked]=\"selectedValue === labelOnValue\"\n [attr.data-state]=\"selectedValue\"\n [disabled]=\"disableEdit\"\n />\n <div\n class=\"slider round\"\n [ngClass]=\"getDirectionClass()\"\n [ngStyle]=\"{ 'background-color': toggleBackgroundColor }\"\n >\n <span class=\"on action-btn-text\">{{ labelOnValue }}</span>\n <span class=\"off action-btn-text\">{{ labelOffValue }}</span>\n </div>\n </label>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ValidationService } from '../../services/validation.service';\n\n@Component({\n selector: 'lib-url-fields',\n templateUrl: './url-fields.component.html',\n styleUrls: ['./url-fields.component.scss'],\n})\nexport class UrlFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n placeholder: string = '';\n showPreviewButton!: boolean;\n enteredUrl: string = '';\n validationFailed: boolean = false;\n validationMessage: string = '';\n defaultValue: string = '';\n @Input() disableEdit: boolean = false;\n\n private elementId: string='';\n \n constructor(\n private validationService: ValidationService,\n private tracker: ElementTrackerService\n ) { }\n \n ngOnInit() {\n this.valueAssigned();\n }\n\n handleClick() {\n let textFieldValue = (document.getElementById('textField') as HTMLInputElement).value.trim();\n\n if (!/^https?:\\/\\//i.test(textFieldValue)) {\n textFieldValue = 'http://' + textFieldValue;\n }\n\n window.open(textFieldValue, '_blank');\n }\n\n valueAssigned() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.placeholder = this.question.formElement.appearance.placeholder;\n this.showPreviewButton =\n this.question.formElement.appearance.showPreviewButton;\n this.defaultValue = this.question?.defaultValue;\n this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\n this.enteredUrl = this.defaultValue;\n if(this.question.answer){\n this.enteredUrl = this.question?.answer; \n }else if(this.defaultValue && !this.question.answer){\n this.question.answer = this.defaultValue;\n }\n }\n validateUrl() {\n this.validationService.clearInvalid(this.buildElementId());\n this.validationFailed = false;\n this.validationMessage = '';\n if (this.required && !this.enteredUrl) {\n this.validationFailed = true;\n this.validationMessage = 'This is a required question';\n this.question.validation = false;\n this.question.validationMessage = 'This is a required question';\n }\n else {\n this.question.validation = true;\n }\n }\n\n validateInput(event: any) {\n this.validateUrl();\n this.question.answer = event.target.value;\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n }\n\n handleValidation(isValid: boolean, message: string = 'This field is required') {\n if (isValid) {\n this.validationService.clearInvalid(this.buildElementId());\n } else {\n // this.validationService.setInvalid(this.question.id, message);\n }\n }\n\n private buildElementId(): string {\n return (this.inLine || this.inCard)\n ? `${this.submissionIndex}-${this.question.id}`\n : `${this.question.id}`;\n }\n\n get isInvalid(): boolean {\n return !!this.validationService.getErrorMessage(this.buildElementId());\n }\n\n get errorMessage(): string | null {\n return this.validationService.getErrorMessage(this.buildElementId());\n }\n\n ngAfterViewInit() {\n if (this.inLine || this.inCard) {\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n } else {\n this.elementId = `question-${this.question.id}`;\n }\n \n this.tracker.registerElement(this.elementId);\n }\n\n ngOnDestroy() {\n if (this.elementId) {\n this.tracker.unregisterElement(this.elementId);\n }\n }\n}\n","<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <div class=\"input-group\">\n <input\n [id]=\"question.id\"\n type=\"text\"\n class=\"form-control col-11.5 rounded height\"\n [placeholder]=\"placeholder\"\n [(ngModel)]=\"enteredUrl\"\n (blur)=\"validateUrl()\"\n (input)=\"validateInput($event)\"\n [class.invalid]=\"validationFailed\"\n [class.invalid-question]=\"isInvalid && (!inLine || !enteredUrl)\"\n [disabled]=\"disableEdit\"\n />\n <div class=\"ps-2 pe-2\">\n <button\n *ngIf=\"showPreviewButton\"\n type=\"button\"\n class=\"btn col-.5 custom-button rounded d-flex justify-content-center align-items-center height\"\n (click)=\"handleClick()\"\n >\n <svg\n width=\"30\"\n height=\"30\"\n viewBox=\"0 0 30 30\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.99561 16.2503C4.99561 21.7754 9.47462 26.2544 14.9998 26.2544C20.5249 26.2544 25.0039 21.7754 25.0039 16.2503C25.0039 10.7251 20.5249 6.24609 14.9998 6.24609H6.24613\"\n stroke=\"#084FFF\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M9.99766 2.49219L6.24609 6.24375\"\n stroke=\"#084FFF\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M9.99766 9.99766L6.24609 6.24609\"\n stroke=\"#084FFF\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M17.7924 14.8125L14.3035 18.3015L12.2051 16.2106\"\n stroke=\"#084FFF\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n </div>\n <div *ngIf=\"isInvalid && (!inLine || !enteredUrl)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n {{ validationMessage }}\n </div>\n</div>\n","import { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { AggregationFunctionService } from '../../services/aggregate.service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n selector: 'lib-aggregate-function',\n templateUrl: './aggregate-function.component.html',\n styleUrls: ['./aggregate-function.component.scss']\n})\nexport class AggregateFunctionComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n @Input() rowId: any ;\n answer: string = '';\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n placeholder: string = '';\n validationFailed: boolean = false;\n validationMessage: string = '';\n private elementId: string='';\n private subscription!: Subscription;\n result:number=0;\n @Input() disableEdit: boolean = false;\n \n constructor(\n private validationService: ValidationService,\n private tracker: ElementTrackerService,\n private aggregateService:AggregationFunctionService,\n private cdr: ChangeDetectorRef\n ) { }\n\n ngOnInit() {\n this.valueAssigned();\n this.aggregateService.setAggregateField(this.rowId,this.question.id,this.question.formElement.aggregateFunction.aggregateOperation,this.question.formElement.aggregateFunction.formula);\n \n this.subscription = this.aggregateService.aggregateFieldResults$.subscribe(update => {\n if (update && update.id === `${this.rowId}:${this.question.id}`) { // include rowId\n if(update.evaluated){\n this.result = update.result;\n this.question.answer = String(this.result);\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n this.validationService.clearInvalid(this.buildElementId());\n } else{\n this.result = 0;\n this.question.answer = '';\n this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n }\n }\n });\n }\n \n\n valueAssigned() {\n this.count = this.question?.count;\n this.required = this.question?.required;\n this.hint = this.question?.hint;\n this.placeholder = this.question.formElement?.appearance?.placeholder || '';\n if (\n this.question.answer !== null &&\n this.question.answer !== undefined &&\n ((typeof this.question.answer === 'string' &&\n this.question.answer.trim() !== '') ||\n (Array.isArray(this.question.answer) &&\n this.question.answer.length > 0) ||\n (typeof this.question.answer === 'object' &&\n Object.keys(this.question.answer).length > 0))\n ) {\n this.result = this.question.answer;\n }\n }\n \n\n clearAnswersRecursively(logic: any) {\n if (!logic || !logic.rows) return;\n \n logic.rows.forEach((row: any) => {\n row.grid.forEach((item: any) => {\n const element = item.element;\n \n if (item.entityType === 'QUESTION' && element) {\n // Clear answer if present\n if ('answer' in element) {\n element.answer = '';\n }\n \n // Recursively clear childLogics if any\n if (element.childLogics && element.childLogics.length > 0) {\n element.childLogics.forEach((childLogic: any) => {\n this.clearAnswersRecursively(childLogic);\n });\n }\n }\n \n if (item.entityType === 'SUBFORM' && element && element.rows) {\n // SUBFORM contains its own rows structure like a form\n this.clearAnswersRecursively({ rows: element.rows });\n }\n });\n });\n }\n\n handleValidation(isValid: boolean, message: string = 'This field is required') {\n if (isValid) {\n this.validationService.clearInvalid(this.buildElementId());\n } else {\n // this.validationService.setInvalid(this.question.id, message);\n }\n }\n\n private buildElementId(): string {\n return (this.inLine || this.inCard)\n ? `${this.submissionIndex}-${this.question.id}`\n : `${this.question.id}`;\n }\n\n get isInvalid(): boolean {\n return !!this.validationService.getErrorMessage(this.buildElementId());\n }\n\n get errorMessage(): string | null {\n return this.validationService.getErrorMessage(this.buildElementId());\n }\n\n ngAfterViewInit() {\n if (this.inLine || this.inCard) {\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n } else {\n this.elementId = `question-${this.question.id}`;\n }\n \n this.tracker.registerElement(this.elementId);\n }\n\n ngOnDestroy() {\n if (this.elementId) {\n this.tracker.unregisterElement(this.elementId);\n }\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\n","<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <input\n type=\"text\"\n class=\"form-control mb-2 height\"\n [placeholder]=\"placeholder\"\n [(ngModel)]=\"result\"\n readonly\n [class.invalid-question]=\"isInvalid && (!inLine || !result)\"\n [id]=\"question.id\"\n />\n <div *ngIf=\"isInvalid && (!inLine || !result)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n {{ validationMessage }}\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { AggregationFunctionService } from '../../services/aggregate.service';\ntype CurrencyMeta = {\n codes: string[];\n symbols?: string[];\n mainUnit: string;\n subUnit: string;\n decimals: number;\n};\n\n@Component({\n selector: 'lib-currency-fields',\n templateUrl: './currency-fields.component.html',\n styleUrls: ['./currency-fields.component.scss'],\n})\nexport class CurrencyFieldsComponent {\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Input() disableEdit: boolean = false;\n @Output() answerChange = new EventEmitter<{\n answer: any;\n maxPossibleScore?: number;\n amountInWords: string;\n currency: string;\n }>();\n @Input() rowId: any;\n\n count: number = 0;\n required: boolean = false;\n hint: string = '';\n placeholder: string = '';\n min!: number;\n max!: number;\n currencySymbol: string = '';\n decimalPrecision!: number;\n symbolPosition: string = 'Before the value';\n thousandSeparator!: boolean;\n showAmountInWords: boolean = false;\n enteredAmount!: string;\n validationFailed: boolean = false;\n validationMessage: string = '';\n private elementId: string = '';\n amountInWordsText: string = '';\n defaultCurrency:string='';\n constructor(\n private validationService: ValidationService,\n private tracker: ElementTrackerService,\n private aggregateService: AggregationFunctionService\n ) {}\n\n ngOnInit() {\n this.valueAssigned();\n }\n\n valueAssigned() {\n this.count = this.question.count;\n this.required = this.question.required;\n this.hint = this.question.hint;\n this.defaultCurrency=this.question.formElement?.appearance?.defaultCurrency || '';\n this.placeholder = this.question.formElement?.appearance?.placeholder || '';\n this.currencySymbol = this.question.formElement?.appearance?.currencySymbol;\n this.decimalPrecision =\n this.question.formElement?.appearance?.decimalPrecision || 2;\n this.symbolPosition =\n this.question.formElement?.appearance?.symbolPosition ||\n 'Before the value';\n this.thousandSeparator =\n this.question.formElement?.appearance?.thousandSeparator;\n this.min = this.question.formElement.validation.min;\n this.max = this.question.formElement.validation.max;\n this.showAmountInWords =\n this.question.formElement?.appearance?.showAmountInWords;\n if (this.question.formElement?.appearance?.currency) {\n let userLocaleCureency = this.question.formElement?.appearance?.currency;\n if (this.question.formElement.appearance.currencyOption) {\n let currencyOption =\n this.question.formElement.appearance.currencyOption;\n if (currencyOption == 'auto') {\n if (\n this.question.formElement.appearance.limitCurrencySymbol &&\n this.question.formElement.appearance.limitCurrencySymbol.length > 0\n ) {\n this.currencySymbol =\n this.question.formElement.appearance.limitCurrencySymbol.includes(\n userLocaleCureency\n )\n ? userLocaleCureency\n : this.question.formElement?.appearance?.currencySymbol;\n } else {\n this.currencySymbol = userLocaleCureency;\n }\n } else if (currencyOption == 'specific') {\n this.currencySymbol =\n this.question.formElement?.appearance?.specificCurrencySymbol;\n }\n }\n }\n if (\n !this.currencySymbol &&\n this.question.formElement?.appearance?.currencySymbol\n ) {\n this.currencySymbol =\n this.question.formElement?.appearance?.currencySymbol;\n }\n if(this.question.formElement?.appearance?.defaultCurrency){\n this.currencySymbol = this.question.formElement?.appearance?.defaultCurrency;\n }\n if(this.question.answerCurrency){\n this.currencySymbol=this.question.answerCurrency;\n }\n\n\n if (this.question.answer) {\n this.initializeAnswer();\n }\n if (this.showAmountInWords) {\n this.amountInWordsText = this.question.amountInWords;\n }\n if (this.question.childLogics && this.question.answer) {\n this.updateChildLogics(this.question);\n }\n this.aggregateService.setNumberField(\n this.rowId,\n this.question.id,\n this.question.answer\n );\n }\n\n initializeAnswer() {\n let value = this.question?.answer;\n if (!value) return;\n // check if numeric\n if (!isNaN(Number(value))) {\n if (this.thousandSeparator) {\n const parts = value.split('.');\n parts[0] = Number(parts[0]).toLocaleString('en-US'); // adds proper thousand separator\n value = parts.join('.');\n } else {\n value = value;\n }\n }\n\n this.enteredAmount = value;\n }\n\n preventNumberScroll(event: WheelEvent) {\n if (document.activeElement === event.target) {\n event.preventDefault();\n }\n }\n\n validateNumber() {\n this.validationFailed = false;\n this.validationService.clearInvalid(this.buildElementId());\n this.validationMessage = '';\n let enteredAmount = this.parseCurrencyToNumber(this.enteredAmount);\n if (this.required && !enteredAmount) {\n this.validationFailed = true;\n this.validationMessage = `Please enter a valid amount`;\n this.question.validationMessage = `Please enter a valid amount`;\n this.question.validation = false;\n } else if (\n (this.min !== undefined && enteredAmount < this.min) ||\n (this.max !== undefined && enteredAmount > this.max)\n ) {\n this.validationFailed = true;\n\n // Construct appropriate validation message based on whether min, max, or both are provided\n if (this.min !== undefined && this.max !== undefined) {\n this.validationMessage = `Please enter a valid amount between ${this.min} and ${this.max}`;\n this.question.validationMessage = `Please enter a valid amount between ${this.min} and ${this.max}`;\n } else if (this.min !== undefined) {\n this.validationMessage = `Please enter a amount greater than or equal to ${this.min}`;\n this.question.validationMessage = `Please enter a amount greater than or equal to ${this.min}`;\n } else if (this.max !== undefined) {\n this.validationMessage = `Please enter a amount less than or equal to ${this.max}`;\n this.question.validationMessage = `Please enter a amount less than or equal to ${this.max}`;\n }\n\n this.question.validation = false;\n } else {\n this.question.validation = true;\n }\n if (this.question.childLogics) {\n this.updateChildLogics(this.question);\n }\n }\n\n validateInput(event: any) {\n this.validationService.clearInvalid(this.buildElementId());\n\n // remove existing commas & currency symbol\n let rawValue: string = (event.target.value || '')\n .replace(/,/g, '')\n .replace(this.currencySymbol || '', '');\n\n // remove any characters except digits and dot\n rawValue = rawValue.replace(/[^\\d.]/g, '');\n\n // keep only the first dot (remove any additional dots)\n const firstDot = rawValue.indexOf('.');\n if (firstDot !== -1) {\n // split into before-first-dot and rest, remove additional dots from rest\n const before = rawValue.slice(0, firstDot);\n const after = rawValue.slice(firstDot + 1).replace(/\\./g, '');\n rawValue = `${before}.${after}`;\n }\n\n // determine decimal precision to enforce (default to 2)\n const dp =\n typeof this.decimalPrecision === 'number' && this.decimalPrecision >= 0\n ? this.decimalPrecision\n : 2;\n\n // if there's a decimal part, trim it to allowed length\n if (rawValue.includes('.')) {\n const [intPart, decimalPart = ''] = rawValue.split('.');\n const trimmedDecimal = decimalPart.slice(0, dp);\n rawValue = trimmedDecimal\n ? `${intPart}.${trimmedDecimal}`\n : intPart + '.';\n }\n\n // format with thousand separator for display\n let formattedValue = rawValue;\n if (this.thousandSeparator && rawValue) {\n const parts = rawValue.split('.');\n // handle case where user types \".12\" -> parts[0] === ''\n const intPartForFormat = parts[0] === '' ? '0' : parts[0];\n parts[0] = Number(intPartForFormat).toLocaleString('en-US');\n formattedValue = parts.join('.');\n // if original had leading '.' (user typed \".12\"), restore it visually as \".12\"\n if (rawValue.startsWith('.') && !formattedValue.startsWith('.')) {\n formattedValue = formattedValue.replace(/^0/, '');\n }\n }\n\n // keep numeric version for backend/calculations\n this.question.answer = rawValue;\n this.question.currencySymbol = this.currencySymbol;\n\n // update field display\n event.target.value = formattedValue;\n\n this.aggregateService.setNumberField(\n this.rowId,\n this.question.id,\n rawValue ? parseFloat(rawValue) : 0\n );\n\n if (this.question.childLogics) {\n this.updateChildLogics(this.question);\n }\n if (this.showAmountInWords) {\n this.amountInWordsText = this.convertAmountToWords(rawValue);\n this.question.amountInWords = this.amountInWordsText;\n }\n\n this.answerChange.emit({\n answer: this.question.answer,\n maxPossibleScore: 0,\n amountInWords: this.question.amountInWords,\n currency: this.currencySymbol\n });\n this.validateNumber();\n }\n\n // 2) typed currency map\n private currencyMap: Record<string, CurrencyMeta> = {\n USD: {\n codes: ['USD'],\n symbols: ['$', 'US$'],\n mainUnit: 'Dollars',\n subUnit: 'Cents',\n decimals: 2,\n },\n INR: {\n codes: ['INR'],\n symbols: ['₹', 'Rs', '₨'],\n mainUnit: 'Rupees',\n subUnit: 'Paisa',\n decimals: 2,\n },\n EUR: {\n codes: ['EUR'],\n symbols: ['€'],\n mainUnit: 'Euros',\n subUnit: 'Cents',\n decimals: 2,\n },\n AED: {\n codes: ['AED'],\n symbols: ['AED', 'د.إ'],\n mainUnit: 'Dirhams',\n subUnit: 'Fils',\n decimals: 2,\n },\n GBP: {\n codes: ['GBP'],\n symbols: ['£'],\n mainUnit: 'Pounds',\n subUnit: 'Pence',\n decimals: 2,\n },\n JPY: {\n codes: ['JPY'],\n symbols: ['¥'],\n mainUnit: 'Yen',\n subUnit: '',\n decimals: 0,\n },\n // add more entries as needed\n };\n\n // 3) convertAmountToWords using CurrencyMeta typing\n convertAmountToWords(value: string): string {\n if (!value) return '';\n\n // prefer currencyCode (ISO) if available; fall back to symbol\n const currencyCode = this.question?.currencyCode || null;\n const currencySymbol =\n this.question?.currencySymbol || this.currencySymbol || null;\n\n // find currency metadata from map:\n let meta: CurrencyMeta | undefined;\n\n if (currencyCode) {\n meta = this.currencyMap[currencyCode];\n }\n\n if (!meta && currencySymbol) {\n meta = Object.values(this.currencyMap).find(\n (m) => Array.isArray(m.symbols) && m.symbols.includes(currencySymbol)\n );\n }\n\n // use fallback if not found — typed as CurrencyMeta\n if (!meta) {\n const fallbackName = (\n currencyCode ||\n currencySymbol ||\n 'Currency'\n ).toString();\n meta = {\n codes: [currencyCode || fallbackName],\n symbols: currencySymbol ? [currencySymbol] : [],\n mainUnit: fallbackName,\n subUnit: '',\n decimals: 2,\n };\n }\n\n // normalize numeric parts\n const normalized = (value || '').toString().replace(/,/g, '');\n const [intPartStr = '0', decimalPartStr = ''] = normalized.split('.');\n\n const intPartNum = Number(intPartStr) || 0;\n\n // calculate subunit number robustly:\n const dp =\n typeof meta.decimals === 'number' && meta.decimals >= 0\n ? meta.decimals\n : 2;\n let subUnitNumber = 0;\n\n if (dp > 0 && decimalPartStr) {\n const scale = Math.pow(10, dp);\n const decDigits = decimalPartStr.replace(/\\D/g, '');\n // if shorter than dp, multiply; if longer, trim to dp\n const trimmed = decDigits.slice(0, dp);\n subUnitNumber = Number(trimmed) * Math.pow(10, dp - trimmed.length);\n // guard for rounding overflow (e.g., .999 -> 1.00)\n if (subUnitNumber >= scale) {\n // increment integer part\n return this.buildFinalPhrase(intPartNum + 1, 0, meta);\n }\n }\n\n return this.buildFinalPhrase(intPartNum, subUnitNumber, meta);\n }\n\n // 4) buildFinalPhrase accepts CurrencyMeta (or same shape) — typed accordingly\n private buildFinalPhrase(\n intNum: number,\n subNum: number,\n meta: { mainUnit: string; subUnit: string; decimals: number }\n ): string {\n const mainWords = this.numberToWords(intNum) || 'Zero';\n\n if (meta.decimals === 0 || !meta.subUnit) {\n return `${mainWords} ${meta.mainUnit} Only`;\n }\n\n if (!subNum) {\n return `${mainWords} ${meta.mainUnit} Only`;\n }\n\n const subWords = this.numberToWords(subNum);\n return `${mainWords} ${meta.mainUnit} and ${subWords} ${meta.subUnit} Only`;\n }\n\n // -------------------------\n // NUMBER → WORDS (Up to Crores)\n // -------------------------\n numberToWords(num: number): string {\n if (num === 0) return 'Zero';\n\n const a = [\n '',\n 'One',\n 'Two',\n 'Three',\n 'Four',\n 'Five',\n 'Six',\n 'Seven',\n 'Eight',\n 'Nine',\n 'Ten',\n 'Eleven',\n 'Twelve',\n 'Thirteen',\n 'Fourteen',\n 'Fifteen',\n 'Sixteen',\n 'Seventeen',\n 'Eighteen',\n 'Nineteen',\n ];\n const b = [\n '',\n '',\n 'Twenty',\n 'Thirty',\n 'Forty',\n 'Fifty',\n 'Sixty',\n 'Seventy',\n 'Eighty',\n 'Ninety',\n ];\n\n const toWords = (n: number): string => {\n if (n < 20) return a[n];\n if (n < 100) return `${b[Math.floor(n / 10)]} ${a[n % 10]}`.trim();\n if (n < 1000)\n return `${a[Math.floor(n / 100)]} Hundred ${toWords(n % 100)}`.trim();\n if (n < 100000)\n return `${toWords(Math.floor(n / 1000))} Thousand ${toWords(\n n % 1000\n )}`.trim();\n if (n < 10000000)\n return `${toWords(Math.floor(n / 100000))} Lakh ${toWords(\n n % 100000\n )}`.trim();\n return `${toWords(Math.floor(n / 10000000))} Crore ${toWords(\n n % 10000000\n )}`.trim();\n };\n\n return toWords(num);\n }\n\n updateChildLogics(question: any) {\n if (question.childLogics && Array.isArray(question.childLogics)) {\n question.childLogics.forEach((childLogic: any) => {\n if (\n this.evaluateCondition(\n question.answer,\n childLogic.condition,\n childLogic.inputValue\n )\n ) {\n childLogic.showLogic = true;\n } else {\n childLogic.showLogic = false;\n this.clearAnswersRecursively(childLogic);\n }\n });\n }\n }\n\n parseCurrencyToNumber(value: string): number {\n if (!value) return 0;\n\n // Remove currency symbol, commas, spaces\n const numericString = value\n .replace(new RegExp(`\\\\${this.currencySymbol}`, 'g'), '') // remove symbol\n .replace(/,/g, '') // remove thousand separators\n .trim();\n\n // Convert to number\n const num = parseFloat(numericString);\n return isNaN(num) ? 0 : num;\n }\n\n clearAnswersRecursively(logic: any) {\n if (!logic || !logic.rows) return;\n\n logic.rows.forEach((row: any) => {\n row.grid.forEach((item: any) => {\n const element = item.element;\n\n if (item.entityType === 'QUESTION' && element) {\n // Clear answer if present\n if ('answer' in element) {\n element.answer = '';\n }\n\n // Recursively clear childLogics if any\n if (element.childLogics && element.childLogics.length > 0) {\n element.childLogics.forEach((childLogic: any) => {\n this.clearAnswersRecursively(childLogic);\n });\n }\n }\n\n if (item.entityType === 'SUBFORM' && element && element.rows) {\n // SUBFORM contains its own rows structure like a form\n this.clearAnswersRecursively({ rows: element.rows });\n }\n });\n });\n }\n\n evaluateCondition(answer: any, condition: any, inputValue: any) {\n switch (condition) {\n case '>':\n return answer > Number(inputValue);\n case '<':\n return answer < Number(inputValue);\n case '>=':\n return answer >= Number(inputValue);\n case '<=':\n return answer <= Number(inputValue);\n case '=':\n return answer == inputValue;\n case '!=':\n return answer != inputValue;\n default:\n return false;\n }\n }\n\n handleValidation(\n isValid: boolean,\n message: string = 'This field is required'\n ) {\n if (isValid) {\n this.validationService.clearInvalid(this.buildElementId());\n } else {\n // this.validationService.setInvalid(this.question.id, message);\n }\n }\n\n private buildElementId(): string {\n return this.inLine || this.inCard\n ? `${this.submissionIndex}-${this.question.id}`\n : `${this.question.id}`;\n }\n\n get isInvalid(): boolean {\n return !!this.validationService.getErrorMessage(this.buildElementId());\n }\n\n get errorMessage(): string | null {\n return this.validationService.getErrorMessage(this.buildElementId());\n }\n\n ngAfterViewInit() {\n if (this.inLine || this.inCard) {\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n } else {\n this.elementId = `question-${this.question.id}`;\n }\n\n this.tracker.registerElement(this.elementId);\n }\n\n ngOnDestroy() {\n if (this.elementId) {\n this.tracker.unregisterElement(this.elementId);\n }\n }\n}\n","<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span>\n <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n\n <div class=\"currency-input inside\">\n <span *ngIf=\"symbolPosition === 'Before the value'\" class=\"currency-symbol left\">\n {{ currencySymbol }}\n </span>\n\n <input\n type=\"text\"\n class=\"form-control mb-2 height\"\n [placeholder]=\"placeholder\"\n [class.hide-spin-buttons]=\"true\"\n (blur)=\"validateNumber()\"\n [(ngModel)]=\"enteredAmount\"\n [class.invalid]=\"validationFailed\"\n [class.invalid-question]=\"isInvalid && (!inLine || !enteredAmount)\"\n (input)=\"validateInput($event)\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n (wheel)=\"preventNumberScroll($event)\"\n [disabled]=\"disableEdit\"\n />\n\n <span *ngIf=\"symbolPosition === 'After the value'\" class=\"currency-symbol right\">\n {{ currencySymbol }}\n </span>\n\n </div>\n <div *ngIf=\"showAmountInWords && amountInWordsText\" class=\"amount-in-words\">\n {{ amountInWordsText }}\n </div>\n <div *ngIf=\"isInvalid && (!inLine || !enteredAmount)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n {{ validationMessage }}\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { DataService } from '../../services/data.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\n\n@Component({\n selector: 'lib-hidden-field',\n template: '',\n styleUrls: ['./hidden-field.component.scss']\n})\nexport class HiddenFieldComponent {\n\n @Input() question: any = {};\n @Input() inLine: boolean = false;\n @Input() inCard: boolean = false;\n @Input() submissionIndex!: number;\n @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n hint: string = '';\n hiddenField!: any;\n key: string = '';\n valueSource: string = '';\n value: string = '';\n user: string = '';\n private elementId: string='';\n \n constructor(\n private tracker: ElementTrackerService,\n private dataService:DataService,\n private whenClauseService:WhenClauseService\n ) {\n this.dataService.header$.subscribe((data) => {\n this.user = data.authUser;\n });\n }\n\n ngOnInit() {\n this.valueAssigned();\n }\n\n valueAssigned() {\n this.hint = this.question?.hint;\n this.hiddenField = this.question?.formElement?.hiddenField;\n this.key = this.hiddenField?.key;\n this.value = this.hiddenField?.value;\n this.valueSource = this.hiddenField?.valueSource;\n \n const sourcesThatShouldNotOverride = [\n 'PREDEFINED_VARIABLE',\n 'LOCAL_STORAGE',\n 'SESSION_STORAGE'\n ];\n \n const hasExistingAnswer =\n this.question.answer !== null &&\n this.question.answer !== undefined &&\n this.question.answer !== '';\n \n // 🚨 Skip overwrite if answer exists for specific sources\n if (\n sourcesThatShouldNotOverride.includes(this.valueSource) &&\n hasExistingAnswer\n ) {\n // Do nothing — keep existing answer\n } else {\n this.question.answer = this.resolveHiddenFieldValue(this.hiddenField);\n }\n setTimeout(() => {\n this.whenClauseService.setQuestionAnswer(\n this.question.id,\n this.question.answer,\n true\n );\n });\n \n this.answerChange.emit({\n answer: this.question.answer,\n maxPossibleScore: 0\n });\n }\n\n resolveHiddenFieldValue(hiddenField: {\n value: string | null,\n valueSource: string | null,\n key: string | null\n }): any {\n if (!hiddenField?.valueSource) return null;\n \n switch (hiddenField.valueSource) {\n case 'CUSTOM_INPUT':\n // Directly return the provided value\n return hiddenField.value;\n \n case 'LOCAL_STORAGE':\n if (hiddenField.key) {\n return localStorage.getItem(hiddenField.key);\n }\n return null;\n \n case 'SESSION_STORAGE':\n if (hiddenField.key) {\n return sessionStorage.getItem(hiddenField.key);\n }\n return null;\n \n case 'PREDEFINED_VARIABLE':\n return this.resolvePredefinedVariable(hiddenField.value);\n \n default:\n return null;\n }\n }\n \n private resolvePredefinedVariable(variable: string | null): any {\n if (!variable) return null;\n \n const now = new Date();\n \n switch (variable) {\n case 'CURRENT_DATE':\n return now.toISOString().split('T')[0]; // e.g. \"2025-09-29\"\n case 'CURRENT_TIME':\n return now.toTimeString().split(' ')[0]; // e.g. \"15:42:18\"\n case 'CURRENT_DATE_TIME':\n return now.toLocaleString(); // full ISO datetime\n case 'EPOCH_TIME':\n return now.getTime(); // milliseconds since 1970\n case 'YEAR':\n return now.getFullYear();\n case 'MONTH':\n return now.getMonth() + 1; // 1-12\n case 'DAY':\n return now.getDate(); // 1-31\n case 'SUBMITTED_BY':\n return this.user ? this.user : 'Unknown';\n default:\n return null;\n }\n }\n \n\n ngAfterViewInit() {\n if (this.inLine || this.inCard) {\n this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n } else {\n this.elementId = `question-${this.question.id}`;\n }\n this.tracker.registerElement(this.elementId);\n }\n\n ngOnDestroy() {\n if (this.elementId) {\n this.tracker.unregisterElement(this.elementId);\n }\n }\n\n}\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { DomSanitizer, SafeHtml, SafeResourceUrl } from '@angular/platform-browser';\n\n@Component({\n selector: 'lib-iframe-fields',\n templateUrl: './iframe-fields.component.html',\n styleUrls: ['./iframe-fields.component.scss']\n})\nexport class IframeFieldsComponent {\n\n @Input() question: any = {};\n \n height!: string;\n width!: string;\n contentType: string = '';\n htmlContent: string = '';\n cssContent: string = '';\n scriptContent: string = '';\n urlContent: string = '';\n count!: number;\n\n safeHtmlContent!: SafeHtml;\n safeUrl!: SafeResourceUrl;\n\n embeddableDomains = [\n // Generic sites that usually allow embedding\n 'youtube.com',\n 'youtu.be',\n 'vimeo.com',\n 'player.vimeo.com',\n 'maps.google.com',\n 'www.google.com/maps',\n 'openstreetmap.org',\n 'codesandbox.io',\n 'stackblitz.com',\n 'jsfiddle.net',\n 'codepen.io',\n 'spotify.com',\n 'soundcloud.com',\n 'figma.com',\n 'canva.com',\n 'notion.so',\n 'facebook.com/plugins',\n 'instagram.com/p',\n 'twitter.com',\n ];\n\n constructor(private sanitizer: DomSanitizer) {}\n\n ngOnInit() {\n this.valueAssigned();\n }\n\n ngAfterViewInit() {\n if (this.contentType === 'HTML') {\n setTimeout(() => this.renderHtml(), 0);\n } else if (this.contentType === 'LINK') {\n setTimeout(() => this.renderLink(), 0);\n }\n }\n\n valueAssigned() {\n this.count = this.question?.count;\n this.width = this.question.formElement.appearance.width\n ? this.question.formElement.appearance.width + 'px'\n : '100%';\n this.height = this.question.formElement.appearance.height\n ? this.question.formElement.appearance.height + 'px'\n : '100%';\n this.contentType =\n this.question.formElement.iFrameProperties.contentType;\n this.htmlContent =\n this.question.formElement.iFrameProperties.html.content;\n this.cssContent =\n this.question.formElement.iFrameProperties.style.css;\n this.scriptContent =\n this.question.formElement.iFrameProperties.script.code;\n this.urlContent = this.question.formElement.iFrameProperties.url;\n }\n @ViewChild('iframeRef') iframeRef!: ElementRef<HTMLIFrameElement>;\n /** Render HTML with dynamic CSS */\n renderHtml() {\n const iframe = this.iframeRef?.nativeElement;\n\n if (!iframe) return;\n\n const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document;\n\n if (iframeDoc) {\n // Build the complete HTML content to inject into the iframe\n const safeHtml = `\n <html>\n <head>\n <style>${this.cssContent || ''}</style>\n </head>\n <body>\n ${this.htmlContent || ''}\n <script>\n (function(localStorage) {\n try {\n ${\n this.isSafeScript(this.scriptContent)\n ? this.scriptContent\n : ''\n }\n } catch (e) {\n document.body.innerHTML += '<p style=\"color:red\">Script Error: ' + e.message + '</p>';\n }\n })(window.localStorage);\n </script>\n </body>\n </html>\n `;\n\n iframeDoc.open();\n iframeDoc.write(safeHtml);\n iframeDoc.close();\n }\n }\n\n renderLink() {\n if (!this.urlContent) {\n this.safeUrl = '';\n return;\n }\n\n const url = this.urlContent.trim();\n\n // Check if URL is valid\n if (!this.isValidUrl(url)) {\n console.warn('Invalid URL format');\n this.safeUrl = '';\n return;\n }\n\n // Check if embeddable host\n if (!this.isEmbeddableUrl(url)) {\n console.warn('This website may not allow embedding');\n // You can still LET it try\n // Or block it completely\n // For now: allow but warn\n }\n\n const embedUrl = this.convertToEmbedUrl(url);\n this.safeUrl = this.sanitizeUrl(embedUrl);\n }\n\n isValidUrl(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n }\n\n /** Sanitize URLs for iframes */\n sanitizeUrl(url: string): SafeResourceUrl {\n return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n }\n\n isEmbeddableUrl(url: string): boolean {\n try {\n const parsed = new URL(url);\n\n return this.embeddableDomains.some((domain) =>\n parsed.hostname.includes(domain)\n );\n } catch {\n return false;\n }\n }\n\n convertToEmbedUrl(url: string): string {\n try {\n const parsed = new URL(url);\n\n // YouTube\n if (\n parsed.hostname.includes('youtube.com') &&\n parsed.searchParams.get('v')\n ) {\n return `https://www.youtube.com/embed/${parsed.searchParams.get('v')}`;\n }\n if (parsed.hostname.includes('youtu.be')) {\n return `https://www.youtube.com/embed/${parsed.pathname.substring(1)}`;\n }\n\n // Vimeo\n if (parsed.hostname.includes('vimeo.com')) {\n const videoId = parsed.pathname.split('/')[1];\n return `https://player.vimeo.com/video/${videoId}`;\n }\n\n // Google Maps (no API key needed)\n if (\n parsed.hostname.includes('google.com') &&\n parsed.pathname.startsWith('/maps')\n ) {\n if (parsed.pathname.includes('/maps/embed')) return url;\n\n return `https://www.google.com/maps/embed?${parsed.searchParams.toString()}`;\n }\n\n return url;\n } catch (e) {\n return url;\n }\n }\n\n /** Basic script validation to prevent unsafe operations */\n isSafeScript(code: string): boolean {\n const unsafePatterns = [\n /window\\.parent/,\n /document\\.cookie/,\n /fetch\\(/,\n /XMLHttpRequest/,\n /eval\\(/,\n /new Function/,\n /setTimeout|setInterval/,\n ];\n\n return !unsafePatterns.some((pattern) => pattern.test(code));\n }\n}\n","<div class=\"custom-embed mb-4\"\n [style.width]=\"width\"\n [style.height]=\"height\">\n\n <ng-container [ngSwitch]=\"contentType\">\n\n <!-- HTML, CSS, and Script rendered together -->\n <iframe\n *ngSwitchCase=\"'HTML'\"\n #iframeRef\n sandbox=\"allow-scripts allow-same-origin\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n frameborder=\"0\"\n ></iframe>\n\n <!-- Link Embed -->\n <div *ngSwitchCase=\"'LINK'\">\n <iframe\n *ngIf=\"safeUrl\"\n [src]=\"safeUrl\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n frameborder=\"0\"\n allowfullscreen>\n </iframe>\n </div>\n \n\n </ng-container>\n</div>\n","import { ChangeDetectorRef, Component, EventEmitter, Injector, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'lib-question',\n templateUrl: './question.component.html',\n styleUrls: ['./question.component.scss']\n})\nexport class QuestionComponent {\n @Input() question: any = {};\n @Input() edit: boolean = false;\n @Input() acceptedLanguage: string = '';\n @Input() currentPageIndex: number = 0;\n @Output() emitValidations = new EventEmitter<any>();\n @Output() subFormChange = new EventEmitter<any>();\n validations: any = [];\n componentToLoad: any;\n injector!: Injector;\n childLogicCache: { [key: string]: { component: Promise<any>, injector: Injector } } = {};\n\n\n constructor(private cdr: ChangeDetectorRef) { }\n\n ngOnInit(): void {\n this.loadComponent()\n }\n\n // private async loadComponent(): Promise<void> {\n // this.componentToLoad = await this.loadFormElementsComponent();\n // this.injector = this.createInjector();\n // }\n// safeStringify(obj: any) {\n// const seen = new WeakSet();\n// return JSON.stringify(obj, (key, value) => {\n// if (typeof value === \"object\" && value !== null) {\n// if (seen.has(value)) return;\n// seen.add(value);\n// }\n// return value;\n// }, 2);\n// }\n// getComponentForChildLogics(grid: any, state: string, answer: any): { component: Promise<any>, injector: Injector } {\n// const key = this.safeStringify({grid, state});\n// if (!this.childLogicCache[key]) {\n// const component = this.loadFormElementsComponent();\n// const injector = this.createInjector(grid, state, answer);\n// this.childLogicCache[key] = { component, injector };\n// }\n// return this.childLogicCache[key];\n// }\n\n// private async loadFormElementsComponent() {\n// const { FormElementsComponent } = await import('../form-elements/form-elements.component');\n// return FormElementsComponent;\n// }\n\n// private createInjector(grid: any, state: string, answer: any): Injector {\n// return Injector.create({\n// providers: [\n// { provide: 'grid', useValue:grid},\n// { provide: 'edit', useValue: this.edit },\n// { provide: 'answer', useValue: answer },\n// { provide: 'state', useValue:state },\n// { provide: 'acceptedLanguage', useValue: this.acceptedLanguage }\n// ],\n// });\n// }\n\n\n\n removeCircularReferences(obj: any): any {\n const seen = new WeakSet();\n\n function recurse(value: any): any {\n if (value === null || typeof value !== 'object') {\n return value;\n }\n\n if (seen.has(value)) {\n return '[Circular]';\n }\n\n seen.add(value);\n\n if (Array.isArray(value)) {\n return value.map(item => recurse(item));\n }\n\n const output: any = {};\n for (const key of Object.keys(value)) {\n output[key] = recurse(value[key]);\n }\n\n seen.delete(value);\n return output;\n }\n\n return recurse(obj);\n}\n\nprivate async loadComponent(): Promise<void> {\n this.componentToLoad = await this.loadFormElementsComponent();\n this.injector = this.createInjector();\n}\n\nprivate async loadFormElementsComponent() {\n const { FormElementsComponent } = await import('../form-elements/form-elements.component');\n return FormElementsComponent;\n}\n\ncreateInjector(): Injector {\n return Injector.create({\n providers: [\n { provide: 'grid', useValue: this.question?.childLogics },\n { provide: 'state', useValue: 'child' },\n ],\n });\n}\n\n updateSubFormWithSubmissions(event: any) {\n this.subFormChange.emit(event);\n }\n\n handleValidation(validation: any) {\n this.validations.push(validation);\n this.emitValidations.emit(this.validations);\n this.cdr.detectChanges();\n }\n\n}\n","<div [ngSwitch]=\"question.formElement.elementType\">\n\n <lib-check-box-fields *ngSwitchCase=\"'CHECK_BOX'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-check-box-fields>\n <lib-date-time-fields *ngSwitchCase=\"'DATE_TIME'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-date-time-fields>\n <lib-drop-down-fields *ngSwitchCase=\"'DROP_DOWN'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-drop-down-fields>\n <lib-file-picker-fields *ngSwitchCase=\"'FILE_PICKER'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-file-picker-fields>\n <lib-location-fields *ngSwitchCase=\"'LOCATION'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-location-fields>\n <lib-mail-fields *ngSwitchCase=\"'EMAIL'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-mail-fields>\n <lib-mobile-fields *ngSwitchCase=\"'MOBILE'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-mobile-fields>\n <lib-number-fields *ngSwitchCase=\"'NUMBER'\" [question]=\"question\" (validate)=\"handleValidation($event)\" [rowId]=\"'0'\"></lib-number-fields>\n <lib-password-fields *ngSwitchCase=\"'PASSWORD'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-password-fields>\n <lib-radio-button-fields *ngSwitchCase=\"'RADIO_BUTTON'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-radio-button-fields>\n <lib-rich-text-editor-fields *ngSwitchCase=\"'RICH_TEXT_EDITOR'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-rich-text-editor-fields>\n <lib-selection-matrix-fields *ngSwitchCase=\"'SELECTION_MATRIX'\" [question]=\"question\" [acceptedLanguage]=\"acceptedLanguage\" (validate)=\"handleValidation($event)\"></lib-selection-matrix-fields>\n <lib-signature-fields *ngSwitchCase=\"'SIGNATURE'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-signature-fields>\n <lib-slider-fields *ngSwitchCase=\"'SLIDER'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-slider-fields>\n <lib-terms-and-condition-fields *ngSwitchCase=\"'TERMS_AND_CONDITION'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-terms-and-condition-fields>\n <lib-text-area-fields *ngSwitchCase=\"'TEXT_AREA'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-text-area-fields>\n <lib-text-fields *ngSwitchCase=\"'TEXT_BOX'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-text-fields>\n <lib-toggle-switch-fields *ngSwitchCase=\"'TOGGLE_SWITCH'\" [question]=\"question\" [acceptedLanguage]=\"acceptedLanguage\" (validate)=\"handleValidation($event)\"></lib-toggle-switch-fields>\n <lib-url-fields *ngSwitchCase=\"'URL'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-url-fields>\n <lib-aggregate-function *ngSwitchCase=\"'AGGREGATE_FUNCTION'\" [question]=\"question\" (validate)=\"handleValidation($event)\" [rowId]=\"'0'\"></lib-aggregate-function>\n <lib-currency-fields *ngSwitchCase=\"'CURRENCY'\" [question]=\"question\" (validate)=\"handleValidation($event)\" [rowId]=\"'0'\"></lib-currency-fields>\n <lib-hidden-field *ngSwitchCase=\"'HIDDEN_FIELD'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-hidden-field>\n <lib-iframe-fields *ngSwitchCase=\"'IFRAME_WIDGET'\" [question]=\"question\" ></lib-iframe-fields>\n</div>\n\n<ng-container *ngIf=\"question.childLogics\">\n\n <!-- <ng-container *ngIf=\"componentToLoad\">\n <ng-container *ngComponentOutlet=\"componentToLoad;\n inputs: { grid: question.childLogics,\n answer: question.answer,\n state: 'child' }\"></ng-container>\n </ng-container> -->\n\n <!-- <ng-container *ngIf=\"getComponentForChildLogics(question.childLogics, 'child', question.answer) as cached\">\n <ng-container\n *ngComponentOutlet=\"cached.component | async; injector: cached.injector\">\n </ng-container>\n </ng-container> -->\n\n\n <ng-container *ngIf=\"componentToLoad\">\n\n <ng-container *ngComponentOutlet=\"componentToLoad;\n inputs: { grid: question.childLogics,\n answer: question?.answer,\n state: 'child' }\"></ng-container>\n </ng-container>\n</ng-container>\n","import { Component, Inject, Input } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n selector: 'lib-confirm-dialog',\n templateUrl: './confirm-dialog.component.html',\n styleUrls: ['./confirm-dialog.component.scss']\n})\nexport class ConfirmDialogComponent {\n\n constructor(@Inject(MAT_DIALOG_DATA) public data: any,\n public dialogRef: MatDialogRef<ConfirmDialogComponent>){\n this.messageHeader=data.messageHeader;\n this.message=data.message;\n }\n\n message:string='';\n messageHeader:string='';\n closeModal() {\n this.dialogRef.close();\n }\n \n}","<div class=\"\" id=\"checkdeleteModal\" tabindex=\"-1\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modalHeader\">\n <div class=\"title-div\">\n </div>\n <div class=\"header-btn\">\n <img (click)=\"closeModal()\" src=\"/assets/icons/close-sidebar-mark-icon.svg\" alt=\"Close Sidebar Icon\"> \n </div>\n </div>\n <div class=\"modalBody\">\n <div class=\"row text-center\">\n <img class=\"delete-icon\" src=\"/assets/icons/delete-no-outline-icon.svg\" alt=\"Delete Icon\"> \n <p class=\"delete-confirm\">{{messageHeader}}</p>\n <p class=\"delete-dialog\">{{message}}</p>\n </div>\n </div>\n <div class=\"modalFooter\">\n <div class=\"footer-btn \">\n <button type=\"button\" class=\"delete-btn\"\n (click)=\"dialogRef.close(true)\"\n >Yes</button>\n <button class=\"cancel-btn\"\n (click)=\"dialogRef.close(false)\"\n type=\"button\">\n No\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { v4 as uuidv4 } from 'uuid';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SubformCopyService {\n copySubform(subForm: any, pages: any[]): { updatedPages: any[] } {\n const questionRelation: Record<string, string> = {};\n const copiedSubform = this.deepCopyWithNewIds(subForm, questionRelation);\n\n // Attach copy metadata directly inside the copied subform\n copiedSubform.copySubformMeta = {\n id: copiedSubform.id,\n title: '',\n description: '',\n parentSubform: subForm.id,\n questionRelation,\n };\n\n if (!subForm.copiedForms) {\n subForm.copiedForms = [];\n }\n subForm.copiedForms.push(copiedSubform.id);\n\n const page = this.findPageContainingSubform(subForm.id, pages);\n\n if (page) {\n const rowIndex = page.rows.findIndex((row: any) =>\n row.grid.some((grid: any) =>\n grid.entityType === 'SUBFORM' && grid.element.id === subForm.id\n )\n );\n copiedSubform.submissions = [];\n copiedSubform.score = null;\n if (rowIndex !== -1) {\n const newSubformGrid = {\n entityType: 'SUBFORM',\n element: copiedSubform,\n show: true\n };\n\n page.rows.splice(rowIndex + 1, 0, {\n grid: [newSubformGrid],\n });\n }\n }\n\n return {\n updatedPages: pages\n };\n }\n\n private deepCopyWithNewIds(subform: any, questionRelation: Record<string, string>): any {\n const idMap: Map<string, string> = new Map();\n\n const replaceIds = (obj: any): any => {\n if (Array.isArray(obj)) {\n return obj.map(replaceIds);\n } else if (obj !== null && typeof obj === 'object') {\n const newObj: any = {};\n for (const key of Object.keys(obj)) {\n const value = obj[key];\n \n if (key === 'id' && typeof value === 'string') {\n if (!idMap.has(value)) {\n idMap.set(value, uuidv4());\n }\n newObj[key] = idMap.get(value);\n } else {\n newObj[key] = replaceIds(value);\n }\n }\n \n // ✅ Now handle answer reset and questionRelation mapping\n if (\n obj.entityType === 'QUESTION' &&\n obj.element &&\n typeof obj.element.id === 'string'\n ) {\n const originalQuestionId = obj.element.id;\n const newQuestionId = newObj.element?.id;\n \n if (originalQuestionId && newQuestionId) {\n questionRelation[newQuestionId] = originalQuestionId;\n }\n \n // ✅ Reset answer here\n if (newObj.element) {\n newObj.element.answer = '';\n newObj.element.files = '';\n }\n }\n \n return newObj;\n }\n \n return obj;\n };\n \n\n const getCircularReplacer = () => {\n const seen = new WeakSet();\n return (_key: string, value: any) => {\n if (typeof value === \"object\" && value !== null) {\n if (seen.has(value)) {\n return undefined;\n }\n seen.add(value);\n }\n return value;\n };\n };\n\n const copied = replaceIds(JSON.parse(JSON.stringify(subform, getCircularReplacer())));\n if (\n copied.defaultAnswers &&\n Array.isArray(copied.defaultAnswers.answers)\n ) {\n copied.defaultAnswers.answers.forEach((answerBlock: any) => {\n if (Array.isArray(answerBlock.defaultQuestionsAnswers)) {\n answerBlock.defaultQuestionsAnswers.forEach((dqAnswer: any) => {\n const oldQId = dqAnswer.questionId; \n if (idMap.has(oldQId)) {\n dqAnswer.questionId = idMap.get(oldQId);\n }\n });\n }\n });\n }\n \n copied.copied = true;\n return copied;\n }\n\n private findPageContainingSubform(subformId: string, pages: any[]): any {\n return pages.find((page: any) =>\n page.rows.some((row: any) =>\n row.grid.some(\n (grid: any) =>\n grid.entityType === 'SUBFORM' &&\n grid.element &&\n grid.element.id === subformId\n )\n )\n );\n }\n}\n","import { Component, Inject, Injector } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ValidationService } from '../../services/validation.service';\n\n@Component({\n selector: 'lib-submission-modal',\n templateUrl: './submission-modal.component.html',\n styleUrls: ['./submission-modal.component.scss'],\n})\nexport class SubmissionModalComponent {\n acceptedLanguage: string = '';\n grid: any;\n subForm: any;\n childLogicCache: { [key: string]: { component: Promise<any>, injector: Injector } } = {};\n componentToLoad: any;\n injector!: Injector;\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public data: any,\n private validationService: ValidationService,\n private dialogRef: MatDialogRef<SubmissionModalComponent>\n ) {}\n\n ngOnInit() {\n this.subForm = this.data.subForm;\n this.acceptedLanguage = this.data.acceptedLanguage;\n this.loadComponent();\n }\n\n private async loadComponent(): Promise<void> {\n this.componentToLoad = await this.loadFormElementsComponent();\n this.injector = this.createInjector();\n }\n\n private async loadFormElementsComponent() {\n const { FormElementsComponent } = await import('../../question/form-elements/form-elements.component');\n return FormElementsComponent;\n }\n\n createInjector(): Injector {\n return Injector.create({\n providers: [\n { provide: 'grid', useValue: this.grid?.element.childLogics },\n { provide: 'state', useValue: 'child' },\n ],\n });\n }\n\n\n\n closeModal() {\n this.clearModal();\n this.dialogRef.close();\n }\n\n saveSubmission() {\n let isFormValid = true;\n const pageIndex = this.subForm.pageIndex ?? 0;\n\n this.subForm.rows.forEach((row: any) => {\n row.grid.forEach((item: any) => {\n if (item.entityType === 'QUESTION') {\n const q = item.element;\n const hasAnswer =\n q.answer !== null &&\n q.answer !== undefined &&\n ((typeof q.answer === 'string' && q.answer.trim() !== '') ||\n (Array.isArray(q.answer) && q.answer.length > 0) ||\n (typeof q.answer === 'object' &&\n Object.keys(q.answer).length > 0));\n if (q.required && !hasAnswer) {\n this.validationService.setInvalid(\n q.id,\n 'This question is required',\n pageIndex\n );\n isFormValid = false;\n } else {\n this.validationService.clearInvalid(q.id);\n }\n }\n });\n });\n\n // 2) If any required question is missing, abort close and let the child components render errors\n if (!isFormValid) {\n return;\n }\n\n // 3) All good → close the dialog\n this.dialogRef.close(this.subForm);\n }\n\n clearModal() {\n if (this.subForm && this.subForm.rows) {\n this.subForm.rows.flatMap((item: any) =>\n item.grid.forEach((gridItem: any) => this.clearFormElement(gridItem))\n );\n // this.subForm.formElements.forEach((formElement: any) => {\n // this.clearFormElement(formElement);\n // });\n }\n }\n\n clearFormElement(formElement: any) {\n if (formElement.entityType === 'QUESTION') {\n formElement.element.answer = '';\n\n if (formElement.element.formElement) {\n if (formElement.element.formElement.elementType === 'FILE_PICKER') {\n formElement.element.answer = null;\n } else {\n formElement.element.answer = '';\n }\n }\n\n if (formElement.element.childLogics) {\n formElement.element.childLogics?.forEach((childLogic: any) => {\n childLogic.showLogic = false;\n childLogic?.formElements?.forEach((formElement: any) => {\n this.clearFormElement(formElement);\n });\n });\n }\n }\n }\n}\n","<div class=\"mb-5\">\n <div class=\"modalHeader mb-4\">\n <div class=\"title-div\">\n <p class=\"title\">{{subForm.title}}</p>\n </div>\n <div class=\"header-btn\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" (click)=\"closeModal()\">\n <path d=\"M8 8L16 16\" stroke=\"#1D252D\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M16 8L8 16\" stroke=\"#1D252D\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n\n <div class=\"px-3\" *ngFor=\"let row of subForm.rows\">\n <ng-container *ngFor=\"let formElement of row.grid\">\n <div *ngIf=\"formElement.entityType === 'QUESTION'\">\n <lib-check-box-fields\n *ngIf=\"formElement.element.formElement.elementType === 'CHECK_BOX'\"\n [question]=\"formElement.element\"\n ></lib-check-box-fields>\n <lib-date-time-fields\n *ngIf=\"formElement.element.formElement.elementType === 'DATE_TIME'\"\n [question]=\"formElement.element\"\n ></lib-date-time-fields>\n <lib-drop-down-fields\n *ngIf=\"formElement.element.formElement.elementType === 'DROP_DOWN'\"\n [question]=\"formElement.element\"\n ></lib-drop-down-fields>\n <lib-file-picker-fields\n *ngIf=\"\n formElement.element.formElement.elementType === 'FILE_PICKER'\n \"\n [question]=\"formElement.element\"\n ></lib-file-picker-fields>\n <lib-location-fields\n *ngIf=\"formElement.element.formElement.elementType === 'LOCATION'\"\n [question]=\"formElement.element\"\n ></lib-location-fields>\n\n <lib-mail-fields\n *ngIf=\"formElement.element.formElement.elementType === 'EMAIL'\"\n [question]=\"formElement.element\"\n >\n </lib-mail-fields>\n <lib-mobile-fields\n *ngIf=\"formElement.element.formElement.elementType === 'MOBILE'\"\n [question]=\"formElement.element\"\n >\n </lib-mobile-fields>\n <lib-number-fields\n *ngIf=\"formElement.element.formElement.elementType === 'NUMBER'\"\n [question]=\"formElement.element\"\n [rowId]=\"'0'\"\n >\n </lib-number-fields>\n <lib-password-fields\n *ngIf=\"formElement.element.formElement.elementType === 'PASSWORD'\"\n [question]=\"formElement.element\"\n >\n </lib-password-fields>\n <lib-radio-button-fields\n *ngIf=\"\n formElement.element.formElement.elementType === 'RADIO_BUTTON'\n \"\n [question]=\"formElement.element\"\n ></lib-radio-button-fields>\n <lib-rich-text-editor-fields\n *ngIf=\"\n formElement.element.formElement.elementType === 'RICH_TEXT_EDITOR'\n \"\n [question]=\"formElement.element\"\n ></lib-rich-text-editor-fields>\n <lib-selection-matrix-fields\n *ngIf=\"\n formElement.element.formElement.elementType === 'SELECTION_MATRIX'\n \"\n [question]=\"formElement.element\"\n [acceptedLanguage] = \"acceptedLanguage\"\n ></lib-selection-matrix-fields>\n <lib-signature-fields\n *ngIf=\"formElement.element.formElement.elementType === 'SIGNATURE'\"\n [question]=\"formElement.element\"\n ></lib-signature-fields>\n <lib-slider-fields\n *ngIf=\"formElement.element.formElement.elementType === 'SLIDER'\"\n [question]=\"formElement.element\"\n ></lib-slider-fields>\n <lib-terms-and-condition-fields\n *ngIf=\"\n formElement.element.formElement.elementType ===\n 'TERMS_AND_CONDITION'\n \"\n [question]=\"formElement.element\"\n ></lib-terms-and-condition-fields>\n <lib-text-area-fields\n *ngIf=\"formElement.element.formElement.elementType === 'TEXT_AREA'\"\n [question]=\"formElement.element\"\n ></lib-text-area-fields>\n <lib-text-fields\n *ngIf=\"formElement.element.formElement.elementType === 'TEXT_BOX'\"\n [question]=\"formElement.element\"\n ></lib-text-fields>\n <lib-toggle-switch-fields\n *ngIf=\"\n formElement.element.formElement.elementType === 'TOGGLE_SWITCH'\n \"\n [question]=\"formElement.element\"\n [acceptedLanguage] = \"acceptedLanguage\"\n ></lib-toggle-switch-fields>\n <lib-url-fields\n *ngIf=\"formElement.element.formElement.elementType === 'URL'\"\n [question]=\"formElement.element\"\n ></lib-url-fields>\n <lib-currency-fields\n *ngIf=\"formElement.element.formElement.elementType === 'CURRENCY'\"\n [question]=\"formElement.element\"\n ></lib-currency-fields>\n <lib-hidden-field\n *ngIf=\"formElement.element.formElement.elementType === 'HIDDEN_FIELD'\"\n [question]=\"formElement.element\"\n ></lib-hidden-field>\n <lib-iframe-fields\n *ngIf=\"formElement.element.formElement.elementType === 'IFRAME_WIDGET'\"\n [question]=\"formElement.element\"\n ></lib-iframe-fields>\n <lib-aggregate-function\n *ngIf=\"formElement.element.formElement.elementType === 'AGGREGATE_FUNCTION'\"\n [question]=\"formElement.element\"\n [rowId]=\"'0'\"\n ></lib-aggregate-function>\n <ng-container *ngIf=\"formElement?.element?.childLogics\">\n\n <ng-container *ngIf=\"componentToLoad\">\n\n <ng-container *ngComponentOutlet=\"componentToLoad;\n inputs: { grid: formElement?.element?.childLogics,\n answer: formElement?.element?.answer,\n state: 'child' }\"></ng-container>\n </ng-container>\n </ng-container>\n\n </div>\n <div *ngIf=\"formElement.entityType === 'SECTION'\">\n <lib-section-fields\n [section]=\"formElement.element\"\n ></lib-section-fields>\n </div>\n </ng-container>\n\n </div>\n\n <div class=\"okBtn me-4 ms-4\">\n <button\n class=\"submitBtn ms-md-3 me-md-2 rounded-pill\"\n type=\"button\"\n (click)=\"saveSubmission()\">\n Ok\n </button>\n </div>\n</div>\n","import { SubformProperty } from './../../models/subformPropery.model';\nimport { add } from 'ngx-bootstrap/chronos';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { SubmissionModalComponent } from '../../sub-form/submission-modal/submission-modal.component';\nimport { Attachment } from '../../models/attachment.model';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ScoreCalculationService } from '../../services/score.service';\nimport { Submission } from '../../models/submission.model';\nimport { Answer } from '../../models/answer.model';\nimport { WhenClauseService } from '../../services/whenClause.service';\n\n\n@Component({\n selector: 'lib-multiple-subform',\n templateUrl: './multiple-subform.component.html',\n styleUrls: ['./multiple-subform.component.scss'],\n})\nexport class MultipleSubformComponent {\n @Input() subForm: any = {};\n @Output() subFormChange = new EventEmitter<any>();\n @Input() acceptedLanguage: string = '';\n\n submissions: Submission[] = [];\n deletedSubmissions: string[] = [];\n displayedColumns: string[] = [];\n addButtonLabel: string = 'Add New Submission';\n maxPossibleGoodScore!:number;\n maxPossibleBadScore!:number\n\n constructor(\n public dialog: MatDialog, \n private sanitizer: DomSanitizer,\n private scoreCalcService: ScoreCalculationService,\n private whenClauseService:WhenClauseService\n ) {}\n\n ngOnInit() {\n const { goodMax, badMax } = this.scoreCalcService.getMaxPossibleScore(this.subForm);\n this.maxPossibleGoodScore = goodMax;\n this.maxPossibleBadScore = badMax;\n if (this.subForm?.submissions) {\n this.submissions = this.subForm.submissions;\n this.subForm.deletedSubmissions = [];\n }\n if(this.subForm?.property?.addButtonLabel) {\n this.addButtonLabel = this.subForm.property.addButtonLabel;\n }\n this.initializeDisplayedColumns();\n this.whenClauseService.addGridsFromSubform(this.subForm);\n }\n\n initializeDisplayedColumns() {\n this.displayedColumns = this.subForm.rows.flatMap((item: any) =>\n item.grid\n .filter((gridItem: any) => gridItem.element?.formElement?.elementType !== 'HIDDEN_FIELD')\n .map((gridItem: any) => gridItem.element.question)\n );\n \n this.displayedColumns.push('actions');\n }\n\n getAnswerByQuestionId(submission: Submission, question: any) {\n const questionId = question.element.id;\n const answerObj = submission.answers.find(\n (answer) => answer.questionId === questionId\n );\n\n if (!answerObj) {\n return null;\n }\n\n let content: string = '';\n \n if (answerObj.answer) {\n if (Array.isArray(answerObj.answer)) {\n const processedItems = answerObj.answer.map((item: any) => {\n if (typeof item === 'string' && item.includes('|')) {\n return item.split('|')[0];\n }\n return item;\n });\n content = processedItems.join(', ');\n } else if (typeof answerObj.answer === 'string') {\n content = answerObj.answer.includes('|')\n ? answerObj.answer.split('|')[0]\n : answerObj.answer;\n }\n }\n let currencySymbol = '';\n if(question.element.formElement.elementType === 'CURRENCY'){\n currencySymbol = this.fetchCurrencySymbol(question.element);\n answerObj['htmlContent'] = this.sanitizer.bypassSecurityTrustHtml(currencySymbol + ' ' +content);\n } else{\n answerObj['htmlContent'] = this.sanitizer.bypassSecurityTrustHtml(content);\n }\n return answerObj;\n }\n\n fetchCurrencySymbol(question:any){\n let currencySymbol = '';\n if (question.formElement?.appearance?.currency) {\n let userLocaleCureency = question.formElement?.appearance?.currency;\n if (question.formElement.appearance.currencyOption) {\n let currencyOption =\n question.formElement.appearance.currencyOption;\n if (currencyOption == 'auto') {\n if (\n question.formElement.appearance.limitCurrencySymbol &&\n question.formElement.appearance.limitCurrencySymbol.length > 0\n ) {\n currencySymbol =\n question.formElement.appearance.limitCurrencySymbol.includes(\n userLocaleCureency\n )\n ? userLocaleCureency\n : question.formElement?.appearance?.currencySymbol;\n } else {\n currencySymbol = userLocaleCureency;\n }\n } else if (currencyOption == 'specific') {\n currencySymbol =\n question.formElement?.appearance?.specificCurrencySymbol;\n }\n }\n }\n if (\n !currencySymbol &&\n question.formElement?.appearance?.currencySymbol\n ) {\n currencySymbol =\n question.formElement?.appearance?.currencySymbol;\n }\n return currencySymbol;\n }\n\n subFormSubmission(subForm: any) {\n const processFormElements = (\n rows: any[],\n isChild: boolean = false\n ): Answer[] => {\n const answers: Answer[] = [];\n\n rows.flatMap((item: any) =>\n item.grid.forEach((formElement: any) => {\n const answer: Answer = {\n questionId: formElement.element.id,\n answer: formElement.element?.answer || '',\n files:\n formElement.element.formElement.elementType == 'FILE_PICKER' &&\n formElement.element.answer\n ? formElement.element.answer\n : undefined,\n isChild: isChild,\n amountInWords: formElement.element.amountInWords\n };\n\n if (\n formElement.element.formElement.elementType == 'FILE_PICKER' &&\n formElement.element.answer\n ) {\n const fileNames = formElement.element.answer.map(\n (file: any) => file?._file.name\n );\n answer.answer = fileNames;\n }\n answers.push(answer);\n if(\n formElement.element.formElement &&\n (formElement.element.formElement.elementType === 'DROP_DOWN' ||\n formElement.element.formElement.elementType === 'RADIO_BUTTON' ||\n formElement.element.formElement.elementType === 'CHECKBOX') &&\n formElement.element.formElement.scoring &&\n formElement.element.formElement.scoring.enableScoring\n ){\n answers.forEach((ans) => {\n if(formElement.element.id === ans.questionId){\n const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(ans.answer, formElement.element);\n // Save total score and individual scores\n // ans.score = scoreResult?.totalScore ?? 1;\n ans.scores = scoreResult?.scores;\n }\n });\n }\n if (formElement.element.childLogics) {\n formElement.element.childLogics.forEach((logic: any) => {\n if (logic.showLogic) {\n answers.push(...processFormElements(logic.rows, true));\n logic.showLogic = false;\n }\n });\n }\n })\n );\n return answers;\n };\n\n const answers = processFormElements(subForm.rows);\n\n if (answers.length > 0) {\n const submission: Submission = {\n submissionId: '',\n answers: answers,\n };\n if (this.scoreCalcService.shouldCalculateScore(this.subForm, submission)) {\n // Mark that this submission had all scoring questions answered at least once\n submission.hasAllScoringAnsweredOnce = true;\n }\n\n if (submission.hasAllScoringAnsweredOnce) {\n // Recalculate score always after once satisfied\n submission.scores = this.scoreCalcService.calculateSubmissionScore(submission.answers);\n }\n this.submissions.push(submission);\n this.submissions = [...this.submissions];\n this.updateSubFormWithSubmissions();\n }\n // this.subForm.score = this.scoreCalcService.calculateFinalScore(this.submissions,this.maxPossibleScore);\n }\n\n editSubFormSubmission(index: number, submission: Submission) {\n const subForm = this.bindAnswers(this.subForm, submission);\n const dialogConfig = new MatDialogConfig();\n dialogConfig.position = { top: '5%' };\n dialogConfig.width = '100%';\n dialogConfig.data = {\n subForm: subForm,\n acceptedLanguage: this.acceptedLanguage,\n };\n dialogConfig.hasBackdrop = true;\n dialogConfig.disableClose = true;\n dialogConfig.maxHeight = '80vh';\n const dialogRef = this.dialog.open(SubmissionModalComponent, dialogConfig);\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n this.updateSubmission(result, index);\n }\n });\n }\n\n bindAnswers(subForm: any, submission: Submission): any {\n const bindElementAnswers = (rows: any[], answers: Answer[]) => {\n rows.forEach((row: any) => {\n row.grid.forEach((grid: any) => {\n const answer = answers.find((a) => a.questionId === grid.element.id);\n if (answer) {\n grid.element.answer =\n grid.element.formElement.elementType == 'FILE_PICKER'\n ? answer?.files\n : answer.answer;\n grid.element.amountInWords = answer?.amountInWords;\n grid.element.answerId = answer.answerId;\n grid.element.attachments = answer.attachments;\n }\n if (grid.element.childLogics) {\n grid.element.childLogics.forEach((logic: any) => {\n bindElementAnswers(logic.rows, answers);\n });\n }\n });\n });\n };\n\n const updatedSubForm = { ...subForm };\n bindElementAnswers(updatedSubForm.rows, submission.answers);\n return updatedSubForm;\n }\n\n deleteSubForm(index: number) {\n const submission = this.submissions[index];\n if (submission.submissionId) {\n this.deletedSubmissions.push(submission.submissionId);\n }\n this.submissions.splice(index, 1);\n this.submissions = [...this.submissions];\n this.subForm.scores = this.scoreCalcService.calculateFinalScore(this.submissions,this.maxPossibleGoodScore,this.maxPossibleBadScore);\n this.updateSubFormWithSubmissions();\n }\n\n addNewSubmission() {\n const subForm = this.cleanCircularReferences(this.subForm);\n subForm.rows.forEach((row: any) => {\n row.grid.forEach((grid: any) => {\n grid.element.answer = grid.element.formElement.elementType === 'FILE_PICKER' ? [] : '';\n grid.element.attachments = [];\n grid.element.answerId = null;\n });\n });\n\n const dialogConfig = new MatDialogConfig();\n dialogConfig.position = { top: '5%' };\n dialogConfig.width = '100%';\n dialogConfig.data = {\n subForm: subForm,\n acceptedLanguage: this.acceptedLanguage,\n };\n dialogConfig.hasBackdrop = true;\n dialogConfig.disableClose = true;\n dialogConfig.maxHeight = '80vh';\n dialogConfig.autoFocus = false;\n const dialogRef = this.dialog.open(SubmissionModalComponent, dialogConfig);\n\n dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n const hasData = result.rows.flatMap((item: any) =>\n item.grid.some(\n (formElement: any) =>\n formElement.element.answer &&\n formElement.element.answer.length > 0\n )\n );\n\n if (hasData) {\n this.subFormSubmission(result);\n }\n }\n });\n }\n\n cleanCircularReferences(obj: any, seen = new WeakSet()) {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (seen.has(obj)) {\n return;\n }\n\n seen.add(obj);\n\n const cleanedObj: any = Array.isArray(obj) ? [] : {};\n\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n cleanedObj[key] = this.cleanCircularReferences(obj[key], seen);\n }\n }\n\n return cleanedObj;\n }\n\n updateSubmission(result: any, index: number) {\n const processFormElements = (rows: any[], answers: Answer[]) => {\n rows.forEach((row: any) => {\n row.grid.forEach((grid: any) => {\n let answer: Answer = {\n questionId: grid.element.id,\n answerId: grid.element?.answerId || '',\n attachments: grid.element.attachments || [],\n answer: [],\n files: [],\n deleteFiles: [],\n };\n\n if (answer.attachments) {\n answer.answer = answer.attachments.map(\n (attachment: Attachment) => attachment.fileName\n );\n }\n if (grid.element.formElement.elementType === 'FILE_PICKER') {\n if (grid.element?.deleteFiles.length > 0) {\n answer.answer = []; // Reset answer.answer only once\n answer.deleteFiles = answer.deleteFiles || [];\n\n // Collect deleted file IDs\n grid.element.deleteFiles.forEach((deletedId: string) => {\n answer.deleteFiles?.push(deletedId);\n });\n\n if (answer.attachments) {\n // Filter out deleted attachments\n answer.attachments = answer.attachments.filter((attachment: Attachment) => {\n if (!grid.element.deleteFiles.includes(attachment.fileId)) {\n return true;\n }\n return false;\n });\n\n // Rebuild answer.answer with the remaining attachments\n answer.answer = answer.attachments.map((attachment) => attachment.fileName);\n }\n\n }\n if (grid.element.answer) {\n answer.files = grid.element.answer;\n let fileNamesArray = Array.isArray(answer.answer) ? [...answer.answer] : [];\n\n grid.element.answer.forEach((file: any) => {\n const fileName = file._file?.name;\n if (!fileNamesArray.includes(fileName)) {\n fileNamesArray.push(fileName);\n }\n });\n\n answer.answer = fileNamesArray; // Append to existing array instead of overwriting\n }\n } else {\n answer = {\n questionId: grid.element.id,\n answerId: grid.element?.answerId || '',\n attachments: grid.element.attachments,\n answer: grid.element.answer,\n maximumPossibleScore: grid.element.maxPossibleScore,\n amountInWords: grid.element.amountInWords\n };\n }\n grid.element.answer = '';\n answers.push(answer);\n if(\n grid.element.formElement &&\n (grid.element.formElement.elementType === 'DROP_DOWN' ||\n grid.element.formElement.elementType === 'RADIO_BUTTON' ||\n grid.element.formElement.elementType === 'CHECK_BOX') &&\n grid.element.formElement.scoring &&\n grid.element.formElement.scoring.enableScoring\n ){\n answers.forEach((ans) => {\n if(grid.element.id === ans.questionId){\n const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(ans.answer, grid.element);\n // Save total score and individual scores\n ans.scores = scoreResult?.scores;\n }\n });\n }\n\n if (grid.element.childLogics) {\n grid.element.childLogics.forEach((logic: any) => {\n if (logic.showLogic) {\n processFormElements(logic.rows, answers);\n }\n });\n }\n });\n });\n };\n\n this.submissions[index].answers = [];\n processFormElements(result.rows, this.submissions[index].answers);\n this.submissions[index].scores = this.scoreCalcService.calculateSubmissionScore(this.submissions[index].answers);\n this.submissions = [...this.submissions];\n const hasAnyScore = this.submissions.some(\n sub => sub.scores?.some(s => s.score !== null && s.score !== undefined)\n );\n \n if (hasAnyScore) {\n this.subForm.scores = this.scoreCalcService.calculateFinalScore(this.submissions,this.maxPossibleGoodScore,this.maxPossibleBadScore);\n } else {\n this.subForm.scores = null; // or 0, depending on how you want to represent \"no score yet\"\n }\n this.updateSubFormWithSubmissions();\n this.clearEmptyRows();\n }\n\n updateSubFormWithSubmissions() {\n this.subForm.submissions = this.submissions;\n this.subForm.maxPossibleScore = {\n 'good': this.maxPossibleGoodScore,\n 'bad': this.maxPossibleBadScore\n }\n this.subForm.deletedSubmissions = this.deletedSubmissions;\n this.subFormChange.emit(this.subForm);\n }\n\n clearEmptyRows() {\n const nonEmptySubmissions: Submission[] = [];\n const emptySubmissionIds: string[] = [];\n\n this.submissions.forEach((submission) => {\n if (submission.answers.some((answer) => answer.answer !== '')) {\n nonEmptySubmissions.push(submission);\n } else if (submission.submissionId) {\n emptySubmissionIds.push(submission.submissionId);\n }\n });\n\n this.submissions = nonEmptySubmissions;\n this.deletedSubmissions.push(...emptySubmissionIds);\n this.updateSubFormWithSubmissions();\n }\n}\n","<div class=\"example-container\" tabindex=\"0\">\n <div class=\"table-container\">\n <table mat-table [dataSource]=\"submissions\" class=\"mat-elevation-z8\">\n <ng-container *ngFor=\"let row of subForm.rows\">\n <ng-container\n *ngFor=\"let formElement of row.grid\"\n [matColumnDef]=\"formElement.element.question\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n class=\"border border-1 column-width\"\n >\n {{ formElement.element.question }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let submission\"\n class=\"border border-1\"\n [id]=\"'question-'+submission.submissionId\"\n [ngClass]=\"{\n hidden: getAnswerByQuestionId(submission, formElement)\n ?.isChild\n }\"\n >\n <div\n [innerHTML]=\"\n getAnswerByQuestionId(submission, formElement)\n ?.htmlContent\n \"\n ></div>\n </td>\n </ng-container>\n </ng-container>\n <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"border border-1\">\n Actions\n </th>\n <td\n mat-cell\n *matCellDef=\"let submission; let i = index\"\n class=\"text-center border border-1\"\n >\n <div>\n <button\n class=\"btn\"\n mat-icon-button\n [matMenuTriggerFor]=\"menu\"\n aria-label=\"Example icon-button with a menu\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n (click)=\"editSubFormSubmission(i, submission)\"\n >\n <svg\n width=\"29\"\n height=\"28\"\n viewBox=\"0 0 29 28\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"0.5\"\n y=\"0.5\"\n width=\"28\"\n height=\"26.4737\"\n rx=\"5.5\"\n fill=\"white\"\n stroke=\"#D8D8D8\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12.0009 19.0787H9.1582V16.2361C9.1582 15.9447 9.2739 15.6653 9.47999 15.4593L16.2224 8.71686C16.4284 8.5105 16.708 8.39453 16.9995 8.39453C17.2911 8.39453 17.5707 8.5105 17.7767 8.71686L19.5201 10.4603C19.7264 10.6663 19.8424 10.9458 19.8424 11.2374C19.8424 11.529 19.7264 11.8086 19.5201 12.0145L12.7777 18.757C12.5715 18.9628 12.2922 19.0785 12.0009 19.0787Z\"\n stroke=\"#084FFF\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15.1704 10.3984L17.8415 13.0695\"\n stroke=\"#084FFF\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n <button mat-menu-item (click)=\"deleteSubForm(i)\">\n <svg\n width=\"29\"\n height=\"28\"\n viewBox=\"0 0 29 28\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <rect\n x=\"0.5\"\n y=\"0.5\"\n width=\"27.6402\"\n height=\"26.1328\"\n rx=\"5.5\"\n fill=\"white\"\n stroke=\"#D8D8D8\"\n />\n <path\n d=\"M8.60449 9.20637H20.0354\"\n stroke=\"#084FFF\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M19.2189 9.20703V17.7863C19.2189 18.6482 18.4881 19.3462 17.5859 19.3462H11.0539C10.1517 19.3462 9.4209 18.6482 9.4209 17.7863V9.20703\"\n stroke=\"#084FFF\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M16.7696 6.67122H11.8706\"\n stroke=\"#084FFF\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M12.6871 12.3242V16.2239\"\n stroke=\"#084FFF\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15.9532 12.3242V16.2239\"\n stroke=\"#084FFF\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </mat-menu>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n </div>\n\n <div class=\"footer\">\n <div class=\"addNewBtn\" (click)=\"addNewSubmission()\">\n <svg\n width=\"15\"\n height=\"14\"\n viewBox=\"0 0 15 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12.5556 13.2778H2.44444C1.64639 13.2778 1 12.6673 1 11.9136V2.3642C1 1.61048 1.64639 1 2.44444 1H12.5556C13.3536 1 14 1.61048 14 2.3642V11.9136C14 12.6673 13.3536 13.2778 12.5556 13.2778Z\"\n stroke=\"#D8D8D8\"\n stroke-width=\"0.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M5.3335 7.50347H9.66683\"\n stroke=\"#084FFF\"\n stroke-width=\"0.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M7.50005 5.33594V9.66927\"\n stroke=\"#084FFF\"\n stroke-width=\"0.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n <a class=\"ms-2 text-decoration-none\">{{addButtonLabel}}</a>\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Attachment } from '../../models/attachment.model';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { ScoreCalculationService } from '../../services/score.service';\nimport { Answer } from '../../models/answer.model';\nimport { Submission } from '../../models/submission.model';\nimport { DataService } from '../../services/data.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\n\n\n@Component({\n selector: 'lib-inline-multiple-subform',\n templateUrl: './inline-multiple-subform.component.html',\n styleUrls: ['./inline-multiple-subform.component.scss'],\n})\nexport class InlineMultipleSubformComponent {\n @Input() subForm: any = {};\n @Output() subFormChange = new EventEmitter<any>();\n @Input() acceptedLanguage: string = '';\n maxPossibleScore!:number;\n maxPossibleGoodScore!:number;\n maxPossibleBadScore!:number\n\n submissions: Submission[] = [];\n deletedSubmissions: string[] = [];\n displayedColumns: string[] = [];\n addButtonLabel: string = 'Add New';\n user: string = '';\n elementsWithWhenClause: any;\n editableQuestions: string[] = [];\n constructor(\n private scoreCalcService: ScoreCalculationService,\n private dataService:DataService,\n public whenClauseService: WhenClauseService\n ){\n this.dataService.header$.subscribe((data) => {\n this.user = data.authUser;\n });\n }\n\n ngOnInit() {\n // this.maxPossibleScore = this.scoreCalcService.getMaxPossibleScore(this.subForm);\n const { goodMax, badMax } = this.scoreCalcService.getMaxPossibleScore(this.subForm);\n this.maxPossibleGoodScore = goodMax;\n this.maxPossibleBadScore = badMax;\n if (this.subForm?.submissions) {\n this.submissions = this.subForm.submissions;\n this.subForm.deletedSubmissions = [];\n }\n if (this.subForm?.property?.addButtonLabel) {\n this.addButtonLabel = this.subForm.property.addButtonLabel;\n }\n this.initializeDisplayedColumns();\n this.elementsWithWhenClause = this.whenClauseService.getWhenClauseElements(\n this.subForm\n );\n this.updateWhenClause();\n if(this.subForm.submissionCopyConfig?.allowCopyFromOtherSubmissions){\n this.editableQuestions = this.subForm.submissionCopyConfig.editableQuestions || [];\n }\n }\n\n\n updateWhenClause(){\n if(this.submissions.length>0){\n this.submissions.forEach((submission)=>{\n submission.answers.forEach((ans)=>{\n this.whenClauseService.evaluateSubformWhenClauses(ans.answer, submission, ans.questionId ||'',this.elementsWithWhenClause); });\n })\n }\n }\n\n initializeDisplayedColumns() {\n this.displayedColumns = this.subForm.rows.flatMap((item: any) =>\n item.grid\n .filter((gridItem: any) => gridItem.element?.formElement?.elementType !== 'HIDDEN_FIELD')\n .map((gridItem: any) => gridItem.element.question)\n );\n this.displayedColumns.push('actions');\n }\n\n populateHiddenFieldAnswers() {\n if (!this.submissions?.length) return;\n \n this.submissions.forEach((submission: any) => {\n submission.answers.forEach((ans: any) => {\n // Find the question definition by questionId\n const question = this.findQuestionById(this.subForm.rows, ans.questionId);\n \n if (question?.formElement?.elementType === 'HIDDEN_FIELD') {\n const hiddenField = question.formElement.hiddenField;\n const resolvedAnswer = this.resolveHiddenFieldValue(hiddenField);\n \n ans.answer = resolvedAnswer;\n ans.maximumPossibleScore = 0; // same as your HiddenFieldComponent emit\n }\n });\n });\n }\n\n findQuestionById(rows: any[], questionId: string): any {\n for (const row of rows) {\n for (const gridItem of row.grid) {\n if (gridItem.element?.id === questionId) {\n return gridItem.element;\n }\n }\n }\n return null;\n }\n\n resolveHiddenFieldValue(hiddenField: {\n value: string | null,\n valueSource: string | null,\n key: string | null\n }): any {\n if (!hiddenField?.valueSource) return null;\n \n switch (hiddenField.valueSource) {\n case 'CUSTOM_INPUT':\n // Directly return the provided value\n return hiddenField.value;\n \n case 'LOCAL_STORAGE':\n if (hiddenField.key) {\n return localStorage.getItem(hiddenField.key);\n }\n return null;\n \n case 'SESSION_STORAGE':\n if (hiddenField.key) {\n return sessionStorage.getItem(hiddenField.key);\n }\n return null;\n \n case 'PREDEFINED_VARIABLE':\n return this.resolvePredefinedVariable(hiddenField.value);\n \n default:\n return null;\n }\n }\n\n private resolvePredefinedVariable(variable: string | null): any {\n if (!variable) return null;\n \n const now = new Date();\n \n switch (variable) {\n case 'CURRENT_DATE':\n return now.toISOString().split('T')[0]; // e.g. \"2025-09-29\"\n case 'CURRENT_TIME':\n return now.toTimeString().split(' ')[0]; // e.g. \"15:42:18\"\n case 'CURRENT_DATE_TIME':\n return now.toLocaleString(); // full ISO datetime\n case 'EPOCH_TIME':\n return now.getTime(); // milliseconds since 1970\n case 'YEAR':\n return now.getFullYear();\n case 'MONTH':\n return now.getMonth() + 1; // 1-12\n case 'DAY':\n return now.getDate(); // 1-31\n case 'SUBMITTED_BY':\n return this.user ? this.user : 'Unknown';\n default:\n return null;\n }\n }\n\n addNewSubmission() {\n const emptyAnswers: Answer[] = [];\n this.subForm.rows.forEach((row: any) => {\n row.grid.forEach((gridItem: any) => {\n if (\n gridItem.entityType === 'QUESTION' &&\n gridItem.element &&\n gridItem.element.id\n ) {\n emptyAnswers.push({\n questionId: gridItem.element.id,\n answer: '',\n maximumPossibleScore:0,\n show: gridItem.show,\n required: gridItem.element.required\n });\n }\n });\n });\n const submission: Submission = {\n submissionId: '',\n answers: emptyAnswers,\n };\n this.submissions.push(submission);\n this.submissions = [...this.submissions];\n this.updateSubFormWithSubmissions();\n this.populateHiddenFieldAnswers();\n }\n\n isSubmissionEditable(\n submission: any,\n questionId: string\n ): boolean {\n if (!this.editableQuestions?.length) {\n return false;\n }\n \n // Must be a copied submission\n if (!submission?.sourceSubmissionId && submission?.isCopied !== true) {\n return false;\n }\n \n // Question must be editable\n return this.editableQuestions.includes(questionId);\n }\n\n updateSubFormWithSubmissions() {\n this.clearHiddenAnswers();\n this.subForm.submissions = this.submissions;\n this.subForm.maxPossibleScore = {\n 'good': this.maxPossibleGoodScore,\n 'bad': this.maxPossibleBadScore\n }\n this.subForm.deletedSubmissions = this.deletedSubmissions;\n this.subFormChange.emit(this.subForm);\n }\n\n getSubmissionQuestion(submission: Submission, formElement: any): any {\n const ansObj = submission.answers.find(\n (a) => a.questionId === formElement.element.id\n );\n const questionClone = { ...formElement.element };\n questionClone.answer = ansObj ? ansObj.answer : '';\n questionClone.attachments = ansObj?.attachments ? ansObj.attachments : [];\n questionClone.copiedAttachments = ansObj?.copiedAttachments ? ansObj.copiedAttachments : [];\n questionClone.amountInWords = ansObj?.amountInWords ? ansObj.amountInWords : '';\n questionClone.required = ansObj?.required !== undefined ? ansObj.required : questionClone.required;\n return questionClone;\n }\n\n updateInlineAnswer(submission: Submission, question: any, newAnswerObject: any) {\n const newAnswer = newAnswerObject.answer;\n const amountInWords = newAnswerObject?.amountInWords;\n const currency = newAnswerObject?.currency;\n this.whenClauseService.evaluateSubformWhenClauses(newAnswer, submission, question.id,this.elementsWithWhenClause);\n const submissionIndex = this.submissions.indexOf(submission);\n if (submissionIndex > -1) {\n const existingAnswer = this.submissions[submissionIndex].answers.find(\n (a) => a.questionId === question.id\n );\n\n if (\n question.formElement &&\n question.formElement.elementType === 'FILE_PICKER'\n ) {\n // Map file objects to file names.\n let fileNames: string[] = [];\n if (newAnswer && Array.isArray(newAnswer)) {\n fileNames = newAnswer.map((file: any) => file?._file?.name);\n }\n\n // Get deleted file IDs from the question (if any).\n let deletedFiles: string[] = [];\n if (question.deleteFiles && question.deleteFiles.length > 0) {\n deletedFiles = question.deleteFiles;\n }\n\n if (existingAnswer) {\n existingAnswer.files = newAnswer;\n existingAnswer.answer = fileNames;\n // Initialize deleteFiles if it's not defined.\n if (!existingAnswer.deleteFiles) {\n existingAnswer.deleteFiles = [];\n }\n // Append any deleted file IDs not already present.\n deletedFiles.forEach((deletedId: string) => {\n if (!existingAnswer.deleteFiles!.includes(deletedId)) {\n existingAnswer.deleteFiles!.push(deletedId);\n }\n });\n } else {\n const newObj: Answer = {\n questionId: question.id,\n files: newAnswer,\n answer: fileNames,\n deleteFiles: deletedFiles.length > 0 ? [...deletedFiles] : [],\n };\n this.submissions[submissionIndex].answers.push(newObj);\n }\n } else {\n // For non-file picker elements, update normally.\n if (existingAnswer) {\n existingAnswer.answer = newAnswer;\n existingAnswer.maximumPossibleScore = newAnswerObject.maxPossibleScore;\n existingAnswer.amountInWords = amountInWords;\n existingAnswer.currencySymbol = currency; \n } else {\n this.submissions[submissionIndex].answers.push({\n questionId: question.id,\n answer: newAnswer,\n maximumPossibleScore: newAnswerObject.maxPossibleScore,\n amountInWords: amountInWords,\n currencySymbol: currency\n });\n }\n if(\n question.formElement &&\n (question.formElement.elementType === 'DROP_DOWN' ||\n question.formElement.elementType === 'RADIO_BUTTON' ||\n question.formElement.elementType === 'CHECK_BOX') &&\n question.formElement.scoring &&\n question.formElement.scoring.enableScoring\n ){\n submission.answers.forEach((ans) => {\n if(question.id === ans.questionId){\n const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(ans.answer, question);\n // Save total score and individual scores\n ans.scores = scoreResult?.scores;\n }\n });\n // Check scoring condition\n if (this.scoreCalcService.shouldCalculateScore(this.subForm, submission)) {\n // Mark that this submission had all scoring questions answered at least once\n submission.hasAllScoringAnsweredOnce = true;\n }\n\n if (submission.hasAllScoringAnsweredOnce) {\n // Recalculate score always after once satisfied\n submission.scores = this.scoreCalcService.calculateSubmissionScore(submission.answers);\n }\n }\n }\n const hasAnyScore = this.submissions.some(\n sub => sub.scores?.some(s => s.score !== null && s.score !== undefined)\n );\n \n if (hasAnyScore) {\n this.subForm.scores = this.scoreCalcService.calculateFinalScore(this.submissions,this.maxPossibleGoodScore,this.maxPossibleBadScore);\n } else {\n this.subForm.scores = null; // or 0, depending on how you want to represent \"no score yet\"\n }\n this.updateSubFormWithSubmissions();\n }\n }\n\n updateDeletedFiles(\n submission: Submission,\n question: any,\n deletedFiles: string[]\n ) {\n // Find the matching answer object based on the questionId\n const answerObj = submission.answers.find(\n (ans) => ans.questionId === question.id\n );\n\n if (answerObj) {\n // Ensure deleteFiles is always an array\n if (!answerObj.deleteFiles) {\n answerObj.deleteFiles = [];\n }\n\n // Add deleted file IDs to deleteFiles array while avoiding duplicates\n deletedFiles.forEach((fileId) => {\n if (!answerObj.deleteFiles!.includes(fileId)) {\n answerObj.deleteFiles!.push(fileId);\n }\n });\n\n answerObj.copiedAttachments = answerObj.copiedAttachments?.filter(item=>{\n return !deletedFiles.includes(item);\n });\n }\n }\n\n deleteSubmission(index: number) {\n const submission = this.submissions[index];\n if (submission.submissionId) {\n this.deletedSubmissions.push(submission.submissionId);\n }\n this.submissions.splice(index, 1);\n this.submissions = [...this.submissions];\n const totalSubmissions = this.submissions.length;\n const maxScore = totalSubmissions*this.maxPossibleScore;\n this.subForm.scores = this.scoreCalcService.calculateFinalScore(this.submissions,this.maxPossibleGoodScore,this.maxPossibleBadScore);\n this.updateSubFormWithSubmissions();\n }\n\n clearEmptySubmissions() {\n const nonEmptySubmissions: Submission[] = [];\n const emptySubmissionIds: string[] = [];\n\n this.submissions.forEach((submission) => {\n const hasValue = submission.answers.some(\n (answer) =>\n answer.answer !== '' &&\n answer.answer !== null &&\n answer.answer !== undefined\n );\n if (hasValue) {\n nonEmptySubmissions.push(submission);\n } else if (submission.submissionId) {\n emptySubmissionIds.push(submission.submissionId);\n }\n });\n\n this.submissions = nonEmptySubmissions;\n this.deletedSubmissions.push(...emptySubmissionIds);\n this.updateSubFormWithSubmissions();\n }\n \n clearHiddenAnswers() {\n for (const submission of this.submissions) {\n if (!submission.answers || !Array.isArray(submission.answers)) continue;\n \n for (const ans of submission.answers) {\n // If show flag is explicitly false → clear the answer value\n if (ans.show === false) {\n ans.answer = \"\"; // clear the answer\n ans.files = []; // clear files (optional)\n ans.scores = []; // clear score (optional)\n }\n }\n }\n }\n}\n","<div class=\"example-container\" tabindex=\"0\">\n <div class=\"table-container\">\n <table mat-table [dataSource]=\"submissions\" class=\"mat-elevation-z8\">\n <ng-container *ngFor=\"let row of subForm.rows\">\n <ng-container\n *ngFor=\"let formElement of row.grid\"\n [matColumnDef]=\"formElement.element.question\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n class=\"border border-1 column-width\"\n >\n {{ formElement.element.question }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let submission;let i=index\"\n class=\"border-cell column-width\"\n [id]=\"'question-'+submission.submissionId\"\n >\n <div *ngIf=\"formElement.entityType === 'QUESTION' && whenClauseService.checkElementVisibility(formElement.element.id,submission)\">\n <div [ngSwitch]=\"formElement.element.formElement.elementType\">\n <lib-check-box-fields\n *ngSwitchCase=\"'CHECK_BOX'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [rowId]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-check-box-fields>\n <lib-date-time-fields\n *ngSwitchCase=\"'DATE_TIME'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-date-time-fields>\n <lib-drop-down-fields\n *ngSwitchCase=\"'DROP_DOWN'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-drop-down-fields>\n <lib-file-picker-fields\n *ngSwitchCase=\"'FILE_PICKER'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n (inlineDeleteFiles)=\"\n updateDeletedFiles(submission, formElement.element, $event)\n \"\n ></lib-file-picker-fields>\n <lib-location-fields\n *ngSwitchCase=\"'LOCATION'\"\n [inLine]=\"true\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-location-fields>\n <lib-mail-fields\n *ngSwitchCase=\"'EMAIL'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-mail-fields>\n <lib-mobile-fields\n *ngSwitchCase=\"'MOBILE'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-mobile-fields>\n <lib-number-fields\n *ngSwitchCase=\"'NUMBER'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n [rowId]=\"i\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-number-fields>\n <lib-password-fields\n *ngSwitchCase=\"'PASSWORD'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-password-fields>\n <lib-radio-button-fields\n *ngSwitchCase=\"'RADIO_BUTTON'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n [rowId]=\"i\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-radio-button-fields>\n <lib-rich-text-editor-fields\n *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-rich-text-editor-fields>\n <lib-selection-matrix-fields\n *ngSwitchCase=\"'SELECTION_MATRIX'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [acceptedLanguage]=\"acceptedLanguage\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n [rowId]=\"i\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-selection-matrix-fields>\n <lib-signature-fields\n *ngSwitchCase=\"'SIGNATURE'\"\n [inLine]=\"true\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-signature-fields>\n <lib-slider-fields\n *ngSwitchCase=\"'SLIDER'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-slider-fields>\n <lib-terms-and-condition-fields\n *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\n [inLine]=\"true\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-terms-and-condition-fields>\n <lib-text-area-fields\n *ngSwitchCase=\"'TEXT_AREA'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-text-area-fields>\n <lib-text-fields\n *ngSwitchCase=\"'TEXT_BOX'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-text-fields>\n <lib-toggle-switch-fields\n *ngSwitchCase=\"'TOGGLE_SWITCH'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n [acceptedLanguage]=\"acceptedLanguage\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-toggle-switch-fields>\n <lib-url-fields\n *ngSwitchCase=\"'URL'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-url-fields>\n <lib-currency-fields\n *ngSwitchCase=\"'CURRENCY'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-currency-fields>\n <lib-hidden-field\n *ngSwitchCase=\"'HIDDEN_FIELD'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-hidden-field>\n <lib-aggregate-function\n *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\n [inLine]=\"true\"\n [submissionIndex]=\"i\"\n [question]=\"getSubmissionQuestion(submission, formElement)\"\n [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n [rowId]=\"i\"\n (answerChange)=\"\n updateInlineAnswer(submission, formElement.element, $event)\n \"\n ></lib-aggregate-function>\n </div>\n </div>\n </td>\n </ng-container>\n </ng-container>\n\n <ng-container matColumnDef=\"actions\" stickyEnd>\n <th\n mat-header-cell\n *matHeaderCellDef\n class=\"border border-1 action-column\"\n >\n Actions\n </th>\n <td\n mat-cell\n *matCellDef=\"let submission; let i = index\"\n class=\"border-cell text-center\"\n >\n <button class=\"delete-button\" (click)=\"deleteSubmission(i)\">\n <i class=\"bi bi-trash\"></i>\n </button>\n </td>\n </ng-container>\n\n <tr\n mat-header-row\n *matHeaderRowDef=\"displayedColumns\"\n class=\"border-row\"\n ></tr>\n <tr\n mat-row\n *matRowDef=\"let submission; columns: displayedColumns\"\n class=\"border-row\"\n ></tr>\n </table>\n </div>\n\n <div class=\"footer\">\n <div class=\"addNewBtn\" (click)=\"addNewSubmission()\">\n <svg\n width=\"15\"\n height=\"14\"\n viewBox=\"0 0 15 14\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M12.5556 13.2778H2.44444C1.64639 13.2778 1 12.6673 1 11.9136V2.3642C1 1.61048 1.64639 1 2.44444 1H12.5556C13.3536 1 14 1.61048 14 2.3642V11.9136C14 12.6673 13.3536 13.2778 12.5556 13.2778Z\"\n stroke=\"#D8D8D8\"\n stroke-width=\"0.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M5.3335 7.50347H9.66683\"\n stroke=\"#084FFF\"\n stroke-width=\"0.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M7.50005 5.33594V9.66927\"\n stroke=\"#084FFF\"\n stroke-width=\"0.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n <a class=\"ms-2 text-decoration-none\">{{addButtonLabel}}</a>\n </div>\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n Injector,\n Input,\n Output,\n} from '@angular/core';\nimport { SubForm } from '../../models/subForm.model';\nimport { Submission } from '../../models/submission.model';\nimport { Answer } from '../../models/answer.model';\nimport { ScoreCalculationService } from '../../services/score.service';\nimport { v4 as uuidv4 } from 'uuid';\nimport { WhenClauseService } from '../../services/whenClause.service';\n\n@Component({\n selector: 'lib-card-subform',\n templateUrl: './card-subform.component.html',\n styleUrls: ['./card-subform.component.scss'],\n})\nexport class CardSubformComponent {\n @Input() subForm: any = {};\n @Input() acceptedLanguage: string = '';\n @Input() edit: boolean = false;\n grid: any;\n componentToLoad: any;\n addButtonLabel: string = 'Add New Submission';\n injector!: Injector;\n submissions: Submission[] = [];\n deletedSubmissions: string[] = [];\n maxPossibleGoodScore!: number;\n maxPossibleBadScore!: number;\n @Output() subFormChange = new EventEmitter<any>();\n Math = Math;\n elementsWithWhenClause: any;\n editableQuestions: string[] = [];\n constructor(\n private scoreCalcService: ScoreCalculationService,\n public whenClauseService: WhenClauseService\n ) {}\n\n ngOnInit() {\n const { goodMax, badMax } = this.scoreCalcService.getMaxPossibleScore(\n this.subForm\n );\n this.maxPossibleGoodScore = goodMax;\n this.maxPossibleBadScore = badMax;\n\n this.loadComponent();\n if (this.subForm?.submissions) {\n this.submissions = this.subForm.submissions;\n this.subForm.deletedSubmissions = [];\n } else {\n this.submissions = this.generateSubmissionsFromDefaultAnswers(\n this.subForm\n );\n }\n if (this.submissions?.length) {\n this.updateSubFormWithSubmissions();\n }\n if (this.subForm?.property?.addButtonLabel) {\n this.addButtonLabel = this.subForm.property.addButtonLabel;\n }\n this.elementsWithWhenClause = this.whenClauseService.getWhenClauseElements(\n this.subForm\n );\n this.updateWhenClause();\n if(this.subForm.submissionCopyConfig?.allowCopyFromOtherSubmissions){\n this.editableQuestions = this.subForm.submissionCopyConfig.editableQuestions || [];\n }\n }\n\n ngOnChanges() {\n if (this.subForm?.submissions) {\n this.submissions = this.subForm.submissions;\n this.subForm.deletedSubmissions = [];\n this.updateSubFormWithSubmissions();\n }\n }\n\n updateWhenClause(){\n if(this.submissions.length>0){\n this.submissions.forEach((submission)=>{\n submission.answers.forEach((ans)=>{\n this.whenClauseService.evaluateSubformWhenClauses(ans.answer, submission, ans.questionId ||'',this.elementsWithWhenClause); });\n })\n }\n }\n\n private async loadComponent(): Promise<void> {\n this.componentToLoad = await this.loadFormElementsComponent();\n this.injector = this.createInjector();\n }\n\n private async loadFormElementsComponent() {\n const { FormElementsComponent } = await import(\n '../form-elements/form-elements.component'\n );\n return FormElementsComponent;\n }\n\n createInjector(): Injector {\n return Injector.create({\n providers: [\n { provide: 'grid', useValue: this.grid?.element.childLogics },\n { provide: 'state', useValue: 'child' },\n ],\n });\n }\n\n generateSubmissionsFromDefaultAnswers(subForm: SubForm): Submission[] {\n if (\n !subForm.defaultAnswers ||\n !Array.isArray(subForm.defaultAnswers.answers)\n ) {\n return [];\n }\n\n return subForm.defaultAnswers.answers.map((answerGroup) => {\n const submission: Submission = {\n submissionId: '', // Generate a unique ID for each submission\n configuration: {\n isDefault: true,\n allowDelete: answerGroup.isDeleteEnable,\n },\n answers: answerGroup.defaultQuestionsAnswers.map((qa) => {\n const answer: Answer = {\n questionId: qa.questionId,\n answer: qa.defaultAnswer,\n attachments: [], // No attachments from defaultAnswers\n };\n return answer;\n }),\n };\n\n return submission;\n });\n }\n\n trackBySubmissionId(index: number, submission: Submission): string | number {\n return submission?.submissionId || index;\n }\n\n getSubmissionQuestion(submission: Submission, formElement: any): any {\n const ansObj = submission.answers.find(\n (a) => a.questionId === formElement.element.id\n );\n const questionClone = { ...formElement.element };\n questionClone.answer = ansObj ? ansObj.answer : '';\n questionClone.defaultValue = '';\n questionClone.disableEdit = submission.configuration?.isDefault\n ? questionClone.disableEdit\n : false;\n questionClone.attachments = ansObj?.attachments ? ansObj.attachments : [];\n questionClone.copiedAttachments = ansObj?.copiedAttachments ? ansObj.copiedAttachments : [];\n questionClone.amountInWords = ansObj?.amountInWords ? ansObj.amountInWords : '';\n questionClone.required = ansObj?.required !== undefined ? ansObj.required : questionClone.required;\n questionClone.answerCurrency = ansObj?.answerCurrency ? ansObj.answerCurrency : '';\n return questionClone;\n }\n\n isSubmissionEditable(\n submission: any,\n questionId: string\n ): boolean {\n if (!this.editableQuestions?.length) {\n return false;\n }\n\n // Must be a copied submission\n if (!submission?.sourceSubmissionId && submission?.isCopied !== true) {\n return false;\n }\n\n // Question must be editable\n return this.editableQuestions.includes(questionId);\n }\n\n addNewSubmission() {\n const emptyAnswers: Answer[] = [];\n this.subForm.rows.forEach((row: any) => {\n row.grid.forEach((gridItem: any) => {\n if (\n gridItem.entityType === 'QUESTION' &&\n gridItem.element &&\n gridItem.element.id\n ) {\n emptyAnswers.push({\n questionId: gridItem.element.id,\n answer: '',\n maximumPossibleScore: 0,\n show: gridItem.show,\n required: gridItem.element.required\n });\n }\n });\n });\n const submission: Submission = {\n submissionId: uuidv4(),\n answers: emptyAnswers,\n configuration: {\n isDefault: false,\n allowDelete: true,\n },\n };\n\n emptyAnswers.forEach((ans) => {\n this.whenClauseService.evaluateSubformWhenClauses(ans.answer, submission, ans.questionId ||'',this.elementsWithWhenClause);\n })\n\n this.submissions.push(submission);\n this.submissions = [...this.submissions];\n this.updateSubFormWithSubmissions();\n }\n\n updateSubFormWithSubmissions() {\n this.clearHiddenAnswers();\n this.subForm.submissions = this.submissions;\n this.subForm.maxPossibleScore = {\n good: this.maxPossibleGoodScore,\n bad: this.maxPossibleBadScore,\n };\n this.subForm.deletedSubmissions = this.deletedSubmissions;\n this.subFormChange.emit(this.subForm);\n }\n\n updateAnswer(submission: Submission, question: any, newAnswerObject: any) {\n const newAnswer = newAnswerObject.answer;\n const amountInWords = newAnswerObject?.amountInWords;\n const currency = newAnswerObject?.currency;\n if(question.formElement.elementType === 'FILE_PICKER'){\n let fileLength = newAnswer?.length || 0;\n this.whenClauseService.evaluateSubformWhenClauses(fileLength, submission, question.id,this.elementsWithWhenClause);\n } else{\n this.whenClauseService.evaluateSubformWhenClauses(newAnswer, submission, question.id,this.elementsWithWhenClause);\n }\n const submissionIndex = this.submissions.indexOf(submission);\n if (submissionIndex > -1) {\n const existingAnswer = this.submissions[submissionIndex].answers.find(\n (a) => a.questionId === question.id\n );\n\n if (\n question.formElement &&\n question.formElement.elementType === 'FILE_PICKER'\n ) {\n // Map file objects to file names.\n let fileNames: string[] = [];\n if (newAnswer && Array.isArray(newAnswer)) {\n fileNames = newAnswer.map((file: any) => file?._file?.name);\n }\n\n // Get deleted file IDs from the question (if any).\n let deletedFiles: string[] = [];\n if (question.deleteFiles && question.deleteFiles.length > 0) {\n deletedFiles = question.deleteFiles;\n }\n\n if (existingAnswer) {\n existingAnswer.files = newAnswer;\n existingAnswer.answer = fileNames;\n // Initialize deleteFiles if it's not defined.\n if (!existingAnswer.deleteFiles) {\n existingAnswer.deleteFiles = [];\n }\n // Append any deleted file IDs not already present.\n deletedFiles.forEach((deletedId: string) => {\n if (!existingAnswer.deleteFiles!.includes(deletedId)) {\n existingAnswer.deleteFiles!.push(deletedId);\n }\n });\n } else {\n const newObj: Answer = {\n questionId: question.id,\n files: newAnswer,\n answer: fileNames,\n deleteFiles: deletedFiles.length > 0 ? [...deletedFiles] : [],\n };\n this.submissions[submissionIndex].answers.push(newObj);\n }\n } else {\n if (existingAnswer) {\n existingAnswer.answer = newAnswer;\n existingAnswer.maximumPossibleScore =\n newAnswerObject.maxPossibleScore;\n existingAnswer.amountInWords = amountInWords\n existingAnswer.currencySymbol = currency\n } else {\n this.submissions[submissionIndex].answers.push({\n questionId: question.id,\n answer: newAnswer,\n maximumPossibleScore: newAnswerObject.maxPossibleScore,\n amountInWords: amountInWords,\n currencySymbol: currency\n });\n }\n if (\n question.formElement &&\n (question.formElement.elementType === 'DROP_DOWN' ||\n question.formElement.elementType === 'RADIO_BUTTON' ||\n question.formElement.elementType === 'CHECK_BOX') &&\n question.formElement.scoring &&\n question.formElement.scoring.enableScoring\n ) {\n submission.answers.forEach((ans) => {\n if (question.id === ans.questionId) {\n const scoreResult =\n this.scoreCalcService.calculateScoreFromAnswer(\n ans.answer,\n question\n );\n // Save total score and individual scores\n ans.scores = scoreResult?.scores;\n }\n });\n // Check scoring condition\n if (\n this.scoreCalcService.shouldCalculateScore(this.subForm, submission)\n ) {\n // Mark that this submission had all scoring questions answered at least once\n submission.hasAllScoringAnsweredOnce = true;\n }\n\n if (submission.hasAllScoringAnsweredOnce) {\n // Recalculate score always after once satisfied\n submission.scores = this.scoreCalcService.calculateSubmissionScore(\n submission.answers\n );\n }\n }\n }\n const hasAnyScore = this.submissions.some((sub) =>\n sub.scores?.some((s) => s.score !== null && s.score !== undefined)\n );\n\n if (hasAnyScore) {\n this.subForm.scores = this.scoreCalcService.calculateFinalScore(\n this.submissions,\n this.maxPossibleGoodScore,\n this.maxPossibleBadScore\n );\n } else {\n this.subForm.scores = null; // or 0, depending on how you want to represent \"no score yet\"\n }\n this.updateSubFormWithSubmissions();\n }\n }\n\n updateDeletedFiles(\n submission: Submission,\n question: any,\n deletedFiles: string[]\n ) {\n // Find the matching answer object based on the questionId\n const answerObj = submission.answers.find(\n (ans) => ans.questionId === question.id\n );\n\n if (answerObj) {\n // Ensure deleteFiles is always an array\n if (!answerObj.deleteFiles) {\n answerObj.deleteFiles = [];\n }\n\n // Add deleted file IDs to deleteFiles array while avoiding duplicates\n deletedFiles.forEach((fileId) => {\n if (!answerObj.deleteFiles!.includes(fileId)) {\n answerObj.deleteFiles!.push(fileId);\n }\n });\n\n answerObj.copiedAttachments = answerObj.copiedAttachments?.filter(item=>{\n return !deletedFiles.includes(item);\n });\n }\n }\n\n deleteSubmission(index: number) {\n const submission = this.submissions[index];\n if (submission.submissionId) {\n this.deletedSubmissions.push(submission.submissionId);\n }\n this.submissions.splice(index, 1);\n this.submissions = [...this.submissions];\n this.subForm.scores = this.scoreCalcService.calculateFinalScore(\n this.submissions,\n this.maxPossibleGoodScore,\n this.maxPossibleBadScore\n );\n this.updateSubFormWithSubmissions();\n }\n\n\n clearHiddenAnswers() {\n for (const submission of this.submissions) {\n if (!submission.answers || !Array.isArray(submission.answers)) continue;\n\n for (const ans of submission.answers) {\n // If show flag is explicitly false → clear the answer value\n if (ans.show === false) {\n ans.answer = \"\"; // clear the answer\n ans.files = []; // clear files (optional)\n ans.scores = []; // clear score (optional)\n }\n }\n }\n }\n}\n","<ng-container *ngFor=\"let submission of submissions;let i=index ;trackBy: trackBySubmissionId\">\n <div class=\"card-subform mb-4\" [id]=\"'question-'+submission.submissionId\">\n <div class=\"delete d-flex justify-content-end me-4 mb-2 mt-2 gap-3\"\n >\n <ng-container *ngIf=\"submission?.scores?.[0] as firstScore\">\n <div\n class=\"submissionScore\"\n [ngClass]=\"{\n 'good-score': firstScore.scoreType === 'GOOD_SCORE',\n 'bad-score': firstScore.scoreType === 'BAD_SCORE'\n }\"\n >\n <span>{{ Math.abs(firstScore.score) }}</span>\n </div>\n </ng-container>\n <img class=\"delete-icon\" src=\"assets/icons/delete-icon.svg\" alt=\"delete\"\n *ngIf=\"submission.configuration?.allowDelete\"\n (click)=\"deleteSubmission(i)\">\n </div>\n <div *ngFor=\"let row of subForm.rows\">\n <div class=\"d-flex\">\n <div\n *ngFor=\"let grid of row.grid\"\n [ngStyle]=\"{ 'width.%': grid.element.count * (100 / 12) }\"\n >\n <div *ngIf=\"grid.entityType === 'QUESTION' && whenClauseService.checkElementVisibility(grid.element.id,submission)\">\n <div [ngSwitch]=\"grid.element.formElement.elementType\">\n <lib-check-box-fields\n *ngSwitchCase=\"'CHECK_BOX'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [rowId]=\"i\"\n [submissionIndex]=\"i\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-check-box-fields>\n <lib-date-time-fields\n *ngSwitchCase=\"'DATE_TIME'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-date-time-fields>\n <lib-drop-down-fields\n *ngSwitchCase=\"'DROP_DOWN'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-drop-down-fields>\n <lib-file-picker-fields\n *ngSwitchCase=\"'FILE_PICKER'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n (inlineDeleteFiles)=\"\n updateDeletedFiles(submission, grid.element, $event)\n \"\n ></lib-file-picker-fields>\n <lib-location-fields\n *ngSwitchCase=\"'LOCATION'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-location-fields>\n <lib-mail-fields\n *ngSwitchCase=\"'EMAIL'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-mail-fields>\n <lib-mobile-fields\n *ngSwitchCase=\"'MOBILE'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-mobile-fields>\n <lib-number-fields\n *ngSwitchCase=\"'NUMBER'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n [rowId]=\"'0'\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-number-fields>\n <lib-password-fields\n *ngSwitchCase=\"'PASSWORD'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-password-fields>\n <lib-radio-button-fields\n *ngSwitchCase=\"'RADIO_BUTTON'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n [rowId]=\"i\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-radio-button-fields>\n <lib-rich-text-editor-fields\n *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n [inSubForm]=\"true\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-rich-text-editor-fields>\n <lib-selection-matrix-fields\n *ngSwitchCase=\"'SELECTION_MATRIX'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n [acceptedLanguage]=\"acceptedLanguage\"\n [rowId]=\"i\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-selection-matrix-fields>\n <lib-slider-fields\n *ngSwitchCase=\"'SLIDER'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-slider-fields>\n <lib-terms-and-condition-fields\n *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-terms-and-condition-fields>\n <lib-text-area-fields\n *ngSwitchCase=\"'TEXT_AREA'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-text-area-fields>\n <lib-text-fields\n *ngSwitchCase=\"'TEXT_BOX'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-text-fields>\n <lib-toggle-switch-fields\n *ngSwitchCase=\"'TOGGLE_SWITCH'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n [acceptedLanguage]=\"acceptedLanguage\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-toggle-switch-fields>\n <lib-url-fields\n *ngSwitchCase=\"'URL'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-url-fields>\n <lib-currency-fields\n *ngSwitchCase=\"'CURRENCY'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-currency-fields>\n <lib-hidden-field\n *ngSwitchCase=\"'HIDDEN_FIELD'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-hidden-field>\n <lib-iframe-fields\n *ngSwitchCase=\"'IFRAME_WIDGET'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n ></lib-iframe-fields>\n <lib-aggregate-function\n *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\n [question]=\"getSubmissionQuestion(submission,grid)\"\n [inCard]=\"true\"\n [submissionIndex]=\"i\"\n [rowId]=\"'0'\"\n [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n (answerChange)=\"\n updateAnswer(submission, grid.element, $event)\n \"\n ></lib-aggregate-function>\n </div>\n\n <!-- <ng-container *ngIf=\"grid.element.childLogics\">\n <ng-container\n *ngIf=\"getComponentForChildLogics(grid.element.childLogics, 'child', grid.element.answer) as outlet\">\n <ng-container *ngComponentOutlet=\"outlet.component | async; injector: outlet.injector\">\n </ng-container>\n </ng-container>\n </ng-container> -->\n <ng-container *ngIf=\"grid?.element?.childLogics\">\n <ng-container *ngIf=\"componentToLoad\">\n <ng-container\n *ngComponentOutlet=\"\n componentToLoad;\n inputs: {\n grid: grid?.element?.childLogics,\n answer: grid?.element?.answer,\n state: 'child'\n }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"grid.entityType === 'SECTION'\">\n <lib-section-fields [section]=\"grid.element\"></lib-section-fields>\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n\n<div class=\"subform-footer\">\n <button class=\"btn btn-primary\" (click)=\"addNewSubmission()\">{{addButtonLabel}}</button>\n</div>\n","import {\n Component,\n EventEmitter,\n HostListener,\n Injector,\n Input,\n OnInit,\n Output,\n} from '@angular/core';\nimport { SubformCopyService } from '../../services/subform-copy.service';\nimport { ConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { Submission } from '../../models/submission.model';\nimport { Answer } from '../../models/answer.model';\nimport { v4 as uuidv4 } from 'uuid';\nimport { DataService } from '../../services/data.service';\nimport { FormService } from '../../services/form.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\nimport { ValidationService } from '../../services/validation.service';\nimport { ScoreCalculationService } from '../../services/score.service';\n\n@Component({\n selector: 'lib-sub-form',\n templateUrl: './sub-form.component.html',\n styleUrls: ['./sub-form.component.scss'],\n})\nexport class SubFormComponent implements OnInit {\n @Input() subForm: any = {};\n @Input() edit: boolean = false;\n @Output() subFormChange = new EventEmitter<any>();\n @Input() acceptedLanguage: string = '';\n @Input() pages: any[] = [];\n decodedDescription: string = '';\n grid: any;\n state!: string;\n childLogicCache: { [key: string]: { component: Promise<any>, injector: Injector } } = {};\n componentToLoad: any;\n injector!: Injector;\n copySubFormdata:any;\n subformDescription:string = '';\n subformTitle: string= '';\n editor: any;\n allowCopy: boolean = false;\n allowDelete: boolean = false;\n private dialogRef?: MatDialogRef<ConfirmDialogComponent>;\n subformData:any;\n previousSubmissions:any[]=[];\n maxPossibleGoodScore!: number;\n maxPossibleBadScore!: number;\n\n constructor(\n private subformCopyService:SubformCopyService,\n public dialog: MatDialog,\n private dataService: DataService,\n private formService:FormService,\n private whenClauseService:WhenClauseService,\n private validationService: ValidationService,\n private scoreCalcService: ScoreCalculationService\n ){\n this.dataService.subform$.subscribe((data)=>{\n this.subformData = data;\n this.tryLoadPreviousSubmissions();\n })\n }\n\n private tryLoadPreviousSubmissions(): void {\n if (\n this.subformData &&\n this.subForm &&\n !this.edit &&\n this.subForm.submissionCopyConfig?.allowCopyFromOtherSubmissions\n ) {\n this.loadPreviousSubmissions();\n }\n }\n\n\n loadPreviousSubmissions(){\n if (this.subformData && Object.keys(this.subformData).length > 0 && !this.edit) {\n this.formService.getSubformSubmissions(this.subformData)?.subscribe({\n next:(response:any)=>{\n this.previousSubmissions = response;\n if(this.subForm.title == this.subformData?.duplicateSubmission?.targetSubForm){\n const loadedSubmissions = this.createSubmissionsFromApi(this.previousSubmissions,this.subForm);\n const existingSubmissions = this.subForm.submissions ?? [];\n\n this.subForm = {\n ...this.subForm,\n submissions: [\n ...existingSubmissions,\n ...loadedSubmissions\n ]\n };\n\n const hasAnyScore = this.subForm.submissions.some((sub:any) =>\n sub.scores?.some((s:any) => s.score !== null && s.score !== undefined)\n );\n\n if (hasAnyScore) {\n this.subForm.scores = this.scoreCalcService.calculateFinalScore(\n this.subForm.submissions,\n this.maxPossibleGoodScore,\n this.maxPossibleBadScore\n );\n } else {\n this.subForm.scores = null; // or 0, depending on how you want to represent \"no score yet\"\n }\n\n }\n },\n error:(error:any)=>{}\n })\n }\n }\n\n ngOnInit() {\n this.allowCopy = this.subForm.property?.allowCopy;\n this.allowDelete = this.subForm.property?.allowDelete;\n this.copySubFormdata = this.subForm?.copySubformMeta;\n this.tryLoadPreviousSubmissions();\n if (this.subForm.property.subFormStructure == 'single') {\n this.bindAnswersToFormElements();\n this.loadComponent();\n this.whenClauseService.addGridsFromSubform(this.subForm);\n }\n\n const { goodMax, badMax } = this.scoreCalcService.getMaxPossibleScore(\n this.subForm\n );\n this.maxPossibleGoodScore = goodMax;\n this.maxPossibleBadScore = badMax;\n }\n\n editorCreated(editorInstance: any) {\n this.editor = editorInstance;\n }\n\n private async loadComponent(): Promise<void> {\n this.componentToLoad = await this.loadFormElementsComponent();\n this.injector = this.createInjector();\n }\n\n private async loadFormElementsComponent() {\n const { FormElementsComponent } = await import('../form-elements/form-elements.component');\n return FormElementsComponent;\n }\n\n createInjector(): Injector {\n return Injector.create({\n providers: [\n { provide: 'grid', useValue: this.grid?.element.childLogics },\n { provide: 'state', useValue: 'child' },\n ],\n });\n }\n\n decodeHtml(html: string): string {\n const textArea = document.createElement('textarea');\n textArea.innerHTML = html;\n return textArea.value;\n }\n\n bindAnswersToFormElements() {\n const bindAnswers = (formElements: any[], submissions: any[]) => {\n formElements?.forEach((grids: any) => {\n grids?.grid?.forEach(\n (formElement: { entityType: string; element: any }) => {\n if (formElement.entityType === 'QUESTION') {\n const submission = submissions.find((sub: { answers: any[] }) =>\n sub.answers.some(\n (ans: { questionId: any }) =>\n ans.questionId === formElement.element.id\n )\n );\n\n if (submission) {\n const answer = submission.answers.find(\n (ans: { questionId: any }) =>\n ans.questionId === formElement.element.id\n );\n if (answer) {\n formElement.element.answer = answer.answer;\n formElement.element.answerId = answer.answerId;\n formElement.element.validation = true;\n formElement.element.attachments = answer.attachments;\n formElement.element.amountInWords = answer.amountInWords;\n this.subForm.submissionId = submission.submissionId;\n formElement.element.answerCurrency = answer.answerCurrency;\n }\n }\n\n if (formElement.element.childLogics) {\n formElement.element.childLogics.forEach(\n (childLogic: { rows: any[] }) => {\n bindAnswers(childLogic.rows, submissions);\n }\n );\n }\n }\n }\n );\n });\n };\n\n if (this.subForm && this.subForm.rows && this.subForm.submissions) {\n bindAnswers(this.subForm.rows, this.subForm.submissions);\n }\n }\n\n updateSubFormWithSubmissions(event: any) {\n this.subForm = event;\n this.subFormChange.emit(this.subForm);\n }\n\n ngOnChanges(): void {\n if (this.subForm.description) {\n this.decodedDescription = this.decodeHtml(this.subForm.description);\n }\n }\n\n copySubform() {\n const { updatedPages } = this.subformCopyService.copySubform(this.subForm, this.pages);\n\n this.pages = updatedPages;\n // Emit updated pages or subFormChange if needed\n\n // Optionally pass meta to parent if needed\n // this.copyMeta.emit(copySubFormMeta);\n }\n\n\n updateSubformData(event: any, subformId: string, field: 'title' | 'description') {\n if(this.copySubFormdata.id == subformId){\n this.copySubFormdata[field] = event;\n }\n }\n\n deleteCopySubform(subformId: string) {\n const dialogConfig = new MatDialogConfig();\n dialogConfig.data = {\n messageHeader: \"Are you sure?\",\n message: \"Do you want to delete this subform?\"\n };\n dialogConfig.hasBackdrop = true;\n dialogConfig.disableClose = true;\n\n this.dialogRef = this.dialog.open(ConfirmDialogComponent, dialogConfig);\n\n this.dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n // 1. Remove the copied subform from the pages\n for (const page of this.pages) {\n const rowIndex = page.rows.findIndex((row: any) =>\n row.grid.some((grid: any) =>\n grid.entityType === 'SUBFORM' &&\n grid.element?.id === subformId &&\n grid.element?.copied\n )\n );\n\n if (rowIndex !== -1) {\n page.rows.splice(rowIndex, 1);\n break;\n }\n }\n\n // 2. Remove this subformId from any subform's copiedForms array\n for (const page of this.pages) {\n for (const row of page.rows) {\n for (const grid of row.grid) {\n if (grid.entityType === 'SUBFORM' && grid.element?.copiedForms) {\n const index = grid.element.copiedForms.indexOf(subformId);\n if (index !== -1) {\n grid.element.copiedForms.splice(index, 1);\n }\n }\n }\n }\n }\n }\n });\n }\n\n\n deleteMainSubform(subformId: string): void {\n const dialogConfig = new MatDialogConfig();\n dialogConfig.data = {\n messageHeader: \"Are you sure?\",\n message: \"Do you want to delete this subform?\"\n };\n dialogConfig.hasBackdrop = true;\n dialogConfig.disableClose = true;\n\n this.dialogRef = this.dialog.open(ConfirmDialogComponent, dialogConfig);\n\n this.dialogRef.afterClosed().subscribe((result: any) => {\n if (result) {\n for (const page of this.pages) {\n for (const row of page.rows) {\n for (const gridItem of row.grid) {\n if (\n gridItem.entityType === 'SUBFORM' &&\n gridItem.element?.id === subformId\n ) {\n gridItem.element.deleted = true;\n return; // stop after the first match\n }\n }\n }\n }\n }\n });\n }\n\n createSubmissionsFromApi(apiSubmissions: any[], subform: any): Submission[] {\n return apiSubmissions.map(apiSubmission => {\n const answers: Answer[] = [];\n\n subform.rows.forEach((row: any) => {\n row.grid.forEach((gridItem: any) => {\n if (gridItem.entityType !== 'QUESTION') return;\n\n const element = gridItem.element;\n const questionKey = element.question;\n if (!apiSubmission.answers || !apiSubmission.answers[questionKey]) {\n return;\n }\n const apiAnswer = apiSubmission.answers[questionKey];\n // ✅ CASE 1: File upload (array with name & url)\n if (\n Array.isArray(apiAnswer) &&\n apiAnswer.length &&\n apiAnswer[0].name &&\n apiAnswer[0].url\n ) {\n answers.push({\n questionId: element.id,\n answer: null,\n attachments: apiAnswer.map((file: any) => ({\n fileId: file.id,\n fileName: file.name,\n fileUrl: file.url\n })),\n copiedAttachments: apiAnswer.map((file: any) => file.id)\n });\n return;\n }\n\n // ✅ CASE 2: Normal question object\n answers.push({\n questionId: element.id,\n answer: apiAnswer.answer ?? null,\n attachments: apiAnswer.file\n ? apiAnswer.file.map((file: any) => ({\n fileName: file.name,\n fileUrl: file.url\n }))\n : undefined,\n scores: apiAnswer.scores,\n maximumPossibleScore: apiAnswer.maximumPossibleScore\n });\n });\n });\n\n return {\n submissionId: uuidv4(),\n sourceSubmissionId: apiSubmission.submissionId,\n answers,\n configuration: {\n isDefault: false,\n allowDelete: true\n },\n scores: apiSubmission.score\n };\n });\n }\n\n get isInvalid(): boolean {\n return !!this.validationService.getErrorMessage(this.subForm.id);\n }\n\n get errorMessage(): string | null {\n return this.validationService.getErrorMessage(this.subForm.id);\n }\n\n clearInvalid(){\n this.validationService.clearInvalid(this.subForm.id);\n }\n\n @HostListener('click', ['$event'])\n onAnyClick(event: MouseEvent): void {\n this.clearInvalid();\n }\n\n ngOnDestroy(): void {\n if (this.dialogRef) {\n this.dialogRef.close();\n }\n }\n\n\n}\n","<div\n class=\"outer-container mb-4 px-3\"\n [id]=\"'question-' + subForm.id\"\n [attr.name]=\"subForm.testElementName\"\n *ngIf=\"!subForm.deleted\"\n>\n <div class=\"body py-1 px-1\">\n <div class=\"tab-content pt-4 pb-3 px-3\">\n <ng-container *ngIf=\"!subForm.copied; else copySubformContainer\">\n <div class=\"subform-header\">\n <div class=\"data-container\">\n <p class=\"sectionTitle\">{{ subForm.title }}</p>\n <p [innerHTML]=\"decodedDescription\" class=\"description\"></p>\n </div>\n <div class=\"d-flex gap-3\">\n <div\n class=\"finalScore\"\n *ngFor=\"let s of subForm?.scores\"\n [ngClass]=\"{\n goodScore: s.scoreType === 'GOOD_SCORE',\n badScore: s.scoreType === 'BAD_SCORE'\n }\"\n >\n <span class=\"scoreTitle\">Score</span>\n <p class=\"mb-0\">{{ s.score }}</p>\n </div>\n <div class=\"icon-container\">\n <img\n src=\"assets/icons/copy-icon.svg\"\n alt=\"copy-icon\"\n (click)=\"copySubform()\"\n *ngIf=\"allowCopy\"\n />\n <img\n src=\"assets/icons/delete-icon.svg\"\n class=\"delete-icon ms-3\"\n alt=\"delete icon\"\n (click)=\"deleteMainSubform(subForm.id)\"\n *ngIf=\"allowDelete\"\n />\n </div>\n </div>\n </div>\n </ng-container>\n <ng-template #copySubformContainer>\n <div class=\"d-flex justify-content-end gap-4\">\n <div\n class=\"finalScore\"\n *ngFor=\"let s of subForm?.scores\"\n [ngClass]=\"{\n goodScore: s.scoreType === 'GOOD_SCORE',\n badScore: s.scoreType === 'BAD_SCORE'\n }\"\n >\n <span class=\"scoreTitle\">Score</span>\n <p class=\"mb-0\">{{ s.score }}</p>\n </div>\n <div class=\"icon-container\" (click)=\"deleteCopySubform(subForm.id)\">\n <img\n src=\"assets/icons/delete-icon.svg\"\n class=\"delete-icon\"\n alt=\"delete icon\"\n />\n </div>\n </div>\n <div class=\"copy-subform-container mb-3\">\n <p>Title</p>\n <input\n type=\"text\"\n class=\"form-control\"\n [(ngModel)]=\"subformTitle\"\n (ngModelChange)=\"updateSubformData($event, subForm.id, 'title')\"\n />\n <p class=\"mt-3\">Description</p>\n <quill-editor\n [(ngModel)]=\"subformDescription\"\n (ngModelChange)=\"\n updateSubformData($event, subForm.id, 'description')\n \"\n (onEditorCreated)=\"editorCreated($event)\"\n class=\"editor\"\n placeholder=\"\"\n ></quill-editor>\n </div>\n </ng-template>\n\n <div *ngIf=\"subForm.property.subFormStructure == 'multiple'\">\n <lib-multiple-subform\n *ngIf=\"subForm.property.subFormType === 'table'\"\n [subForm]=\"subForm\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-multiple-subform>\n\n <lib-inline-multiple-subform\n *ngIf=\"subForm.property.subFormType === 'inline'\"\n [subForm]=\"subForm\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-inline-multiple-subform>\n <lib-card-subform\n *ngIf=\"subForm.property.subFormType === 'card'\"\n [subForm]=\"subForm\"\n [acceptedLanguage]=\"acceptedLanguage\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n [edit]=\"edit\"\n ></lib-card-subform>\n </div>\n <div *ngIf=\"subForm.property.subFormStructure == 'single'\">\n <div *ngFor=\"let row of subForm.rows\">\n <div class=\"d-flex\">\n <div\n *ngFor=\"let grid of row.grid\"\n [ngStyle]=\"{ 'width.%': grid.element.count * (100 / 12) }\"\n >\n <div *ngIf=\"grid.entityType === 'QUESTION' && grid.show\">\n <div [ngSwitch]=\"grid.element.formElement.elementType\">\n <lib-check-box-fields\n *ngSwitchCase=\"'CHECK_BOX'\"\n [question]=\"grid.element\"\n ></lib-check-box-fields>\n <lib-date-time-fields\n *ngSwitchCase=\"'DATE_TIME'\"\n [question]=\"grid.element\"\n ></lib-date-time-fields>\n <lib-drop-down-fields\n *ngSwitchCase=\"'DROP_DOWN'\"\n [question]=\"grid.element\"\n ></lib-drop-down-fields>\n <lib-file-picker-fields\n *ngSwitchCase=\"'FILE_PICKER'\"\n [question]=\"grid.element\"\n ></lib-file-picker-fields>\n <lib-location-fields\n *ngSwitchCase=\"'LOCATION'\"\n [question]=\"grid.element\"\n ></lib-location-fields>\n <lib-mail-fields\n *ngSwitchCase=\"'EMAIL'\"\n [question]=\"grid.element\"\n ></lib-mail-fields>\n <lib-mobile-fields\n *ngSwitchCase=\"'MOBILE'\"\n [question]=\"grid.element\"\n ></lib-mobile-fields>\n <lib-number-fields\n *ngSwitchCase=\"'NUMBER'\"\n [question]=\"grid.element\"\n [rowId]=\"'0'\"\n ></lib-number-fields>\n <lib-password-fields\n *ngSwitchCase=\"'PASSWORD'\"\n [question]=\"grid.element\"\n ></lib-password-fields>\n <lib-radio-button-fields\n *ngSwitchCase=\"'RADIO_BUTTON'\"\n [question]=\"grid.element\"\n ></lib-radio-button-fields>\n <lib-rich-text-editor-fields\n *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\n [question]=\"grid.element\"\n ></lib-rich-text-editor-fields>\n <lib-selection-matrix-fields\n *ngSwitchCase=\"'SELECTION_MATRIX'\"\n [question]=\"grid.element\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-selection-matrix-fields>\n <lib-signature-fields\n *ngSwitchCase=\"'SIGNATURE'\"\n [question]=\"grid.element\"\n ></lib-signature-fields>\n <lib-slider-fields\n *ngSwitchCase=\"'SLIDER'\"\n [question]=\"grid.element\"\n ></lib-slider-fields>\n <lib-terms-and-condition-fields\n *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\n [question]=\"grid.element\"\n ></lib-terms-and-condition-fields>\n <lib-text-area-fields\n *ngSwitchCase=\"'TEXT_AREA'\"\n [question]=\"grid.element\"\n ></lib-text-area-fields>\n <lib-text-fields\n *ngSwitchCase=\"'TEXT_BOX'\"\n [question]=\"grid.element\"\n ></lib-text-fields>\n <lib-toggle-switch-fields\n *ngSwitchCase=\"'TOGGLE_SWITCH'\"\n [question]=\"grid.element\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-toggle-switch-fields>\n <lib-url-fields\n *ngSwitchCase=\"'URL'\"\n [question]=\"grid.element\"\n ></lib-url-fields>\n <lib-currency-fields\n *ngSwitchCase=\"'CURRENCY'\"\n [question]=\"grid.element\"\n ></lib-currency-fields>\n <lib-aggregate-function\n *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\n [question]=\"grid.element\"\n [rowId]=\"'0'\"\n ></lib-aggregate-function>\n <lib-hidden-field\n *ngSwitchCase=\"'HIDDEN_FIELD'\"\n [question]=\"grid.element\"\n ></lib-hidden-field>\n <lib-iframe-fields\n *ngSwitchCase=\"'IFRAME_WIDGET'\"\n [question]=\"grid.element\"\n ></lib-iframe-fields>\n </div>\n\n <!-- <ng-container *ngIf=\"grid.element.childLogics\">\n <ng-container\n *ngIf=\"getComponentForChildLogics(grid.element.childLogics, 'child', grid.element.answer) as outlet\">\n <ng-container *ngComponentOutlet=\"outlet.component | async; injector: outlet.injector\">\n </ng-container>\n </ng-container>\n </ng-container> -->\n <ng-container *ngIf=\"grid?.element?.childLogics\">\n <ng-container *ngIf=\"componentToLoad\">\n <ng-container\n *ngComponentOutlet=\"\n componentToLoad;\n inputs: {\n grid: grid?.element?.childLogics,\n answer: grid?.element?.answer,\n state: 'child'\n }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n\n <div *ngIf=\"grid.entityType === 'SECTION' && grid.show\">\n <lib-section-fields\n [section]=\"grid.element\"\n ></lib-section-fields>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"isInvalid\" class=\"error-message mt-4\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Injector, Input, Output } from '@angular/core';\nimport { WhenClauseService } from '../../services/whenClause.service';\n\n\ninterface Attachment {\n fileId: string;\n fileName: string;\n fileUrl: string;\n fileSize?: number;\n}\n\n@Component({\n selector: 'lib-question-group',\n templateUrl: './question-group.component.html',\n styleUrls: ['./question-group.component.scss']\n})\nexport class QuestionGroupComponent {\n @Input() questionGroup: any = {};\n @Input() edit: boolean = false;\n @Input() acceptedLanguage: string ='';\n decodedDescription:string='';\n grid: any;\n childLogicCache: { [key: string]: { component: Promise<any>, injector: Injector } } = {};\n componentToLoad: any;\n injector!: Injector;\n\n constructor(private whenClauseService:WhenClauseService){}\n\n ngOnInit() {\n this.loadComponent();\n this.whenClauseService.addGridsFromSubform(this.questionGroup);\n }\n\n decodeHtml(html: string): string {\n const textArea = document.createElement('textarea');\n textArea.innerHTML = html;\n return textArea.value;\n }\n\n ngOnChanges(): void {\n if (this.questionGroup.description) {\n this.decodedDescription = this.decodeHtml(this.questionGroup.description);\n }\n }\n\n removeCircularReferences(obj: any): any {\n const seen = new WeakSet();\n\n function recurse(value: any): any {\n if (value === null || typeof value !== 'object') {\n return value;\n }\n\n if (seen.has(value)) {\n return '[Circular]';\n }\n\n seen.add(value);\n\n if (Array.isArray(value)) {\n return value.map(item => recurse(item));\n }\n\n const output: any = {};\n for (const key of Object.keys(value)) {\n output[key] = recurse(value[key]);\n }\n\n seen.delete(value);\n return output;\n }\n\n return recurse(obj);\n}\n\nprivate async loadComponent(): Promise<void> {\n this.componentToLoad = await this.loadFormElementsComponent();\n this.injector = this.createInjector();\n}\n\nprivate async loadFormElementsComponent() {\n const { FormElementsComponent } = await import('../form-elements/form-elements.component');\n return FormElementsComponent;\n}\n\ncreateInjector(): Injector {\n return Injector.create({\n providers: [\n { provide: 'grid', useValue: this.grid?.element.childLogics },\n { provide: 'state', useValue: 'child' },\n ],\n });\n}\n}\n","<div\n class=\"outer-container mb-4 px-3\"\n [attr.name]=\"questionGroup.testElementName\"\n [id]=\"'question-' + questionGroup.id\"\n>\n <div class=\"body container pt-3 pb-3 px-3\">\n <div class=\"tab-content pt-4 pb-3 px-3\">\n <p class=\"sectionTitle\">{{ questionGroup.title }}</p>\n <p [innerHTML]=\"decodedDescription\" class=\"description\"></p>\n\n <div class=\"mt-5\">\n <div *ngFor=\"let row of questionGroup.rows\">\n <div class=\"d-flex\">\n <div\n *ngFor=\"let grid of row.grid\"\n [ngStyle]=\"{ 'width.%': grid.element.count * (100 / 12) }\"\n >\n <div *ngIf=\"grid.entityType === 'QUESTION' && grid.show\">\n <div [ngSwitch]=\"grid.element.formElement.elementType\">\n <lib-check-box-fields\n *ngSwitchCase=\"'CHECK_BOX'\"\n [question]=\"grid.element\"\n ></lib-check-box-fields>\n <lib-date-time-fields\n *ngSwitchCase=\"'DATE_TIME'\"\n [question]=\"grid.element\"\n ></lib-date-time-fields>\n <lib-drop-down-fields\n *ngSwitchCase=\"'DROP_DOWN'\"\n [question]=\"grid.element\"\n ></lib-drop-down-fields>\n <lib-file-picker-fields\n *ngSwitchCase=\"'FILE_PICKER'\"\n [question]=\"grid.element\"\n ></lib-file-picker-fields>\n <lib-location-fields\n *ngSwitchCase=\"'LOCATION'\"\n [question]=\"grid.element\"\n ></lib-location-fields>\n <lib-mail-fields\n *ngSwitchCase=\"'EMAIL'\"\n [question]=\"grid.element\"\n ></lib-mail-fields>\n <lib-mobile-fields\n *ngSwitchCase=\"'MOBILE'\"\n [question]=\"grid.element\"\n ></lib-mobile-fields>\n <lib-number-fields\n *ngSwitchCase=\"'NUMBER'\"\n [question]=\"grid.element\"\n [rowId]=\"'0'\"\n ></lib-number-fields>\n <lib-password-fields\n *ngSwitchCase=\"'PASSWORD'\"\n [question]=\"grid.element\"\n ></lib-password-fields>\n <lib-radio-button-fields\n *ngSwitchCase=\"'RADIO_BUTTON'\"\n [question]=\"grid.element\"\n ></lib-radio-button-fields>\n <lib-rich-text-editor-fields\n *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\n [question]=\"grid.element\"\n ></lib-rich-text-editor-fields>\n <lib-selection-matrix-fields\n *ngSwitchCase=\"'SELECTION_MATRIX'\"\n [question]=\"grid.element\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-selection-matrix-fields>\n <lib-signature-fields\n *ngSwitchCase=\"'SIGNATURE'\"\n [question]=\"grid.element\"\n ></lib-signature-fields>\n <lib-slider-fields\n *ngSwitchCase=\"'SLIDER'\"\n [question]=\"grid.element\"\n ></lib-slider-fields>\n <lib-terms-and-condition-fields\n *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\n [question]=\"grid.element\"\n ></lib-terms-and-condition-fields>\n <lib-text-area-fields\n *ngSwitchCase=\"'TEXT_AREA'\"\n [question]=\"grid.element\"\n ></lib-text-area-fields>\n <lib-text-fields\n *ngSwitchCase=\"'TEXT_BOX'\"\n [question]=\"grid.element\"\n ></lib-text-fields>\n <lib-toggle-switch-fields\n *ngSwitchCase=\"'TOGGLE_SWITCH'\"\n [question]=\"grid.element\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-toggle-switch-fields>\n <lib-url-fields\n *ngSwitchCase=\"'URL'\"\n [question]=\"grid.element\"\n ></lib-url-fields>\n <lib-currency-fields\n *ngSwitchCase=\"'CURRENCY'\"\n [question]=\"grid.element\"\n ></lib-currency-fields>\n <lib-aggregate-function\n *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\n [question]=\"grid.element\"\n [rowId]=\"'0'\"\n ></lib-aggregate-function>\n <lib-hidden-field\n *ngSwitchCase=\"'HIDDEN_FIELD'\"\n [question]=\"grid.element\"\n ></lib-hidden-field>\n <lib-iframe-fields\n *ngSwitchCase=\"'IFRAME_WIDGET'\"\n [question]=\"grid.element\"\n ></lib-iframe-fields>\n </div>\n\n <!-- <ng-container *ngIf=\"grid.element.childLogics\">\n <ng-container *ngIf=\"getComponentForChildLogics(grid.element.childLogics, 'child', grid.element.answer) as cached\">\n <ng-container\n *ngComponentOutlet=\"cached.component | async; injector: cached.injector\">\n </ng-container>\n </ng-container>\n </ng-container> -->\n\n <ng-container *ngIf=\"grid?.element?.childLogics\">\n <ng-container *ngIf=\"componentToLoad\">\n <ng-container\n *ngComponentOutlet=\"\n componentToLoad;\n inputs: {\n grid: grid?.element?.childLogics,\n answer: grid?.element?.answer,\n state: 'child'\n }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, Injector, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-multifields',\n templateUrl: './multifields.component.html',\n styleUrls: ['./multifields.component.scss']\n})\nexport class MultifieldsComponent {\n @Input() multiFields:any = {};\n @Input() acceptedLanguage: string ='';\n grid: any;\n \n async loadFormElementsComponent(grid: any) {\n this.grid = grid;\n const { FormElementsComponent } = await import('../form-elements/form-elements.component');\n return FormElementsComponent;\n }\n \n createInjector(): Injector {\n return Injector.create({\n providers: [\n { provide: 'grid', useValue: this.grid },\n { provide: 'state', useValue: 'child' },\n ],\n });\n }\n}\n","<div class=\"outer-container mb-4 px-3 multifields\" [attr.name]=\"multiFields.testElementName\"\n[id]=\"'question-'+ multiFields.id\">\n <div class=\"d-flex align-items-center\">\n <div [innerHTML]=\"multiFields.questionNumber\"></div><span class=\"space\"></span>\n <label>{{ multiFields.question }}</label>\n </div>\n\n <div class=\"multifields-row\">\n <ng-container *ngFor=\"let row of multiFields.rows\">\n <div class=\"d-flex\">\n <div *ngFor=\"let grid of row.grid\"\n [ngStyle]=\"{'width.%': (grid.element.count) * (100 / 12)}\">\n <div *ngIf=\"grid.entityType === 'QUESTION'\">\n <div [ngSwitch]=\"grid.element.formElement.elementType\">\n <lib-check-box-fields *ngSwitchCase=\"'CHECK_BOX'\"\n [question]=\"grid.element\"></lib-check-box-fields>\n <lib-date-time-fields *ngSwitchCase=\"'DATE_TIME'\"\n [question]=\"grid.element\"></lib-date-time-fields>\n <lib-drop-down-fields *ngSwitchCase=\"'DROP_DOWN'\"\n [question]=\"grid.element\"></lib-drop-down-fields>\n <lib-file-picker-fields\n *ngSwitchCase=\"'FILE_PICKER'\"\n [question]=\"grid.element\"></lib-file-picker-fields>\n <lib-location-fields *ngSwitchCase=\"'LOCATION'\"\n [question]=\"grid.element\"></lib-location-fields>\n <lib-mail-fields *ngSwitchCase=\"'EMAIL'\"\n [question]=\"grid.element\"></lib-mail-fields>\n <lib-mobile-fields *ngSwitchCase=\"'MOBILE'\"\n [question]=\"grid.element\"></lib-mobile-fields>\n <lib-number-fields *ngSwitchCase=\"'NUMBER'\"\n [question]=\"grid.element\"></lib-number-fields>\n <lib-password-fields *ngSwitchCase=\"'PASSWORD'\"\n [question]=\"grid.element\"></lib-password-fields>\n <lib-radio-button-fields\n *ngSwitchCase=\"'RADIO_BUTTON'\"\n [question]=\"grid.element\"></lib-radio-button-fields>\n <lib-rich-text-editor-fields\n *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\n [question]=\"grid.element\"></lib-rich-text-editor-fields>\n <lib-selection-matrix-fields\n *ngSwitchCase=\"'SELECTION_MATRIX'\"\n [question]=\"grid.element\"\n [acceptedLanguage]=\"acceptedLanguage\"></lib-selection-matrix-fields>\n <lib-signature-fields *ngSwitchCase=\"'SIGNATURE'\"\n [question]=\"grid.element\"></lib-signature-fields>\n <lib-slider-fields *ngSwitchCase=\"'SLIDER'\"\n [question]=\"grid.element\"></lib-slider-fields>\n <lib-terms-and-condition-fields\n *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\n [question]=\"grid.element\"></lib-terms-and-condition-fields>\n <lib-text-area-fields *ngSwitchCase=\"'TEXT_AREA'\"\n [question]=\"grid.element\"></lib-text-area-fields>\n <lib-text-fields *ngSwitchCase=\"'TEXT_BOX'\"\n [question]=\"grid.element\"></lib-text-fields>\n <lib-toggle-switch-fields\n *ngSwitchCase=\"'TOGGLE_SWITCH'\"\n [question]=\"grid.element\"\n [acceptedLanguage]=\"acceptedLanguage\"></lib-toggle-switch-fields>\n <lib-url-fields *ngSwitchCase=\"'URL'\"\n [question]=\"grid.element\"></lib-url-fields>\n <lib-currency-fields *ngSwitchCase=\"'CURRENCY'\"\n [question]=\"grid.element\"></lib-currency-fields>\n <lib-hidden-field *ngSwitchCase=\"'HIDDEN_FIELD'\" \n [question]=\"grid.element\"></lib-hidden-field>\n </div>\n\n <ng-container *ngIf=\"grid.element.childLogics\">\n <ng-container\n *ngComponentOutlet=\"loadFormElementsComponent(grid.element.childLogics) | async\"></ng-container>\n </ng-container>\n </div>\n\n </div>\n </div>\n\n </ng-container>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { WhenClauseService } from '../../services/whenClause.service';\n\n@Component({\n selector: 'lib-recursive-logic',\n templateUrl: './recursive-logic.component.html',\n styleUrls: ['./recursive-logic.component.scss']\n})\nexport class RecursiveLogicComponent {\n @Input() grid: any = {};\n @Input() currentPageIndex: number = 0;\n @Input() edit : boolean = false;\n @Input() acceptedLanguage: string ='';\n @Output() subFormChange = new EventEmitter<any>();\n @Input() state!: string;\n @Input() answer!: string;\n @Input() pages: any[] = [];\n\n constructor(private whenClauseService:WhenClauseService){}\n\n ngOnInit(){\n this.whenClauseService.addGrid(this.grid);\n }\n\n updateSubFormWithSubmissions(event:any){\n this.subFormChange.emit(event);\n }\n\n}\n","<div *ngIf=\"grid.show\">\n <div *ngIf=\"grid.entityType === 'QUESTION'\">\n <lib-question\n [question]=\"grid?.element\"\n [edit]=\"edit\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-question>\n </div>\n <div *ngIf=\"grid.entityType === 'SECTION'\">\n <lib-section-fields [section]=\"grid.element\"></lib-section-fields>\n </div>\n <ng-container *ngIf=\"grid.entityType === 'SUBFORM'\">\n <lib-sub-form\n [subForm]=\"grid.element\"\n [acceptedLanguage]=\"acceptedLanguage\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n [edit]=\"edit\"\n [pages]=\"pages\"\n ></lib-sub-form>\n </ng-container>\n \n <ng-container *ngIf=\"grid.entityType === 'QUESTION_GROUP'\">\n <lib-question-group\n [questionGroup]=\"grid.element\"\n [acceptedLanguage]=\"acceptedLanguage\"\n ></lib-question-group>\n </ng-container>\n \n \n <ng-container *ngIf=\"grid.entityType === 'MULTIFIELD'\">\n <lib-multifields [multiFields]=\"grid.element\" [acceptedLanguage]=\"acceptedLanguage\"></lib-multifields>\n </ng-container>\n</div>","import {\n Component,\n EventEmitter,\n Inject,\n Input,\n Optional,\n Output\n} from '@angular/core';\n\n@Component({\n selector: 'lib-form-elements',\n templateUrl: './form-elements.component.html',\n styleUrls: ['./form-elements.component.scss'],\n})\nexport class FormElementsComponent {\n @Input() currentPageIndex: number = 0;\n @Input() edit : boolean = false;\n @Input() acceptedLanguage: string ='';\n @Output() subFormChange = new EventEmitter<any>();\n @Input() answer!: string;\n @Input() grid: any;\n @Input() state!: string;\n @Input() pages: any[] = [];\n\n constructor(\n @Inject('grid') @Optional() private injectedGrid: any,\n @Inject('state') @Optional() private injectedState: string,\n @Inject('answer') @Optional() private injectedAnswer: string\n ) {}\n\n\n ngOnInit() {\n this.grid = this.injectedGrid ?? this.grid;\n this.state = this.injectedState ?? this.state;\n this.answer = this.injectedAnswer ?? this.answer;\n }\n\n updateSubFormWithSubmissions(event:any){\n this.subFormChange.emit(event);\n }\n}\n","<ng-container *ngIf=\"state === 'child'; else parentBlock\">\n <div *ngFor=\"let childLogic of grid\">\n <div *ngIf=\"childLogic.showLogic && answer\">\n <div *ngFor=\"let row of childLogic.rows\">\n <div *ngFor=\"let grid of row.grid\">\n <lib-recursive-logic\n [grid]=\"grid\"\n [edit]=\"edit\"\n [acceptedLanguage]=\"acceptedLanguage\"\n [pages]=\"pages\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n >\n </lib-recursive-logic>\n </div>\n </div>\n </div>\n </div>\n</ng-container>\n<ng-template #parentBlock>\n <lib-recursive-logic\n [grid]=\"grid\"\n [edit]=\"edit\"\n [acceptedLanguage]=\"acceptedLanguage\"\n [pages]=\"pages\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n >\n </lib-recursive-logic>\n</ng-template>\n","import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormValidationService } from '../../services/form-validation.service';\n\n@Component({\n selector: 'lib-navigation-tabs',\n templateUrl: './navigation-tabs.component.html',\n styleUrls: ['./navigation-tabs.component.scss'],\n})\nexport class NavigationTabsComponent {\n @Input() pages: any[] = [];\n @Input() currentPageIndex: number = 0;\n @Input() skipValidation: boolean = false;\n @Output() pageChanged = new EventEmitter<number>();\n @Output() submitEmit: EventEmitter<any> = new EventEmitter<any>();\n @Output() saveAsDraftEmit: EventEmitter<any> = new EventEmitter<any>();\n @Input() edit : boolean = false;\n @Input() acceptedLanguage: string ='';\n @Input() eligibleForSubmission:{ status: boolean; message: string } = { status: true, message: '' };\n @Output() subFormChange = new EventEmitter<any>();\n @Input() pageDetails: any[] = [];\n @Input() markAllQuestionsAsRequired : boolean = false;\n @Input() skipMargin: boolean = false;\n @Output() rowSetIndex = new EventEmitter<number>();\n @Output() cancel: EventEmitter<string> = new EventEmitter<string>();\n @Input() primaryColor: string = '';\n @Input() secondaryColor: string = '';\n @Input() isActionTriggered: boolean = false;\n @Input() submissionInProgress: boolean = false;\n @Input() submissionInDraft: boolean = false;\n @Input() showCancelButton: boolean = false;\n @Input() submissionProgress = 0;\n @Input() currentStep = 'Submitting form';\n @Input() animatedDots = '';\n loadedPages: { [key: number]: boolean } = {};\n showTooltip: boolean = false;\n showNavArrows: boolean = false;\n hideTabs: boolean = false;\n\n constructor(\n private formValidationService: FormValidationService,\n private cdr: ChangeDetectorRef\n ) {\n // Load the first page initially\n this.loadedPages[this.currentPageIndex] = true;\n }\n\n\n ngOnInit() {\n this.checkPageDetails()\n }\n\n ngAfterViewInit() {\n setTimeout(() => this.checkOverflow());\n this.cdr.detectChanges();\n }\n\n checkPageDetails(){\n if(this.pageDetails && this.pageDetails?.length==1 && this.pageDetails[0]?.name==''){\n this.hideTabs=true;\n }\n }\n\n updateSubFormWithSubmissions(event:any){\n this.subFormChange.emit(event);\n }\n\n triggerFunction(event: number) {\n this.setCurrentPage(event);\n }\n\n setCurrentPage(index: number) {\n if(this.markAllQuestionsAsRequired){\n const currentPageData = this.pages[this.currentPageIndex];\n let validationResponse=true;\n if(!this.skipValidation) {\n validationResponse = this.formValidationService.validateRequiredQuestions(currentPageData).isValid;\n }\n if (validationResponse) {\n this.pageChanged.emit(index);\n this.currentPageIndex = index;\n // Mark this page as loaded to avoid reloading\n if (!this.loadedPages[index]) {\n this.loadedPages[index] = true;\n }\n }\n }else{\n this.pageChanged.emit(index);\n this.currentPageIndex = index;\n // Mark this page as loaded to avoid reloading\n if (!this.loadedPages[index]) {\n this.loadedPages[index] = true;\n }\n }\n }\n\n submitForm() {\n this.submitEmit.emit();\n }\n\n saveAsDraft() {\n this.saveAsDraftEmit.emit();\n }\n\n trackByIndex(index: number, item: any): number {\n return index;\n }\n\n loadMoreData(): void {\n this.rowSetIndex.emit(this.currentPageIndex);\n }\n\n toggleTooltip() {\n this.showTooltip = !this.eligibleForSubmission.status;\n}\n\nscrollTabs(direction: number) {\n const tabContainer = document.querySelector('.navTabs') as HTMLElement;\n if (tabContainer) {\n tabContainer.scrollBy({ left: direction * 100, behavior: 'smooth' });\n setTimeout(() => this.checkOverflow(), 300);\n }\n}\n\ncheckOverflow() {\n const tabContainer = document.querySelector('.navTabs') as HTMLElement;\n if (tabContainer) {\n this.showNavArrows = (tabContainer.scrollWidth > tabContainer.clientWidth);\n }\n}\n\ncancelled(){\n this.cancel.emit();\n}\n}\n","<div class=\"tab-inner-container\" [ngClass]=\"{ 'skip-margin': skipMargin}\">\n <div class=\"d-flex gap-2\">\n <div class=\"tab-navigation\" *ngIf=\"!hideTabs\">\n <ul class=\"nav nav-tabs navTabs\" id=\"myTab\" role=\"tablist\">\n <li\n class=\"nav-item\"\n role=\"presentation\"\n *ngFor=\"let page of pageDetails; let i = index; trackBy: trackByIndex\"\n [ngClass]=\"{'nav-item-ara': acceptedLanguage === 'ara', 'nav-item-default': acceptedLanguage !== 'ara'}\"\n >\n <button\n class=\"nav-link\"\n [title]=\"page.name\"\n data-bs-toggle=\"tooltip\"\n data-bs-placement=\"top\"\n data-bs-custom-class=\"custom-tooltip\"\n [class.active]=\"i === currentPageIndex\"\n id=\"tab-{{ i }}\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-controls]=\"'content-' + i\"\n [attr.aria-selected]=\"i === currentPageIndex\"\n (click)=\"setCurrentPage(i)\"\n >\n {{ page.name }}\n </button>\n </li>\n </ul>\n </div>\n <div class=\"d-flex align-items-center\" *ngIf=\"showNavArrows\">\n <button class=\"nav-arrow\">\n <img src=\"assets/icons/left_arrow.svg\" alt=\"left arrow\"\n (click)=\"scrollTabs(-1)\">\n <img src=\"assets/icons/right_arrow.svg\" alt=\"right arrow\"\n (click)=\"scrollTabs(1)\">\n </button>\n </div>\n </div>\n\n\n\n <div class=\"tab-content pt-5 pb-3 px-1\" [attr.name]=\"pages[currentPageIndex].testElementName\">\n <ng-container *ngIf=\"pages[currentPageIndex]\">\n <div\n class=\"tab-pane fade show active\"\n id=\"content-{{ currentPageIndex }}\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"'tab-' + currentPageIndex\"\n >\n <div *ngIf=\"loadedPages[currentPageIndex]\">\n <div class=\"data-container\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"200\"\n (scrolled)=\"loadMoreData()\">\n <div *ngFor=\"let row of pages[currentPageIndex].rows\">\n <div class=\"margin d-flex\">\n <div *ngFor=\"let grid of row.grid\"\n [ngStyle]=\"{'width.%': (grid.element.count) * (100 / 12)}\">\n <lib-form-elements\n [grid]=\"grid\"\n [edit]=\"edit\"\n [acceptedLanguage]=\"acceptedLanguage\"\n [pages]=\"pages\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n ></lib-form-elements>\n </div>\n </div>\n </div>\n </div>\n <div class=\"footerButton d-flex justify-content-between align-items-center me-4 ms-4 position-relative\">\n <!-- Hover detection container -->\n <div [ngStyle]=\"{ display: currentPageIndex === pageDetails.length - 1 ? 'block' : 'none' }\" id=\"captcha-container\"></div>\n <div\n class=\"button-container position-relative\"\n (mouseenter)=\"showTooltip = true\"\n (mouseleave)=\"showTooltip = false\"\n >\n\n <div *ngIf=\"currentPageIndex == pageDetails.length - 1\">\n <button *ngIf=\"showCancelButton\" class=\"btn submitButton rounded-pill bg-secondary text-white\"\n (click)=\"cancelled()\" type=\"button\"\n >Cancel</button>\n <button\n *ngIf=\"!isActionTriggered && skipValidation\"\n class=\"btn rounded-pill submitButton text-white\"\n [ngStyle]=\"{ 'background-color': secondaryColor ? secondaryColor : '#084fff' }\"\n type=\"button\"\n (click)=\"saveAsDraft()\"\n [disabled]=\"!eligibleForSubmission.status || submissionInDraft\"\n >\n <ng-container *ngIf=\"submissionInDraft; else showSubmitText\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\n Submitting...\n </ng-container>\n <ng-template #showSubmitText>\n Save Draft\n </ng-template>\n </button>\n \n\n <button\n *ngIf=\"!isActionTriggered\"\n class=\"btn rounded-pill submitButton text-white\"\n [ngStyle]=\"{ 'background-color': primaryColor ? primaryColor: '#084fff' }\"\n type=\"button\"\n (click)=\"submitForm()\"\n [disabled]=\"!eligibleForSubmission.status || submissionInProgress\"\n >\n <ng-container *ngIf=\"submissionInProgress; else showSubmitText\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\n Submitting...\n </ng-container>\n <ng-template #showSubmitText>\n Submit\n </ng-template>\n </button>\n <div *ngIf=\"showTooltip && !eligibleForSubmission.status\" class=\"custom-tooltip\">\n {{eligibleForSubmission.message}}\n </div>\n </div>\n </div>\n\n </div>\n <div *ngIf=\"submissionInProgress\" class=\"text-loader\">\n {{ currentStep }}{{ animatedDots }}\n <span class=\"percentage\">{{ submissionProgress }}%</span>\n </div>\n\n </div>\n </div>\n </ng-container>\n </div>\n</div>\n","import { Component, Inject, Input } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\ninterface DialogData {\n primaryColor?: string;\n}\n@Component({\n selector: 'lib-form-submission-conformation',\n templateUrl: './saveDraftModalComponent.html',\n styleUrls: ['./saveDraftModalComponent.scss']\n})\n\nexport class SaveDraftModalComponent {\n primaryColor: string;\n\n get primaryColorRgb(): string {\n let hex = this.primaryColor.trim().replace('#', '');\n\n const defaultHex = \"0d6efd\";\n\n if (!hex) hex = defaultHex;\n\n let s = hex.trim().replace(/^#/, \"\").toLowerCase();\n\n // Ensure only valid hex chars\n if (!/^[0-9a-f]+$/.test(s)) {\n s = defaultHex;\n }\n\n // Expand shorthand (3/4 digits → 6/8 digits)\n if (s.length === 3 || s.length === 4) {\n s = s.split(\"\").map(ch => ch + ch).join(\"\");\n }\n\n // If still invalid length, fallback\n if (s.length !== 6 && s.length !== 8) {\n s = defaultHex;\n }\n\n const r = parseInt(s.slice(0, 2), 16);\n const g = parseInt(s.slice(2, 4), 16);\n const b = parseInt(s.slice(4, 6), 16);\n\n return `${r}, ${g}, ${b}`;\n}\n\n constructor(\n public dialogRef: MatDialogRef<SaveDraftModalComponent>,\n @Inject(MAT_DIALOG_DATA) public data: DialogData) {\n this.primaryColor = data.primaryColor || '#0d6efd';\n }\n\n saveAsDraft() {\n this.dialogRef.close(true);\n }\n\n continueEditing() {\n this.dialogRef.close(false);\n }\n}\n","<div class=\"save-draft-modal\"\n [style.--primary-color]=\"primaryColor\"\n [style.--primary-color-rgb]=\"primaryColorRgb\">\n <div class=\"modal-card\">\n <div class=\"status-icon\">\n <div class=\"icon-wrapper\">\n <i class=\"bi bi-file-earmark-text-fill\"></i>\n </div>\n </div>\n\n <h3>Form Submission Incomplete</h3>\n <p class=\"subheader\">We noticed some information needs attention</p>\n\n <div class=\"message-card\">\n <div class=\"message-content\">\n <p>Your form contains:</p>\n <ul>\n <li><i class=\"bi bi-x-circle\"></i> Missing required fields</li>\n <li><i class=\"bi bi-exclamation-triangle\"></i> Incorrectly formatted answers</li>\n </ul>\n </div>\n </div>\n\n <div class=\"action-buttons\">\n <button class=\"btn btn-continue\" (click)=\"continueEditing()\">\n <i class=\"bi bi-pencil-square\"></i> Continue Editing\n </button>\n <button class=\"btn btn-save\" (click)=\"saveAsDraft()\">\n <i class=\"bi bi-cloud-arrow-up\"></i> Save as Draft\n </button>\n </div>\n </div>\n</div>\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { map, Observable } from 'rxjs';\nimport { DataService } from './data.service';\n\ndeclare global {\n interface Window {\n onRecaptchaLoadCallback: () => void;\n }\n\n var grecaptcha: {\n ready: (callback: () => void) => void;\n render: (\n container: string | HTMLElement,\n parameters: {\n sitekey: string;\n callback?: (token: string) => void;\n 'expired-callback'?: () => void;\n 'error-callback'?: () => void;\n size?: 'normal' | 'compact' | 'invisible';\n theme?: 'light' | 'dark';\n }\n ) => number;\n execute: (widgetId?: number) => void;\n getResponse: (widgetId?: number) => string;\n reset: (widgetId?: number) => void;\n };\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RecaptchaService {\n private siteKey = '';\n private apiUrl: string = '';\n private widgetId: number | null = null;\n private initialized = false;\n private resolved = false;\n\n constructor(private toastr: ToastrService,private http: HttpClient, private dataService: DataService) {\n this.dataService.apiUrl$.subscribe((data) => {\n this.apiUrl = data;\n });\n\n }\n\n ngOnInit() {\nthis.fetchSiteKeyFromApi().subscribe({\n next: (key) => (this.siteKey = key),\n error: () => this.toastr.error('Failed to load CAPTCHA config')\n });\n }\n\n\n\n fetchSiteKeyFromApi(): Observable<string> {\n\n return this.http.get<{ message: string }>(`${this.apiUrl}/api/application-settings/recaptcha/siteKey`).pipe(\n map((response: { message: string }) => {\n const siteKey = response.message;\n return siteKey;\n })\n );\n }\n\n initialize(): Promise<void> {\n if(!this.siteKey || this.siteKey === '') {\n this.fetchSiteKeyFromApi().subscribe({\n next: (key) => (this.siteKey = key),\n error: () => this.toastr.error('Failed to load CAPTCHA config')\n });\n }\n\n\n return new Promise((resolve, reject) => {\n if (this.widgetId !== null) {\n resolve();\n return;\n }\n if (this.initialized && typeof grecaptcha !== 'undefined' && typeof grecaptcha.render === 'function') {\n resolve();\n return;\n }\n\n const existingScript = document.querySelector('script[src*=\"recaptcha/api.js\"]');\n if (existingScript) {\n existingScript.addEventListener('load', () => resolve());\n resolve();\n return;\n }\n\n const script = document.createElement('script');\n script.src = 'https://www.google.com/recaptcha/api.js?onload=onRecaptchaLoadCallback&render=explicit';\n script.async = true;\n script.defer = true;\n\n window.onRecaptchaLoadCallback = () => {\n this.initialized = true;\n resolve();\n };\n\n script.onerror = () => {\n reject('Failed to load reCAPTCHA script');\n };\n\n document.head.appendChild(script);\n });\n }\n\nrender(containerId: string, callback: (token: string) => void): void {\n if (typeof grecaptcha === 'undefined') {\n throw new Error('reCAPTCHA is not loaded');\n }\n\n // ✅ Prevent rendering more than once\n if (this.widgetId !== null) {\n console.warn('reCAPTCHA already rendered, skipping render.');\n return;\n }\n\n this.widgetId = grecaptcha.render(containerId, {\n sitekey: this.siteKey,\n callback: (token: string) => {\n this.resolved = true;\n callback(token);\n },\n 'expired-callback': () => {\n this.resolved = false;\n this.toastr.warning('reCAPTCHA expired, please verify again');\n },\n 'error-callback': () => {\n this.resolved = false;\n this.toastr.error('reCAPTCHA error occurred');\n },\n size: 'normal',\n theme: 'light',\n });\n}\n\n\n reset(): void {\n if (typeof grecaptcha !== 'undefined' && this.widgetId !== null) {\n grecaptcha.reset(this.widgetId);\n this.resolved = false;\n }\n }\n\n getResponse(): string {\n if (typeof grecaptcha === 'undefined' || this.widgetId === null) {\n return '';\n }\n return grecaptcha.getResponse(this.widgetId);\n }\n\n isRendered(): boolean {\n return this.widgetId !== null;\n }\n\n isResolved(): boolean {\n return this.resolved && !!this.getResponse();\n }\n\n removeRecaptchaScript(): void {\n const script = document.querySelector('script[src*=\"recaptcha/api.js\"]');\n if (script) {\n script.remove();\n }\n\n const badge = document.querySelector('.grecaptcha-badge');\n if (badge) {\n badge.remove();\n }\n\n this.widgetId = null;\n this.initialized = false;\n this.resolved = false;\n }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-header',\n templateUrl: './header.component.html',\n styleUrls: ['./header.component.scss']\n})\nexport class HeaderComponent {\n @Input() name: string = '';\n @Input() skipMargin: boolean = false;\n\n}\n","<div class=\"head container\">\n <div class=\"registration-header\">\n <p>{{ name }}</p>\n </div>\n <div class=\"line\" *ngIf=\"!skipMargin\"></div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'lib-next-prev-navigation',\n templateUrl: './next-prev-navigation.component.html',\n styleUrls: ['./next-prev-navigation.component.scss']\n})\nexport class NextPrevNavigationComponent {\n\n @Input() skipValidation: boolean = false;\n @Input() currentPageIndex: number = 0;\n @Input() pages: any[] = [];\n @Input() previousPage: any = {};\n @Input() nextPage: any = {};\n @Input() currentPage: any = {};\n @Input() pageDetails: any[] = [];\n @Input() skipMargin: boolean = false;\n @Output() navigateNext = new EventEmitter<void>();\n @Output() navigatePrevious = new EventEmitter<void>();\n @Output() submitEmit: EventEmitter<any> = new EventEmitter<any>();\n @Output() saveAsDraftEmit: EventEmitter<any> = new EventEmitter<any>();\n @Output() cancel: EventEmitter<string> = new EventEmitter<string>();\n @Input() edit: boolean = false;\n @Input() acceptedLanguage: string ='';\n @Output() subFormChange = new EventEmitter<any>();\n @Output() rowSetIndex = new EventEmitter<number>();\n @Input() primaryColor: string = '';\n @Input() secondaryColor: string = '';\n @Input() isActionTriggered: boolean = false;\n @Input() submissionInProgress: boolean = false;\n @Input() submissionInDraft: boolean = false;\n @Input() eligibleForSubmission:{ status: boolean; message: string } = { status: true, message: '' };\n @Input() showCancelButton: boolean = false;\n @Input() submissionProgress = 0;\n @Input() currentStep = 'Submitting form';\n @Input() animatedDots = '';\n showTooltip: boolean = false;\n ngOnInit(){\n }\n\n\n updateSubFormWithSubmissions(event: any) {\n this.subFormChange.emit(event);\n }\n\n onNavigateNext() {\n this.navigateNext.emit();\n }\n\n onNavigatePrevious() {\n this.navigatePrevious.emit();\n }\n\n submitForm() {\n this.submitEmit.emit();\n }\n\n saveAsDraft() {\n this.saveAsDraftEmit.emit();\n }\n\n\n loadMoreData(): void {\n this.rowSetIndex.emit(this.currentPageIndex);\n }\n\n toggleTooltip() {\n this.showTooltip = !this.eligibleForSubmission.status;\n}\n\ncancelled(){\n this.cancel.emit();\n}\n}\n","<!-- <div class=\"pageTitleDiv\" *ngIf=\"!skipMargin\">\n <p class=\"pageTitle\">{{pageDetails[currentPageIndex]?.name}}</p>\n</div> -->\n<div class=\"button-inner-container rounded\" [ngClass]=\"{ 'skip-margin': skipMargin}\">\n <div class=\"tab-content pt-5 pb-3 row\" [attr.name]=\"pages[currentPageIndex].testElementName\">\n <div class=\"data-container\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"200\"\n (scrolled)=\"loadMoreData()\">\n\n <div *ngFor=\"let row of pages[currentPageIndex]?.rows\" class=\"marginSize d-flex\">\n <div *ngFor=\"let grid of row.grid\"\n [ngStyle]=\"{'width.%': (grid.element.count) * (100 / (12))}\">\n <lib-form-elements\n [grid]=\"grid\"\n [currentPageIndex]=\"currentPageIndex\"\n [edit]=\"edit\"\n [acceptedLanguage]=\"acceptedLanguage\"\n [pages]=\"pages\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n state=\"parent\"\n ></lib-form-elements>\n </div>\n </div>\n </div>\n <div [ngStyle]=\"{ display: currentPageIndex === pageDetails.length - 1 ? 'block' : 'none' }\" id=\"captcha-container\"></div>\n\n <div class=\"footerButton\">\n <div\n class=\"prevButtonDiv\"\n [ngClass]=\"{ 'prevDirection-rtl': acceptedLanguage === 'ara' }\">\n <button\n class=\"me-md-2 rounded-pill navButton\"\n [ngStyle]=\"{ 'background-color': primaryColor ? primaryColor: '#084fff' }\"\n type=\"button\"\n (click)=\"onNavigatePrevious()\"\n *ngIf=\"0 < currentPageIndex\"\n >\n <ng-container *ngIf=\"acceptedLanguage === 'ara'; else defaultSvg\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M19.4897 12.0117L4.49975 12.0117\"\n stroke=\"white\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M13.486 6.02344L19.502 12.0004L13.486 17.9774\"\n stroke=\"white\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </ng-container>\n <ng-template #defaultSvg>\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.51025 11.9883L19.5003 11.9883\"\n stroke=\"white\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M10.514 17.9766L4.49805 11.9996L10.514 6.02256\"\n stroke=\"white\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </ng-template>\n Previous | {{ previousPage.name }}\n </button>\n </div>\n <div\n class=\"nextButtonDiv\"\n [ngClass]=\"{ 'nextDirection-rtl': acceptedLanguage === 'ara' }\"\n >\n <button\n class=\"md-2 rounded-pill navButton\"\n [ngStyle]=\"{ 'background-color': primaryColor ? primaryColor: '#084fff' }\"\n type=\"button\"\n (click)=\"onNavigateNext()\"\n *ngIf=\"currentPageIndex < pageDetails.length - 1\"\n >\n Next | {{ nextPage.name }}\n <ng-container *ngIf=\"acceptedLanguage === 'ara'; else defaultSvg\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.51025 11.9883L19.5003 11.9883\"\n stroke=\"white\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M10.514 17.9766L4.49805 11.9996L10.514 6.02256\"\n stroke=\"white\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </ng-container>\n <ng-template #defaultSvg>\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M19.4897 12.0117L4.49975 12.0117\"\n stroke=\"white\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M13.486 6.02344L19.502 12.0004L13.486 17.9774\"\n stroke=\"white\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </ng-template>\n </button>\n <button *ngIf=\"showCancelButton && currentPageIndex == pageDetails.length - 1\" class=\"btn submitButton rounded-pill bg-secondary text-white\"\n (click)=\"cancelled()\" type=\"button\"\n >Cancel</button>\n <div\n *ngIf=\"skipValidation\"\n class=\"button-container position-relative\"\n (mouseenter)=\"showTooltip = true\"\n (mouseleave)=\"showTooltip = false\"\n >\n <button\n class=\"submitBtn ms-md-2 me-md-2 rounded-pill d-flex align-items-center justify-content-center\"\n [ngStyle]=\"{ 'background-color': secondaryColor ? secondaryColor : '#084fff' }\"\n type=\"button\"\n *ngIf=\"currentPageIndex == pageDetails.length - 1 && !isActionTriggered\"\n (click)=\"saveAsDraft()\"\n [disabled]=\"!eligibleForSubmission.status || submissionInDraft\"\n >\n <ng-container *ngIf=\"submissionInDraft; else showSubmitText\">\n\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\n Submitting...\n </ng-container>\n <ng-template #showSubmitText>\n Save Draft\n </ng-template>\n </button>\n <div *ngIf=\"showTooltip && !eligibleForSubmission.status\" class=\"custom-tooltip\">\n {{eligibleForSubmission.message}}\n </div>\n </div>\n\n <div\n class=\"button-container position-relative\"\n (mouseenter)=\"showTooltip = true\"\n (mouseleave)=\"showTooltip = false\"\n >\n <button\n class=\"submitBtn ms-md-2 me-md-2 rounded-pill d-flex align-items-center justify-content-center\"\n [ngStyle]=\"{ 'background-color': primaryColor ? primaryColor : '#084fff' }\"\n type=\"button\"\n *ngIf=\"currentPageIndex == pageDetails.length - 1 && !isActionTriggered\"\n (click)=\"submitForm()\"\n [disabled]=\"!eligibleForSubmission.status || submissionInProgress\"\n >\n <ng-container *ngIf=\"submissionInProgress; else showSubmitText\">\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\n Submitting...\n </ng-container>\n <ng-template #showSubmitText>\n Submit\n </ng-template>\n </button>\n <div *ngIf=\"showTooltip && !eligibleForSubmission.status\" class=\"custom-tooltip\">\n {{eligibleForSubmission.message}}\n </div>\n </div>\n\n </div>\n </div>\n <div *ngIf=\"submissionInProgress\" class=\"text-loader\">\n {{ currentStep }}{{ animatedDots }}\n <span class=\"percentage\">{{ submissionProgress }}%</span>\n </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'lib-submission-container',\n templateUrl: './submission-container.component.html',\n styleUrls: ['./submission-container.component.scss']\n})\nexport class SubmissionContainerComponent {\n @Input() parentQuestionAnswers:any;\n\n isImageUrl(url: string): boolean {\n return url.match(/\\.(jpeg|jpg|gif|png)$/) != null;\n }\n}\n","<div class=\"subModule\">\n <div class=\"submission-container\">\n <div *ngFor=\"let qa of parentQuestionAnswers\" class=\"submission-item\">\n <div class=\"key\">{{ qa.question }}</div>\n <div class=\"value\">\n <ng-container *ngIf=\"qa.elementType === 'FILE_PICKER'; else text\">\n <div class=\"files\" *ngFor=\"let attachment of qa.attachments\">\n <ng-container *ngIf=\"isImageUrl(attachment.fileName); else fileLink\">\n <img [src]=\"attachment.fileUrl\" alt=\"{{ attachment.fileName }}\" class=\"image\">\n </ng-container>\n <ng-template #fileLink>\n <p>{{ attachment.fileName }}</p>\n <a class=\"fileName\" [href]=\"attachment.fileUrl\" target=\"_blank\">\n <i class=\"bi bi-file-earmark\"></i>\n </a>\n </ng-template>\n </div>\n </ng-container>\n <ng-template #text>\n <ng-container [ngSwitch]=\"qa.elementType\">\n <p *ngSwitchCase=\"'RICH_TEXT_EDITOR'\" [innerHTML]=\"qa.values\"></p>\n <p *ngSwitchCase=\"'DROP_DOWN'\">{{ qa.values.join(', ') }}</p>\n <p *ngSwitchCase=\"'SELECTION_MATRIX'\">{{ qa.values.join(', ') }}</p>\n <p *ngSwitchDefault>{{ qa.values }}</p>\n </ng-container>\n </ng-template>\n </div>\n </div>\n</div>\n </div>","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { FormService } from '../../services/form.service';\nimport * as mapper from '../../services/mapper.service';\nimport { PublicForm } from '../../models/publicForm.model';\nimport { ToastrService } from 'ngx-toastr';\nimport { Router } from '@angular/router';\nimport { DataService } from '../../services/data.service';\nimport { RecaptchaService } from '../../services/recaptcha.service';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { NavigationTabsComponent } from '../navigation-tabs/navigation-tabs.component';\nimport { FormValidationService } from '../../services/form-validation.service';\nimport { AggregationFunctionService } from '../../services/aggregate.service';\nimport { EmitterDTO } from '../../models/emitters.model';\nimport { ScoreCalculationService } from '../../services/score.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { SaveDraftModalComponent } from '../save-as-draft/saveDraftModalComponent ';\nimport { WhenClauseService } from '../../services/whenClause.service';\nimport { HttpEventType } from '@angular/common/http';\n\ninterface Answer {\n questionId: string;\n answer: any;\n answerId?: string;\n deleteFiles?: string[];\n fields?: any;\n}\n\ninterface Submission {\n submissionId?: string;\n answers: Answer[];\n}\n\ninterface Form {\n formId: string;\n deleted?: boolean;\n deletedSubmissions: any[];\n submissions: Submission[];\n copiedForms: string[];\n scores?:{\n scoreType: string;\n score: number;\n }[];\n maximumPossibleScore?:number;\n show?:boolean;\n}\n\ninterface CopyForms{\n id: string,\n title: string,\n description: string,\n parentSubform: string,\n questionRelation: Record<string, string>;\n}\n\ninterface WhenClauseElements{\n elementId:string;\n entityType:string;\n show:boolean;\n}\n\ninterface QuestionAnswersWrapper {\n parentId: string;\n answers: Answer[];\n forms: Form[];\n copySubForms:CopyForms[];\n scores?:{\n scoreType: string;\n score: number;\n }[];\n maximumPossibleScore?:number;\n whenClauseElements: WhenClauseElements[]\n}\n\ninterface SubmissionScore {\n scoreType: string;\n score: number;\n}\n\n@Component({\n selector: 'lib-submit-form',\n templateUrl: './submit-form.component.html',\n styleUrls: ['./submit-form.component.scss'],\n})\nexport class SubmitFormComponent implements OnInit, OnDestroy {\n question: PublicForm | null = null;\n @Input() moduleName: string = '';\n @Input() edit: boolean = false;\n @Input() submissionId: string = '';\n @Input() acceptedLanguage: string = '';\n @Input() skipMargin: boolean = false;\n @Input() skipValidation: boolean = false;\n @Input() navigateTo: string = '';\n @Input() country: string = '';\n @Output() submit: EventEmitter<any> = new EventEmitter<any>();\n @Output() apiCalled: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() currentPageIndexChange: EventEmitter<number> =\n new EventEmitter<number>();\n @Input() showCancelButton: boolean = false;\n @Output() cancel: EventEmitter<string> = new EventEmitter<string>();\n @ViewChild(NavigationTabsComponent, { static: false })\n child!: NavigationTabsComponent;\n @Input() isActionTriggered: boolean = false;\n isLoading: boolean = false;\n name: string = '';\n saveAutomatically: boolean = false;\n saveInterval: number = 0;\n customizeFont: boolean = false;\n fontFamily: string = '';\n fontSize: number = 0;\n validationSkip: boolean = false;\n enableDataExport: boolean = false;\n fileFormats: string[] = [];\n enableQuestionNumbering: boolean = false;\n questionNumbering: string = '';\n enableGoogleRecaptcha: boolean = false;\n googleRecaptchaKey: string = '';\n googleRecaptchaSecret: string = '';\n navigation: string = '';\n markAllQuestionsAsRequired: boolean = false;\n pages: any = [];\n currentPageIndex: number = 0;\n previousPage: any = {};\n currentPage: any = {};\n nextPage: any = {};\n lastTab: boolean = false;\n questionAnswers: QuestionAnswersWrapper = {\n parentId: '',\n answers: [],\n forms: [],\n copySubForms: [],\n whenClauseElements: []\n };\n webhook: any;\n files: { questionId: string; file: any ; show?:boolean}[] = [];\n parentQuestions: any;\n submission: any = {};\n parentQuestionAnswers: any;\n parentSubmissionId: string = '';\n submissionInProgress: boolean = false;\n submissionInDraft: boolean = false;\n recaptchaToken: string = '';\n private isRefreshing: boolean = false;\n private intervalId: ReturnType<typeof setInterval> | null = null;\n pageDetails: any = [];\n pageNumber: number = 1;\n rowSet: number = 0;\n rowSetCount: [number] = [0];\n retryCount: number = 0;\n maxRetries: number = 5;\n\n eligibleForSubmission: { status: boolean; message: string } = {\n status: true,\n message: '',\n };\n webhookPayloadArray: any[] = [];\n inValidQuestions: Map<string, string> = new Map<string, string>();\n visitedRows: Map<number, number> = new Map<number, number>();\n allElementIds: string[] = [];\n private debounceTimer: any;\n primaryColor: string = '#084fff';\n secondaryColor: string = '';\n isLoadingPages: boolean = false;\n copySubforms: CopyForms[] = [];\n emitters: EmitterDTO[] = [];\n maxPossibleScore!: number;\n maxPossibleGoodScore!: number;\n maxPossibleBadScore!: number;\n sumOfFindings!: number;\n sumOfGoodFindings!: number;\n sumOfBadFindings!: number;\n draft: boolean = false;\n submissionProgress = 0;\n showSubmissionLoader = false;\n progressInterval: any;\n currentStep = 'Submitting form';\n animatedDots = '';\n private dotInterval: any;\n\n constructor(\n private formService: FormService,\n private toastr: ToastrService,\n private router: Router,\n private dataService: DataService,\n private recaptchaService: RecaptchaService,\n private validationService: ValidationService,\n private changeDetectorRef: ChangeDetectorRef,\n private elementTracker: ElementTrackerService,\n private formValidationService: FormValidationService,\n private aggregateService: AggregationFunctionService,\n private scoreCalcService: ScoreCalculationService,\n public dialog: MatDialog,\n private whenClauseService:WhenClauseService\n ) {\n const navigation = this.router.getCurrentNavigation();\n this.submission = navigation?.extras.state?.['submission'];\n this.parentSubmissionId = this.submission?.id;\n this.parentQuestionAnswers = this.submission?.questionAnswers;\n this.parentQuestions = navigation?.extras.state?.['parentQuestions'];\n this.dataService.setParentQuestions(this.parentQuestions);\n }\n ngOnDestroy(): void {\n this.visitedRows.clear();\n this.recaptchaService.removeRecaptchaScript();\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n this.isRefreshing = false;\n }\n this.aggregateService.clearAll();\n this.recaptchaService.removeRecaptchaScript();\n this.whenClauseService.resetService();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['acceptedLanguage']) {\n this.currentPageIndex = 0;\n this.acceptedLanguage = changes['acceptedLanguage'].currentValue;\n if (!this.edit) this.getFormData();\n }\n if(changes['submissionId']){\n this.submissionId=changes['submissionId'].currentValue;\n if (this.edit && this.submissionId) {\n this.getSubmittedFormData();\n }\n }\n }\n\n ngOnInit() {\n if (this.edit && this.submissionId) {\n // this.getSubmittedFormData();\n } else {\n // this.getFormData();\n }\n\n if (this.enableGoogleRecaptcha) {\n this.recaptchaInitialized();\n }\n }\n\n async recaptchaInitialized() {\n await this.recaptchaService.initialize();\n this.recaptchaService.render('captcha-container', (token) => {});\n }\n\n async getToken(): Promise<string> {\n return new Promise(async (resolve) => {\n try {\n await this.recaptchaService.initialize();\n\n // Check if CAPTCHA was rendered\n if (!this.recaptchaService.isRendered()) {\n console.warn('reCAPTCHA not rendered yet.');\n return resolve('');\n }\n\n // If solved, return the token\n if (this.recaptchaService.isResolved()) {\n const token = this.recaptchaService.getResponse();\n\n return resolve(token);\n }\n\n // If expired or unsolved, return empty string\n console.warn('reCAPTCHA not resolved or expired.');\n return resolve('');\n } catch (err) {\n console.error('reCAPTCHA initialization failed:', err);\n return resolve('');\n }\n });\n }\n\n loadFont(fontName: string): void {\n const fontPath = `assets/fonts/${fontName}.woff2`; // Adjust extension as per your font file\n const style = document.createElement('style');\n style.innerHTML = `\n @font-face {\n font-family: '${fontName}';\n src: url('${fontPath}') format('woff2');\n font-weight: normal;\n font-style: normal;\n }\n body {\n font-family: '${fontName}', sans-serif;\n }\n `;\n document.head.appendChild(style);\n }\n\n getFormData() {\n this.isLoadingPages = true;\n this.formService\n .getQuestions(this.moduleName, 1, 0, true,this.country)\n .subscribe((response: any) => {\n this.isLoadingPages = false;\n this.enableGoogleRecaptcha =\n response.result.moduleConfiguration?.enableGoogleRecaptcha;\n this.question = mapper.mapPublicFormToModel(response);\n this.emitters = this.question.emitters || [];\n this.assignQuestionProperties(this.question);\n this.setUpFontFamily(response);\n this.primaryColor = response.result.primaryColor || '#084fff';\n this.secondaryColor = response.result.secondaryColor;\n if (this.enableGoogleRecaptcha) this.recaptchaInitialized();\n if (response?.result?.pageDetails) {\n this.pageDetails = response.result.pageDetails;\n this.nextPage = this.pageDetails[1];\n }\n this.webhook = response?.result?.webhooks;\n this.webhookPayloadArray = response?.result?.webhooks?.map(\n (w: any) => ({\n id: w.id,\n ...this.extractGroupedWebhookData([w]),\n })\n );\n\n this.rowSetCount[0] = response.result.totalNumberRow;\n for (let i = 0; i < this.pageDetails.length; i++) {\n if (!this.pages[i]) {\n this.pages[i] = [];\n }\n }\n this.checkSubmissionEligibility();\n });\n }\n\n getSubmittedFormData() {\n this.formService\n .getSubmittedForm(\n this.moduleName,\n this.submissionId,\n 1,\n 0,\n this.navigateTo\n )\n .subscribe((response) => {\n this.enableGoogleRecaptcha =\n response.result.moduleConfiguration.enableGoogleRecaptcha;\n this.question = mapper.mapPublicFormToModel(response);\n this.assignQuestionProperties(this.question);\n this.primaryColor = response.result.primaryColor || '#084fff';\n this.secondaryColor = response.result.secondaryColor;\n this.emitters = this.question.emitters || [];\n if (response?.result?.pageDetails) {\n this.pageDetails = response.result.pageDetails;\n this.nextPage = this.pageDetails[1];\n }\n this.webhookPayloadArray;\n this.webhookPayloadArray = response?.result?.webhooks?.map(\n (w: any) => ({\n id: w.id,\n ...this.extractGroupedWebhookData([w]),\n })\n );\n this.rowSetCount[0] = response.result.totalNumberRow;\n for (let i = 0; i < this.pageDetails.length; i++) {\n if (!this.pages[i]) {\n this.pages[i] = [];\n }\n }\n this.setUpFontFamily(response);\n if (this.navigateTo) {\n setTimeout(() => {\n this.navigateToFormElement();\n });\n }\n if (this.enableGoogleRecaptcha) {\n this.recaptchaInitialized();\n }\n this.checkSubmissionEligibility();\n });\n }\n\n setUpFontFamily(response: any) {\n //set font family and font size\n if (response.result?.moduleConfiguration?.customizeFont) {\n this.fontFamily = response.result.moduleConfiguration?.fontFamily;\n this.fontSize = response.result.moduleConfiguration?.fontSize || 18;\n } else {\n this.fontFamily = 'Poppins';\n this.fontSize = 18;\n }\n this.loadFont(this.fontFamily);\n document.documentElement.style.setProperty(\n '--library-font-family',\n this.fontFamily\n );\n document.documentElement.style.setProperty(\n '--library-font-size',\n this.fontSize + 'px'\n );\n }\n\n navigateToFormElement() {\n if (!this.pages) return;\n\n let foundPageIndex: number | null = null;\n\n // Step 1: find the page index\n this.pages.forEach((page: any, pageIndex: number) => {\n if (!page?.rows) return;\n\n page.rows.forEach((row: any) => {\n if (!row?.grid) return;\n\n row.grid.forEach((gridItem: any) => {\n const element = gridItem?.element;\n if (!element) return;\n\n // Case 1: Direct question match\n if (\n gridItem.entityType === 'QUESTION' &&\n element.id === this.navigateTo\n ) {\n foundPageIndex = pageIndex;\n }\n\n // Case 2: Subform match\n if (gridItem.entityType === 'SUBFORM') {\n if (element.id === this.navigateTo) {\n foundPageIndex = pageIndex;\n }\n if (\n element.submissions?.some(\n (s: any) => s.submissionId === this.navigateTo\n )\n ) {\n foundPageIndex = pageIndex;\n }\n }\n });\n });\n });\n\n if (foundPageIndex !== null) {\n // Step 2: Set current page\n this.currentPageIndex = foundPageIndex;\n this.currentPage = this.pages[this.currentPageIndex];\n\n if (this.navigation == 'TAB') {\n this.child.triggerFunction(this.currentPageIndex);\n } else {\n\n this.previousPage = this.pageDetails[this.currentPageIndex - 1];\n this.nextPage = this.pageDetails[this.currentPageIndex + 1];\n }\n // Step 3: Wait for DOM render and scroll\n setTimeout(() => {\n const elementId = `question-${this.navigateTo}`;\n const el = document.getElementById(elementId);\n if (el) {\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n this.checkSubmissionEligibility();\n }\n }, 0);\n } else {\n console.warn(`navigateTo id ${this.navigateTo} not found in any page`);\n }\n }\n\n assignQuestionProperties(question: PublicForm) {\n this.name = question.name;\n this.pages = question.pages;\n if (this.parentQuestions) {\n this.parentQuestionAnswers = question?.questionAnswers;\n this.parentSubmissionId = question?.parentId;\n }\n this.currentPage = this.pages[0];\n this.nextPage = this.pages[1];\n this.saveAutomatically = question.formConfiguration.saveAutomatically;\n this.saveInterval = question.formConfiguration.saveInterval;\n this.customizeFont = question.formConfiguration.customizeFont;\n this.fontFamily = question.formConfiguration.fontFamily;\n this.fontSize = question.formConfiguration.fontSize;\n this.enableDataExport = question.formConfiguration.enableDataExport;\n this.fileFormats = question.formConfiguration.fileFormats;\n this.enableQuestionNumbering =\n question.formConfiguration.enableQuestionNumbering;\n this.questionNumbering = question.formConfiguration.questionNumbering;\n this.enableGoogleRecaptcha =\n question.formConfiguration.enableGoogleRecaptcha;\n this.googleRecaptchaKey = question.formConfiguration.googleRecaptchaKey;\n this.googleRecaptchaSecret =\n question.formConfiguration.googleRecaptchaSecret;\n this.navigation = question.formConfiguration.navigation;\n this.markAllQuestionsAsRequired =\n question.formConfiguration.markAllQuestionsAsRequired;\n this.apiCalled.emit(true);\n }\n\n navigateToNextPage() {\n if (!this.isLoading) {\n this.isLoading = true;\n const nextIndex = this.currentPageIndex + 1;\n if (nextIndex < this.pageDetails.length) {\n if (this.markAllQuestionsAsRequired) {\n const currentPageData = this.pages[this.currentPageIndex];\n let validationResponse = true;\n if (!this.validationSkip) {\n validationResponse =\n this.formValidationService.validateRequiredQuestions(\n currentPageData\n ).isValid;\n }\n if (validationResponse) {\n this.previousPage = this.pageDetails[this.currentPageIndex];\n if (this.pages[nextIndex].length != 0) {\n this.currentPage = this.pages[nextIndex];\n this.currentPageIndex = nextIndex;\n } else {\n this.setCurrentPage(nextIndex);\n }\n this.nextPage = this.pageDetails[nextIndex + 1];\n }\n } else {\n this.previousPage = this.pageDetails[this.currentPageIndex];\n if (this.pages[nextIndex].length != 0) {\n this.currentPage = this.pages[nextIndex];\n this.currentPageIndex = nextIndex;\n } else {\n this.setCurrentPage(nextIndex);\n }\n this.nextPage = this.pageDetails[nextIndex + 1];\n }\n }\n this.isLoading = false;\n this.checkSubmissionEligibility();\n }\n }\n\n navigateToPreviousPage() {\n if (this.currentPageIndex > 0) {\n if (this.markAllQuestionsAsRequired) {\n const currentPageData = this.pages[this.currentPageIndex];\n let validationResponse = true;\n if (!this.validationSkip) {\n validationResponse =\n this.formValidationService.validateRequiredQuestions(\n currentPageData\n ).isValid;\n }\n if (validationResponse) {\n this.nextPage = this.pageDetails[this.currentPageIndex];\n this.currentPageIndex--;\n if (this.pages[this.currentPageIndex].length != 0) {\n this.currentPage = this.pages[this.currentPageIndex];\n } else {\n this.setCurrentPage(this.currentPageIndex);\n }\n this.previousPage = this.pageDetails[this.currentPageIndex - 1];\n }\n } else {\n this.nextPage = this.pageDetails[this.currentPageIndex];\n this.currentPageIndex--;\n if (this.pages[this.currentPageIndex].length != 0) {\n this.currentPage = this.pages[this.currentPageIndex];\n } else {\n this.setCurrentPage(this.currentPageIndex);\n }\n this.previousPage = this.pageDetails[this.currentPageIndex - 1];\n }\n }\n this.checkSubmissionEligibility();\n }\n\n checkSubmissionEligibility(): void {\n this.eligibleForSubmission = this.validateAllElementLoaded();\n }\n\n setCurrentPage(index: number) {\n if (index < this.pages.length) {\n // If page already exists AND has content → no need to fetch again\n if (\n this.pages[index] &&\n this.pages[index].rows &&\n this.pages[index].rows.length > 0\n ) {\n this.checkSubmissionEligibility();\n return;\n }\n }\n this.pageNumber = index + 1;\n if (this.edit) {\n this.formService\n .getSubmittedForm(\n this.moduleName,\n this.submissionId,\n this.pageNumber,\n this.rowSet\n )\n .subscribe((response: any) => { \n const mappedResponse = mapper.mapPageToModel(response.result.pages[0],response.result?.currency,response.result?.defaultCurrency);\n if (mappedResponse) {\n this.pages[index] = mappedResponse;\n }\n this.currentPageIndex = index;\n this.currentPage = this.pages[index];\n this.rowSetCount[index] = response.result.totalNumberRow;\n this.checkSubmissionEligibility();\n });\n } else {\n this.formService\n .getQuestions(this.moduleName, this.pageNumber, this.rowSet, true,this.country)\n .subscribe((response: any) => {\n const mappedResponse = mapper.mapPageToModel(response.result.pages[0],response.result?.currency,response.result?.defaultCurrency);\n if (mappedResponse) {\n this.pages[index] = mappedResponse;\n }\n this.currentPageIndex = index;\n this.currentPage = this.pages[index];\n this.rowSetCount[index] = response.result.totalNumberRow;\n this.checkSubmissionEligibility();\n });\n }\n\n if (this.markAllQuestionsAsRequired) {\n const currentPageData = this.pages[this.currentPageIndex];\n let validationResponse = true;\n if (!this.validationSkip) {\n validationResponse =\n this.formValidationService.validateRequiredQuestions(\n currentPageData\n ).isValid;\n }\n if (validationResponse) {\n this.currentPageIndex = index;\n } else {\n this.checkSubmissionEligibility();\n return;\n }\n } else {\n this.checkSubmissionEligibility();\n this.currentPageIndex = index;\n }\n }\n\n loadMoreData(index: number): void {\n if (!this.isLoading) {\n this.isLoading = true;\n let rowCountLimit = this.rowSetCount[index];\n let i = 0;\n this.pages[index].rows.forEach((row: any) => {\n row.grid.forEach((gridItem: any) => {\n i++;\n });\n });\n let rowCount = i / 20;\n rowCount = Math.ceil(rowCount);\n\n if (this.visitedRows.has(index)) {\n if (this.visitedRows.get(index) === rowCount) {\n this.isLoading = false;\n return;\n }\n }\n\n if (rowCount + 1 > rowCountLimit && !this.navigateTo) {\n this.checkSubmissionEligibility();\n this.isLoading = false;\n return;\n }\n this.visitedRows.set(index, rowCount);\n\n if (this.edit) {\n this.formService\n .getSubmittedForm(\n this.moduleName,\n this.submissionId,\n index + 1,\n rowCount\n )\n .subscribe((response: any) => {\n const newRows = response?.result?.pages[0]?.rows ?? [];\n this.pages[index].rows = [\n ...(this.pages[index]?.rows ?? []),\n ...newRows,\n ];\n this.currentPageIndex = index;\n this.currentPage = this.pages[index];\n this.rowSetCount[index] = response.result.totalNumberRow;\n this.checkSubmissionEligibility();\n this.isLoading = false;\n });\n } else {\n this.formService\n .getQuestions(this.moduleName, index + 1, rowCount)\n .subscribe((response: any) => {\n const newRows = response?.result?.pages[0]?.rows ?? [];\n this.pages[index].rows = [\n ...(this.pages[index]?.rows ?? []),\n ...newRows,\n ];\n this.currentPageIndex = index;\n this.currentPage = this.pages[index];\n this.rowSetCount[index] = response.result.totalNumberRow;\n this.checkSubmissionEligibility();\n this.isLoading = false;\n });\n }\n\n this.checkSubmissionEligibility();\n }\n }\n\n generateQuestionAnswers() {\n this.maxPossibleScore = 1;\n this.sumOfFindings = 0;\n this.sumOfBadFindings = 0;\n this.sumOfGoodFindings = 0;\n this.maxPossibleBadScore = 0;\n this.maxPossibleGoodScore = 0;\n this.copySubforms = [];\n\n // this.maxPossibleGoodScore = 0;\n // this.maxPossibleBadScore = 0;\n const extractQuestions = (\n formElements: any[],\n parentFormId: string | null = null,\n isInSubForm: boolean = false,\n subFormIndex: number = 0\n ): { answers: Answer[]; forms: Form[] } => {\n const questions: Answer[] = [];\n const forms: Form[] = [];\n formElements.forEach((element) => {\n if (element.entityType === 'QUESTION' && element.show) {\n let baseQuestion: any;\n if (element.element.formElement.elementType === 'FILE_PICKER') {\n baseQuestion = {\n questionId: element.element.id,\n answer: '',\n };\n if (Array.isArray(element.element.answer)) {\n const questionId = isInSubForm\n ? `${parentFormId}_${subFormIndex}_${element.element.id}`\n : element.element.id;\n this.files.push({\n questionId: questionId,\n file: element.element.answer,\n show: element.show\n });\n }\n } else {\n baseQuestion = {\n questionId: element.element.id,\n answer: element.element.answer,\n score: element.element.score,\n maximumPossibleScore: element.element.maxPossibleScore,\n currencySymbol: element.element?.currencySymbol,\n amountInWords: element.element?.amountInWords,\n show: element.show\n };\n }\n if (this.edit) {\n questions.push({\n ...baseQuestion,\n answerId: element.element.answerId || '',\n deleteFiles: element.element.deleteFiles || [],\n });\n } else {\n questions.push(baseQuestion);\n }\n\n if (\n (element.element.formElement.elementType === 'DROP_DOWN' ||\n element.element.formElement.elementType === 'RADIO_BUTTON' ||\n element.element.formElement.elementType === 'CHECK_BOX') &&\n element.element.formElement.scoring &&\n element.element.formElement.scoring.enableScoring &&\n !isInSubForm\n ) {\n this.maxPossibleScore *=\n this.scoreCalcService.getMaxPossibleScoreForQuestion(\n element.element\n );\n if (\n element.element.score &&\n element.element.score != null &&\n element.element.score != undefined\n ) {\n this.sumOfFindings += element.element.score;\n }\n }\n\n if (element.element.childLogics) {\n for (let logic of element.element.childLogics) {\n if (logic.showLogic) {\n for (let row of logic.rows) {\n const result = extractQuestions(\n row.grid,\n parentFormId,\n isInSubForm,\n subFormIndex\n );\n questions.push(...result.answers);\n forms.push(...result.forms);\n }\n }\n }\n }\n } else if (element.entityType === 'SUBFORM' && element.show) {\n const subformId = element.element.id;\n const submissionId = element.element.submissionId;\n if (element.element.copySubformMeta) {\n this.copySubforms.push(element.element.copySubformMeta);\n }\n if (element.element.property.subFormStructure === 'single') {\n let allAnswers: Answer[] = [];\n\n element.element.rows.forEach((row: any) => {\n const extracted = extractQuestions(\n row.grid,\n subformId,\n true,\n forms.length\n );\n extracted.answers.forEach((answer) => {\n allAnswers.push({ ...answer });\n });\n });\n let copiedForms;\n if (element.element.copiedForms) {\n copiedForms = element.element.copiedForms;\n }\n const subform: Form = {\n formId: subformId,\n deleted: element.element.deleted,\n deletedSubmissions: [],\n submissions: [\n {\n submissionId: submissionId,\n answers: allAnswers,\n },\n ],\n copiedForms: copiedForms,\n };\n\n forms.push(subform);\n } else if (element.element.property.subFormStructure === 'multiple') {\n const subformAnswers: Answer[] = [];\n let subformQuestions: any = { answers: [] };\n element.element.rows.forEach((row: any) => {\n subformQuestions = extractQuestions(\n row.grid,\n subformId,\n true,\n forms.length\n );\n });\n const existingSubform = forms.find(\n (form) => form.formId === subformId\n );\n if (\n (element.element.property.subFormType == 'inline' ||\n element.element.property.subFormType == 'card') &&\n element.element.submissions\n ) {\n element.element.submissions = this.clearEmptySubmissions(\n element.element.submissions\n );\n }\n element.element?.submissions?.forEach(\n (submission: any, index: number) => {\n for (const s of submission.scores ?? []) {\n if (s.scoreType === 'GOOD_SCORE') {\n this.sumOfGoodFindings += s.score;\n }\n if (s.scoreType === 'BAD_SCORE') {\n this.sumOfBadFindings += s.score;\n }\n }\n delete submission.hasAllScoringAnsweredOnce;\n submission.answers.forEach((answer: any) => {\n delete answer.htmlContent;\n if (Array.isArray(answer.files)) {\n const questionId = `${subformId}_${index}_${answer.questionId}`;\n this.files.push({\n questionId: questionId,\n file: answer.files,\n });\n delete answer.files;\n }\n delete answer.attachments;\n });\n }\n );\n let copiedForms;\n if (element.element.copiedForms) {\n copiedForms = element.element.copiedForms;\n }\n\n const subform: Form = {\n formId: subformId,\n deleted: element.element.deleted,\n scores: element.element.scores,\n deletedSubmissions: element.element.deletedSubmissions,\n submissions: element.element.submissions,\n copiedForms: copiedForms,\n };\n forms.push(subform);\n this.maxPossibleScore +=\n element.element?.maxPossibleScore *\n element.element?.submissions?.length;\n this.maxPossibleGoodScore +=\n element.element?.maxPossibleScore?.good *\n element.element?.submissions?.length || 0;\n this.maxPossibleBadScore +=\n element.element?.maxPossibleScore?.bad *\n element.element?.submissions?.length || 0;\n }\n } else if (element.entityType === 'QUESTION_GROUP' && element.show) {\n // Handle Question Group by iterating through rows\n element.element.rows.forEach((row: any) => {\n row.grid.forEach((gridItem: any) => {\n if (gridItem.entityType === 'QUESTION' && gridItem.show) {\n let baseQuestion: any;\n if (\n gridItem.element?.formElement.elementType === 'FILE_PICKER'\n ) {\n baseQuestion = {\n questionId: gridItem.element.id,\n answer: '',\n };\n if (Array.isArray(gridItem.element.answer)) {\n const questionId = isInSubForm\n ? `${parentFormId}_${subFormIndex}_${gridItem.element.id}`\n : gridItem.element.id;\n this.files.push({\n questionId: questionId,\n file: gridItem.element.answer,\n });\n }\n } else {\n baseQuestion = {\n questionId: gridItem.element.id,\n answer: gridItem.element.answer,\n amountInWords: gridItem.element.amountInWords\n };\n }\n if (this.edit) {\n questions.push({\n ...baseQuestion,\n answerId: gridItem.element.answerId || '',\n deleteFiles: gridItem.element.deleteFiles || [],\n });\n } else {\n questions.push(baseQuestion);\n }\n\n if (gridItem.element.childLogics) {\n for (let logic of gridItem.element.childLogics) {\n if (logic.showLogic) {\n for (let row of logic.rows) {\n const result = extractQuestions(\n row.grid,\n parentFormId,\n isInSubForm,\n subFormIndex\n );\n questions.push(...result.answers);\n forms.push(...result.forms);\n }\n }\n }\n }\n }\n });\n });\n } else if (element.entityType === 'MULTIFIELD' && element.show) {\n element.element.rows.forEach((row: any) => {\n row.grid.forEach((gridItem: any) => {\n if (gridItem.entityType === 'QUESTION' && gridItem.show) {\n questions.push({\n questionId: gridItem.element.id,\n answer: gridItem.element.answer || '',\n });\n }\n });\n });\n }\n });\n return { answers: questions, forms: forms };\n };\n\n const processPages = (\n pages: any[]\n ): { answers: Answer[]; forms: Form[] } => {\n const questions: Answer[] = [];\n const forms: Form[] = [];\n\n pages.forEach((page) => {\n page.rows.forEach((row: any) => {\n const result = extractQuestions(row.grid);\n questions.push(...result.answers);\n forms.push(...result.forms);\n });\n });\n\n return { answers: questions, forms: forms };\n };\n const result = processPages(this.pages);\n const grids = this.whenClauseService.getActiveWhenClauseGrids();\n const simplified = grids.map(grid => ({\n elementId: grid?.element?.id ?? null,\n entityType: grid?.entityType ?? null,\n show: grid?.show ?? false\n }));\n this.questionAnswers = {\n parentId: '',\n answers: result.answers,\n forms: result.forms,\n copySubForms: this.copySubforms,\n whenClauseElements: simplified\n };\n }\n\n clearEmptySubmissions(submissions: any) {\n const nonEmptySubmissions: Submission[] = [];\n const emptySubmissionIds: string[] = [];\n\n submissions.forEach((submission: any) => {\n const hasValue = submission.answers.some(\n (answer: any) =>\n answer.answer !== '' &&\n answer.answer !== null &&\n answer.answer !== undefined\n );\n if (hasValue) {\n nonEmptySubmissions.push(submission);\n } else if (submission.submissionId) {\n emptySubmissionIds.push(submission.submissionId);\n }\n });\n\n submissions = nonEmptySubmissions;\n return submissions;\n }\n\n validateAllElementLoaded(): { status: boolean; message: string } {\n if (this.pages.length < this.pageDetails.length) {\n return {\n status: false,\n message:\n 'Please ensure all pages are fully visible before submitting the form.',\n };\n }\n\n const incompletePages: string[] = [];\n\n this.pages.forEach((p: any, i: number) => {\n if (p && Array.isArray(p.rows)) {\n let j = 0;\n p.rows.forEach((row: any) => {\n row.grid.forEach((gridItem: any) => {\n j++;\n });\n });\n if (\n !p ||\n !Array.isArray(p.rows) ||\n (Math.ceil(j / 20) != this.rowSetCount[i] && !this.navigateTo)\n ) {\n incompletePages.push(this.pageDetails[i].name);\n }\n } else {\n incompletePages.push(this.pageDetails[i].name);\n }\n });\n\n if (incompletePages.length > 0) {\n return {\n status: false,\n message: `Some sections are still loading. Please scroll through the following pages to ensure all questions are loaded: ${incompletePages.join(\n ', '\n )}.`,\n };\n }\n\n return {\n status: true,\n message: 'Great! All sections are complete. You can now submit the form.',\n };\n }\n saveasDraftPopup(): void {\n if (!this.skipValidation) {\n return;\n }\n const dialogRef = this.dialog.open(SaveDraftModalComponent, {\n width: '450px',\n panelClass: 'custom-dialog-container',\n autoFocus: false,\n disableClose: true,\n data: {\n primaryColor: this.primaryColor,\n },\n });\n\n dialogRef.afterClosed().subscribe((result) => {\n if (result) {\n this.validationSkip = true;\n this.submitForm();\n } else {\n this.validationSkip = false;\n }\n });\n }\n\n saveAsDraft() {\n this.validationSkip = true;\n this.draft = true;\n this.submitForm();\n }\n\n async submitForm() {\n this.startSubmissionLoader();\n if (this.webhook) {\n this.webhookPayloadArray = this.webhook.map((w: any) => ({\n id: w.id,\n ...this.extractGroupedWebhookData([w]),\n }));\n }\n if (!this.validateAllElementLoaded().status) {\n this.toastr.warning('Please wait for all elements to load');\n this.submit.emit({\n status: 'failed',\n });\n return;\n }\n if (this.submissionInProgress || this.submissionInDraft) {\n this.submit.emit({\n status: 'failed',\n });\n return;\n }\n let recaptchaToken: string | undefined;\n this.inValidQuestions.clear();\n this.validationService.clearAll();\n if (this.enableGoogleRecaptcha) {\n try {\n recaptchaToken = await this.getToken();\n\n if (!recaptchaToken) {\n this.toastr.error(\n 'Please complete the CAPTCHA verification before submitting the form.'\n );\n this.submissionInProgress = false;\n this.submissionInDraft = false;\n this.resetSubmissionLoader();\n this.validationSkip = false;\n this.draft = false;\n this.submit.emit({\n status: 'failed',\n });\n return;\n }\n } catch (error: any) {\n console.error(\n 'Error while getting reCAPTCHA token:',\n error.error?.message\n );\n this.toastr.error('Failed to verify reCAPTCHA.');\n this.submissionInProgress = false;\n this.submissionInDraft = false;\n this.resetSubmissionLoader();\n this.validationSkip = false;\n this.draft = false;\n this.submit.emit({\n status: 'failed',\n });\n return;\n }\n }\n\n if (this.draft || this.validationSkip) {\n this.submissionInDraft = true;\n } else {\n this.submissionInProgress = true;\n }\n\n let validationResponse = true;\n if (!this.validationSkip) {\n validationResponse = this.validateForm(this.pages).isValid;\n }\n\n if (!validationResponse) {\n this.saveasDraftPopup();\n this.submissionInProgress = false;\n this.submissionInDraft = false;\n this.resetSubmissionLoader();\n this.validationSkip = false;\n this.draft = false;\n this.submit.emit({\n status: 'failed',\n });\n return;\n }\n const getCircularReplacer = () => {\n const seen = new WeakSet();\n return (_key: string, value: any) => {\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return undefined;\n }\n seen.add(value);\n }\n return value;\n };\n };\n\n this.generateQuestionAnswers();\n const formFinalScore = this.calculateFormFinalScore();\n this.questionAnswers.scores = formFinalScore;\n if (validationResponse) {\n const formData = new FormData();\n formData.append('skipValidation', this.validationSkip ? 'true' : 'false');\n this.questionAnswers.parentId = this.parentSubmissionId;\n formData.append(\n 'json',\n JSON.stringify(this.questionAnswers, getCircularReplacer())\n );\n if (this.webhookPayloadArray) {\n formData.append(\n 'webhookPayload',\n JSON.stringify(this.webhookPayloadArray)\n );\n } else {\n formData.append('webhookPayload', JSON.stringify([]));\n }\n if (this.files.length > 0) {\n const seenQuestionIds = new Set<string>();\n\n const uniqueFiles = this.files.filter((fileItem) => {\n if (seenQuestionIds.has(fileItem.questionId)) {\n return false;\n }\n seenQuestionIds.add(fileItem.questionId);\n return true;\n });\n\n uniqueFiles.forEach((fileItem) => {\n fileItem.file.forEach((file: any) => {\n formData.append(fileItem.questionId, file._file);\n });\n });\n }\n const formServiceCall =\n this.edit && this.submissionId\n ? this.formService.updateForm(\n this.moduleName,\n this.submissionId,\n formData,\n recaptchaToken ?? ''\n )\n : this.formService.submitForm(\n this.moduleName,\n formData,\n recaptchaToken ?? ''\n );\n\n formServiceCall.subscribe({\n next: (event) => {\n if (event.type === HttpEventType.UploadProgress) {\n if (event.total) {\n const percentDone = Math.round((event.loaded / event.total) * 100);\n this.setProgress(Math.min(95, percentDone));\n }\n }\n \n if (event.type === HttpEventType.Response) {\n this.completeSubmissionLoader();\n \n const response = event.body;\n \n // existing success logic ↓\n this.toastr.success(\n this.edit\n ? 'Form updated successfully'\n : 'Form submitted successfully'\n );\n let emittingValues;\n if (this.emitters) {\n emittingValues = this.mapEmittersToValues();\n }\n \n if (this.validationSkip || this.draft) {\n this.submit.emit({\n status: 'draft',\n submissionId: response.result,\n score: formFinalScore,\n ...(emittingValues || {}),\n });\n } else {\n this.submit.emit({\n status: 'success',\n submissionId: response.result,\n score: formFinalScore,\n ...(emittingValues || {}),\n });\n }\n this.submissionInProgress = false;\n this.submissionInDraft = false;\n this.draft = false;\n this.validationSkip = false;\n }\n },\n error: (error) => {\n this.validationService.clearAll();\n this.findQuestionPageIndex(\n this.parseErrorsToMap(error.error.message)\n );\n this.currentPageIndex = this.pages.length - 1;\n this.navigateToFirstError();\n this.resetSubmissionLoader();\n this.submissionInProgress = false;\n this.draft = false;\n this.validationSkip = false;\n this.submissionInDraft = false;\n this.saveasDraftPopup();\n this.submit.emit({\n status: 'failed',\n message: error.error.message\n });\n },\n });\n } else {\n // this.toastr.error(validationResponse.message);\n this.submit.emit({\n status: 'failed',\n });\n this.saveasDraftPopup();\n this.submissionInProgress = false;\n this.submissionInDraft = false;\n this.resetSubmissionLoader();\n this.validationSkip = false;\n this.draft = false;\n }\n }\n\nsetProgress(value: number) {\n this.submissionProgress = value;\n this.updateStepText(value);\n}\n\n\nstartSubmissionLoader() {\n this.showSubmissionLoader = true;\n this.setProgress(0);\n\n // Simulated progress until backend upload updates it\n this.progressInterval = setInterval(() => {\n if (this.submissionProgress < 85) {\n this.setProgress(this.submissionProgress + 2);\n }\n }, 300);\n}\n\ncompleteSubmissionLoader() {\n clearInterval(this.progressInterval);\n\n this.setProgress(100);\n\n setTimeout(() => {\n this.showSubmissionLoader = false;\n this.setProgress(0);\n }, 500);\n}\n\nresetSubmissionLoader() {\n clearInterval(this.progressInterval);\n\n this.showSubmissionLoader = false;\n clearInterval(this.dotInterval);\n this.animatedDots = '';\n this.setProgress(0);\n}\n\n\nstartTextLoader() {\n let dotCount = 0;\n\n this.dotInterval = setInterval(() => {\n dotCount = (dotCount + 1) % 4;\n this.animatedDots = '.'.repeat(dotCount);\n }, 500);\n}\n\nupdateStepText(progress: number) {\n if (progress < 25) {\n this.currentStep = 'Validating form';\n } else if (progress < 60) {\n this.currentStep = 'Uploading data';\n } else if (progress < 90) {\n this.currentStep = 'Saving submission';\n } else {\n this.currentStep = 'Finalizing';\n }\n}\n\n calculateFormFinalScore(): SubmissionScore[] {\n const goodScore = this.maxPossibleGoodScore\n ? 100 - (this.sumOfGoodFindings / this.maxPossibleGoodScore) * 100\n : 0;\n\n const badScore = this.maxPossibleBadScore\n ? 100 - (this.sumOfBadFindings / this.maxPossibleBadScore) * 100\n : 0;\n\n return [\n { scoreType: 'GOOD_SCORE', score: Math.round(goodScore) },\n { scoreType: 'BAD_SCORE', score: Math.round(badScore) },\n ];\n }\n\n mapEmittersToValues(): { [key: string]: any } {\n const answerMap = new Map(\n this.questionAnswers.answers.map((qa) => [qa.questionId, qa.answer])\n );\n\n const result: { [key: string]: any } = {};\n\n this.emitters.forEach((emitter) => {\n if (emitter.valueSource === 'CUSTOM_INPUT') {\n result[emitter.keyName] = emitter.inputValue;\n } else if (\n emitter.valueSource === 'QUESTION' &&\n emitter.questionId &&\n answerMap.has(emitter.questionId)\n ) {\n result[emitter.keyName] = answerMap.get(emitter.questionId);\n }\n });\n\n return result;\n }\n\n parseErrorsToMap(errorString: string): Map<string, string> {\n const errorMap = new Map<string, string>();\n // Convert the incorrect format to a valid object structure\n errorString\n .replace(/[{}]/g, '') // Remove curly braces\n .split(', ') // Split key-value pairs\n .forEach((pair) => {\n const [key, value] = pair.split('=');\n if (key && value) {\n errorMap.set(key.trim(), value.trim()); // Store in Map\n }\n });\n\n return errorMap;\n }\n async navigateToFirstError() {\n const firstError = this.validationService.getFirstInvalid();\n if (!firstError) return;\n\n const elementId = `question-${firstError.id}`;\n\n this.retryCount = 0;\n\n // Change page if needed\n if (this.currentPageIndex !== firstError.pageIndex) {\n this.currentPageIndex = firstError.pageIndex;\n if (this.currentPageIndex + 1 < this.pageDetails.length) {\n this.nextPage = this.pageDetails[this.currentPageIndex + 1];\n }\n if (this.currentPageIndex - 1 >= 0) {\n this.previousPage = this.pageDetails[this.currentPageIndex - 1];\n }\n\n this.debounce(() => this.changeDetectorRef.detectChanges(), 100);\n if (this.navigation === 'TAB')\n this.child.triggerFunction(firstError.pageIndex);\n }\n\n await this.scrollToElementWithRetry(elementId);\n }\n\n private async scrollToElementWithRetry(elementId: string): Promise<void> {\n this.retryCount++;\n const element = document.getElementById(elementId);\n\n if (element) {\n requestAnimationFrame(() => this.scrollAndFocus(element));\n return;\n }\n\n if (this.retryCount < this.maxRetries) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n return this.scrollToElementWithRetry(elementId);\n }\n\n console.error(\n `Element ${elementId} not found after ${this.maxRetries} attempts`\n );\n requestAnimationFrame(() => this.fallbackScroll());\n }\n\n private scrollAndFocus(element: HTMLElement) {\n element.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'nearest',\n });\n\n const focusable = element.querySelector(\n 'input, select, textarea, button, [tabindex]:not([tabindex=\"-1\"])'\n ) as HTMLElement;\n focusable?.focus();\n }\n\n private fallbackScroll() {\n const pageElement = document.querySelector(\n `.page-${this.currentPageIndex}`\n );\n pageElement?.scrollIntoView({ behavior: 'auto' });\n }\n\n private debounce(func: () => void, delay: number) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = setTimeout(func, delay);\n }\n // extractId(message: string): string | null {\n // const match = message.match(/[0-9a-fA-F-]{36}/);\n // return match ? match[0] : null;\n // }\n\n // removeId(message: string): string {\n // return message.replace(/[0-9a-fA-F-]{36}$/, \"\").trim();\n // }\n\n findQuestionPageIndex(questionErrors: Map<string, string>): void {\n for (let pageIndex = 0; pageIndex < this.pages.length; pageIndex++) {\n const page = this.pages[pageIndex];\n\n for (const row of page.rows) {\n for (const element of row.grid) {\n this.checkAndStoreInvalidQuestions(\n element,\n questionErrors,\n pageIndex\n );\n }\n }\n }\n }\n\n private checkAndStoreInvalidQuestions(\n element: any,\n questionErrors: Map<string, string>,\n pageIndex: number\n ): void {\n if (element.element.id && questionErrors.has(element.element.id)) {\n this.validationService.setInvalid(\n element.element.id,\n questionErrors.get(element.element.id)!,\n pageIndex\n );\n }\n\n // Handle subforms recursively\n if (element.entityType === 'SUBFORM' && element.element.rows) {\n for (const row of element.element.rows) {\n for (const gridItem of row.grid) {\n this.checkAndStoreInvalidQuestions(\n gridItem,\n questionErrors,\n pageIndex\n );\n }\n }\n }\n if (\n (element.entityType === 'QUESTION_GROUP' ||\n element.entityType === 'MULTIFIELD') &&\n element.element.rows\n ) {\n for (const row of element.element.rows) {\n for (const gridItem of row.grid) {\n this.checkAndStoreInvalidQuestions(\n gridItem,\n questionErrors,\n pageIndex\n );\n }\n }\n }\n\n // Handle logic-based conditions recursively\n if (element.entityType === 'QUESTION' && element.element.childLogics) {\n for (const logic of element.element.childLogics) {\n if (logic.showLogic) {\n for (const row of logic.rows) {\n for (const gridItem of row.grid) {\n this.checkAndStoreInvalidQuestions(\n gridItem,\n questionErrors,\n pageIndex\n );\n }\n }\n }\n }\n }\n }\n\n focusQuestionElement(container: HTMLElement) {\n // Find first focusable element within the question\n const focusable = container.querySelector(\n 'input, select, textarea, [tabindex]'\n );\n if (focusable) {\n (focusable as HTMLElement).focus();\n } else {\n container.focus();\n }\n }\n validateForm(jsonData: any): {\n isValid: boolean;\n message: string;\n pageIndex: number | 0;\n } {\n const validateQuestions = (\n formElements: any[]\n ): { isValid: boolean; message: string; pageIndex: number | 0 } => {\n for (let element of formElements) {\n if (element.entityType === 'QUESTION') {\n const required = element.element.required;\n const answer = element.element.answer;\n const validation = element.element.validation;\n const show = element.show;\n if (element.element.formElement.elementType === 'FILE_PICKER') {\n const attachment = element.element.attachments;\n if (required && show) {\n if (\n (!answer || answer?.length === 0) &&\n (!attachment || attachment?.length == 0)\n ) {\n this.inValidQuestions.set(\n element.element.id,\n 'Required file question has no files uploaded.'\n );\n return {\n isValid: false,\n message: `Form is invalid - Required file question ${element.element.questionNumber} has no files uploaded.`,\n pageIndex: 0,\n };\n }\n }\n } else {\n if (required && show) {\n if (\n answer === null ||\n answer === undefined ||\n (typeof answer === 'string' && answer.trim() === '') ||\n (typeof answer === 'object' && Object.keys(answer).length === 0)\n ) {\n this.inValidQuestions.set(\n element.element.id,\n 'This is a required question'\n );\n return {\n isValid: false,\n message: `Form is invalid - Question ${element.element.questionNumber} is required but no answer provided.`,\n pageIndex: 0,\n };\n } else if (validation === false) {\n this.inValidQuestions.set(\n element.element.id,\n element.element.validationMessage\n );\n return {\n isValid: false,\n message: `Form is invalid - Question ${element.element.questionNumber} is required but validation is false.`,\n pageIndex: 0,\n };\n }\n } else if (!required && answer && Object.keys(answer).length > 0) {\n if (validation === false) {\n this.inValidQuestions.set(\n element.element.id,\n element.element.validationMessage\n );\n return {\n isValid: false,\n message: `Form is invalid - Question ${element.element.questionNumber} is not required but answer provided with validation false.`,\n pageIndex: 0,\n };\n }\n }\n }\n if (element.element.childLogics) {\n for (let logic of element.element.childLogics) {\n if (logic.showLogic) {\n const result = validateQuestions(logic.rows);\n if (!result.isValid) return result;\n }\n }\n }\n } else if (element.entityType === 'SUBFORM' && !element.element.deleted) {\n if(element.element.property?.subFormStructure == 'single'){\n for(let row of element.element.rows){\n const result = validateQuestions(row.grid);\n if (!result.isValid) return result;\n }\n } else {\n this.validateSubForm(element);\n }\n } else if (\n (element.entityType === 'QUESTION_GROUP' ||\n element.entityType === 'MULTIFIELD') &&\n element.element.rows\n ) {\n for (const row of element.element.rows) {\n const result = validateQuestions(row.grid);\n if (!result.isValid && element.entityType != 'MULTIFIELD')\n return result;\n }\n }\n }\n return { isValid: true, message: '', pageIndex: 0 };\n };\n\n for (let pageIndex = 0; pageIndex < jsonData.length; pageIndex++) {\n const page = jsonData[pageIndex];\n for (let row of page.rows) {\n const result = validateQuestions(row.grid);\n this.inValidQuestions.forEach((message: string, id: string) => {\n this.validationService.setInvalid(id, message, pageIndex);\n });\n this.inValidQuestions = new Map<string, string>();\n // if (!result.isValid) {\n // return {\n // isValid: false,\n // message: `Page ${pageIndex + 1}: ${result.message}`,\n // pageIndex: pageIndex,\n // };\n // }\n }\n }\n this.currentPageIndex = jsonData.length - 1;\n if (this.validationService.getFirstInvalid()) {\n this.navigateToFirstError();\n return {\n isValid: false,\n message: `Page`,\n pageIndex: 0,\n };\n }\n return {\n isValid: true,\n message: 'Form is valid.',\n pageIndex: 0,\n };\n }\n\n validateSubForm(element: any) {\n if (element.entityType !== 'SUBFORM') {\n return;\n }\n \n const submissions = element.element?.submissions || [];\n \n /* ------------------------------\n * 1️⃣ Subform required but no submission\n * ------------------------------ */\n if (element.element?.required && submissions.length === 0) {\n this.inValidQuestions.set(\n element.element.id,\n 'At least one submission is required'\n );\n return; // nothing else to validate\n }\n \n submissions.forEach((submission: any, submissionIndex: number) => {\n const answers = submission.answers || [];\n \n /* ------------------------------\n * 2️⃣ Submission exists but no answers\n * ------------------------------ */\n const hasAnyAnswer = answers.some(\n (a: any) =>\n a.answer !== null &&\n a.answer !== undefined &&\n a.answer !== '' &&\n !(Array.isArray(a.answer) && a.answer.length === 0)\n );\n \n if (element.element?.required && !hasAnyAnswer) {\n const key = `${element.element.id}`;\n this.inValidQuestions.set(\n key,\n 'At least one answer is required in the subform'\n );\n return;\n }\n \n /* ------------------------------\n * 3️⃣ Existing question-level validations\n * ------------------------------ */\n answers.forEach((answerObj: any) => {\n const question = this.findQuestionById(\n element.element.rows,\n answerObj.questionId\n );\n \n const ans = answerObj.answer;\n \n // Required question check\n if ((question?.required || answerObj.required) &&\n (ans === '' || ans === null || ans === undefined || ans?.length === 0)) {\n const key = `${submissionIndex}-${question.id}`;\n this.inValidQuestions.set(key, 'This is a required question');\n }\n \n // Email validation\n if (question?.formElement?.elementType === 'EMAIL' && ans) {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(ans)) {\n const key = `${submissionIndex}-${question.id}`;\n this.inValidQuestions.set(\n key,\n 'Please enter a valid email address'\n );\n }\n }\n });\n });\n }\n \n\n // 🔍 Helper: find question definition inside rows\n private findQuestionById(rows: any[], questionId: string): any {\n for (const row of rows) {\n for (const gridElement of row.grid) {\n if (\n gridElement.entityType === 'QUESTION' &&\n gridElement.element.id === questionId\n ) {\n return gridElement.element;\n }\n }\n }\n return null;\n }\n\n updateSubFormWithSubmissions(event: any) {\n this.updateSubForm(this.pages, event);\n }\n\n updateSubForm = (pages: any[], updatedSubForm: any) => {\n pages.forEach((page) => {\n page.rows.forEach((row: any) => {\n row.grid.forEach((element: any) => {\n if (\n element.entityType === 'SUBFORM' &&\n element.element.id === updatedSubForm.id\n ) {\n // Update the existing subform with the new data\n element.element = updatedSubForm;\n } else if (\n element.entityType === 'SUBFORM' &&\n element.element.id !== updatedSubForm.formId\n ) {\n // Handle multiple subforms logic here if needed\n } else if (\n element.entityType === 'QUESTION' &&\n element.element.childLogics\n ) {\n // Recursively update child logics\n // element.element.childLogics.forEach((logic: any) => {\n // if (logic.showLogic) {\n // this.updateSubForm(logic.rows, updatedSubForm);\n // }\n // });\n }\n });\n });\n });\n };\n\n extractGroupedWebhookData(webhooks: any[]): {\n headers: Record<string, string>;\n params: Record<string, string>;\n pathVariables: Record<string, string>;\n requestBodies: Record<string, string>;\n } {\n const result: {\n headers: Record<string, string>;\n params: Record<string, string>;\n pathVariables: Record<string, string>;\n requestBodies: Record<string, string>;\n } = {\n headers: {},\n params: {},\n pathVariables: {},\n requestBodies: {},\n };\n\n for (const webhook of webhooks ?? []) {\n for (const item of webhook?.headers ?? []) {\n const value = this.getValueFromStorage(item.valueSource, item.inputValue);\n if (value !== null) {\n result.headers[item.keyName] = value;\n }\n }\n\n for (const item of webhook?.params ?? []) {\n const value = this.getValueFromStorage(item.valueSource, item.inputValue);\n if (value !== null) {\n result.params[item.keyName] = value;\n }\n }\n\n for (const item of webhook?.pathVariables ?? []) {\n const value = this.getValueFromStorage(item.valueSource, item.inputValue);\n if (value !== null) {\n result.pathVariables[item.keyName] = value;\n }\n }\n\n for (const item of webhook?.requestBodies ?? []) {\n const value = this.getValueFromStorage(item.valueSource, item.inputValue);\n if (value !== null) {\n result.requestBodies[item.keyName] = value;\n }\n }\n }\n\n return result;\n }\n\n getValueFromStorage(\n source: 'LOCAL_STORAGE' | 'SESSION_STORAGE',\n key: string\n ): string | null {\n if (source === 'LOCAL_STORAGE') return localStorage.getItem(key);\n if (source === 'SESSION_STORAGE') return sessionStorage.getItem(key);\n return null;\n }\n\n cancelled(){\n this.cancel.emit();\n }\n}\n","<div class=\"outer-container\">\n\n<ng-container *ngIf=\"isLoadingPages\">\n <ngx-skeleton-loader count=\"5\"></ngx-skeleton-loader>\n</ng-container>\n\n <div class=\"head container\" *ngIf=\"!skipMargin\">\n <lib-header [name]=\"name\" [skipMargin]=\"skipMargin\"></lib-header>\n </div>\n\n\n\n <div class=\"body\" [ngClass]=\"{ 'skip-margin': skipMargin,container: !skipMargin}\">\n\n <lib-submission-container [parentQuestionAnswers]=\"parentQuestionAnswers\"\n *ngIf=\"parentQuestionAnswers\"></lib-submission-container>\n\n <lib-navigation-tabs\n *ngIf=\"navigation == 'TAB'\"\n [skipMargin]=\"skipMargin\"\n [skipValidation]=\"skipValidation\"\n [pages]=\"pages\"\n [currentPageIndex]=\"currentPageIndex\"\n (pageChanged)=\"setCurrentPage($event)\"\n (submitEmit)=\"submitForm()\"\n [pageDetails]=\"pageDetails\"\n [eligibleForSubmission]=\"eligibleForSubmission\"\n [edit]=\"edit\"\n [acceptedLanguage] = \"acceptedLanguage\"\n [isActionTriggered]=\"isActionTriggered\"\n [primaryColor]=\"primaryColor\"\n [secondaryColor]=\"secondaryColor\"\n [markAllQuestionsAsRequired]=\"markAllQuestionsAsRequired\"\n [submissionInProgress]=\"submissionInProgress\"\n [submissionInDraft]=\"submissionInDraft\"\n [showCancelButton]=\"showCancelButton\"\n [submissionProgress]=\"submissionProgress\"\n [animatedDots]=\"animatedDots\"\n [currentStep]=\"currentStep\"\n (saveAsDraftEmit)=\"saveAsDraft()\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n (rowSetIndex)=\"loadMoreData($event)\"\n (cancel)=\"cancelled()\"\n ></lib-navigation-tabs>\n <lib-next-prev-navigation\n *ngIf=\"navigation == 'NEXT_AND_PREVIOUS_BUTTON'\"\n [skipMargin]=\"skipMargin\"\n [currentPageIndex]=\"currentPageIndex\"\n [pageDetails]=\"pageDetails\"\n (rowSetIndex)=\"loadMoreData($event)\"\n [pages]=\"pages\"\n [previousPage]=\"previousPage\"\n [isActionTriggered]=\"isActionTriggered\"\n [currentPage]=\"currentPage\"\n [primaryColor]=\"primaryColor\"\n [secondaryColor]=\"secondaryColor\"\n [nextPage]=\"nextPage\"\n (navigateNext)=\"navigateToNextPage()\"\n (navigatePrevious)=\"navigateToPreviousPage()\"\n [acceptedLanguage] = \"acceptedLanguage\"\n (submitEmit)=\"submitForm()\"\n (saveAsDraftEmit)=\"saveAsDraft()\"\n [edit]=\"edit\"\n [eligibleForSubmission]=\"eligibleForSubmission\"\n [submissionInProgress]=\"submissionInProgress\"\n [submissionInDraft]=\"submissionInDraft\"\n [showCancelButton]=\"showCancelButton\"\n [submissionProgress]=\"submissionProgress\"\n [animatedDots]=\"animatedDots\"\n [currentStep]=\"currentStep\"\n (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n (cancel)=\"cancelled()\"\n [skipValidation]=\"skipValidation\"\n ></lib-next-prev-navigation>\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n Inject,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { DataService } from '../services/data.service';\nimport { DOCUMENT } from '@angular/common';\nimport { environment } from '../environment/environment';\nimport { SubmitFormComponent } from '../form-submission/submit-form/submit-form.component';\n\n@Component({\n selector: 'lib-formSubmission',\n templateUrl: './form-submission.component.html',\n styleUrls: ['./form-submission.component.scss'],\n})\nexport class FormSubmissionComponent implements OnInit {\n @Input() formData: any = {};\n @Input() edit: boolean = false;\n @Input() skipValidation: boolean = false; // New input to control validation skipping\n @Input() submissionId: string = '';\n @Output() submitForm: EventEmitter<string> = new EventEmitter<string>();\n @Output() apiCalled: EventEmitter<boolean> = new EventEmitter<boolean>();\n @Output() cancel: EventEmitter<string> = new EventEmitter<string>();\n @Input() triggerFormSave: string | null = null;\n @ViewChild(SubmitFormComponent) submitFormComponent!: SubmitFormComponent;\n\n header: any;\n acceptedLanguage!: string;\n isActionTriggered: boolean = false;\n\n constructor(\n private dataService: DataService,\n @Inject(DOCUMENT) private document: Document\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['formData']) {\n const newFormData = changes['formData'].currentValue;\n\n this.dataService.setHeader(newFormData?.headers);\n\n // 🔹 Add your duplicateSubmission logic here\n if (newFormData?.duplicateSubmission) {\n this.dataService.setSubformData({\n moduleName: newFormData.moduleName,\n duplicateSubmission: newFormData.duplicateSubmission,\n });\n }\n }\n\n if (changes['triggerFormSave'] && changes['triggerFormSave'].currentValue) {\n const action = changes['triggerFormSave'].currentValue;\n\n if (action === 'submit' || action === 'draft') {\n this.isActionTriggered = true;\n }\n if (!this.submitFormComponent) {\n return;\n }\n\n switch (action) {\n case 'submit':\n this.submitFormComponent.submitForm();\n break;\n\n case 'draft':\n this.submitFormComponent.saveAsDraft();\n break;\n\n default:\n console.warn(action, 'action not defined');\n }\n }\n }\n\n get showCancelButton(): boolean {\n return this.cancel.observed ?? false;\n }\n\n ngOnInit() {\n this.dataService.setApiUrl(this.formData.apiurl);\n this.dataService.setHeader(this.formData.headers);\n\n this.dataService.header$.subscribe((data) => {\n this.header = data;\n this.setHtmlDirection(this.header.acceptedLanguage);\n });\n }\n\n setHtmlDirection(language: string) {\n const htmlTag = this.document.getElementsByTagName(\n 'html'\n )[0] as HTMLHtmlElement;\n\n if (language === 'ara' || language === 'ar') {\n environment.htmlDirection = 'rtl';\n } else {\n environment.htmlDirection = 'ltr';\n }\n\n htmlTag.dir = environment.htmlDirection;\n }\n\n submit(event: any) {\n this.submitForm.emit(event);\n }\n\n getFormApiCalled(event: any) {\n this.apiCalled.emit(true);\n }\n\n cancelled(){\n this.cancel.emit();\n }\n}\n","<lib-submit-form\n [moduleName]=\"formData.moduleName\"\n [submissionId]=\"submissionId\"\n [edit]=\"edit\"\n [acceptedLanguage] = \"formData.headers.acceptedLanguage\"\n [skipMargin]=\"formData.skipMargin\"\n [skipValidation]=\"skipValidation\"\n [isActionTriggered]=\"isActionTriggered\"\n [navigateTo]=\"formData.navigateTo\"\n [country]=\"formData.country\"\n [showCancelButton]=\"showCancelButton\"\n (submit)=\"submit($event)\"\n (apiCalled)=\"getFormApiCalled($event)\"\n (cancel)=\"cancelled()\"\n></lib-submit-form>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CheckBoxFieldsComponent } from './check-box-fields/check-box-fields.component';\nimport { DateTimeFieldsComponent } from './date-time-fields/date-time-fields.component';\nimport { DropDownFieldsComponent } from './drop-down-fields/drop-down-fields.component';\nimport { FilePickerFieldsComponent } from './file-picker-fields/file-picker-fields.component';\nimport { LocationFieldsComponent } from './location-fields/location-fields.component';\nimport { RadioButtonFieldsComponent } from './radio-button-fields/radio-button-fields.component';\nimport { RichTextEditorFieldsComponent } from './rich-text-editor-fields/rich-text-editor-fields.component';\nimport { SelectionMatrixFieldsComponent } from './selection-matrix-fields/selection-matrix-fields.component';\nimport { SignatureFieldsComponent } from './signature-fields/signature-fields.component';\nimport { SliderFieldsComponent } from './slider-fields/slider-fields.component';\nimport { TermsAndConditionFieldsComponent } from './terms-and-condition-fields/terms-and-condition-fields.component';\nimport { TextAreaFieldsComponent } from './text-area-fields/text-area-fields.component';\nimport { TextFieldsComponent } from './text-fields/text-fields.component';\nimport { ToggleSwitchFieldsComponent } from './toggle-switch-fields/toggle-switch-fields.component';\nimport { UrlFieldsComponent } from './url-fields/url-fields.component';\nimport { FormsModule } from '@angular/forms';\nimport { MailFieldsComponent } from './mail-fields/mail-fields.component';\nimport { MobileFieldsComponent } from './mobile-fields/mobile-fields.component';\nimport { NumberFieldsComponent } from './number-fields/number-fields.component';\nimport { PasswordFieldsComponent } from './password-fields/password-fields.component';\nimport {MatSliderModule} from \"@angular/material/slider\";\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\n\n\nimport { GoogleMapsModule } from '@angular/google-maps';\nimport { DropdownModule } from '@piserve-tech/drop-down';\nimport { FilePreviewModule } from '@piserve-tech/file-preview';\nimport { SectionFieldsComponent } from './section-fields/section-fields.component';\nimport { DocUploadModule } from '@piserve-tech/file-upload';\nimport { NgxMaterialTimepickerModule } from 'ngx-material-timepicker';\nimport { QuillModule } from 'ngx-quill';\nimport { AggregateFunctionComponent } from './aggregate-function/aggregate-function.component';\nimport { CurrencyFieldsComponent } from './currency-fields/currency-fields.component';\nimport { HiddenFieldComponent } from './hidden-field/hidden-field.component';\nimport { IframeFieldsComponent } from './iframe-fields/iframe-fields.component';\n\n\n\n\n\n\n@NgModule({\n declarations: [\n CheckBoxFieldsComponent,\n DateTimeFieldsComponent,\n DropDownFieldsComponent,\n FilePickerFieldsComponent,\n LocationFieldsComponent,\n RadioButtonFieldsComponent,\n RichTextEditorFieldsComponent,\n SelectionMatrixFieldsComponent,\n SignatureFieldsComponent,\n SliderFieldsComponent,\n TermsAndConditionFieldsComponent,\n TextAreaFieldsComponent,\n TextFieldsComponent,\n ToggleSwitchFieldsComponent,\n UrlFieldsComponent,\n MailFieldsComponent,\n MobileFieldsComponent,\n NumberFieldsComponent,\n PasswordFieldsComponent,\n SectionFieldsComponent,\n AggregateFunctionComponent,\n CurrencyFieldsComponent,\n HiddenFieldComponent,\n IframeFieldsComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n MatSliderModule,\n BsDatepickerModule.forRoot(),\n DropdownModule,\n DocUploadModule,\n GoogleMapsModule,\n FilePreviewModule,\n NgxMaterialTimepickerModule,\n QuillModule\n ],\n exports: [\n CheckBoxFieldsComponent,\n DateTimeFieldsComponent,\n DropDownFieldsComponent,\n FilePickerFieldsComponent,\n LocationFieldsComponent,\n MailFieldsComponent,\n MobileFieldsComponent,\n NumberFieldsComponent,\n PasswordFieldsComponent,\n RadioButtonFieldsComponent,\n RichTextEditorFieldsComponent,\n SelectionMatrixFieldsComponent,\n SignatureFieldsComponent,\n SliderFieldsComponent,\n TermsAndConditionFieldsComponent,\n TextAreaFieldsComponent,\n TextFieldsComponent,\n ToggleSwitchFieldsComponent,\n UrlFieldsComponent,\n SectionFieldsComponent,\n AggregateFunctionComponent,\n CurrencyFieldsComponent,\n HiddenFieldComponent,\n IframeFieldsComponent\n ]\n})\nexport class FormFieldsModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RecursiveLogicComponent } from '../question/recursive-logic/recursive-logic.component';\nimport { QuestionComponent } from '../question/question/question.component';\nimport { SubFormComponent } from '../question/sub-form/sub-form.component';\nimport { FormElementsComponent } from '../question/form-elements/form-elements.component';\n\nimport { FormFieldsModule } from '../form-fields/form-fields.module';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MultipleSubformComponent } from '../question/multiple-subform/multiple-subform.component';\nimport { SubmissionModalComponent } from '../sub-form/submission-modal/submission-modal.component';\nimport { QuestionGroupComponent } from '../question/question-group/question-group.component';\nimport { InlineMultipleSubformComponent } from '../question/inline-multiple-subform/inline-multiple-subform.component';\nimport { MultifieldsComponent } from '../question/multifields/multifields.component';\nimport { CardSubformComponent } from '../question/card-subform/card-subform.component';\nimport { QuillModule } from 'ngx-quill';\nimport { FormsModule } from '@angular/forms';\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\n\n@NgModule({\n declarations: [\n RecursiveLogicComponent,\n QuestionComponent,\n SubFormComponent,\n FormElementsComponent,\n MultipleSubformComponent, \n SubmissionModalComponent, \n QuestionGroupComponent,\n InlineMultipleSubformComponent,\n MultifieldsComponent,\n CardSubformComponent\n ],\n imports: [\n CommonModule,\n FormFieldsModule,\n MatDialogModule,\n MatTableModule,\n MatMenuModule,\n MatIconModule,\n QuillModule,\n FormsModule,\n NgbModule\n ],\n exports: [\n RecursiveLogicComponent,\n QuestionComponent,\n SubFormComponent,\n FormElementsComponent,\n QuestionGroupComponent,\n InlineMultipleSubformComponent,\n MultifieldsComponent,\n CardSubformComponent\n ]\n})\nexport class SharedModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SubmitFormComponent } from './submit-form/submit-form.component';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { HeaderComponent } from './header/header.component';\nimport { NavigationTabsComponent } from './navigation-tabs/navigation-tabs.component';\nimport { NextPrevNavigationComponent } from './next-prev-navigation/next-prev-navigation.component';\nimport { ToastrModule } from 'ngx-toastr';\nimport { SubmissionContainerComponent } from './submission-container/submission-container.component';\nimport { SharedModule } from '../shared/shared.module';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { MatDialogModule } from \"@angular/material/dialog\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { SaveDraftModalComponent } from './save-as-draft/saveDraftModalComponent ';\n\n\n\n@NgModule({\n declarations: [\n SubmitFormComponent,\n HeaderComponent,\n NavigationTabsComponent,\n NextPrevNavigationComponent,\n SubmissionContainerComponent,\n SaveDraftModalComponent,\n ],\n imports: [\n CommonModule,\n BsDatepickerModule.forRoot(),\n ToastrModule,\n SharedModule,\n InfiniteScrollModule,\n NgxSkeletonLoaderModule,\n MatDialogModule,\n MatIconModule\n],\n exports: [SubmitFormComponent, NextPrevNavigationComponent]\n})\nexport class FormSubmitModule { }\n","import { NgModule } from '@angular/core';\nimport { FormSubmissionComponent } from './form-submission.component';\n// import { DropdownModule } from '@piserve-tech/drop-down';\nimport { FilePreviewModule } from '@piserve-tech/file-preview';\nimport { FormsModule } from '@angular/forms';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { FormFieldsModule } from '../form-fields/form-fields.module';\nimport { FormSubmitModule } from '../form-submission/form-submission.module';\nimport { DropdownModule } from '@piserve-tech/drop-down';\nimport { ToastrModule } from 'ngx-toastr';\nimport { DocUploadModule } from '@piserve-tech/file-upload';\nimport { SharedModule } from '../shared/shared.module';\n\n@NgModule({\n declarations: [FormSubmissionComponent],\n imports: [\n DropdownModule,\n FilePreviewModule,\n DocUploadModule,\n FormsModule,\n MatTabsModule,\n FormFieldsModule,\n FormSubmitModule,\n ToastrModule.forRoot({\n positionClass: 'toast-bottom-left',\n }),\n SharedModule\n ],\n exports: [FormSubmissionComponent],\n})\nexport class FormSubmissionModule {}\n","/*\n * Public API Surface of form-submission\n */\n\nexport * from './lib/form-submission.service';\nexport * from './lib/form-submission.component';\nexport * from './lib/form-submission.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ValidationService","i2.DataService","i1.FormService","i2.ValidationService","i3.ElementTrackerService","i4.ScoreCalculationService","i5.WhenClauseService","i6","i1","i3.ValidationService","i4.ElementTrackerService","i7","i2.ElementTrackerService","i3.DataService","i4.WhenClauseService","i5","i2","i3","i4","i1.CountryService","i3.AggregationFunctionService","i3.WhenClauseService","i1.ElementTrackerService","i2.CheckBoxFieldsComponent","i3.DateTimeFieldsComponent","i4.DropDownFieldsComponent","i5.FilePickerFieldsComponent","i6.LocationFieldsComponent","i7.MailFieldsComponent","i8.MobileFieldsComponent","i9.NumberFieldsComponent","i10.PasswordFieldsComponent","i11.RadioButtonFieldsComponent","i12.RichTextEditorFieldsComponent","i13.SelectionMatrixFieldsComponent","i14.SignatureFieldsComponent","i15.SliderFieldsComponent","i16.TermsAndConditionFieldsComponent","i17.TextAreaFieldsComponent","i18.TextFieldsComponent","i19.ToggleSwitchFieldsComponent","i20.UrlFieldsComponent","i21.AggregateFunctionComponent","i22.CurrencyFieldsComponent","i23.HiddenFieldComponent","i24.IframeFieldsComponent","uuidv4","i4.CheckBoxFieldsComponent","i5.DateTimeFieldsComponent","i6.DropDownFieldsComponent","i7.FilePickerFieldsComponent","i8.LocationFieldsComponent","i9.MailFieldsComponent","i10.MobileFieldsComponent","i11.NumberFieldsComponent","i12.PasswordFieldsComponent","i13.RadioButtonFieldsComponent","i14.RichTextEditorFieldsComponent","i15.SelectionMatrixFieldsComponent","i16.SignatureFieldsComponent","i17.SliderFieldsComponent","i18.TermsAndConditionFieldsComponent","i19.TextAreaFieldsComponent","i20.TextFieldsComponent","i21.ToggleSwitchFieldsComponent","i22.UrlFieldsComponent","i23.SectionFieldsComponent","i24.AggregateFunctionComponent","i25.CurrencyFieldsComponent","i26.HiddenFieldComponent","i27.IframeFieldsComponent","i3.ScoreCalculationService","i1.ScoreCalculationService","i5.CheckBoxFieldsComponent","i6.DateTimeFieldsComponent","i7.DropDownFieldsComponent","i8.FilePickerFieldsComponent","i9.LocationFieldsComponent","i10.MailFieldsComponent","i11.MobileFieldsComponent","i12.NumberFieldsComponent","i13.PasswordFieldsComponent","i14.RadioButtonFieldsComponent","i15.RichTextEditorFieldsComponent","i16.SelectionMatrixFieldsComponent","i17.SignatureFieldsComponent","i18.SliderFieldsComponent","i19.TermsAndConditionFieldsComponent","i20.TextAreaFieldsComponent","i21.TextFieldsComponent","i22.ToggleSwitchFieldsComponent","i23.UrlFieldsComponent","i27","i2.WhenClauseService","i16.SliderFieldsComponent","i17.TermsAndConditionFieldsComponent","i18.TextAreaFieldsComponent","i19.TextFieldsComponent","i20.ToggleSwitchFieldsComponent","i21.UrlFieldsComponent","i22.SectionFieldsComponent","i23.AggregateFunctionComponent","i24.CurrencyFieldsComponent","i25.HiddenFieldComponent","i26.IframeFieldsComponent","i1.SubformCopyService","i4.FormService","i6.ValidationService","i7.ScoreCalculationService","i8","i9.CheckBoxFieldsComponent","i10.DateTimeFieldsComponent","i11.DropDownFieldsComponent","i12.FilePickerFieldsComponent","i13.LocationFieldsComponent","i14.MailFieldsComponent","i15.MobileFieldsComponent","i16.NumberFieldsComponent","i17.PasswordFieldsComponent","i18.RadioButtonFieldsComponent","i19.RichTextEditorFieldsComponent","i20.SelectionMatrixFieldsComponent","i21.SignatureFieldsComponent","i22.SliderFieldsComponent","i23.TermsAndConditionFieldsComponent","i24.TextAreaFieldsComponent","i25.TextFieldsComponent","i26.ToggleSwitchFieldsComponent","i27.UrlFieldsComponent","i28.SectionFieldsComponent","i29.AggregateFunctionComponent","i30.CurrencyFieldsComponent","i31.HiddenFieldComponent","i32.IframeFieldsComponent","i33","i34","i35.MultipleSubformComponent","i36.InlineMultipleSubformComponent","i37.CardSubformComponent","i1.WhenClauseService","i3.CheckBoxFieldsComponent","i4.DateTimeFieldsComponent","i5.DropDownFieldsComponent","i6.FilePickerFieldsComponent","i7.LocationFieldsComponent","i8.MailFieldsComponent","i9.MobileFieldsComponent","i10.NumberFieldsComponent","i11.PasswordFieldsComponent","i12.RadioButtonFieldsComponent","i13.RichTextEditorFieldsComponent","i14.SelectionMatrixFieldsComponent","i15.SignatureFieldsComponent","i22.AggregateFunctionComponent","i23.CurrencyFieldsComponent","i24.HiddenFieldComponent","i25.IframeFieldsComponent","i21.CurrencyFieldsComponent","i22.HiddenFieldComponent","i3.SectionFieldsComponent","i4.QuestionComponent","i5.SubFormComponent","i6.QuestionGroupComponent","i7.MultifieldsComponent","i2.RecursiveLogicComponent","i1.FormValidationService","i3.FormElementsComponent","i2.FormElementsComponent","mapper.mapPublicFormToModel","mapper.mapPageToModel","i4.DataService","i5.RecaptchaService","i7.ElementTrackerService","i8.FormValidationService","i9.AggregationFunctionService","i10.ScoreCalculationService","i11","i12.WhenClauseService","i13","i15.HeaderComponent","i16.NavigationTabsComponent","i17.NextPrevNavigationComponent","i18.SubmissionContainerComponent","i2.SubmitFormComponent"],"mappings":"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"}
|