@piserve-tech/form-submission 1.3.317 → 1.3.319
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/environment/environment.d.ts +5 -0
- package/esm2022/environment/environment.mjs +6 -0
- package/esm2022/form-fields/aggregate-function/aggregate-function.component.mjs +146 -0
- package/esm2022/form-fields/check-box-fields/check-box-fields.component.mjs +473 -0
- package/esm2022/form-fields/currency-fields/currency-fields.component.mjs +502 -0
- package/esm2022/form-fields/date-time-fields/date-time-fields.component.mjs +608 -0
- package/esm2022/form-fields/drop-down-fields/drop-down-fields.component.mjs +585 -0
- package/esm2022/form-fields/file-picker-fields/file-picker-fields.component.mjs +224 -0
- package/esm2022/form-fields/form-fields.module.mjs +174 -0
- package/esm2022/form-fields/hidden-field/hidden-field.component.mjs +137 -0
- package/esm2022/form-fields/iframe-fields/iframe-fields.component.mjs +198 -0
- package/esm2022/form-fields/location-fields/location-fields.component.mjs +85 -0
- package/esm2022/form-fields/mail-fields/mail-fields.component.mjs +131 -0
- package/esm2022/form-fields/mobile-fields/mobile-fields.component.mjs +270 -0
- package/esm2022/form-fields/number-fields/number-fields.component.mjs +242 -0
- package/esm2022/form-fields/password-fields/password-fields.component.mjs +257 -0
- package/esm2022/form-fields/radio-button-fields/radio-button-fields.component.mjs +346 -0
- package/esm2022/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.mjs +148 -0
- package/esm2022/form-fields/section-fields/section-fields.component.mjs +29 -0
- package/esm2022/form-fields/selection-matrix-fields/selection-matrix-fields.component.mjs +158 -0
- package/esm2022/form-fields/signature-fields/signature-fields.component.mjs +32 -0
- package/esm2022/form-fields/slider-fields/slider-fields.component.mjs +73 -0
- package/esm2022/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.mjs +66 -0
- package/esm2022/form-fields/text-area-fields/text-area-fields.component.mjs +159 -0
- package/esm2022/form-fields/text-fields/text-fields.component.mjs +245 -0
- package/esm2022/form-fields/toggle-switch-fields/toggle-switch-fields.component.mjs +85 -0
- package/esm2022/form-fields/url-fields/url-fields.component.mjs +124 -0
- package/esm2022/form-submission/form-submission.module.mjs +64 -0
- package/esm2022/form-submission/header/header.component.mjs +20 -0
- package/esm2022/form-submission/navigation-tabs/navigation-tabs.component.mjs +171 -0
- package/esm2022/form-submission/next-prev-navigation/next-prev-navigation.component.mjs +124 -0
- package/esm2022/form-submission/save-as-draft/saveDraftModalComponent .mjs +50 -0
- package/esm2022/form-submission/submission-container/submission-container.component.mjs +17 -0
- package/esm2022/form-submission/submit-form/submit-form.component.mjs +1610 -0
- package/esm2022/lib/form-submission.component.mjs +113 -0
- package/esm2022/lib/form-submission.module.mjs +56 -0
- package/esm2022/lib/form-submission.service.mjs +14 -0
- package/esm2022/models/aggregate.model.mjs +2 -0
- package/esm2022/models/answer.model.mjs +2 -0
- package/esm2022/models/appearance.model.mjs +2 -0
- package/esm2022/models/attachment.model.mjs +2 -0
- package/esm2022/models/defaultAnswerEntry.model.mjs +2 -0
- package/esm2022/models/defaultAnswersModel.model.mjs +2 -0
- package/esm2022/models/defaultQuestionAnswer.model.mjs +2 -0
- package/esm2022/models/elementOptionAPI.model.mjs +2 -0
- package/esm2022/models/elementOptionAPIData.model.mjs +2 -0
- package/esm2022/models/elementOptionDB.model.mjs +2 -0
- package/esm2022/models/elementOptionDBCriteria.model.mjs +2 -0
- package/esm2022/models/emitters.model.mjs +2 -0
- package/esm2022/models/enum/condition.enum.mjs +18 -0
- package/esm2022/models/enum/elementType .enum.mjs +24 -0
- package/esm2022/models/enum/entityType.enum.mjs +12 -0
- package/esm2022/models/formConfiguration.model.mjs +2 -0
- package/esm2022/models/formElement.model.mjs +2 -0
- package/esm2022/models/formElementType.model.mjs +2 -0
- package/esm2022/models/grid.model.mjs +2 -0
- package/esm2022/models/hiddenField.model.mjs +2 -0
- package/esm2022/models/iFrameProperties.model.mjs +2 -0
- package/esm2022/models/logic.model.mjs +2 -0
- package/esm2022/models/multifields.model.mjs +2 -0
- package/esm2022/models/option.model.mjs +2 -0
- package/esm2022/models/page.model.mjs +2 -0
- package/esm2022/models/publicForm.model.mjs +2 -0
- package/esm2022/models/question.model.mjs +2 -0
- package/esm2022/models/questionAnswer.model.mjs +2 -0
- package/esm2022/models/questionGroup.model.mjs +2 -0
- package/esm2022/models/row.model.mjs +2 -0
- package/esm2022/models/scoring.model.mjs +2 -0
- package/esm2022/models/section.model.mjs +2 -0
- package/esm2022/models/subForm.model.mjs +2 -0
- package/esm2022/models/subformConfiguration.model.mjs +2 -0
- package/esm2022/models/subformPropery.model.mjs +2 -0
- package/esm2022/models/submission.model.mjs +2 -0
- package/esm2022/models/submissionCopyConfig.mopdel.mjs +2 -0
- package/esm2022/models/terms&condition.model.mjs +2 -0
- package/esm2022/models/validation.model.mjs +2 -0
- package/esm2022/models/whenClause.model.mjs +2 -0
- package/esm2022/models/whenClauseCondition.model.mjs +2 -0
- package/esm2022/models/whenClauseElements.model.mjs +2 -0
- package/esm2022/piserve-tech-form-submission.mjs +5 -0
- package/esm2022/public-api.mjs +7 -0
- package/esm2022/question/card-subform/card-subform.component.mjs +354 -0
- package/esm2022/question/confirm-dialog/confirm-dialog.component.mjs +27 -0
- package/esm2022/question/form-elements/form-elements.component.mjs +62 -0
- package/esm2022/question/inline-multiple-subform/inline-multiple-subform.component.mjs +384 -0
- package/esm2022/question/multifields/multifields.component.mjs +54 -0
- package/esm2022/question/multiple-subform/multiple-subform.component.mjs +413 -0
- package/esm2022/question/question/question.component.mjs +145 -0
- package/esm2022/question/question-group/question-group.component.mjs +102 -0
- package/esm2022/question/recursive-logic/recursive-logic.component.mjs +49 -0
- package/esm2022/question/sub-form/sub-form.component.mjs +355 -0
- package/esm2022/services/aggregate.service.mjs +139 -0
- package/esm2022/services/countryService.mjs +89 -0
- package/esm2022/services/data.service.mjs +36 -0
- package/esm2022/services/element-tracker.service.mjs +27 -0
- package/esm2022/services/form-validation.service.mjs +128 -0
- package/esm2022/services/form.service.mjs +332 -0
- package/esm2022/services/mapper.service.mjs +519 -0
- package/esm2022/services/recaptcha.service.mjs +136 -0
- package/esm2022/services/score.service.mjs +268 -0
- package/esm2022/services/subform-copy.service.mjs +122 -0
- package/esm2022/services/validation.service.mjs +35 -0
- package/esm2022/services/whenClause.service.mjs +423 -0
- package/esm2022/shared/shared.module.mjs +97 -0
- package/esm2022/sub-form/submission-modal/submission-modal.component.mjs +133 -0
- package/fesm2022/piserve-tech-form-submission.mjs +11661 -0
- package/fesm2022/piserve-tech-form-submission.mjs.map +1 -0
- package/form-fields/aggregate-function/aggregate-function.component.d.ts +43 -0
- package/form-fields/check-box-fields/check-box-fields.component.d.ts +73 -0
- package/form-fields/currency-fields/currency-fields.component.d.ts +62 -0
- package/form-fields/date-time-fields/date-time-fields.component.d.ts +96 -0
- package/form-fields/drop-down-fields/drop-down-fields.component.d.ts +88 -0
- package/form-fields/file-picker-fields/file-picker-fields.component.d.ts +72 -0
- package/form-fields/form-fields.module.d.ts +40 -0
- package/form-fields/hidden-field/hidden-field.component.d.ts +38 -0
- package/form-fields/iframe-fields/iframe-fields.component.d.ts +35 -0
- package/form-fields/location-fields/location-fields.component.d.ts +29 -0
- package/form-fields/mail-fields/mail-fields.component.d.ts +41 -0
- package/form-fields/mobile-fields/mobile-fields.component.d.ts +71 -0
- package/form-fields/number-fields/number-fields.component.d.ts +53 -0
- package/form-fields/password-fields/password-fields.component.d.ts +57 -0
- package/form-fields/radio-button-fields/radio-button-fields.component.d.ts +70 -0
- package/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.d.ts +46 -0
- package/form-fields/section-fields/section-fields.component.d.ts +10 -0
- package/form-fields/selection-matrix-fields/selection-matrix-fields.component.d.ts +45 -0
- package/form-fields/signature-fields/signature-fields.component.d.ts +13 -0
- package/form-fields/slider-fields/slider-fields.component.d.ts +32 -0
- package/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.d.ts +26 -0
- package/form-fields/text-area-fields/text-area-fields.component.d.ts +49 -0
- package/form-fields/text-fields/text-fields.component.d.ts +49 -0
- package/form-fields/toggle-switch-fields/toggle-switch-fields.component.d.ts +29 -0
- package/form-fields/url-fields/url-fields.component.d.ts +41 -0
- package/form-submission/form-submission.module.d.ts +20 -0
- package/form-submission/header/header.component.d.ts +7 -0
- package/form-submission/navigation-tabs/navigation-tabs.component.d.ts +57 -0
- package/form-submission/next-prev-navigation/next-prev-navigation.component.d.ts +46 -0
- package/form-submission/save-as-draft/saveDraftModalComponent .d.ts +17 -0
- package/form-submission/submission-container/submission-container.component.d.ts +7 -0
- package/form-submission/submit-form/submit-form.component.d.ts +237 -0
- package/index.d.ts +5 -0
- package/lib/form-submission.component.d.ts +30 -0
- package/lib/form-submission.module.d.ts +16 -0
- package/lib/form-submission.service.d.ts +6 -0
- package/models/aggregate.model.d.ts +4 -0
- package/{src/models/answer.model.ts → models/answer.model.d.ts} +23 -25
- package/models/appearance.model.d.ts +64 -0
- package/{src/models/attachment.model.ts → models/attachment.model.d.ts} +6 -6
- package/{src/models/defaultAnswerEntry.model.ts → models/defaultAnswerEntry.model.d.ts} +5 -7
- package/{src/models/defaultAnswersModel.model.ts → models/defaultAnswersModel.model.d.ts} +4 -5
- package/{src/models/defaultQuestionAnswer.model.ts → models/defaultQuestionAnswer.model.d.ts} +6 -6
- package/models/elementOptionAPI.model.d.ts +12 -0
- package/models/elementOptionAPIData.model.d.ts +5 -0
- package/models/elementOptionDB.model.d.ts +8 -0
- package/models/elementOptionDBCriteria.model.d.ts +7 -0
- package/{src/models/emitters.model.ts → models/emitters.model.d.ts} +8 -8
- package/{src/models/enum/condition.enum.ts → models/enum/condition.enum.d.ts} +2 -2
- package/models/enum/elementType .enum.d.ts +22 -0
- package/models/enum/entityType.enum.d.ts +10 -0
- package/{src/models/formConfiguration.model.ts → models/formConfiguration.model.d.ts} +2 -2
- package/{src/models/formElement.model.ts → models/formElement.model.d.ts} +22 -22
- package/{src/models/formElementType.model.ts → models/formElementType.model.d.ts} +2 -3
- package/{src/models/grid.model.ts → models/grid.model.d.ts} +13 -14
- package/{src/models/hiddenField.model.ts → models/hiddenField.model.d.ts} +5 -5
- package/{src/models/iFrameProperties.model.ts → models/iFrameProperties.model.d.ts} +13 -13
- package/models/logic.model.d.ts +9 -0
- package/models/multifields.model.d.ts +11 -0
- package/{src/models/option.model.ts → models/option.model.d.ts} +5 -5
- package/models/page.model.d.ts +6 -0
- package/models/publicForm.model.d.ts +18 -0
- package/models/question.model.d.ts +26 -0
- package/models/questionAnswer.model.d.ts +7 -0
- package/models/questionGroup.model.d.ts +11 -0
- package/{src/models/row.model.ts → models/row.model.d.ts} +1 -2
- package/models/scoring.model.d.ts +10 -0
- package/models/section.model.d.ts +6 -0
- package/models/subForm.model.d.ts +24 -0
- package/models/subformConfiguration.model.d.ts +4 -0
- package/models/subformPropery.model.d.ts +7 -0
- package/{src/models/submission.model.ts → models/submission.model.d.ts} +14 -16
- package/{src/models/submissionCopyConfig.mopdel.ts → models/submissionCopyConfig.mopdel.d.ts} +4 -4
- package/{src/models/terms&condition.model.ts → models/terms&condition.model.d.ts} +1 -1
- package/models/validation.model.d.ts +48 -0
- package/models/whenClause.model.d.ts +6 -0
- package/{src/models/whenClauseCondition.model.ts → models/whenClauseCondition.model.d.ts} +6 -6
- package/{src/models/whenClauseElements.model.ts → models/whenClauseElements.model.d.ts} +5 -6
- package/package.json +46 -33
- package/{src/public-api.ts → public-api.d.ts} +0 -4
- package/question/card-subform/card-subform.component.d.ts +44 -0
- package/question/confirm-dialog/confirm-dialog.component.d.ts +12 -0
- package/question/form-elements/form-elements.component.d.ts +20 -0
- package/question/inline-multiple-subform/inline-multiple-subform.component.d.ts +47 -0
- package/question/multifields/multifields.component.d.ts +11 -0
- package/question/multiple-subform/multiple-subform.component.d.ts +39 -0
- package/question/question/question.component.d.ts +30 -0
- package/question/question-group/question-group.component.d.ts +29 -0
- package/question/recursive-logic/recursive-logic.component.d.ts +19 -0
- package/question/sub-form/sub-form.component.d.ts +70 -0
- package/services/aggregate.service.d.ts +29 -0
- package/services/countryService.d.ts +21 -0
- package/services/data.service.d.ts +19 -0
- package/services/element-tracker.service.d.ts +10 -0
- package/services/form-validation.service.d.ts +16 -0
- package/services/form.service.d.ts +27 -0
- package/services/mapper.service.d.ts +31 -0
- package/services/recaptcha.service.d.ts +46 -0
- package/services/score.service.d.ts +27 -0
- package/services/subform-copy.service.d.ts +10 -0
- package/services/validation.service.d.ts +14 -0
- package/services/whenClause.service.d.ts +45 -0
- package/shared/shared.module.d.ts +25 -0
- package/sub-form/submission-modal/submission-modal.component.d.ts +31 -0
- package/ng-package.json +0 -30
- package/src/environment/environment.ts +0 -6
- package/src/form-fields/aggregate-function/aggregate-function.component.html +0 -63
- package/src/form-fields/aggregate-function/aggregate-function.component.scss +0 -1
- package/src/form-fields/aggregate-function/aggregate-function.component.spec.ts +0 -21
- package/src/form-fields/aggregate-function/aggregate-function.component.ts +0 -148
- package/src/form-fields/check-box-fields/check-box-fields.component.html +0 -81
- package/src/form-fields/check-box-fields/check-box-fields.component.scss +0 -28
- package/src/form-fields/check-box-fields/check-box-fields.component.spec.ts +0 -21
- package/src/form-fields/check-box-fields/check-box-fields.component.ts +0 -538
- package/src/form-fields/currency-fields/currency-fields.component.html +0 -85
- package/src/form-fields/currency-fields/currency-fields.component.scss +0 -48
- package/src/form-fields/currency-fields/currency-fields.component.spec.ts +0 -21
- package/src/form-fields/currency-fields/currency-fields.component.ts +0 -589
- package/src/form-fields/date-time-fields/date-time-fields.component.html +0 -268
- package/src/form-fields/date-time-fields/date-time-fields.component.scss +0 -88
- package/src/form-fields/date-time-fields/date-time-fields.component.spec.ts +0 -21
- package/src/form-fields/date-time-fields/date-time-fields.component.ts +0 -693
- package/src/form-fields/drop-down-fields/drop-down-fields.component.html +0 -77
- package/src/form-fields/drop-down-fields/drop-down-fields.component.scss +0 -12
- package/src/form-fields/drop-down-fields/drop-down-fields.component.spec.ts +0 -21
- package/src/form-fields/drop-down-fields/drop-down-fields.component.ts +0 -698
- package/src/form-fields/file-picker-fields/file-picker-fields.component.html +0 -72
- package/src/form-fields/file-picker-fields/file-picker-fields.component.scss +0 -33
- package/src/form-fields/file-picker-fields/file-picker-fields.component.spec.ts +0 -21
- package/src/form-fields/file-picker-fields/file-picker-fields.component.ts +0 -256
- package/src/form-fields/form-fields.module.ts +0 -110
- package/src/form-fields/hidden-field/hidden-field.component.scss +0 -0
- package/src/form-fields/hidden-field/hidden-field.component.spec.ts +0 -21
- package/src/form-fields/hidden-field/hidden-field.component.ts +0 -156
- package/src/form-fields/iframe-fields/iframe-fields.component.html +0 -31
- package/src/form-fields/iframe-fields/iframe-fields.component.scss +0 -0
- package/src/form-fields/iframe-fields/iframe-fields.component.spec.ts +0 -21
- package/src/form-fields/iframe-fields/iframe-fields.component.ts +0 -225
- package/src/form-fields/location-fields/location-fields.component.html +0 -54
- package/src/form-fields/location-fields/location-fields.component.scss +0 -22
- package/src/form-fields/location-fields/location-fields.component.spec.ts +0 -21
- package/src/form-fields/location-fields/location-fields.component.ts +0 -83
- package/src/form-fields/mail-fields/mail-fields.component.html +0 -66
- package/src/form-fields/mail-fields/mail-fields.component.scss +0 -10
- package/src/form-fields/mail-fields/mail-fields.component.spec.ts +0 -21
- package/src/form-fields/mail-fields/mail-fields.component.ts +0 -127
- package/src/form-fields/mobile-fields/mobile-fields.component.html +0 -97
- package/src/form-fields/mobile-fields/mobile-fields.component.scss +0 -52
- package/src/form-fields/mobile-fields/mobile-fields.component.spec.ts +0 -21
- package/src/form-fields/mobile-fields/mobile-fields.component.ts +0 -310
- package/src/form-fields/number-fields/number-fields.component.html +0 -70
- package/src/form-fields/number-fields/number-fields.component.scss +0 -17
- package/src/form-fields/number-fields/number-fields.component.spec.ts +0 -21
- package/src/form-fields/number-fields/number-fields.component.ts +0 -256
- package/src/form-fields/password-fields/password-fields.component.html +0 -113
- package/src/form-fields/password-fields/password-fields.component.scss +0 -61
- package/src/form-fields/password-fields/password-fields.component.spec.ts +0 -21
- package/src/form-fields/password-fields/password-fields.component.ts +0 -273
- package/src/form-fields/radio-button-fields/radio-button-fields.component.html +0 -82
- package/src/form-fields/radio-button-fields/radio-button-fields.component.scss +0 -28
- package/src/form-fields/radio-button-fields/radio-button-fields.component.spec.ts +0 -21
- package/src/form-fields/radio-button-fields/radio-button-fields.component.ts +0 -391
- package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.html +0 -67
- package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.scss +0 -23
- package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.spec.ts +0 -21
- package/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.ts +0 -145
- package/src/form-fields/section-fields/section-fields.component.html +0 -4
- package/src/form-fields/section-fields/section-fields.component.scss +0 -37
- package/src/form-fields/section-fields/section-fields.component.spec.ts +0 -21
- package/src/form-fields/section-fields/section-fields.component.ts +0 -25
- package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.html +0 -93
- package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.scss +0 -52
- package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.spec.ts +0 -21
- package/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.ts +0 -155
- package/src/form-fields/signature-fields/signature-fields.component.html +0 -43
- package/src/form-fields/signature-fields/signature-fields.component.scss +0 -10
- package/src/form-fields/signature-fields/signature-fields.component.spec.ts +0 -21
- package/src/form-fields/signature-fields/signature-fields.component.ts +0 -25
- package/src/form-fields/slider-fields/slider-fields.component.html +0 -67
- package/src/form-fields/slider-fields/slider-fields.component.scss +0 -55
- package/src/form-fields/slider-fields/slider-fields.component.spec.ts +0 -21
- package/src/form-fields/slider-fields/slider-fields.component.ts +0 -63
- package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.html +0 -52
- package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.scss +0 -85
- package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.spec.ts +0 -21
- package/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.ts +0 -62
- package/src/form-fields/text-area-fields/text-area-fields.component.html +0 -68
- package/src/form-fields/text-area-fields/text-area-fields.component.scss +0 -19
- package/src/form-fields/text-area-fields/text-area-fields.component.spec.ts +0 -21
- package/src/form-fields/text-area-fields/text-area-fields.component.ts +0 -166
- package/src/form-fields/text-fields/text-fields.component.html +0 -67
- package/src/form-fields/text-fields/text-fields.component.scss +0 -26
- package/src/form-fields/text-fields/text-fields.component.spec.ts +0 -21
- package/src/form-fields/text-fields/text-fields.component.ts +0 -248
- package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.html +0 -70
- package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.scss +0 -112
- package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.spec.ts +0 -21
- package/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.ts +0 -74
- package/src/form-fields/url-fields/url-fields.component.html +0 -109
- package/src/form-fields/url-fields/url-fields.component.scss +0 -22
- package/src/form-fields/url-fields/url-fields.component.spec.ts +0 -21
- package/src/form-fields/url-fields/url-fields.component.ts +0 -123
- package/src/form-submission/form-submission.module.ts +0 -40
- package/src/form-submission/header/header.component.html +0 -6
- package/src/form-submission/header/header.component.scss +0 -26
- package/src/form-submission/header/header.component.spec.ts +0 -21
- package/src/form-submission/header/header.component.ts +0 -12
- package/src/form-submission/navigation-tabs/navigation-tabs.component.html +0 -134
- package/src/form-submission/navigation-tabs/navigation-tabs.component.scss +0 -200
- package/src/form-submission/navigation-tabs/navigation-tabs.component.spec.ts +0 -21
- package/src/form-submission/navigation-tabs/navigation-tabs.component.ts +0 -134
- package/src/form-submission/next-prev-navigation/next-prev-navigation.component.html +0 -207
- package/src/form-submission/next-prev-navigation/next-prev-navigation.component.scss +0 -208
- package/src/form-submission/next-prev-navigation/next-prev-navigation.component.spec.ts +0 -21
- package/src/form-submission/next-prev-navigation/next-prev-navigation.component.ts +0 -74
- package/src/form-submission/save-as-draft/saveDraftModalComponent .ts +0 -60
- package/src/form-submission/save-as-draft/saveDraftModalComponent.html +0 -33
- package/src/form-submission/save-as-draft/saveDraftModalComponent.scss +0 -195
- package/src/form-submission/submission-container/submission-container.component.html +0 -30
- package/src/form-submission/submission-container/submission-container.component.scss +0 -67
- package/src/form-submission/submission-container/submission-container.component.spec.ts +0 -21
- package/src/form-submission/submission-container/submission-container.component.ts +0 -14
- package/src/form-submission/submit-form/submit-form.component.html +0 -76
- package/src/form-submission/submit-form/submit-form.component.scss +0 -88
- package/src/form-submission/submit-form/submit-form.component.spec.ts +0 -21
- package/src/form-submission/submit-form/submit-form.component.ts +0 -1953
- package/src/lib/form-submission.component.html +0 -15
- package/src/lib/form-submission.component.scss +0 -1
- package/src/lib/form-submission.component.ts +0 -120
- package/src/lib/form-submission.module.ts +0 -31
- package/src/lib/form-submission.service.spec.ts +0 -16
- package/src/lib/form-submission.service.ts +0 -9
- package/src/models/aggregate.model.ts +0 -4
- package/src/models/appearance.model.ts +0 -64
- package/src/models/elementOptionAPI.model.ts +0 -13
- package/src/models/elementOptionAPIData.model.ts +0 -5
- package/src/models/elementOptionDB.model.ts +0 -9
- package/src/models/elementOptionDBCriteria.model.ts +0 -7
- package/src/models/enum/elementType .enum.ts +0 -22
- package/src/models/enum/entityType.enum.ts +0 -10
- package/src/models/logic.model.ts +0 -11
- package/src/models/multifields.model.ts +0 -12
- package/src/models/page.model.ts +0 -7
- package/src/models/publicForm.model.ts +0 -19
- package/src/models/question.model.ts +0 -27
- package/src/models/questionAnswer.model.ts +0 -8
- package/src/models/questionGroup.model.ts +0 -12
- package/src/models/response.model.ts +0 -9
- package/src/models/result.model.ts +0 -5
- package/src/models/scoring.model.ts +0 -10
- package/src/models/section.model.ts +0 -6
- package/src/models/subForm.model.ts +0 -25
- package/src/models/subformConfiguration.model.ts +0 -4
- package/src/models/subformPropery.model.ts +0 -8
- package/src/models/validation.model.ts +0 -48
- package/src/models/whenClause.model.ts +0 -7
- package/src/question/card-subform/card-subform.component.html +0 -282
- package/src/question/card-subform/card-subform.component.scss +0 -49
- package/src/question/card-subform/card-subform.component.spec.ts +0 -21
- package/src/question/card-subform/card-subform.component.ts +0 -407
- package/src/question/confirm-dialog/confirm-dialog.component.html +0 -32
- package/src/question/confirm-dialog/confirm-dialog.component.scss +0 -109
- package/src/question/confirm-dialog/confirm-dialog.component.spec.ts +0 -21
- package/src/question/confirm-dialog/confirm-dialog.component.ts +0 -24
- package/src/question/form-elements/form-elements.component.html +0 -28
- package/src/question/form-elements/form-elements.component.scss +0 -0
- package/src/question/form-elements/form-elements.component.spec.ts +0 -21
- package/src/question/form-elements/form-elements.component.ts +0 -41
- package/src/question/inline-multiple-subform/inline-multiple-subform.component.html +0 -321
- package/src/question/inline-multiple-subform/inline-multiple-subform.component.scss +0 -78
- package/src/question/inline-multiple-subform/inline-multiple-subform.component.spec.ts +0 -21
- package/src/question/inline-multiple-subform/inline-multiple-subform.component.ts +0 -425
- package/src/question/multifields/multifields.component.html +0 -78
- package/src/question/multifields/multifields.component.scss +0 -6
- package/src/question/multifields/multifields.component.spec.ts +0 -21
- package/src/question/multifields/multifields.component.ts +0 -27
- package/src/question/multiple-subform/multiple-subform.component.html +0 -185
- package/src/question/multiple-subform/multiple-subform.component.scss +0 -52
- package/src/question/multiple-subform/multiple-subform.component.spec.ts +0 -21
- package/src/question/multiple-subform/multiple-subform.component.ts +0 -481
- package/src/question/question/question.component.html +0 -51
- package/src/question/question/question.component.scss +0 -0
- package/src/question/question/question.component.spec.ts +0 -21
- package/src/question/question/question.component.ts +0 -129
- package/src/question/question-group/question-group.component.html +0 -147
- package/src/question/question-group/question-group.component.scss +0 -36
- package/src/question/question-group/question-group.component.spec.ts +0 -21
- package/src/question/question-group/question-group.component.ts +0 -94
- package/src/question/question.module.ts +0 -22
- package/src/question/recursive-logic/recursive-logic.component.html +0 -33
- package/src/question/recursive-logic/recursive-logic.component.scss +0 -0
- package/src/question/recursive-logic/recursive-logic.component.spec.ts +0 -21
- package/src/question/recursive-logic/recursive-logic.component.ts +0 -29
- package/src/question/sub-form/sub-form.component.html +0 -254
- package/src/question/sub-form/sub-form.component.scss +0 -83
- package/src/question/sub-form/sub-form.component.spec.ts +0 -21
- package/src/question/sub-form/sub-form.component.ts +0 -421
- package/src/services/aggregate.service.ts +0 -148
- package/src/services/countryService.ts +0 -92
- package/src/services/data.service.ts +0 -36
- package/src/services/element-tracker.service.spec.ts +0 -16
- package/src/services/element-tracker.service.ts +0 -24
- package/src/services/form-validation.service.ts +0 -151
- package/src/services/form.service.spec.ts +0 -16
- package/src/services/form.service.ts +0 -407
- package/src/services/mapper.service.ts +0 -625
- package/src/services/recaptcha.service.spec.ts +0 -16
- package/src/services/recaptcha.service.ts +0 -179
- package/src/services/score.service.ts +0 -352
- package/src/services/subform-copy.service.ts +0 -148
- package/src/services/validation.service.spec.ts +0 -16
- package/src/services/validation.service.ts +0 -33
- package/src/services/whenClause.service.ts +0 -502
- package/src/shared/shared.module.ts +0 -58
- package/src/styles/shared-style.scss +0 -86
- package/src/sub-form/sub-form.module.ts +0 -24
- package/src/sub-form/submission-modal/submission-modal.component.html +0 -160
- package/src/sub-form/submission-modal/submission-modal.component.scss +0 -54
- package/src/sub-form/submission-modal/submission-modal.component.spec.ts +0 -21
- package/src/sub-form/submission-modal/submission-modal.component.ts +0 -127
- package/tsconfig.lib.json +0 -14
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
- /package/{src/assets → assets}/fonts/Garamond.woff2 +0 -0
- /package/{src/assets → assets}/fonts/Georgia.woff2 +0 -0
- /package/{src/assets → assets}/fonts/Poppins.woff2 +0 -0
- /package/{src/assets → assets}/fonts/Tahoma.woff2 +0 -0
- /package/{src/assets → assets}/fonts/Tajawal.woff2 +0 -0
- /package/{src/assets → assets}/fonts/Verdana.woff2 +0 -0
- /package/{src/assets → assets}/icons/close-sidebar-mark-icon.svg +0 -0
- /package/{src/assets → assets}/icons/copy-icon.svg +0 -0
- /package/{src/assets → assets}/icons/delete-icon.svg +0 -0
- /package/{src/assets → assets}/icons/delete-no-outline-icon.svg +0 -0
- /package/{src/assets → assets}/icons/left_arrow.svg +0 -0
- /package/{src/assets → assets}/icons/right_arrow.svg +0 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class AggregationFunctionService {
|
|
5
|
+
constructor() {
|
|
6
|
+
// New structure: { [rowId]: Map<fieldId, fieldData> }
|
|
7
|
+
this.aggregateFieldsMap = new Map();
|
|
8
|
+
this.numberFieldsMap = new Map();
|
|
9
|
+
this.aggregateFieldResultsSubject = new BehaviorSubject(null);
|
|
10
|
+
this.aggregateFieldResults$ = this.aggregateFieldResultsSubject.asObservable();
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Store or update an aggregate field in the map
|
|
14
|
+
*/
|
|
15
|
+
setAggregateField(rowId, fieldId, operation, formula) {
|
|
16
|
+
if (!this.aggregateFieldsMap.has(rowId)) {
|
|
17
|
+
this.aggregateFieldsMap.set(rowId, new Map());
|
|
18
|
+
}
|
|
19
|
+
this.aggregateFieldsMap.get(rowId).set(fieldId, { id: fieldId, operation, formula });
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Store or update a number field in the map
|
|
23
|
+
*/
|
|
24
|
+
setNumberField(rowId, fieldId, answer) {
|
|
25
|
+
if (!this.numberFieldsMap.has(rowId)) {
|
|
26
|
+
this.numberFieldsMap.set(rowId, new Map());
|
|
27
|
+
}
|
|
28
|
+
this.numberFieldsMap.get(rowId).set(fieldId, { id: fieldId, answer });
|
|
29
|
+
this.checkAndEvaluateFormulas(rowId);
|
|
30
|
+
}
|
|
31
|
+
emitAggregateResult(id, result, evaluated) {
|
|
32
|
+
this.aggregateFieldResultsSubject.next({ id, result, evaluated });
|
|
33
|
+
}
|
|
34
|
+
evaluateCustomFormula(rowId, formula) {
|
|
35
|
+
const rowNumberFields = this.numberFieldsMap.get(rowId);
|
|
36
|
+
if (!formula || !rowNumberFields)
|
|
37
|
+
return null;
|
|
38
|
+
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;
|
|
39
|
+
/[0-9a-fA-F\-]{36}/g;
|
|
40
|
+
const uuidMatches = formula.match(uuidRegex) || [];
|
|
41
|
+
const allHaveAnswers = uuidMatches.every(uuid => {
|
|
42
|
+
const field = rowNumberFields.get(uuid);
|
|
43
|
+
return field !== undefined &&
|
|
44
|
+
field.answer !== undefined &&
|
|
45
|
+
field.answer !== null &&
|
|
46
|
+
String(field.answer).trim() !== '';
|
|
47
|
+
});
|
|
48
|
+
if (!allHaveAnswers)
|
|
49
|
+
return null;
|
|
50
|
+
const replacedFormula = formula.replace(uuidRegex, (match) => {
|
|
51
|
+
const field = rowNumberFields.get(match);
|
|
52
|
+
return field?.answer?.toString() || '0';
|
|
53
|
+
});
|
|
54
|
+
try {
|
|
55
|
+
return new Function(`return ${replacedFormula};`)();
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
console.error('Error evaluating formula:', error);
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
evaluatePredefinedOperation(rowId, operation, formula) {
|
|
63
|
+
const rowNumberFields = this.numberFieldsMap.get(rowId);
|
|
64
|
+
if (!rowNumberFields)
|
|
65
|
+
return null;
|
|
66
|
+
const uuidList = formula.split(',').map(id => id.trim());
|
|
67
|
+
const values = [];
|
|
68
|
+
let hasAnyAnswer = false;
|
|
69
|
+
for (const uuid of uuidList) {
|
|
70
|
+
const field = rowNumberFields.get(uuid);
|
|
71
|
+
const val = field?.answer;
|
|
72
|
+
// If the field doesn't exist or value is invalid, push 0 as default
|
|
73
|
+
if (val !== undefined && val !== null && String(val).trim() !== '') {
|
|
74
|
+
hasAnyAnswer = true;
|
|
75
|
+
values.push(Number(val));
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
values.push(0); // Still push 0 to keep array length, but flag stays false unless at least one answer exists
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (!hasAnyAnswer)
|
|
82
|
+
return null;
|
|
83
|
+
let result = 0;
|
|
84
|
+
switch (operation) {
|
|
85
|
+
case 'SUM':
|
|
86
|
+
result = values.reduce((acc, val) => acc + val, 0);
|
|
87
|
+
break;
|
|
88
|
+
case 'SUBTRACTION':
|
|
89
|
+
result = values.reduce((acc, val) => acc - val);
|
|
90
|
+
break;
|
|
91
|
+
case 'MULTIPLICATION':
|
|
92
|
+
result = values.reduce((acc, val) => acc * val, 1);
|
|
93
|
+
break;
|
|
94
|
+
default:
|
|
95
|
+
console.warn(`Unsupported operation: ${operation}`);
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
checkAndEvaluateFormulas(rowId) {
|
|
101
|
+
const aggregateFields = this.aggregateFieldsMap.get(rowId);
|
|
102
|
+
if (!aggregateFields)
|
|
103
|
+
return;
|
|
104
|
+
aggregateFields.forEach((aggregateField, id) => {
|
|
105
|
+
let result = null;
|
|
106
|
+
if (aggregateField.operation === 'CUSTOM') {
|
|
107
|
+
result = this.evaluateCustomFormula(rowId, aggregateField.formula);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
result = this.evaluatePredefinedOperation(rowId, aggregateField.operation, aggregateField.formula);
|
|
111
|
+
}
|
|
112
|
+
if (result !== null) {
|
|
113
|
+
aggregateField.result = result;
|
|
114
|
+
this.aggregateFieldsMap.get(rowId).set(id, aggregateField);
|
|
115
|
+
this.emitAggregateResult(`${rowId}:${id}`, result, true);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
this.emitAggregateResult(`${rowId}:${id}`, 0, false);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
clearAll() {
|
|
123
|
+
this.aggregateFieldsMap.clear();
|
|
124
|
+
this.numberFieldsMap.clear();
|
|
125
|
+
this.aggregateFieldResultsSubject.next(null);
|
|
126
|
+
}
|
|
127
|
+
ngOnDestroy() {
|
|
128
|
+
this.clearAll();
|
|
129
|
+
}
|
|
130
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AggregationFunctionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
131
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AggregationFunctionService, providedIn: 'root' }); }
|
|
132
|
+
}
|
|
133
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AggregationFunctionService, decorators: [{
|
|
134
|
+
type: Injectable,
|
|
135
|
+
args: [{
|
|
136
|
+
providedIn: 'root',
|
|
137
|
+
}]
|
|
138
|
+
}], ctorParameters: function () { return []; } });
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL3NlcnZpY2VzL2FnZ3JlZ2F0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7QUFNbkQsTUFBTSxPQUFPLDBCQUEwQjtJQVNyQztRQVBBLHNEQUFzRDtRQUNoRCx1QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBNEYsQ0FBQztRQUN6SCxvQkFBZSxHQUFHLElBQUksR0FBRyxFQUF1RCxDQUFDO1FBRS9FLGlDQUE0QixHQUFHLElBQUksZUFBZSxDQUEwRCxJQUFJLENBQUMsQ0FBQztRQUMxSCwyQkFBc0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFM0QsQ0FBQztJQUVoQjs7T0FFRztJQUNILGlCQUFpQixDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsU0FBaUIsRUFBRSxPQUFlO1FBQ2xGLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztTQUMvQztRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYyxDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsTUFBYztRQUMzRCxJQUFJLENBQUMsSUFBSSxD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QUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQzsrR0EzSVUsMEJBQTBCO21IQUExQiwwQkFBMEIsY0FGekIsTUFBTTs7NEZBRVAsMEJBQTBCO2tCQUh0QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWdncmVnYXRpb25GdW5jdGlvblNlcnZpY2Uge1xyXG5cclxuICAvLyBOZXcgc3RydWN0dXJlOiB7IFtyb3dJZF06IE1hcDxmaWVsZElkLCBmaWVsZERhdGE+IH1cclxucHJpdmF0ZSBhZ2dyZWdhdGVGaWVsZHNNYXAgPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgeyBpZDogc3RyaW5nOyBvcGVyYXRpb246IHN0cmluZzsgZm9ybXVsYTogc3RyaW5nOyByZXN1bHQ/OiBudW1iZXIgfT4+KCk7XHJcbnByaXZhdGUgbnVtYmVyRmllbGRzTWFwID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIHsgaWQ6IHN0cmluZzsgYW5zd2VyOiBudW1iZXIgfT4+KCk7XHJcblxyXG4gIHByaXZhdGUgYWdncmVnYXRlRmllbGRSZXN1bHRzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBpZDogc3RyaW5nOyByZXN1bHQ6IG51bWJlcixldmFsdWF0ZWQ6Ym9vbGVhbiB9IHwgbnVsbD4obnVsbCk7XHJcbiAgYWdncmVnYXRlRmllbGRSZXN1bHRzJCA9IHRoaXMuYWdncmVnYXRlRmllbGRSZXN1bHRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBTdG9yZSBvciB1cGRhdGUgYW4gYWdncmVnYXRlIGZpZWxkIGluIHRoZSBtYXBcclxuICAgKi9cclxuICBzZXRBZ2dyZWdhdGVGaWVsZChyb3dJZDogc3RyaW5nLCBmaWVsZElkOiBzdHJpbmcsIG9wZXJhdGlvbjogc3RyaW5nLCBmb3JtdWxhOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5hZ2dyZWdhdGVGaWVsZHNNYXAuaGFzKHJvd0lkKSkge1xyXG4gICAgICB0aGlzLmFnZ3JlZ2F0ZUZpZWxkc01hcC5zZXQocm93SWQsIG5ldyBNYXAoKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFnZ3JlZ2F0ZUZpZWxkc01hcC5nZXQocm93SWQpIS5zZXQoZmllbGRJZCwgeyBpZDogZmllbGRJZCwgb3BlcmF0aW9uLCBmb3JtdWxhIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgb3IgdXBkYXRlIGEgbnVtYmVyIGZpZWxkIGluIHRoZSBtYXBcclxuICAgKi9cclxuICBzZXROdW1iZXJGaWVsZChyb3dJZDogc3RyaW5nLCBmaWVsZElkOiBzdHJpbmcsIGFuc3dlcjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMubnVtYmVyRmllbGRzTWFwLmhhcyhyb3dJZCkpIHtcclxuICAgICAgdGhpcy5udW1iZXJGaWVsZHNNYXAuc2V0KHJvd0lkLCBuZXcgTWFwKCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5udW1iZXJGaWVsZHNNYXAuZ2V0KHJvd0lkKSEuc2V0KGZpZWxkSWQsIHsgaWQ6IGZpZWxkSWQsIGFuc3dlciB9KTtcclxuICAgIHRoaXMuY2hlY2tBbmRFdmFsdWF0ZUZvcm11bGFzKHJvd0lkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdEFnZ3JlZ2F0ZVJlc3VsdChpZDogc3RyaW5nLCByZXN1bHQ6IG51bWJlcixldmFsdWF0ZWQ6Ym9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5hZ2dyZWdhdGVGaWVsZFJlc3VsdHNTdWJqZWN0Lm5leHQoeyBpZCwgcmVzdWx0LGV2YWx1YXRlZCB9KTtcclxuICB9XHJcblxyXG5cclxuICBldmFsdWF0ZUN1c3RvbUZvcm11bGEocm93SWQ6IHN0cmluZywgZm9ybXVsYTogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBcclxuICAgIGNvbnN0IHJvd051bWJlckZpZWxkcyA9IHRoaXMubnVtYmVyRmllbGRzTWFwLmdldChyb3dJZCk7XHJcbiAgICBpZiAoIWZvcm11bGEgfHwgIXJvd051bWJlckZpZWxkcykgcmV0dXJuIG51bGw7XHJcbiAgXHJcbiAgICBjb25zdCB1dWlkUmVnZXggPSAvWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzEtNV1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfS9nOy9bMC05YS1mQS1GXFwtXXszNn0vZztcclxuICAgIGNvbnN0IHV1aWRNYXRjaGVzID0gZm9ybXVsYS5tYXRjaCh1dWlkUmVnZXgpIHx8IFtdO1xyXG4gIFxyXG4gICAgY29uc3QgYWxsSGF2ZUFuc3dlcnMgPSB1dWlkTWF0Y2hlcy5ldmVyeSh1dWlkID0+IHtcclxuICAgICAgY29uc3QgZmllbGQgPSByb3dOdW1iZXJGaWVsZHMuZ2V0KHV1aWQpO1xyXG4gICAgICByZXR1cm4gZmllbGQgIT09IHVuZGVmaW5lZCAmJiBcclxuICAgICAgICAgICAgIGZpZWxkLmFuc3dlciAhPT0gdW5kZWZpbmVkICYmIFxyXG4gICAgICAgICAgICAgZmllbGQuYW5zd2VyICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICBTdHJpbmcoZmllbGQuYW5zd2VyKS50cmltKCkgIT09ICcnO1xyXG4gICAgfSk7XHJcbiAgXHJcbiAgICBpZiAoIWFsbEhhdmVBbnN3ZXJzKSByZXR1cm4gbnVsbDtcclxuICBcclxuICAgIGNvbnN0IHJlcGxhY2VkRm9ybXVsYSA9IGZvcm11bGEucmVwbGFjZSh1dWlkUmVnZXgsIChtYXRjaCkgPT4ge1xyXG4gICAgICBjb25zdCBmaWVsZCA9IHJvd051bWJlckZpZWxkcy5nZXQobWF0Y2gpO1xyXG4gICAgICByZXR1cm4gZmllbGQ/LmFuc3dlcj8udG9TdHJpbmcoKSB8fCAnMCc7XHJcbiAgICB9KTtcclxuICBcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oYHJldHVybiAke3JlcGxhY2VkRm9ybXVsYX07YCkoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGV2YWx1YXRpbmcgZm9ybXVsYTonLCBlcnJvcik7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBldmFsdWF0ZVByZWRlZmluZWRPcGVyYXRpb24ocm93SWQ6IHN0cmluZywgb3BlcmF0aW9uOiBzdHJpbmcsIGZvcm11bGE6IHN0cmluZyk6IG51bWJlciB8IG51bGwge1xyXG4gICAgY29uc3Qgcm93TnVtYmVyRmllbGRzID0gdGhpcy5udW1iZXJGaWVsZHNNYXAuZ2V0KHJvd0lkKTtcclxuICAgIGlmICghcm93TnVtYmVyRmllbGRzKSByZXR1cm4gbnVsbDtcclxuICBcclxuICAgIGNvbnN0IHV1aWRMaXN0ID0gZm9ybXVsYS5zcGxpdCgnLCcpLm1hcChpZCA9PiBpZC50cmltKCkpO1xyXG4gICAgY29uc3QgdmFsdWVzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgbGV0IGhhc0FueUFuc3dlciA9IGZhbHNlO1xyXG5cclxuICAgIGZvciAoY29uc3QgdXVpZCBvZiB1dWlkTGlzdCkge1xyXG4gICAgICBjb25zdCBmaWVsZCA9IHJvd051bWJlckZpZWxkcy5nZXQodXVpZCk7XHJcbiAgICAgIGNvbnN0IHZhbCA9IGZpZWxkPy5hbnN3ZXI7XHJcbiAgXHJcbiAgICAgIC8vIElmIHRoZSBmaWVsZCBkb2Vzbid0IGV4aXN0IG9yIHZhbHVlIGlzIGludmFsaWQsIHB1c2ggMCBhcyBkZWZhdWx0XHJcbiAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgU3RyaW5nKHZhbCkudHJpbSgpICE9PSAnJykge1xyXG4gICAgICAgIGhhc0FueUFuc3dlciA9IHRydWU7XHJcbiAgICAgICAgdmFsdWVzLnB1c2goTnVtYmVyKHZhbCkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbHVlcy5wdXNoKDApOyAvLyBTdGlsbCBwdXNoIDAgdG8ga2VlcCBhcnJheSBsZW5ndGgsIGJ1dCBmbGFnIHN0YXlzIGZhbHNlIHVubGVzcyBhdCBsZWFzdCBvbmUgYW5zd2VyIGV4aXN0c1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWhhc0FueUFuc3dlcikgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgcmVzdWx0ID0gMDtcclxuICAgIHN3aXRjaCAob3BlcmF0aW9uKSB7XHJcbiAgICAgIGNhc2UgJ1NVTSc6XHJcbiAgICAgICAgcmVzdWx0ID0gdmFsdWVzLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIHZhbCwgMCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1NVQlRSQUNUSU9OJzpcclxuICAgICAgICByZXN1bHQgPSB2YWx1ZXMucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjIC0gdmFsKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnTVVMVElQTElDQVRJT04nOlxyXG4gICAgICAgIHJlc3VsdCA9IHZhbHVlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKiB2YWwsIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUud2FybihgVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiAke29wZXJhdGlvbn1gKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICBcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBjaGVja0FuZEV2YWx1YXRlRm9ybXVsYXMocm93SWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgYWdncmVnYXRlRmllbGRzID0gdGhpcy5hZ2dyZWdhdGVGaWVsZHNNYXAuZ2V0KHJvd0lkKTtcclxuICAgIGlmICghYWdncmVnYXRlRmllbGRzKSByZXR1cm47XHJcbiAgXHJcbiAgICBhZ2dyZWdhdGVGaWVsZHMuZm9yRWFjaCgoYWdncmVnYXRlRmllbGQsIGlkKSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIFxyXG4gICAgICBpZiAoYWdncmVnYXRlRmllbGQub3BlcmF0aW9uID09PSAnQ1VTVE9NJykge1xyXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZXZhbHVhdGVDdXN0b21Gb3JtdWxhKHJvd0lkLCBhZ2dyZWdhdGVGaWVsZC5mb3JtdWxhKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bHQgPSB0aGlzLmV2YWx1YXRlUHJlZGVmaW5lZE9wZXJhdGlvbihyb3dJZCwgYWdncmVnYXRlRmllbGQub3BlcmF0aW9uLCBhZ2dyZWdhdGVGaWVsZC5mb3JtdWxhKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICBpZiAocmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgYWdncmVnYXRlRmllbGQucmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuYWdncmVnYXRlRmllbGRzTWFwLmdldChyb3dJZCkhLnNldChpZCwgYWdncmVnYXRlRmllbGQpO1xyXG4gICAgICAgIHRoaXMuZW1pdEFnZ3JlZ2F0ZVJlc3VsdChgJHtyb3dJZH06JHtpZH1gLCByZXN1bHQsdHJ1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lbWl0QWdncmVnYXRlUmVzdWx0KGAke3Jvd0lkfToke2lkfWAsIDAsZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsZWFyQWxsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hZ2dyZWdhdGVGaWVsZHNNYXAuY2xlYXIoKTtcclxuICAgIHRoaXMubnVtYmVyRmllbGRzTWFwLmNsZWFyKCk7XHJcbiAgICB0aGlzLmFnZ3JlZ2F0ZUZpZWxkUmVzdWx0c1N1YmplY3QubmV4dChudWxsKTtcclxuICB9XHJcbiAgXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyQWxsKCk7XHJcbiAgfVxyXG59Il19
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common/http";
|
|
4
|
+
import * as i2 from "./data.service";
|
|
5
|
+
export class CountryService {
|
|
6
|
+
constructor(http, dataService) {
|
|
7
|
+
this.http = http;
|
|
8
|
+
this.dataService = dataService;
|
|
9
|
+
this.apiUrl = '';
|
|
10
|
+
this.header = {};
|
|
11
|
+
this.dataService.apiUrl$.subscribe((data) => {
|
|
12
|
+
this.apiUrl = data;
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
loadCountryDetails(questionId, page, size, searchKey) {
|
|
16
|
+
return this.http.get(`${this.apiUrl}/api/public/json/country?page=${page}&size=${size}&searchKey=${encodeURIComponent(searchKey)}`);
|
|
17
|
+
}
|
|
18
|
+
processCountryDetails(data, displayFlag, displayCode, showCountryName) {
|
|
19
|
+
const countryDetails = [];
|
|
20
|
+
data.forEach((country) => {
|
|
21
|
+
const flag = displayFlag && country.flag ? country.flag : '';
|
|
22
|
+
const name = showCountryName ? country.name || '' : '';
|
|
23
|
+
const isdRoot = country.isd?.root || '';
|
|
24
|
+
const isdSuffixes = country.isd?.suffixes || [];
|
|
25
|
+
if (isdRoot && isdSuffixes.length > 0) {
|
|
26
|
+
isdSuffixes.forEach((suffix) => {
|
|
27
|
+
const isdCode = `${isdRoot}${suffix}`;
|
|
28
|
+
// Special case: Only flag should be displayed, but value must have ISD code
|
|
29
|
+
if (displayFlag && !displayCode && !showCountryName) {
|
|
30
|
+
countryDetails.push({
|
|
31
|
+
value: isdCode,
|
|
32
|
+
label: '',
|
|
33
|
+
image: flag, // Only flag should be displayed
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
// Handle all other cases
|
|
38
|
+
let label = '';
|
|
39
|
+
if (showCountryName)
|
|
40
|
+
label += name;
|
|
41
|
+
if (displayCode)
|
|
42
|
+
label += (label ? ' ' : '') + isdCode;
|
|
43
|
+
if (!label)
|
|
44
|
+
label = isdCode; // Ensure label is not empty
|
|
45
|
+
countryDetails.push({
|
|
46
|
+
value: isdCode,
|
|
47
|
+
label: label.trim(),
|
|
48
|
+
image: flag,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const fallbackCode = isdRoot || country.code || ''; // Fallback if no suffixes
|
|
55
|
+
if (displayFlag && !displayCode && !showCountryName) {
|
|
56
|
+
countryDetails.push({
|
|
57
|
+
value: fallbackCode,
|
|
58
|
+
label: '',
|
|
59
|
+
image: flag,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
let label = '';
|
|
64
|
+
if (showCountryName)
|
|
65
|
+
label += name;
|
|
66
|
+
if (displayCode)
|
|
67
|
+
label += (label ? ' ' : '') + fallbackCode;
|
|
68
|
+
if (!label)
|
|
69
|
+
label = fallbackCode;
|
|
70
|
+
countryDetails.push({
|
|
71
|
+
value: fallbackCode,
|
|
72
|
+
label: label.trim(),
|
|
73
|
+
image: flag,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return countryDetails;
|
|
79
|
+
}
|
|
80
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CountryService, deps: [{ token: i1.HttpClient }, { token: i2.DataService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
81
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CountryService, providedIn: 'root' }); }
|
|
82
|
+
}
|
|
83
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CountryService, decorators: [{
|
|
84
|
+
type: Injectable,
|
|
85
|
+
args: [{
|
|
86
|
+
providedIn: 'root',
|
|
87
|
+
}]
|
|
88
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.DataService }]; } });
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRyeVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL3NlcnZpY2VzL2NvdW50cnlTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFjM0MsTUFBTSxPQUFPLGNBQWM7SUFJekIsWUFBb0IsSUFBZ0IsRUFBVSxXQUF3QjtRQUFsRCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFIOUQsV0FBTSxHQUFXLEVBQUUsQ0FBQztRQUM1QixXQUFNLEdBQVEsRUFBRSxDQUFDO1FBR2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsVUFBa0IsRUFBRSxJQUFZLEVBQUUsSUFBWSxFQUFFLFNBQWlCO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxpQ0FBaUMsSUFBSSxTQUFTLElBQUksY0FBYyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0ksQ0FBQztJQUVELHFCQUFxQixDQUNuQixJQUFXLEVBQ1gsV0FBb0IsRUFDcEIsV0FBb0IsRUFDcEIsZUFBd0I7UUFFeEIsTUFBTSxjQUFjLEdBQWtCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEdBQUcsV0FBVyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FB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XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhLnNlcnZpY2UnO1xyXG5cclxuaW50ZXJmYWNlIENvdW50cnlEYXRhIHtcclxuICB2YWx1ZTogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgaW1hZ2U6IHN0cmluZztcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvdW50cnlTZXJ2aWNlIHtcclxuICBwcml2YXRlIGFwaVVybDogc3RyaW5nID0gJyc7XHJcbiAgaGVhZGVyOiBhbnkgPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSkge1xyXG4gICAgdGhpcy5kYXRhU2VydmljZS5hcGlVcmwkLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLmFwaVVybCA9IGRhdGE7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRDb3VudHJ5RGV0YWlscyhxdWVzdGlvbklkOiBzdHJpbmcsIHBhZ2U6IG51bWJlciwgc2l6ZTogbnVtYmVyLCBzZWFyY2hLZXk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMuYXBpVXJsfS9hcGkvcHVibGljL2pzb24vY291bnRyeT9wYWdlPSR7cGFnZX0mc2l6ZT0ke3NpemV9JnNlYXJjaEtleT0ke2VuY29kZVVSSUNvbXBvbmVudChzZWFyY2hLZXkpfWApO1xyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc0NvdW50cnlEZXRhaWxzKFxyXG4gICAgZGF0YTogYW55W10sXHJcbiAgICBkaXNwbGF5RmxhZzogYm9vbGVhbixcclxuICAgIGRpc3BsYXlDb2RlOiBib29sZWFuLFxyXG4gICAgc2hvd0NvdW50cnlOYW1lOiBib29sZWFuXHJcbiAgKTogQ291bnRyeURhdGFbXSB7XHJcbiAgICBjb25zdCBjb3VudHJ5RGV0YWlsczogQ291bnRyeURhdGFbXSA9IFtdO1xyXG4gICAgZGF0YS5mb3JFYWNoKChjb3VudHJ5KSA9PiB7XHJcbiAgICAgIGNvbnN0IGZsYWcgPSBkaXNwbGF5RmxhZyAmJiBjb3VudHJ5LmZsYWcgPyBjb3VudHJ5LmZsYWcgOiAnJztcclxuICAgICAgY29uc3QgbmFtZSA9IHNob3dDb3VudHJ5TmFtZSA/IGNvdW50cnkubmFtZSB8fCAnJyA6ICcnO1xyXG4gICAgICBjb25zdCBpc2RSb290ID0gY291bnRyeS5pc2Q/LnJvb3QgfHwgJyc7XHJcbiAgICAgIGNvbnN0IGlzZFN1ZmZpeGVzID0gY291bnRyeS5pc2Q/LnN1ZmZpeGVzIHx8IFtdO1xyXG4gIFxyXG4gICAgICBpZiAoaXNkUm9vdCAmJiBpc2RTdWZmaXhlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaXNkU3VmZml4ZXMuZm9yRWFjaCgoc3VmZml4OiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGlzZENvZGUgPSBgJHtpc2RSb290fSR7c3VmZml4fWA7XHJcbiAgXHJcbiAgICAgICAgICAvLyBTcGVjaWFsIGNhc2U6IE9ubHkgZmxhZyBzaG91bGQgYmUgZGlzcGxheWVkLCBidXQgdmFsdWUgbXVzdCBoYXZlIElTRCBjb2RlXHJcbiAgICAgICAgICBpZiAoZGlzcGxheUZsYWcgJiYgIWRpc3BsYXlDb2RlICYmICFzaG93Q291bnRyeU5hbWUpIHtcclxuICAgICAgICAgICAgY291bnRyeURldGFpbHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgdmFsdWU6IGlzZENvZGUsICAvLyBLZWVwIElTRCBjb2RlIGluIHZhbHVlXHJcbiAgICAgICAgICAgICAgbGFiZWw6ICcnLCAgICAgICAvLyBObyB0ZXh0IGluIGxhYmVsXHJcbiAgICAgICAgICAgICAgaW1hZ2U6IGZsYWcsICAgICAvLyAgT25seSBmbGFnIHNob3VsZCBiZSBkaXNwbGF5ZWRcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBIYW5kbGUgYWxsIG90aGVyIGNhc2VzXHJcbiAgICAgICAgICAgIGxldCBsYWJlbCA9ICcnO1xyXG4gICAgICAgICAgICBpZiAoc2hvd0NvdW50cnlOYW1lKSBsYWJlbCArPSBuYW1lO1xyXG4gICAgICAgICAgICBpZiAoZGlzcGxheUNvZGUpIGxhYmVsICs9IChsYWJlbCA/ICcgJyA6ICcnKSArIGlzZENvZGU7XHJcbiAgICAgICAgICAgIGlmICghbGFiZWwpIGxhYmVsID0gaXNkQ29kZTsgLy8gRW5zdXJlIGxhYmVsIGlzIG5vdCBlbXB0eVxyXG4gIFxyXG4gICAgICAgICAgICBjb3VudHJ5RGV0YWlscy5wdXNoKHtcclxuICAgICAgICAgICAgICB2YWx1ZTogaXNkQ29kZSxcclxuICAgICAgICAgICAgICBsYWJlbDogbGFiZWwudHJpbSgpLFxyXG4gICAgICAgICAgICAgIGltYWdlOiBmbGFnLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBmYWxsYmFja0NvZGUgPSBpc2RSb290IHx8IGNvdW50cnkuY29kZSB8fCAnJzsgLy8gRmFsbGJhY2sgaWYgbm8gc3VmZml4ZXNcclxuICBcclxuICAgICAgICBpZiAoZGlzcGxheUZsYWcgJiYgIWRpc3BsYXlDb2RlICYmICFzaG93Q291bnRyeU5hbWUpIHtcclxuICAgICAgICAgIGNvdW50cnlEZXRhaWxzLnB1c2goe1xyXG4gICAgICAgICAgICB2YWx1ZTogZmFsbGJhY2tDb2RlLFxyXG4gICAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICAgIGltYWdlOiBmbGFnLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBsYWJlbCA9ICcnO1xyXG4gICAgICAgICAgaWYgKHNob3dDb3VudHJ5TmFtZSkgbGFiZWwgKz0gbmFtZTtcclxuICAgICAgICAgIGlmIChkaXNwbGF5Q29kZSkgbGFiZWwgKz0gKGxhYmVsID8gJyAnIDogJycpICsgZmFsbGJhY2tDb2RlO1xyXG4gICAgICAgICAgaWYgKCFsYWJlbCkgbGFiZWwgPSBmYWxsYmFja0NvZGU7XHJcbiAgXHJcbiAgICAgICAgICBjb3VudHJ5RGV0YWlscy5wdXNoKHtcclxuICAgICAgICAgICAgdmFsdWU6IGZhbGxiYWNrQ29kZSxcclxuICAgICAgICAgICAgbGFiZWw6IGxhYmVsLnRyaW0oKSxcclxuICAgICAgICAgICAgaW1hZ2U6IGZsYWcsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNvdW50cnlEZXRhaWxzO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class DataService {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.dataSubject = new BehaviorSubject('');
|
|
7
|
+
this.apiUrl$ = this.dataSubject.asObservable();
|
|
8
|
+
this.headerSubject = new BehaviorSubject({});
|
|
9
|
+
this.header$ = this.headerSubject.asObservable();
|
|
10
|
+
this.subformSubject = new BehaviorSubject({});
|
|
11
|
+
this.subform$ = this.subformSubject.asObservable();
|
|
12
|
+
this.parentQuestionsSubject = new BehaviorSubject(null);
|
|
13
|
+
this.parentQuestions$ = this.parentQuestionsSubject.asObservable();
|
|
14
|
+
}
|
|
15
|
+
setApiUrl(data) {
|
|
16
|
+
this.dataSubject.next(data);
|
|
17
|
+
}
|
|
18
|
+
setHeader(data) {
|
|
19
|
+
this.headerSubject.next(data);
|
|
20
|
+
}
|
|
21
|
+
setParentQuestions(data) {
|
|
22
|
+
this.parentQuestionsSubject.next(data);
|
|
23
|
+
}
|
|
24
|
+
setSubformData(data) {
|
|
25
|
+
this.subformSubject.next(data);
|
|
26
|
+
}
|
|
27
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
28
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataService, providedIn: 'root' }); }
|
|
29
|
+
}
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataService, decorators: [{
|
|
31
|
+
type: Injectable,
|
|
32
|
+
args: [{
|
|
33
|
+
providedIn: 'root',
|
|
34
|
+
}]
|
|
35
|
+
}], ctorParameters: function () { return []; } });
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDOztBQUtuRCxNQUFNLE9BQU8sV0FBVztJQUN0QjtRQUVRLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDL0MsWUFBTyxHQUF1QixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdELGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7UUFDOUMsWUFBTyxHQUFvQixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTVELG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7UUFDL0MsYUFBUSxHQUFvQixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTlELDJCQUFzQixHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO1FBQ3pELHFCQUFnQixHQUFvQixJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFYdkUsQ0FBQztJQWFoQixTQUFTLENBQUMsSUFBWTtRQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVM7UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVM7UUFDMUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVM7UUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQzsrR0E1QlUsV0FBVzttSEFBWCxXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIHByaXZhdGUgZGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG4gIHB1YmxpYyBhcGlVcmwkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLmRhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gIHByaXZhdGUgaGVhZGVyU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XHJcbiAgcHVibGljIGhlYWRlciQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMuaGVhZGVyU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJpdmF0ZSBzdWJmb3JtU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XHJcbiAgcHVibGljIHN1YmZvcm0kOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLnN1YmZvcm1TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIHBhcmVudFF1ZXN0aW9uc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcbiAgcHVibGljIHBhcmVudFF1ZXN0aW9ucyQ6IE9ic2VydmFibGU8YW55PiA9IHRoaXMucGFyZW50UXVlc3Rpb25zU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgc2V0QXBpVXJsKGRhdGE6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhU3ViamVjdC5uZXh0KGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2V0SGVhZGVyKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5oZWFkZXJTdWJqZWN0Lm5leHQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBzZXRQYXJlbnRRdWVzdGlvbnMoZGF0YTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnBhcmVudFF1ZXN0aW9uc1N1YmplY3QubmV4dChkYXRhKTtcclxuICB9XHJcblxyXG4gIHNldFN1YmZvcm1EYXRhKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5zdWJmb3JtU3ViamVjdC5uZXh0KGRhdGEpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// element-tracker.service.ts
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class ElementTrackerService {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.elementIds = new Set();
|
|
7
|
+
}
|
|
8
|
+
registerElement(id) {
|
|
9
|
+
this.elementIds.add(id);
|
|
10
|
+
}
|
|
11
|
+
unregisterElement(id) {
|
|
12
|
+
this.elementIds.delete(id);
|
|
13
|
+
}
|
|
14
|
+
getAllElementIds() {
|
|
15
|
+
return Array.from(this.elementIds);
|
|
16
|
+
}
|
|
17
|
+
clear() {
|
|
18
|
+
this.elementIds.clear();
|
|
19
|
+
}
|
|
20
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElementTrackerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
21
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElementTrackerService, providedIn: 'root' }); }
|
|
22
|
+
}
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ElementTrackerService, decorators: [{
|
|
24
|
+
type: Injectable,
|
|
25
|
+
args: [{ providedIn: 'root' }]
|
|
26
|
+
}] });
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC10cmFja2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL3NlcnZpY2VzL2VsZW1lbnQtdHJhY2tlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZCQUE2QjtBQUM3QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUkzQyxNQUFNLE9BQU8scUJBQXFCO0lBRGxDO1FBRVUsZUFBVSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7S0FpQnhDO0lBZkMsZUFBZSxDQUFDLEVBQVU7UUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQVU7UUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFCLENBQUM7K0dBakJVLHFCQUFxQjttSEFBckIscUJBQXFCLGNBRFIsTUFBTTs7NEZBQ25CLHFCQUFxQjtrQkFEakMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBlbGVtZW50LXRyYWNrZXIuc2VydmljZS50c1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRWxlbWVudFRyYWNrZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBlbGVtZW50SWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgcmVnaXN0ZXJFbGVtZW50KGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVsZW1lbnRJZHMuYWRkKGlkKTtcbiAgfVxuXG4gIHVucmVnaXN0ZXJFbGVtZW50KGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVsZW1lbnRJZHMuZGVsZXRlKGlkKTtcbiAgfVxuXG4gIGdldEFsbEVsZW1lbnRJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZWxlbWVudElkcyk7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLmVsZW1lbnRJZHMuY2xlYXIoKTtcbiAgfVxufSJdfQ==
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "./validation.service";
|
|
4
|
+
export class FormValidationService {
|
|
5
|
+
constructor(validationService) {
|
|
6
|
+
this.validationService = validationService;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Validate all required questions on a page.
|
|
10
|
+
* Assumes your `page` object has a `pageIndex: number` property.
|
|
11
|
+
*/
|
|
12
|
+
validateRequiredQuestions(page) {
|
|
13
|
+
// clear any previous errors for this page
|
|
14
|
+
// this.validationService.clearAll();
|
|
15
|
+
const validateQuestions = (formElements, submissionContext = null) => {
|
|
16
|
+
for (let element of formElements) {
|
|
17
|
+
if (element.entityType === 'QUESTION') {
|
|
18
|
+
const question = element.element;
|
|
19
|
+
const required = question.required;
|
|
20
|
+
const questionId = question.id;
|
|
21
|
+
const elementType = question.formElement?.elementType;
|
|
22
|
+
// pick up the answer (either in a subform or normal)
|
|
23
|
+
let answer;
|
|
24
|
+
if (submissionContext?.isInMultipleSubform) {
|
|
25
|
+
const { submission } = submissionContext;
|
|
26
|
+
answer = submission.answers.find((a) => a.questionId === questionId)?.answer;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
answer = question.answer;
|
|
30
|
+
}
|
|
31
|
+
const isEmpty = answer === null ||
|
|
32
|
+
answer === undefined ||
|
|
33
|
+
(typeof answer === 'string' && answer.trim() === '') ||
|
|
34
|
+
(typeof answer === 'object' && Object.keys(answer).length === 0);
|
|
35
|
+
if (required && isEmpty) {
|
|
36
|
+
const message = submissionContext?.isInMultipleSubform
|
|
37
|
+
? `Required question ${question.questionNumber} is not answered in a subform.`
|
|
38
|
+
: `Required question ${question.questionNumber} is not answered.`;
|
|
39
|
+
// register the invalid question
|
|
40
|
+
this.validationService.setInvalid(questionId, message, page.pageIndex ?? 0);
|
|
41
|
+
return { isValid: false, message };
|
|
42
|
+
}
|
|
43
|
+
// recurse into child logics
|
|
44
|
+
if (question.childLogics) {
|
|
45
|
+
for (let logic of question.childLogics) {
|
|
46
|
+
if (!logic.showLogic)
|
|
47
|
+
continue;
|
|
48
|
+
for (let row of logic.rows) {
|
|
49
|
+
const result = validateQuestions(row.grid, submissionContext);
|
|
50
|
+
if (!result.isValid)
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else if (element.entityType === 'SUBFORM') {
|
|
57
|
+
const subform = element.element;
|
|
58
|
+
if (subform.property?.subFormStructure === 'multiple') {
|
|
59
|
+
const submissions = subform.submissions || [];
|
|
60
|
+
if (submissions.length > 0) {
|
|
61
|
+
const hasRequired = subform.rows.some((r) => r.grid.some((f) => f.entityType === 'QUESTION' && f.element.required));
|
|
62
|
+
if (hasRequired && submissions.length === 0) {
|
|
63
|
+
const message = `Subform "${subform.title || 'Untitled'}" is missing required submissions.`;
|
|
64
|
+
this.validationService.setInvalid(subform.id, message, page.pageIndex ?? 0);
|
|
65
|
+
return { isValid: false, message };
|
|
66
|
+
}
|
|
67
|
+
// map questions and validate only if more than one submission
|
|
68
|
+
const questionMap = new Map();
|
|
69
|
+
subform.rows.forEach((r) => r.grid.forEach((f) => {
|
|
70
|
+
if (f.entityType === 'QUESTION') {
|
|
71
|
+
questionMap.set(f.element.id, f.element);
|
|
72
|
+
}
|
|
73
|
+
}));
|
|
74
|
+
for (let submission of submissions) {
|
|
75
|
+
for (let row of subform.rows) {
|
|
76
|
+
const result = validateQuestions(row.grid, {
|
|
77
|
+
isInMultipleSubform: true,
|
|
78
|
+
submission,
|
|
79
|
+
questionMap,
|
|
80
|
+
});
|
|
81
|
+
if (!result.isValid)
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// single‐entry subform
|
|
89
|
+
for (let row of subform.rows || []) {
|
|
90
|
+
const result = validateQuestions(row.grid);
|
|
91
|
+
if (!result.isValid)
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else if ((element.entityType === 'QUESTION_GROUP' ||
|
|
97
|
+
element.entityType === 'MULTIFIELD') &&
|
|
98
|
+
element.element.rows) {
|
|
99
|
+
for (let row of element.element.rows) {
|
|
100
|
+
const result = validateQuestions(row.grid, submissionContext);
|
|
101
|
+
if (!result.isValid)
|
|
102
|
+
return result;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return { isValid: true, message: 'All required questions are answered.' };
|
|
107
|
+
};
|
|
108
|
+
// start validation
|
|
109
|
+
for (const row of page.rows) {
|
|
110
|
+
const result = validateQuestions(row.grid);
|
|
111
|
+
if (!result.isValid) {
|
|
112
|
+
// we already called setInvalid above
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// if we get here, everything passed
|
|
117
|
+
return { isValid: true, message: 'All required questions are answered.' };
|
|
118
|
+
}
|
|
119
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormValidationService, deps: [{ token: i1.ValidationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
120
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormValidationService, providedIn: 'root' }); }
|
|
121
|
+
}
|
|
122
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormValidationService, decorators: [{
|
|
123
|
+
type: Injectable,
|
|
124
|
+
args: [{
|
|
125
|
+
providedIn: 'root',
|
|
126
|
+
}]
|
|
127
|
+
}], ctorParameters: function () { return [{ type: i1.ValidationService }]; } });
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12YWxpZGF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL3NlcnZpY2VzL2Zvcm0tdmFsaWRhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU0zQyxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLFlBQW9CLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQUcsQ0FBQztJQUU1RDs7O09BR0c7SUFDSCx5QkFBeUIsQ0FBQyxJQUFTO1FBQ2pDLDBDQUEwQztRQUMxQyxxQ0FBcUM7UUFFckMsTUFBTSxpQkFBaUIsR0FBRyxDQUN4QixZQUFtQixFQUNuQixvQkFBeUIsSUFBSSxFQUNVLEVBQUU7WUFDekMsS0FBSyxJQUFJLE9BQU8sSUFBSSxZQUFZLEVBQUU7Z0JBQ2hDLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7b0JBQ3JDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7b0JBQ2pDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7b0JBQ25DLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0JBQy9CLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDO29CQUV0RCxxREFBcUQ7b0JBQ3JELElBQUksTUFBVyxDQUFDO29CQUNoQixJQUFJLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFO3dCQUMxQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsaUJBQWlCLENBQUM7d0JBQ3pDLE1BQU0sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDOUIsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssVUFBVSxD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QyxHQUFHLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7d0JBQzlELElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTzs0QkFBRSxPQUFPLE1BQU0sQ0FBQztxQkFDcEM7aUJBQ0Y7YUFDRjtZQUVELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxDQUFDO1FBQzVFLENBQUMsQ0FBQztRQUVGLG1CQUFtQjtRQUNuQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDM0IsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUNuQixxQ0FBcUM7Z0JBQ3JDLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7U0FDRjtRQUVELG9DQUFvQztRQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQztJQUM1RSxDQUFDOytHQS9JVSxxQkFBcUI7bUhBQXJCLHFCQUFxQixjQUZwQixNQUFNOzs0RkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4vdmFsaWRhdGlvbi5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtVmFsaWRhdGlvblNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZSBhbGwgcmVxdWlyZWQgcXVlc3Rpb25zIG9uIGEgcGFnZS5cclxuICAgKiBBc3N1bWVzIHlvdXIgYHBhZ2VgIG9iamVjdCBoYXMgYSBgcGFnZUluZGV4OiBudW1iZXJgIHByb3BlcnR5LlxyXG4gICAqL1xyXG4gIHZhbGlkYXRlUmVxdWlyZWRRdWVzdGlvbnMocGFnZTogYW55KTogeyBpc1ZhbGlkOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfSB7XHJcbiAgICAvLyBjbGVhciBhbnkgcHJldmlvdXMgZXJyb3JzIGZvciB0aGlzIHBhZ2VcclxuICAgIC8vIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJBbGwoKTtcclxuXHJcbiAgICBjb25zdCB2YWxpZGF0ZVF1ZXN0aW9ucyA9IChcclxuICAgICAgZm9ybUVsZW1lbnRzOiBhbnlbXSxcclxuICAgICAgc3VibWlzc2lvbkNvbnRleHQ6IGFueSA9IG51bGxcclxuICAgICk6IHsgaXNWYWxpZDogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIH0gPT4ge1xyXG4gICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGZvcm1FbGVtZW50cykge1xyXG4gICAgICAgIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicpIHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gZWxlbWVudC5lbGVtZW50O1xyXG4gICAgICAgICAgY29uc3QgcmVxdWlyZWQgPSBxdWVzdGlvbi5yZXF1aXJlZDtcclxuICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uSWQgPSBxdWVzdGlvbi5pZDtcclxuICAgICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gcXVlc3Rpb24uZm9ybUVsZW1lbnQ/LmVsZW1lbnRUeXBlO1xyXG5cclxuICAgICAgICAgIC8vIHBpY2sgdXAgdGhlIGFuc3dlciAoZWl0aGVyIGluIGEgc3ViZm9ybSBvciBub3JtYWwpXHJcbiAgICAgICAgICBsZXQgYW5zd2VyOiBhbnk7XHJcbiAgICAgICAgICBpZiAoc3VibWlzc2lvbkNvbnRleHQ/LmlzSW5NdWx0aXBsZVN1YmZvcm0pIHtcclxuICAgICAgICAgICAgY29uc3QgeyBzdWJtaXNzaW9uIH0gPSBzdWJtaXNzaW9uQ29udGV4dDtcclxuICAgICAgICAgICAgYW5zd2VyID0gc3VibWlzc2lvbi5hbnN3ZXJzLmZpbmQoXHJcbiAgICAgICAgICAgICAgKGE6IGFueSkgPT4gYS5xdWVzdGlvbklkID09PSBxdWVzdGlvbklkXHJcbiAgICAgICAgICAgICk/LmFuc3dlcjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFuc3dlciA9IHF1ZXN0aW9uLmFuc3dlcjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBpc0VtcHR5ID1cclxuICAgICAgICAgICAgYW5zd2VyID09PSBudWxsIHx8XHJcbiAgICAgICAgICAgIGFuc3dlciA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgICAgICh0eXBlb2YgYW5zd2VyID09PSAnc3RyaW5nJyAmJiBhbnN3ZXIudHJpbSgpID09PSAnJykgfHxcclxuICAgICAgICAgICAgKHR5cGVvZiBhbnN3ZXIgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKGFuc3dlcikubGVuZ3RoID09PSAwKTtcclxuXHJcbiAgICAgICAgICBpZiAocmVxdWlyZWQgJiYgaXNFbXB0eSkge1xyXG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gc3VibWlzc2lvbkNvbnRleHQ/LmlzSW5NdWx0aXBsZVN1YmZvcm1cclxuICAgICAgICAgICAgICA/IGBSZXF1aXJlZCBxdWVzdGlvbiAke3F1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyfSBpcyBub3QgYW5zd2VyZWQgaW4gYSBzdWJmb3JtLmBcclxuICAgICAgICAgICAgICA6IGBSZXF1aXJlZCBxdWVzdGlvbiAke3F1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyfSBpcyBub3QgYW5zd2VyZWQuYDtcclxuXHJcbiAgICAgICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBpbnZhbGlkIHF1ZXN0aW9uXHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc2V0SW52YWxpZChcclxuICAgICAgICAgICAgICBxdWVzdGlvbklkLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgcGFnZS5wYWdlSW5kZXggPz8gMFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIG1lc3NhZ2UgfTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyByZWN1cnNlIGludG8gY2hpbGQgbG9naWNzXHJcbiAgICAgICAgICBpZiAocXVlc3Rpb24uY2hpbGRMb2dpY3MpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgbG9naWMgb2YgcXVlc3Rpb24uY2hpbGRMb2dpY3MpIHtcclxuICAgICAgICAgICAgICBpZiAoIWxvZ2ljLnNob3dMb2dpYykgY29udGludWU7XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIGxvZ2ljLnJvd3MpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkLCBzdWJtaXNzaW9uQ29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScpIHtcclxuICAgICAgICAgIGNvbnN0IHN1YmZvcm0gPSBlbGVtZW50LmVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgaWYgKHN1YmZvcm0ucHJvcGVydHk/LnN1YkZvcm1TdHJ1Y3R1cmUgPT09ICdtdWx0aXBsZScpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3VibWlzc2lvbnMgPSBzdWJmb3JtLnN1Ym1pc3Npb25zIHx8IFtdO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN1Ym1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBjb25zdCBoYXNSZXF1aXJlZCA9IHN1YmZvcm0ucm93cy5zb21lKChyOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICByLmdyaWQuc29tZShcclxuICAgICAgICAgICAgICAgICAgKGY6IGFueSkgPT4gZi5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nICYmIGYuZWxlbWVudC5yZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChoYXNSZXF1aXJlZCAmJiBzdWJtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgU3ViZm9ybSBcIiR7XHJcbiAgICAgICAgICAgICAgICAgIHN1YmZvcm0udGl0bGUgfHwgJ1VudGl0bGVkJ1xyXG4gICAgICAgICAgICAgICAgfVwiIGlzIG1pc3NpbmcgcmVxdWlyZWQgc3VibWlzc2lvbnMuYDtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc2V0SW52YWxpZChcclxuICAgICAgICAgICAgICAgICAgc3ViZm9ybS5pZCxcclxuICAgICAgICAgICAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgcGFnZS5wYWdlSW5kZXggPz8gMFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IGZhbHNlLCBtZXNzYWdlIH07XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAvLyBtYXAgcXVlc3Rpb25zIGFuZCB2YWxpZGF0ZSBvbmx5IGlmIG1vcmUgdGhhbiBvbmUgc3VibWlzc2lvblxyXG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uTWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcclxuICAgICAgICAgICAgICBzdWJmb3JtLnJvd3MuZm9yRWFjaCgocjogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgci5ncmlkLmZvckVhY2goKGY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZi5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25NYXAuc2V0KGYuZWxlbWVudC5pZCwgZi5lbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBmb3IgKGxldCBzdWJtaXNzaW9uIG9mIHN1Ym1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2Ygc3ViZm9ybS5yb3dzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNJbk11bHRpcGxlU3ViZm9ybTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uTWFwLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHNpbmdsZeKAkGVudHJ5IHN1YmZvcm1cclxuICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIHN1YmZvcm0ucm93cyB8fCBbXSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkKTtcclxuICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTl9HUk9VUCcgfHxcclxuICAgICAgICAgICAgZWxlbWVudC5lbnRpdHlUeXBlID09PSAnTVVMVElGSUVMRCcpICYmXHJcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnQucm93c1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZm9yIChsZXQgcm93IG9mIGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkLCBzdWJtaXNzaW9uQ29udGV4dCk7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQpIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBtZXNzYWdlOiAnQWxsIHJlcXVpcmVkIHF1ZXN0aW9ucyBhcmUgYW5zd2VyZWQuJyB9O1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBzdGFydCB2YWxpZGF0aW9uXHJcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBwYWdlLnJvd3MpIHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVRdWVzdGlvbnMocm93LmdyaWQpO1xyXG4gICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkKSB7XHJcbiAgICAgICAgLy8gd2UgYWxyZWFkeSBjYWxsZWQgc2V0SW52YWxpZCBhYm92ZVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiB3ZSBnZXQgaGVyZSwgZXZlcnl0aGluZyBwYXNzZWRcclxuICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIG1lc3NhZ2U6ICdBbGwgcmVxdWlyZWQgcXVlc3Rpb25zIGFyZSBhbnN3ZXJlZC4nIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==
|