udp-stencil-component-library 25.18.2-beta.4 → 25.18.2-beta.5
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/dist/cjs/date-time-renderer.file-upload-renderer.form-metadata-display-renderer.list-options-renderer.question-specific-configs-renderer.signature-renderer.text-input-renderer.entry.cjs.js.map +1 -1
- package/dist/cjs/date-time-renderer_7.cjs.entry.js +13 -13
- package/dist/cjs/{enums-DVbZnzL8.js → enums-CgcTuQjC.js} +8 -2
- package/dist/cjs/enums-CgcTuQjC.js.map +1 -0
- package/dist/cjs/form-metadata-display.image-upload.signature-input.stencil-form.tally-display.udp-question.udp-question-comments.udp-save-draft-button.entry.cjs.js.map +1 -1
- package/dist/cjs/form-metadata-display_8.cjs.entry.js +10 -10
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/question-configs-renderer.section-configs-renderer.udp-forms-builder-menu.udp-forms-builder-question-item.entry.cjs.js.map +1 -1
- package/dist/cjs/question-configs-renderer_4.cjs.entry.js +7 -7
- package/dist/cjs/stencil-library.cjs.js +1 -1
- package/dist/cjs/{udp-forms-builder-question-template-CNONS2l5.js → udp-forms-builder-question-template-BMMpObLX.js} +3 -3
- package/dist/cjs/udp-forms-builder-question-template-BMMpObLX.js.map +1 -0
- package/dist/cjs/udp-forms-builder.cjs.entry.js +2 -2
- package/dist/cjs/udp-forms-builder.entry.cjs.js.map +1 -1
- package/dist/cjs/udp-forms-follow-up-list-card.cjs.entry.js +3 -3
- package/dist/cjs/udp-forms-follow-up-list-card.entry.cjs.js.map +1 -1
- package/dist/cjs/udp-forms-list-card.cjs.entry.js +6 -6
- package/dist/cjs/udp-forms-list-card.entry.cjs.js.map +1 -1
- package/dist/cjs/udp-forms-list.cjs.entry.js +2 -2
- package/dist/cjs/udp-forms-list.entry.cjs.js.map +1 -1
- package/dist/cjs/udp-forms-renderer.cjs.entry.js +270 -202
- package/dist/cjs/udp-forms-renderer.entry.cjs.js.map +1 -1
- package/dist/cjs/udp-forms-ui.cjs.entry.js +6 -6
- package/dist/cjs/udp-forms-ui.entry.cjs.js.map +1 -1
- package/dist/cjs/{utils-DZ_OMtAy.js → utils-Bp02BX38.js} +8 -8
- package/dist/cjs/utils-Bp02BX38.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/forms-builder-utils.js +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/forms-builder-utils.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/date-time-renderer/date-time-renderer.js +3 -3
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/date-time-renderer/date-time-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/file-upload-renderer/file-upload-renderer.js +4 -4
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/file-upload-renderer/file-upload-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/form-metadata-display-renderer/form-metadata-display-renderer.js +5 -5
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/form-metadata-display-renderer/form-metadata-display-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/list-option-renderer/list-options-renderer.js +5 -5
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/list-option-renderer/list-options-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question-configs-renderer/question-configs-renderer.js +6 -6
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question-configs-renderer/question-configs-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question-specific-configs-renderer/question-specific-configs-renderer.js +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/question-specific-configs-renderer/question-specific-configs-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/signature-renderer/signature-renderer.js +3 -3
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/signature-renderer/signature-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/text-input-renderer/text-input-renderer.js +4 -4
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/text-input-renderer/text-input-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-question-template.js +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-question-template.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder.js +3 -3
- package/dist/collection/components/forms/udp-forms/udp-forms-builder/udp-forms-builder.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-list/udp-forms-list-card/udp-forms-list-card.js +7 -7
- package/dist/collection/components/forms/udp-forms/udp-forms-list/udp-forms-list-card/udp-forms-list-card.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-list/udp-forms-list.js +2 -2
- package/dist/collection/components/forms/udp-forms/udp-forms-list/udp-forms-list.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-follow-up-list-card/udp-forms-follow-up-list-card.js +3 -3
- package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-follow-up-list-card/udp-forms-follow-up-list-card.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-ui/udp-forms-ui.js +13 -13
- package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-ui/udp-forms-ui.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-utils.js +195 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-utils.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.js +86 -238
- package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/classes/UdpForm.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/classes/UdpFormSubmission.js +4 -12
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/classes/UdpFormSubmission.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/enums.js +6 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/enums.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-handler/IFormHandler.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-handler/UdpFormHandler.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/FormSubmissionHandlerFactory.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/IFormSubmissionHandler.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/PrivateFormSubmissionHandler.js +6 -4
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/PrivateFormSubmissionHandler.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/PublicFormSubmissionHandler.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/form-submission-handler/formUtils.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/types.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/utils.js +5 -5
- package/dist/collection/components/forms/udp-forms/udp-forms-utils/utils.js.map +1 -0
- package/dist/collection/components/forms/udp-forms/udp-question/udp-question-comment/udp-question-comments.js +10 -10
- package/dist/collection/components/forms/udp-forms/udp-question/udp-question-comment/udp-question-comments.js.map +1 -1
- package/dist/collection/components/forms/udp-forms/udp-question/udp-question.js +13 -13
- package/dist/collection/components/forms/udp-forms/udp-question/udp-question.js.map +1 -1
- package/dist/collection/components/inputs/form metadata display/form-metadata-display.js +2 -2
- package/dist/collection/components/inputs/form metadata display/form-metadata-display.js.map +1 -1
- package/dist/components/date-time-renderer2.js.map +1 -1
- package/dist/components/enums.js +7 -1
- package/dist/components/enums.js.map +1 -1
- package/dist/components/file-upload-renderer2.js +2 -2
- package/dist/components/file-upload-renderer2.js.map +1 -1
- package/dist/components/form-metadata-display-renderer2.js +3 -3
- package/dist/components/form-metadata-display-renderer2.js.map +1 -1
- package/dist/components/form-metadata-display2.js +1 -1
- package/dist/components/form-metadata-display2.js.map +1 -1
- package/dist/components/forms-builder-utils.js.map +1 -1
- package/dist/components/list-options-renderer2.js +3 -3
- package/dist/components/list-options-renderer2.js.map +1 -1
- package/dist/components/question-configs-renderer2.js +5 -5
- package/dist/components/question-configs-renderer2.js.map +1 -1
- package/dist/components/question-specific-configs-renderer2.js.map +1 -1
- package/dist/components/signature-renderer2.js +1 -1
- package/dist/components/signature-renderer2.js.map +1 -1
- package/dist/components/text-input-renderer2.js +2 -2
- package/dist/components/text-input-renderer2.js.map +1 -1
- package/dist/components/udp-forms-builder.js.map +1 -1
- package/dist/components/udp-forms-follow-up-list-card.js +2 -2
- package/dist/components/udp-forms-follow-up-list-card.js.map +1 -1
- package/dist/components/udp-forms-list-card2.js +4 -4
- package/dist/components/udp-forms-list-card2.js.map +1 -1
- package/dist/components/udp-forms-list.js +1 -1
- package/dist/components/udp-forms-list.js.map +1 -1
- package/dist/components/udp-forms-renderer.js +273 -207
- package/dist/components/udp-forms-renderer.js.map +1 -1
- package/dist/components/udp-forms-ui2.js +6 -6
- package/dist/components/udp-forms-ui2.js.map +1 -1
- package/dist/components/udp-question-comments2.js +5 -5
- package/dist/components/udp-question-comments2.js.map +1 -1
- package/dist/components/udp-question2.js +4 -4
- package/dist/components/udp-question2.js.map +1 -1
- package/dist/components/utils.js +6 -6
- package/dist/components/utils.js.map +1 -1
- package/dist/docs.json +118 -154
- package/dist/esm/date-time-renderer.file-upload-renderer.form-metadata-display-renderer.list-options-renderer.question-specific-configs-renderer.signature-renderer.text-input-renderer.entry.js.map +1 -1
- package/dist/esm/date-time-renderer_7.entry.js +13 -13
- package/dist/esm/{enums-CHxgVY-B.js → enums-DHT5wSnX.js} +9 -3
- package/dist/esm/enums-DHT5wSnX.js.map +1 -0
- package/dist/esm/form-metadata-display.image-upload.signature-input.stencil-form.tally-display.udp-question.udp-question-comments.udp-save-draft-button.entry.js.map +1 -1
- package/dist/esm/form-metadata-display_8.entry.js +10 -10
- package/dist/esm/loader.js +1 -1
- package/dist/esm/question-configs-renderer.section-configs-renderer.udp-forms-builder-menu.udp-forms-builder-question-item.entry.js.map +1 -1
- package/dist/esm/question-configs-renderer_4.entry.js +7 -7
- package/dist/esm/stencil-library.js +1 -1
- package/dist/esm/{udp-forms-builder-question-template-DQJb7f4Y.js → udp-forms-builder-question-template-D6ADNZEG.js} +3 -3
- package/dist/esm/udp-forms-builder-question-template-D6ADNZEG.js.map +1 -0
- package/dist/esm/udp-forms-builder.entry.js +2 -2
- package/dist/esm/udp-forms-builder.entry.js.map +1 -1
- package/dist/esm/udp-forms-follow-up-list-card.entry.js +3 -3
- package/dist/esm/udp-forms-follow-up-list-card.entry.js.map +1 -1
- package/dist/esm/udp-forms-list-card.entry.js +6 -6
- package/dist/esm/udp-forms-list-card.entry.js.map +1 -1
- package/dist/esm/udp-forms-list.entry.js +2 -2
- package/dist/esm/udp-forms-list.entry.js.map +1 -1
- package/dist/esm/udp-forms-renderer.entry.js +270 -202
- package/dist/esm/udp-forms-renderer.entry.js.map +1 -1
- package/dist/esm/udp-forms-ui.entry.js +6 -6
- package/dist/esm/udp-forms-ui.entry.js.map +1 -1
- package/dist/esm/{utils-CiUp9KGZ.js → utils-kwLwITIE.js} +8 -8
- package/dist/esm/utils-kwLwITIE.js.map +1 -0
- package/dist/stencil-library/date-time-renderer.file-upload-renderer.form-metadata-display-renderer.list-options-renderer.question-specific-configs-renderer.signature-renderer.text-input-renderer.entry.esm.js.map +1 -1
- package/dist/stencil-library/date-time-renderer_7.entry.js +1 -1
- package/dist/stencil-library/{enums-CHxgVY-B.js → enums-DHT5wSnX.js} +2 -2
- package/dist/stencil-library/enums-DHT5wSnX.js.map +1 -0
- package/dist/stencil-library/form-metadata-display.image-upload.signature-input.stencil-form.tally-display.udp-question.udp-question-comments.udp-save-draft-button.entry.esm.js.map +1 -1
- package/dist/stencil-library/form-metadata-display_8.entry.js +1 -1
- package/dist/stencil-library/form-metadata-display_8.entry.js.map +1 -1
- package/dist/stencil-library/question-configs-renderer.section-configs-renderer.udp-forms-builder-menu.udp-forms-builder-question-item.entry.esm.js.map +1 -1
- package/dist/stencil-library/question-configs-renderer_4.entry.js +1 -1
- package/dist/stencil-library/stencil-library.esm.js +1 -1
- package/dist/stencil-library/{udp-forms-builder-question-template-DQJb7f4Y.js → udp-forms-builder-question-template-D6ADNZEG.js} +2 -2
- package/dist/stencil-library/udp-forms-builder-question-template-D6ADNZEG.js.map +1 -0
- package/dist/stencil-library/udp-forms-builder.entry.esm.js.map +1 -1
- package/dist/stencil-library/udp-forms-builder.entry.js +1 -1
- package/dist/stencil-library/udp-forms-follow-up-list-card.entry.esm.js.map +1 -1
- package/dist/stencil-library/udp-forms-follow-up-list-card.entry.js +1 -1
- package/dist/stencil-library/udp-forms-list-card.entry.esm.js.map +1 -1
- package/dist/stencil-library/udp-forms-list-card.entry.js +1 -1
- package/dist/stencil-library/udp-forms-list-card.entry.js.map +1 -1
- package/dist/stencil-library/udp-forms-list.entry.esm.js.map +1 -1
- package/dist/stencil-library/udp-forms-list.entry.js +1 -1
- package/dist/stencil-library/udp-forms-renderer.entry.esm.js.map +1 -1
- package/dist/stencil-library/udp-forms-renderer.entry.js +1 -1
- package/dist/stencil-library/udp-forms-renderer.entry.js.map +1 -1
- package/dist/stencil-library/udp-forms-ui.entry.esm.js.map +1 -1
- package/dist/stencil-library/udp-forms-ui.entry.js +1 -1
- package/dist/stencil-library/udp-forms-ui.entry.js.map +1 -1
- package/dist/stencil-library/{utils-CiUp9KGZ.js → utils-kwLwITIE.js} +1 -1
- package/dist/stencil-library/utils-kwLwITIE.js.map +1 -0
- package/dist/types/components/forms/udp-forms/udp-forms-builder/forms-builder-utils.d.ts +2 -2
- package/dist/types/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/date-time-renderer/date-time-renderer.d.ts +1 -1
- package/dist/types/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/file-upload-renderer/file-upload-renderer.d.ts +1 -1
- package/dist/types/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/form-metadata-display-renderer/form-metadata-display-renderer.d.ts +1 -1
- package/dist/types/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/list-option-renderer/list-options-renderer.d.ts +1 -1
- package/dist/types/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/signature-renderer/signature-renderer.d.ts +1 -1
- package/dist/types/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-item/text-input-renderer/text-input-renderer.d.ts +1 -1
- package/dist/types/components/forms/udp-forms/udp-forms-builder/udp-forms-builder-question-template.d.ts +1 -1
- package/dist/types/components/forms/udp-forms/udp-forms-builder/udp-forms-builder.d.ts +2 -2
- package/dist/types/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-ui/udp-forms-ui.d.ts +4 -4
- package/dist/types/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-utils.d.ts +12 -0
- package/dist/types/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.d.ts +4 -9
- package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/classes/UdpFormSubmission.d.ts +4 -5
- package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/enums.d.ts +5 -0
- package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/types.d.ts +0 -1
- package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/utils.d.ts +1 -1
- package/dist/types/components/forms/udp-forms/udp-question/udp-question-comment/udp-question-comments.d.ts +2 -2
- package/dist/types/components/forms/udp-forms/udp-question/udp-question.d.ts +4 -4
- package/dist/types/components.d.ts +32 -30
- package/package.json +1 -1
- package/dist/cjs/enums-DVbZnzL8.js.map +0 -1
- package/dist/cjs/udp-forms-builder-question-template-CNONS2l5.js.map +0 -1
- package/dist/cjs/utils-DZ_OMtAy.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/classes/UdpForm.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/classes/UdpFormSubmission.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/enums.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/form-handler/IFormHandler.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/form-handler/UdpFormHandler.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/form-submission-handler/FormSubmissionHandlerFactory.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/form-submission-handler/IFormSubmissionHandler.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/form-submission-handler/PrivateFormSubmissionHandler.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/form-submission-handler/PublicFormSubmissionHandler.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/form-submission-handler/formUtils.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/types.js.map +0 -1
- package/dist/collection/components/forms/udp-forms/utils/utils.js.map +0 -1
- package/dist/esm/enums-CHxgVY-B.js.map +0 -1
- package/dist/esm/udp-forms-builder-question-template-DQJb7f4Y.js.map +0 -1
- package/dist/esm/utils-CiUp9KGZ.js.map +0 -1
- package/dist/stencil-library/enums-CHxgVY-B.js.map +0 -1
- package/dist/stencil-library/udp-forms-builder-question-template-DQJb7f4Y.js.map +0 -1
- package/dist/stencil-library/utils-CiUp9KGZ.js.map +0 -1
- /package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/classes/UdpForm.js +0 -0
- /package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/form-handler/IFormHandler.js +0 -0
- /package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/form-handler/UdpFormHandler.js +0 -0
- /package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/FormSubmissionHandlerFactory.js +0 -0
- /package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/IFormSubmissionHandler.js +0 -0
- /package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/PublicFormSubmissionHandler.js +0 -0
- /package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/formUtils.js +0 -0
- /package/dist/collection/components/forms/udp-forms/{utils → udp-forms-utils}/types.js +0 -0
- /package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/classes/UdpForm.d.ts +0 -0
- /package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/form-handler/IFormHandler.d.ts +0 -0
- /package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/form-handler/UdpFormHandler.d.ts +0 -0
- /package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/FormSubmissionHandlerFactory.d.ts +0 -0
- /package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/IFormSubmissionHandler.d.ts +0 -0
- /package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/PrivateFormSubmissionHandler.d.ts +0 -0
- /package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/PublicFormSubmissionHandler.d.ts +0 -0
- /package/dist/types/components/forms/udp-forms/{utils → udp-forms-utils}/form-submission-handler/formUtils.d.ts +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { h, Fragment } from "@stencil/core";
|
|
2
|
-
import { UdpFormsTypeEnum } from "../../utils/enums";
|
|
2
|
+
import { UdpFormsTypeEnum } from "../../udp-forms-utils/enums";
|
|
3
3
|
export class UdpFormsFollowUpListCard {
|
|
4
4
|
render() {
|
|
5
|
-
const contentJsx = (h(Fragment, { key: '
|
|
6
|
-
return (h("udp-card", { key: '
|
|
5
|
+
const contentJsx = (h(Fragment, { key: '0148fa047cd997bc9cff28cd98833074e8dc8f64' }, h("unity-typography", { key: 'e6d1704c0d97d94253cfda377818114234bd46c9', variant: "body1", color: "textSecondary" }, "Version: ", this.listItemData.version), h("unity-typography", { key: 'f6e98358257ddf8596abfdb100f5a633c063752a', variant: "body1", color: "textSecondary" }, "Form Type: ", UdpFormsTypeEnum[this.listItemData.type])));
|
|
6
|
+
return (h("udp-card", { key: '6a5285ec5d718bb09965e61621544e81b900e9eb', cardTitle: this.listItemData.name, subheader: this.listItemData.description, onTitleClick: () => this.handleLaunchFollowUpForm(), disableContentPadding: true, adornmentStatus: 'info' }, contentJsx));
|
|
7
7
|
}
|
|
8
8
|
static get is() { return "udp-forms-follow-up-list-card"; }
|
|
9
9
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"udp-forms-follow-up-list-card.js","sourceRoot":"","sources":["../../../../../../src/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-follow-up-list-card/udp-forms-follow-up-list-card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"udp-forms-follow-up-list-card.js","sourceRoot":"","sources":["../../../../../../src/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-follow-up-list-card/udp-forms-follow-up-list-card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAM/D,MAAM,OAAO,wBAAwB;IAKnC,MAAM;QACJ,MAAM,UAAU,GAAG,CACjB,EAAC,QAAQ;YACP,yEAAkB,OAAO,EAAC,OAAO,EAAC,KAAK,EAAC,eAAe;;gBAC3C,IAAI,CAAC,YAAY,CAAC,OAAO,CAClB;YACnB,yEAAkB,OAAO,EAAC,OAAO,EAAC,KAAK,EAAC,eAAe;;gBACzC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CACnC,CACV,CACZ,CAAC;QAEF,OAAO,CACL,iEACE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EACjC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,EACxC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,EACnD,qBAAqB,EAAE,IAAI,EAC3B,eAAe,EAAE,MAAM,IAEtB,UAAU,CACF,CACZ,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { Component, h, Prop, Fragment } from '@stencil/core';\nimport { UdpFormsTypeEnum } from '../../udp-forms-utils/enums';\n\n@Component({\n tag: 'udp-forms-follow-up-list-card',\n shadow: true,\n})\nexport class UdpFormsFollowUpListCard {\n @Prop() listItemData: any;\n @Prop() isSideSheetList: boolean;\n @Prop() handleLaunchFollowUpForm: Function;\n\n render() {\n const contentJsx = (\n <Fragment>\n <unity-typography variant=\"body1\" color=\"textSecondary\">\n Version: {this.listItemData.version}\n </unity-typography>\n <unity-typography variant=\"body1\" color=\"textSecondary\">\n Form Type: {UdpFormsTypeEnum[this.listItemData.type]}\n </unity-typography>\n </Fragment>\n );\n\n return (\n <udp-card\n cardTitle={this.listItemData.name}\n subheader={this.listItemData.description}\n onTitleClick={() => this.handleLaunchFollowUpForm()}\n disableContentPadding={true}\n adornmentStatus={'info'}\n >\n {contentJsx}\n </udp-card>\n );\n }\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
-
import { UdpFormsFieldTypeEnum } from "../../utils/enums";
|
|
3
|
-
import { fontOverrideMapping, overrideFont } from "../../utils/utils";
|
|
2
|
+
import { UdpFormsFieldTypeEnum, UdpFormsSubmissionStatusEnum } from "../../udp-forms-utils/enums";
|
|
3
|
+
import { fontOverrideMapping, overrideFont } from "../../udp-forms-utils/utils";
|
|
4
4
|
import { getIconFromName } from "../../../../data-display/icons/iconUtils";
|
|
5
5
|
export class UdpFormsUi {
|
|
6
6
|
constructor() {
|
|
7
|
-
this.
|
|
7
|
+
this.currentValues = {};
|
|
8
8
|
this.submitSuccessful = false;
|
|
9
9
|
this.isLoading = false;
|
|
10
10
|
this.isSaving = false;
|
|
@@ -99,7 +99,7 @@ export class UdpFormsUi {
|
|
|
99
99
|
else if ((_f = (_e = (_d = this.udpForm) === null || _d === void 0 ? void 0 : _d.styleOverrides) === null || _e === void 0 ? void 0 : _e.background) === null || _f === void 0 ? void 0 : _f.backgroundColor) {
|
|
100
100
|
backgroundOverrides.backgroundColor = (_j = (_h = (_g = this.udpForm) === null || _g === void 0 ? void 0 : _g.styleOverrides) === null || _h === void 0 ? void 0 : _h.background) === null || _j === void 0 ? void 0 : _j.backgroundColor;
|
|
101
101
|
}
|
|
102
|
-
return (h("div", { class: 'background', style: backgroundOverrides }, h("udp-container", { maxWidth: "md" }, h("div", { class: "form-container" }, !this.submitSuccessful ? (h("stencil-form", { handleSubmit: this.handleSubmit, initialValues: this.
|
|
102
|
+
return (h("div", { class: 'background', style: backgroundOverrides }, h("udp-container", { maxWidth: "md" }, h("div", { class: "form-container" }, !this.submitSuccessful ? (h("stencil-form", { handleSubmit: this.handleSubmit, initialValues: this.currentValues, handleChange: this.handleChange, onDirtyChange: event => this.formDirtyChange.emit(event.detail) }, this.readonly &&
|
|
103
103
|
(h("div", { class: "error-banner" }, h("unity-typography", { variant: "body2" }, "View Only Mode. The contents of this form cannot be changed."))), h("fluent-dialog", { open: this.isDialogOpen, message: this.dialogMessage, labelOne: 'Confirm', labelTwo: 'Cancel', actionOne: () => this.dialogAction(), actionTwo: () => (this.isDialogOpen = false) }), h("div", null, h("div", { class: "form-section-block" }, h("div", { class: "form-renderer-header", style: Object.assign({}, (((_l = (_k = this.udpForm) === null || _k === void 0 ? void 0 : _k.styleOverrides) === null || _l === void 0 ? void 0 : _l.headerBackgroundColor) && {
|
|
104
104
|
backgroundColor: this.udpForm.styleOverrides.headerBackgroundColor,
|
|
105
105
|
})) }, h("unity-typography", { id: this.titleId, variant: 'h6', color: "inherit" }, this.udpForm.name), this.showAutoSaveStatus && (h("div", { class: "auto-save-status" }, this.saveErrorMessage && (h("unity-typography", { variant: "body", color: "secondary" }, this.saveErrorMessage)))), this.isShowManualSaveIcon && (h("udp-save-draft-button", { isVisible: this.isShowManualSaveIcon, isSaving: this.isSaving,
|
|
@@ -129,9 +129,9 @@ export class UdpFormsUi {
|
|
|
129
129
|
helperText: (_a = this.udpForm.styleOverrides) === null || _a === void 0 ? void 0 : _a.helperText,
|
|
130
130
|
paragraphText: (_b = this.udpForm.styleOverrides) === null || _b === void 0 ? void 0 : _b.paragraphText,
|
|
131
131
|
questionText: (_c = this.udpForm.styleOverrides) === null || _c === void 0 ? void 0 : _c.questionText,
|
|
132
|
-
}, question: question, questionNumber: num, value: (_g = (_f = (_e = (_d = this.
|
|
132
|
+
}, question: question, questionNumber: num, value: (_g = (_f = (_e = (_d = this.currentValues) === null || _d === void 0 ? void 0 : _d[sectionKey]) === null || _e === void 0 ? void 0 : _e[question.name]) === null || _f === void 0 ? void 0 : _f.value) !== null && _g !== void 0 ? _g : '', disabled: this.disabled, readonly: this.readonly, key: question.questionIdentifierKey, currentValues: this.currentValues, clientUserInfo: this.clientUserInfo, udpFormSubmission: this.udpFormSubmission })));
|
|
133
133
|
}))))));
|
|
134
|
-
}), ((_r = this.udpFormSubmission) === null || _r === void 0 ? void 0 : _r.status) !=
|
|
134
|
+
}), ((_r = this.udpFormSubmission) === null || _r === void 0 ? void 0 : _r.status) != UdpFormsSubmissionStatusEnum.Submitted && (h("div", { class: "footer" }, h("input", { disabled: this.isLoading || this.disabled || this.readonly, type: "submit", value: "Submit", class: "submit", id: "udpRecord-udp-forms-renderer-Submit", onClick: () => {
|
|
135
135
|
console.log('Submit button clicked');
|
|
136
136
|
// Let the form handle the submit naturally
|
|
137
137
|
} })))))) : (
|
|
@@ -161,8 +161,8 @@ export class UdpFormsUi {
|
|
|
161
161
|
"references": {
|
|
162
162
|
"UdpForm": {
|
|
163
163
|
"location": "import",
|
|
164
|
-
"path": "../../utils/classes/UdpForm",
|
|
165
|
-
"id": "src/components/forms/udp-forms/utils/classes/UdpForm.ts::UdpForm"
|
|
164
|
+
"path": "../../udp-forms-utils/classes/UdpForm",
|
|
165
|
+
"id": "src/components/forms/udp-forms/udp-forms-utils/classes/UdpForm.ts::UdpForm"
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
168
|
},
|
|
@@ -175,7 +175,7 @@ export class UdpFormsUi {
|
|
|
175
175
|
"getter": false,
|
|
176
176
|
"setter": false
|
|
177
177
|
},
|
|
178
|
-
"
|
|
178
|
+
"currentValues": {
|
|
179
179
|
"type": "unknown",
|
|
180
180
|
"mutable": false,
|
|
181
181
|
"complexType": {
|
|
@@ -202,8 +202,8 @@ export class UdpFormsUi {
|
|
|
202
202
|
"references": {
|
|
203
203
|
"UdpFormSubmission": {
|
|
204
204
|
"location": "import",
|
|
205
|
-
"path": "../../utils/classes/UdpFormSubmission",
|
|
206
|
-
"id": "src/components/forms/udp-forms/utils/classes/UdpFormSubmission.ts::UdpFormSubmission"
|
|
205
|
+
"path": "../../udp-forms-utils/classes/UdpFormSubmission",
|
|
206
|
+
"id": "src/components/forms/udp-forms/udp-forms-utils/classes/UdpFormSubmission.ts::UdpFormSubmission"
|
|
207
207
|
}
|
|
208
208
|
}
|
|
209
209
|
},
|
|
@@ -426,8 +426,8 @@ export class UdpFormsUi {
|
|
|
426
426
|
"references": {
|
|
427
427
|
"Guid": {
|
|
428
428
|
"location": "import",
|
|
429
|
-
"path": "../../utils/types",
|
|
430
|
-
"id": "src/components/forms/udp-forms/utils/types.ts::Guid"
|
|
429
|
+
"path": "../../udp-forms-utils/types",
|
|
430
|
+
"id": "src/components/forms/udp-forms/udp-forms-utils/types.ts::Guid"
|
|
431
431
|
},
|
|
432
432
|
"Object": {
|
|
433
433
|
"location": "global",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"udp-forms-ui.js","sourceRoot":"","sources":["../../../../../../src/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-ui/udp-forms-ui.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, State, Element, Watch, Event, EventEmitter } from '@stencil/core';\nimport { Guid, UdpFormQuestion } from '../../utils/types';\nimport { UdpFormsFieldTypeEnum } from '../../utils/enums';\nimport { fontOverrideMapping, overrideFont } from '../../utils/utils';\nimport { getIconFromName } from '../../../../data-display/icons/iconUtils';\nimport { UdpFormSubmission } from '../../utils/classes/UdpFormSubmission';\nimport { UdpForm } from '../../utils/classes/UdpForm';\n\n\n@Component({\n tag: 'udp-forms-ui',\n styleUrl: 'udp-forms-ui.css',\n shadow: true,\n})\nexport class UdpFormsUi {\n @Prop() udpForm: UdpForm;\n @Prop() initialValues: { [name: string]: any } = {};\n @Prop() udpFormSubmission: UdpFormSubmission\n @Prop() submitSuccessful: boolean = false;\n @Prop() isLoading: boolean = false;\n @Prop() isSaving: boolean = false;\n @Prop() saveErrorMessage: string | null = null;\n @Prop() showAutoSaveStatus: boolean = false;\n @Prop() disabled: boolean = false;\n @Prop() readonly: boolean = false;\n @Prop() handleSubmit: (values: any) => Promise<void>;\n @Prop() handleChange: (values: { [name: string]: any }) => void;\n @Prop() handleSave: (values: { [name: string]: any }) => Promise<void>;\n @Prop() handleAction: (actionId: Guid, params: Object) => void;\n @Prop() handleFinish: () => void;\n @Prop() clientUserInfo: { id: string | null; displayName: string | null; email: string | null } = {\n id: null,\n displayName: null,\n email: null,\n }; \n @Prop() isSubmitted: boolean = false;\n @Prop() dynamicSections: any[];\n @Prop() duplicateRepeatableSection: any;\n @Prop() deleteRepeatableSection: any;\n @Prop() isShowManualSaveIcon: boolean = false;\n @Prop() performBackgroundSaveAndUpdateLocalSubmissionState: (values: { [name: string]: any }) => Promise<void>;\n\n @State() showSavedMessage: boolean = false;\n\n @Event() formDirtyChange: EventEmitter<boolean>;\n\n @Element() el: HTMLElement;\n\n\n @State() isDialogOpen: boolean = false;\n @State() dialogAction: () => void;\n @State() dialogMessage: string = 'Are you sure you want to delete this section? This section contains links to follow-up forms. Deleting it will remove those links.';\n \n\n private savedMessageTimeoutId: any;\n\n private titleId: string = 'udp-forms-title';\n private descriptionId: string = 'udp-forms-description';\n\n componentDidLoad() {\n this.overrideStyles();\n }\n\n componentDidUpdate() {\n this.overrideStyles();\n }\n\n disconnectedCallback() {\n // Clean up timeout when component is destroyed\n if (this.savedMessageTimeoutId) {\n clearTimeout(this.savedMessageTimeoutId);\n }\n }\n\n @Watch('isSaving')\n watchIsSaving(newValue: boolean, oldValue: boolean) {\n console.log('isSaving watcher triggered:', { oldValue, newValue, saveErrorMessage: this.saveErrorMessage });\n\n // When isSaving changes from true to false (save completed successfully)\n if (oldValue === true && newValue === false && !this.saveErrorMessage) {\n console.log('Setting showSavedMessage to true');\n this.showSavedMessage = true;\n\n // Clear any existing timeout\n if (this.savedMessageTimeoutId) {\n clearTimeout(this.savedMessageTimeoutId);\n }\n\n // Hide the \"Saved\" message after 5 seconds\n this.savedMessageTimeoutId = setTimeout(() => {\n console.log('Hiding saved message after 5 seconds');\n this.showSavedMessage = false;\n }, 5000);\n }\n }\n\n overrideStyles() {\n const shadowRoot = (this as any).el?.shadowRoot;\n shadowRoot?.querySelectorAll('unity-typography').forEach(element => {\n const styleOverride =\n element.id === this.titleId ? this.udpForm?.styleOverrides?.titleText : element.id === this.descriptionId ? this.udpForm?.styleOverrides?.paragraphText : ({} as any);\n\n if (styleOverride?.fontFamily && fontOverrideMapping[styleOverride.fontFamily]) {\n overrideFont(element, fontOverrideMapping[styleOverride.fontFamily]);\n }\n if (styleOverride?.variant) {\n element.setAttribute('variant', styleOverride.variant);\n }\n });\n }\n\n private isSectionContainsFollowUpFormLink(sectionKey: string): boolean {\n const sectionObject = this.udpFormSubmission.data.submissionResponseData[sectionKey]\n\n for (const [_key, questionObject] of Object.entries(sectionObject) as any) {\n if (questionObject?.metadata && questionObject.metadata?.followUpFormSubmissionId) {\n return true;\n }\n }\n\n return false;\n }\n\n render() {\n if (this.isLoading) {\n return (\n <udp-linear-loader />\n );\n }\n\n if (!this.udpForm) {\n return (\n <div class=\"error-banner\">\n <unity-typography variant=\"body2\">Error Loading Form</unity-typography>\n </div>\n );\n }\n\n let questionNumber = 1;\n\n const sectionSet = new Set();\n this.udpForm.formQuestions.forEach(fq => sectionSet.add(fq.section));\n // const orderedSectionNumbers = [...sectionSet].sort((a: number, b: number) => a - b);\n\n const hiddenQuestionTypes = [UdpFormsFieldTypeEnum.Hidden, UdpFormsFieldTypeEnum.Paragraph];\n\n const backgroundOverrides: { backgroundImage?: string | null; backgroundColor?: string | null } = {};\n if (this.udpForm?.styleOverrides?.background?.backgroundImage) {\n // uncomment when we want to allow background images\n //backgroundOverrides.backgroundImage = `url(${this.udpForm?.styleOverrides?.background?.backgroundImage})`;\n } else if (this.udpForm?.styleOverrides?.background?.backgroundColor) {\n backgroundOverrides.backgroundColor = this.udpForm?.styleOverrides?.background?.backgroundColor;\n }\n return (\n <div class={'background'} style={backgroundOverrides}>\n <udp-container maxWidth=\"md\">\n <div class=\"form-container\">\n {!this.submitSuccessful ? (\n \n <stencil-form\n handleSubmit={this.handleSubmit}\n initialValues={this.initialValues}\n handleChange={this.handleChange}\n onDirtyChange={event => this.formDirtyChange.emit(event.detail)}\n >\n {this.readonly && \n (<div class=\"error-banner\">\n <unity-typography variant=\"body2\">View Only Mode. The contents of this form cannot be changed.</unity-typography>\n </div>)}\n <fluent-dialog\n open={this.isDialogOpen}\n message={this.dialogMessage}\n labelOne={'Confirm'}\n labelTwo={'Cancel'}\n actionOne={() => this.dialogAction()}\n actionTwo={() => (this.isDialogOpen = false)}\n />\n {/********** QUESTIONS *********/}\n <div>\n {/* <div class=\"header\" style={this.udpForm?.styleOverrides?.headerBackgroundColor ? { backgroundColor: this.udpForm?.styleOverrides?.headerBackgroundColor } : ''}> */}\n <div class=\"form-section-block\">\n <div\n class=\"form-renderer-header\"\n style={{\n ...(this.udpForm?.styleOverrides?.headerBackgroundColor && {\n backgroundColor: this.udpForm.styleOverrides.headerBackgroundColor,\n }),\n }}\n >\n <unity-typography id={this.titleId} variant={'h6'} color=\"inherit\">\n {this.udpForm.name}\n </unity-typography>\n\n {/* Auto-save status indicator for authenticated users */}\n {this.showAutoSaveStatus && (\n <div class=\"auto-save-status\">\n {/* {this.isSaving && (\n <unity-typography variant=\"body\" color=\"primary\">\n Saving...\n </unity-typography>\n )} */}\n {this.saveErrorMessage && (\n <unity-typography variant=\"body\" color=\"secondary\">\n {this.saveErrorMessage}\n </unity-typography>\n )}\n </div>\n )}\n {this.isShowManualSaveIcon && (\n <udp-save-draft-button\n isVisible={this.isShowManualSaveIcon}\n isSaving={this.isSaving}\n // saveErrorMessage={this.saveErrorMessage}\n showSavedMessage={this.showSavedMessage}\n handleSave={this.handleSave}\n />\n )}\n </div>\n\n <div class=\"form-section-content\">\n <div class=\"items\">\n <div class=\"form-section-text\">\n <unity-typography id={this.descriptionId} variant={this.udpForm?.styleOverrides?.paragraphText?.variant ?? 'body'} color=\"inherit\">\n {this.udpForm.description}\n </unity-typography>\n </div>\n </div>\n </div>\n </div>\n {/* Save Button - moves between header and floating based on space */}\n {this.dynamicSections.map((section, sIndex) => {\n return (\n <div class=\"form-section-block\">\n <div class=\"form-section-header\">\n <div class=\"form-section-header-title\">\n <unity-typography variant=\"h6\" color=\"inherit\">\n {`${section.title}${section.sectionPositionSuffix > 1 ? ` (${section.sectionPositionSuffix})` : ''}`}\n </unity-typography>\n </div>\n <div class=\"form-section-header-actions\">\n {/* // Only show the add button if the section is repeatable and is the last in the repeat group */}\n {section.sectionProperties.isRepeatable && this.dynamicSections.filter(s => s.id === section.id).length === section.sectionPositionSuffix && !this.readonly && (\n <stencil-icon-button icon={getIconFromName('add')} tooltip=\"Repeat This Section\" onClick={() => this.duplicateRepeatableSection(sIndex)} />\n )}\n {/* // show the delete button if the section is repeatable and not the original section */}\n {!section.isOriginalSection && !this.readonly && (\n <stencil-icon-button \n icon={getIconFromName('subtract')} \n tooltip=\"Delete This Repeated Section\" \n onClick={\n () => {\n // e.stopPropagation();\n if (this.isSectionContainsFollowUpFormLink(`${section.name}_${section.sectionPositionSuffix}`)) {\n this.dialogAction = async () => {\n this.deleteRepeatableSection(sIndex)\n await this.performBackgroundSaveAndUpdateLocalSubmissionState(this.udpFormSubmission.data.submissionResponseData);\n this.isDialogOpen = false;\n }; \n } else {\n this.deleteRepeatableSection(sIndex)\n }\n \n this.isDialogOpen = true;\n }} />\n )}\n </div>\n </div>\n\n <div class=\"form-section-content\">\n <div class=\"items\">\n <div class=\"form-section-text\">\n <unity-typography variant=\"body\" color=\"inherit\">\n {section.sectionText}\n </unity-typography>\n </div>\n\n <div>\n {section.formQuestions.map((question: UdpFormQuestion) => {\n const isHidden = hiddenQuestionTypes.includes(question.fieldTypeId);\n const num: number = questionNumber;\n if (!isHidden) questionNumber++;\n\n const sectionKey = section.sectionPositionSuffix > 1 ? `${section.name}_${section.sectionPositionSuffix}` : `${section.name}`\n\n return (\n <div class=\"item\">\n <udp-question\n styleOverrides={{\n helperText: this.udpForm.styleOverrides?.helperText,\n paragraphText: this.udpForm.styleOverrides?.paragraphText,\n questionText: this.udpForm.styleOverrides?.questionText,\n }}\n question={question}\n questionNumber={num}\n value={this.initialValues?.[sectionKey]?.[question.name]?.value ?? ''}\n disabled={this.disabled}\n readonly={this.readonly}\n key={question.questionIdentifierKey}\n initialValues={this.initialValues}\n clientUserInfo={this.clientUserInfo}\n udpFormSubmission={this.udpFormSubmission}\n />\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n );\n })}\n {this.udpFormSubmission?.status != 2 && ( \n <div class=\"footer\">\n <input\n disabled={this.isLoading || this.disabled || this.readonly}\n type=\"submit\"\n value=\"Submit\"\n class=\"submit\"\n id=\"udpRecord-udp-forms-renderer-Submit\"\n onClick={() => {\n console.log('Submit button clicked');\n // Let the form handle the submit naturally\n }}\n />\n </div>\n )}\n </div>\n </stencil-form>\n ) : (\n //if the form has been submit, display success message with a button to trigger the action associated to the form\n <div class=\"center-div\">\n <udp-ambient-card>\n <div class=\"submit-card\">\n <unity-typography>Thank you for your submission.</unity-typography>\n {/* // No action configured for now. */}\n {/* <div class=\"finish-button\">\n <custom-button onClick={this.handleFinish}>Back</custom-button>\n </div> */}\n </div>\n </udp-ambient-card>\n </div>\n )}\n </div>\n </udp-container>\n </div>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"udp-forms-ui.js","sourceRoot":"","sources":["../../../../../../src/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-ui/udp-forms-ui.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, State, Element, Watch, Event, EventEmitter } from '@stencil/core';\nimport { Guid, UdpFormQuestion } from '../../udp-forms-utils/types';\nimport { UdpFormsFieldTypeEnum, UdpFormsSubmissionStatusEnum } from '../../udp-forms-utils/enums';\nimport { fontOverrideMapping, overrideFont } from '../../udp-forms-utils/utils';\nimport { getIconFromName } from '../../../../data-display/icons/iconUtils';\nimport { UdpFormSubmission } from '../../udp-forms-utils/classes/UdpFormSubmission';\nimport { UdpForm } from '../../udp-forms-utils/classes/UdpForm';\n\n\n@Component({\n tag: 'udp-forms-ui',\n styleUrl: 'udp-forms-ui.css',\n shadow: true,\n})\nexport class UdpFormsUi {\n @Prop() udpForm: UdpForm;\n @Prop() currentValues: { [name: string]: any } = {};\n @Prop() udpFormSubmission: UdpFormSubmission\n @Prop() submitSuccessful: boolean = false;\n @Prop() isLoading: boolean = false;\n @Prop() isSaving: boolean = false;\n @Prop() saveErrorMessage: string | null = null;\n @Prop() showAutoSaveStatus: boolean = false;\n @Prop() disabled: boolean = false;\n @Prop() readonly: boolean = false;\n @Prop() handleSubmit: (values: any) => Promise<void>;\n @Prop() handleChange: (values: { [name: string]: any }) => void;\n @Prop() handleSave: (values: { [name: string]: any }) => Promise<void>;\n @Prop() handleAction: (actionId: Guid, params: Object) => void;\n @Prop() handleFinish: () => void;\n @Prop() clientUserInfo: { id: string | null; displayName: string | null; email: string | null } = {\n id: null,\n displayName: null,\n email: null,\n }; \n @Prop() isSubmitted: boolean = false;\n @Prop() dynamicSections: any[];\n @Prop() duplicateRepeatableSection: any;\n @Prop() deleteRepeatableSection: any;\n @Prop() isShowManualSaveIcon: boolean = false;\n @Prop() performBackgroundSaveAndUpdateLocalSubmissionState: (values: { [name: string]: any }) => Promise<void>;\n\n @State() showSavedMessage: boolean = false;\n\n @Event() formDirtyChange: EventEmitter<boolean>;\n\n @Element() el: HTMLElement;\n\n\n @State() isDialogOpen: boolean = false;\n @State() dialogAction: () => void;\n @State() dialogMessage: string = 'Are you sure you want to delete this section? This section contains links to follow-up forms. Deleting it will remove those links.';\n \n\n private savedMessageTimeoutId: any;\n\n private titleId: string = 'udp-forms-title';\n private descriptionId: string = 'udp-forms-description';\n\n componentDidLoad() {\n this.overrideStyles();\n }\n\n componentDidUpdate() {\n this.overrideStyles();\n }\n\n disconnectedCallback() {\n // Clean up timeout when component is destroyed\n if (this.savedMessageTimeoutId) {\n clearTimeout(this.savedMessageTimeoutId);\n }\n }\n\n @Watch('isSaving')\n watchIsSaving(newValue: boolean, oldValue: boolean) {\n console.log('isSaving watcher triggered:', { oldValue, newValue, saveErrorMessage: this.saveErrorMessage });\n\n // When isSaving changes from true to false (save completed successfully)\n if (oldValue === true && newValue === false && !this.saveErrorMessage) {\n console.log('Setting showSavedMessage to true');\n this.showSavedMessage = true;\n\n // Clear any existing timeout\n if (this.savedMessageTimeoutId) {\n clearTimeout(this.savedMessageTimeoutId);\n }\n\n // Hide the \"Saved\" message after 5 seconds\n this.savedMessageTimeoutId = setTimeout(() => {\n console.log('Hiding saved message after 5 seconds');\n this.showSavedMessage = false;\n }, 5000);\n }\n }\n\n overrideStyles() {\n const shadowRoot = (this as any).el?.shadowRoot;\n shadowRoot?.querySelectorAll('unity-typography').forEach(element => {\n const styleOverride =\n element.id === this.titleId ? this.udpForm?.styleOverrides?.titleText : element.id === this.descriptionId ? this.udpForm?.styleOverrides?.paragraphText : ({} as any);\n\n if (styleOverride?.fontFamily && fontOverrideMapping[styleOverride.fontFamily]) {\n overrideFont(element, fontOverrideMapping[styleOverride.fontFamily]);\n }\n if (styleOverride?.variant) {\n element.setAttribute('variant', styleOverride.variant);\n }\n });\n }\n\n private isSectionContainsFollowUpFormLink(sectionKey: string): boolean {\n const sectionObject = this.udpFormSubmission.data.submissionResponseData[sectionKey]\n\n for (const [_key, questionObject] of Object.entries(sectionObject) as any) {\n if (questionObject?.metadata && questionObject.metadata?.followUpFormSubmissionId) {\n return true;\n }\n }\n\n return false;\n }\n\n render() {\n if (this.isLoading) {\n return (\n <udp-linear-loader />\n );\n }\n\n if (!this.udpForm) {\n return (\n <div class=\"error-banner\">\n <unity-typography variant=\"body2\">Error Loading Form</unity-typography>\n </div>\n );\n }\n\n let questionNumber = 1;\n\n const sectionSet = new Set();\n this.udpForm.formQuestions.forEach(fq => sectionSet.add(fq.section));\n // const orderedSectionNumbers = [...sectionSet].sort((a: number, b: number) => a - b);\n\n const hiddenQuestionTypes = [UdpFormsFieldTypeEnum.Hidden, UdpFormsFieldTypeEnum.Paragraph];\n\n const backgroundOverrides: { backgroundImage?: string | null; backgroundColor?: string | null } = {};\n if (this.udpForm?.styleOverrides?.background?.backgroundImage) {\n // uncomment when we want to allow background images\n //backgroundOverrides.backgroundImage = `url(${this.udpForm?.styleOverrides?.background?.backgroundImage})`;\n } else if (this.udpForm?.styleOverrides?.background?.backgroundColor) {\n backgroundOverrides.backgroundColor = this.udpForm?.styleOverrides?.background?.backgroundColor;\n }\n return (\n <div class={'background'} style={backgroundOverrides}>\n <udp-container maxWidth=\"md\">\n <div class=\"form-container\">\n {!this.submitSuccessful ? (\n \n <stencil-form\n handleSubmit={this.handleSubmit}\n initialValues={this.currentValues}\n handleChange={this.handleChange}\n onDirtyChange={event => this.formDirtyChange.emit(event.detail)}\n >\n {this.readonly && \n (<div class=\"error-banner\">\n <unity-typography variant=\"body2\">View Only Mode. The contents of this form cannot be changed.</unity-typography>\n </div>)}\n <fluent-dialog\n open={this.isDialogOpen}\n message={this.dialogMessage}\n labelOne={'Confirm'}\n labelTwo={'Cancel'}\n actionOne={() => this.dialogAction()}\n actionTwo={() => (this.isDialogOpen = false)}\n />\n {/********** QUESTIONS *********/}\n <div>\n {/* <div class=\"header\" style={this.udpForm?.styleOverrides?.headerBackgroundColor ? { backgroundColor: this.udpForm?.styleOverrides?.headerBackgroundColor } : ''}> */}\n <div class=\"form-section-block\">\n <div\n class=\"form-renderer-header\"\n style={{\n ...(this.udpForm?.styleOverrides?.headerBackgroundColor && {\n backgroundColor: this.udpForm.styleOverrides.headerBackgroundColor,\n }),\n }}\n >\n <unity-typography id={this.titleId} variant={'h6'} color=\"inherit\">\n {this.udpForm.name}\n </unity-typography>\n\n {/* Auto-save status indicator for authenticated users */}\n {this.showAutoSaveStatus && (\n <div class=\"auto-save-status\">\n {/* {this.isSaving && (\n <unity-typography variant=\"body\" color=\"primary\">\n Saving...\n </unity-typography>\n )} */}\n {this.saveErrorMessage && (\n <unity-typography variant=\"body\" color=\"secondary\">\n {this.saveErrorMessage}\n </unity-typography>\n )}\n </div>\n )}\n {this.isShowManualSaveIcon && (\n <udp-save-draft-button\n isVisible={this.isShowManualSaveIcon}\n isSaving={this.isSaving}\n // saveErrorMessage={this.saveErrorMessage}\n showSavedMessage={this.showSavedMessage}\n handleSave={this.handleSave}\n />\n )}\n </div>\n\n <div class=\"form-section-content\">\n <div class=\"items\">\n <div class=\"form-section-text\">\n <unity-typography id={this.descriptionId} variant={this.udpForm?.styleOverrides?.paragraphText?.variant ?? 'body'} color=\"inherit\">\n {this.udpForm.description}\n </unity-typography>\n </div>\n </div>\n </div>\n </div>\n {/* Save Button - moves between header and floating based on space */}\n {this.dynamicSections.map((section, sIndex) => {\n return (\n <div class=\"form-section-block\">\n <div class=\"form-section-header\">\n <div class=\"form-section-header-title\">\n <unity-typography variant=\"h6\" color=\"inherit\">\n {`${section.title}${section.sectionPositionSuffix > 1 ? ` (${section.sectionPositionSuffix})` : ''}`}\n </unity-typography>\n </div>\n <div class=\"form-section-header-actions\">\n {/* // Only show the add button if the section is repeatable and is the last in the repeat group */}\n {section.sectionProperties.isRepeatable && this.dynamicSections.filter(s => s.id === section.id).length === section.sectionPositionSuffix && !this.readonly && (\n <stencil-icon-button icon={getIconFromName('add')} tooltip=\"Repeat This Section\" onClick={() => this.duplicateRepeatableSection(sIndex)} />\n )}\n {/* // show the delete button if the section is repeatable and not the original section */}\n {!section.isOriginalSection && !this.readonly && (\n <stencil-icon-button \n icon={getIconFromName('subtract')} \n tooltip=\"Delete This Repeated Section\" \n onClick={\n () => {\n // e.stopPropagation();\n if (this.isSectionContainsFollowUpFormLink(`${section.name}_${section.sectionPositionSuffix}`)) {\n this.dialogAction = async () => {\n this.deleteRepeatableSection(sIndex)\n await this.performBackgroundSaveAndUpdateLocalSubmissionState(this.udpFormSubmission.data.submissionResponseData);\n this.isDialogOpen = false;\n }; \n } else {\n this.deleteRepeatableSection(sIndex)\n }\n \n this.isDialogOpen = true;\n }} />\n )}\n </div>\n </div>\n\n <div class=\"form-section-content\">\n <div class=\"items\">\n <div class=\"form-section-text\">\n <unity-typography variant=\"body\" color=\"inherit\">\n {section.sectionText}\n </unity-typography>\n </div>\n\n <div>\n {section.formQuestions.map((question: UdpFormQuestion) => {\n const isHidden = hiddenQuestionTypes.includes(question.fieldTypeId);\n const num: number = questionNumber;\n if (!isHidden) questionNumber++;\n\n const sectionKey = section.sectionPositionSuffix > 1 ? `${section.name}_${section.sectionPositionSuffix}` : `${section.name}`\n\n return (\n <div class=\"item\">\n <udp-question\n styleOverrides={{\n helperText: this.udpForm.styleOverrides?.helperText,\n paragraphText: this.udpForm.styleOverrides?.paragraphText,\n questionText: this.udpForm.styleOverrides?.questionText,\n }}\n question={question}\n questionNumber={num}\n value={this.currentValues?.[sectionKey]?.[question.name]?.value ?? ''}\n disabled={this.disabled}\n readonly={this.readonly}\n key={question.questionIdentifierKey}\n currentValues={this.currentValues}\n clientUserInfo={this.clientUserInfo}\n udpFormSubmission={this.udpFormSubmission}\n />\n </div>\n );\n })}\n </div>\n </div>\n </div>\n </div>\n );\n })}\n {this.udpFormSubmission?.status != UdpFormsSubmissionStatusEnum.Submitted && ( \n <div class=\"footer\">\n <input\n disabled={this.isLoading || this.disabled || this.readonly}\n type=\"submit\"\n value=\"Submit\"\n class=\"submit\"\n id=\"udpRecord-udp-forms-renderer-Submit\"\n onClick={() => {\n console.log('Submit button clicked');\n // Let the form handle the submit naturally\n }}\n />\n </div>\n )}\n </div>\n </stencil-form>\n ) : (\n //if the form has been submit, display success message with a button to trigger the action associated to the form\n <div class=\"center-div\">\n <udp-ambient-card>\n <div class=\"submit-card\">\n <unity-typography>Thank you for your submission.</unity-typography>\n {/* // No action configured for now. */}\n {/* <div class=\"finish-button\">\n <custom-button onClick={this.handleFinish}>Back</custom-button>\n </div> */}\n </div>\n </udp-ambient-card>\n </div>\n )}\n </div>\n </udp-container>\n </div>\n );\n }\n}\n"]}
|
package/dist/collection/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-utils.js
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { UdpFormsFieldTypeEnum } from "../udp-forms-utils/enums";
|
|
2
|
+
// utility to find repeat group keys from current values
|
|
3
|
+
export const findRepeatGroupKeys = (sectionName, values) => {
|
|
4
|
+
const keys = Object.keys(values);
|
|
5
|
+
const repeatGroupSet = new Set();
|
|
6
|
+
// Match: sectionName_2
|
|
7
|
+
const regex = new RegExp(`^${sectionName}_(\\d+)`);
|
|
8
|
+
keys.forEach(key => {
|
|
9
|
+
const match = key.match(regex);
|
|
10
|
+
if (match && match[1]) {
|
|
11
|
+
repeatGroupSet.add(Number(match[1]));
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
return Array.from(repeatGroupSet).sort((a, b) => a - b);
|
|
15
|
+
};
|
|
16
|
+
// build dynamic sections based on the master form
|
|
17
|
+
export const initializeDynamicSections = (udpForm, currentValues) => {
|
|
18
|
+
var _a;
|
|
19
|
+
const dynamicSections = [];
|
|
20
|
+
const sortedSections = structuredClone(udpForm.udpFormUdpFormSection).sort((a, b) => a.order - b.order);
|
|
21
|
+
for (const section of sortedSections) {
|
|
22
|
+
section.sectionProperties = JSON.parse(section.sectionProperties || {});
|
|
23
|
+
const repeatGroupKeys = findRepeatGroupKeys(section.name, currentValues);
|
|
24
|
+
section.isOriginalSection = true;
|
|
25
|
+
section.sectionPositionSuffix = 1; // default position
|
|
26
|
+
// always add the original section into dynamic sections
|
|
27
|
+
dynamicSections.push(Object.assign(Object.assign({}, structuredClone(section)), {
|
|
28
|
+
// dynamicSectionName: section.name,
|
|
29
|
+
formQuestions: structuredClone(udpForm.formQuestions)
|
|
30
|
+
.filter(q => q.formSectionId === section.id)
|
|
31
|
+
.sort((a, b) => a.questionOrder - b.questionOrder)
|
|
32
|
+
.map(q => (Object.assign(Object.assign({}, q), { questionIdentifierKey: `${section.name}.${q.name}`, isShowCommentInput: true })))
|
|
33
|
+
}));
|
|
34
|
+
// create then add additional sections if there are repeated sections
|
|
35
|
+
if (((_a = section.sectionProperties) === null || _a === void 0 ? void 0 : _a.isRepeatable) && repeatGroupKeys.length > 0) {
|
|
36
|
+
const maxRepeatedSectionSuffix = Math.max(...repeatGroupKeys); // create a new section for the max value of repeat group keys, even if there are no saved answers
|
|
37
|
+
// for (const repeatKey of repeatGroupKeys) { // create a section only for the suffix saved
|
|
38
|
+
for (let repeatKey = 2; repeatKey <= maxRepeatedSectionSuffix; repeatKey++) {
|
|
39
|
+
const clonedSection = Object.assign(Object.assign({}, structuredClone(section)), { formQuestions: structuredClone(udpForm.formQuestions)
|
|
40
|
+
.filter(q => q.formSectionId === section.id)
|
|
41
|
+
.sort((a, b) => a.questionOrder - b.questionOrder)
|
|
42
|
+
.map(q => (Object.assign(Object.assign({}, q), { questionIdentifierKey: `${section.name}_${repeatKey}.${q.name}`, isShowCommentInput: true }))), isOriginalSection: false, sectionPositionSuffix: repeatKey });
|
|
43
|
+
dynamicSections.push(clonedSection);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return dynamicSections;
|
|
48
|
+
};
|
|
49
|
+
// urlContext is derived from query params that start with `udpf_` (see useUdpFormParameters).
|
|
50
|
+
// Keys are stored without the prefix, e.g. `udpf_section1_3.question1=val` -> urlContext['section1_3.question1'] = 'val'
|
|
51
|
+
// This helper finds the maximum repeat suffix requested by urlContext for a given section base name.
|
|
52
|
+
// Example: { 'sectionA_3.q1': 'x', 'sectionA_2.q2': 'y' } -> { sectionA: 3 }
|
|
53
|
+
export const getMaxRepeatSuffixBySectionFromUrlContext = (urlContext) => {
|
|
54
|
+
const context = (urlContext && typeof urlContext === 'object') ? urlContext : {};
|
|
55
|
+
const maxBySection = {};
|
|
56
|
+
Object.keys(context).forEach(key => {
|
|
57
|
+
var _a;
|
|
58
|
+
// Expect keys like: sectionName_3.questionName
|
|
59
|
+
// Only treat it as a repeat hint if it has a dot after the suffix.
|
|
60
|
+
const match = key.match(/^([^._?&#]+)_(\d+)\./);
|
|
61
|
+
if (!match)
|
|
62
|
+
return;
|
|
63
|
+
const baseSectionName = match[1];
|
|
64
|
+
const suffix = Number(match[2]);
|
|
65
|
+
if (!Number.isFinite(suffix) || suffix < 2)
|
|
66
|
+
return;
|
|
67
|
+
const existing = (_a = maxBySection[baseSectionName]) !== null && _a !== void 0 ? _a : 1;
|
|
68
|
+
if (suffix > existing)
|
|
69
|
+
maxBySection[baseSectionName] = suffix;
|
|
70
|
+
});
|
|
71
|
+
return maxBySection;
|
|
72
|
+
};
|
|
73
|
+
// build dynamic sections based on the master form plus optional repeat hints from URL context
|
|
74
|
+
export const initializeDynamicSectionsWithUrlContext = (udpForm, currentValues, urlContext) => {
|
|
75
|
+
var _a, _b;
|
|
76
|
+
const maxRepeatFromUrl = getMaxRepeatSuffixBySectionFromUrlContext(urlContext);
|
|
77
|
+
const dynamicSections = [];
|
|
78
|
+
const sortedSections = structuredClone(udpForm.udpFormUdpFormSection).sort((a, b) => a.order - b.order);
|
|
79
|
+
for (const section of sortedSections) {
|
|
80
|
+
section.sectionProperties = JSON.parse(section.sectionProperties || {});
|
|
81
|
+
const repeatGroupKeys = findRepeatGroupKeys(section.name, currentValues);
|
|
82
|
+
const maxRepeatedFromValues = repeatGroupKeys.length > 0 ? Math.max(...repeatGroupKeys) : 1;
|
|
83
|
+
const maxRepeatedFromUrl = (_a = maxRepeatFromUrl === null || maxRepeatFromUrl === void 0 ? void 0 : maxRepeatFromUrl[section.name]) !== null && _a !== void 0 ? _a : 1;
|
|
84
|
+
const maxRepeatedSectionSuffix = Math.max(maxRepeatedFromValues, maxRepeatedFromUrl);
|
|
85
|
+
section.isOriginalSection = true;
|
|
86
|
+
section.sectionPositionSuffix = 1; // default position
|
|
87
|
+
// always add the original section into dynamic sections
|
|
88
|
+
dynamicSections.push(Object.assign(Object.assign({}, structuredClone(section)), { formQuestions: structuredClone(udpForm.formQuestions)
|
|
89
|
+
.filter(q => q.formSectionId === section.id)
|
|
90
|
+
.sort((a, b) => a.questionOrder - b.questionOrder)
|
|
91
|
+
.map(q => (Object.assign(Object.assign({}, q), { questionIdentifierKey: `${section.name}.${q.name}`, isShowCommentInput: true }))) }));
|
|
92
|
+
// create then add additional sections if repeatable and suffix requested by saved values or url
|
|
93
|
+
if (((_b = section.sectionProperties) === null || _b === void 0 ? void 0 : _b.isRepeatable) && maxRepeatedSectionSuffix >= 2) {
|
|
94
|
+
for (let repeatKey = 2; repeatKey <= maxRepeatedSectionSuffix; repeatKey++) {
|
|
95
|
+
const clonedSection = Object.assign(Object.assign({}, structuredClone(section)), { formQuestions: structuredClone(udpForm.formQuestions)
|
|
96
|
+
.filter(q => q.formSectionId === section.id)
|
|
97
|
+
.sort((a, b) => a.questionOrder - b.questionOrder)
|
|
98
|
+
.map(q => (Object.assign(Object.assign({}, q), { questionIdentifierKey: `${section.name}_${repeatKey}.${q.name}`, isShowCommentInput: true }))), isOriginalSection: false, sectionPositionSuffix: repeatKey });
|
|
99
|
+
dynamicSections.push(clonedSection);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return dynamicSections;
|
|
104
|
+
};
|
|
105
|
+
export const applyUrlSeedValuesForAll = (dynamicSections, urlContext) => {
|
|
106
|
+
if (!Array.isArray(dynamicSections))
|
|
107
|
+
return;
|
|
108
|
+
// urlContext is derived from query params that start with `udpf_` (see useUdpFormParameters).
|
|
109
|
+
// Keys are stored without the prefix, e.g. `udpf_section1.question1=val` -> urlContext['section1.question1'] = 'val'
|
|
110
|
+
const context = (urlContext && typeof urlContext === 'object') ? urlContext : {};
|
|
111
|
+
// Build a case-insensitive view of urlContext so callers can use udpf_ keys without worrying about case.
|
|
112
|
+
// If duplicate keys exist with different casing, the last one encountered wins.
|
|
113
|
+
const contextCI = {};
|
|
114
|
+
Object.keys(context).forEach(k => {
|
|
115
|
+
contextCI[String(k).toLowerCase()] = context[k];
|
|
116
|
+
});
|
|
117
|
+
// 1) Collect URL values into nested structure: { [sectionKey]: { [questionName]: { value, comments: [] } } }
|
|
118
|
+
const urlValuesNested = {};
|
|
119
|
+
dynamicSections.forEach(section => {
|
|
120
|
+
const sectionKey = section.isOriginalSection
|
|
121
|
+
? section.name
|
|
122
|
+
: `${section.name}_${section.sectionPositionSuffix}`;
|
|
123
|
+
(section.formQuestions || []).forEach(q => {
|
|
124
|
+
if (!q)
|
|
125
|
+
return;
|
|
126
|
+
const candidates = [q.processedSubmissionName, q.questionIdentifierKey, q.name].filter(Boolean);
|
|
127
|
+
let urlVal = undefined;
|
|
128
|
+
for (const c of candidates) {
|
|
129
|
+
const key = String(c).toLowerCase();
|
|
130
|
+
if (Object.prototype.hasOwnProperty.call(contextCI, key)) {
|
|
131
|
+
urlVal = contextCI[key];
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (urlVal !== undefined && urlVal !== null) {
|
|
136
|
+
if (!urlValuesNested[sectionKey])
|
|
137
|
+
urlValuesNested[sectionKey] = {};
|
|
138
|
+
urlValuesNested[sectionKey][q.name] = { value: urlVal, comments: [] };
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
// Caller is responsible for merging with saved submissionResponseData.
|
|
143
|
+
// Here we only return the url-derived seed values + paragraph defaults.
|
|
144
|
+
const merged = {};
|
|
145
|
+
Object.entries(urlValuesNested).forEach(([sectionKey, qMap]) => {
|
|
146
|
+
if (!merged[sectionKey])
|
|
147
|
+
merged[sectionKey] = {};
|
|
148
|
+
Object.entries(qMap).forEach(([qName, valObj]) => {
|
|
149
|
+
const existing = merged[sectionKey][qName];
|
|
150
|
+
// Only set from URL if no saved value exists (null/undefined/empty-string)
|
|
151
|
+
const isMissing = existing == null ||
|
|
152
|
+
existing.value == null ||
|
|
153
|
+
(typeof existing.value === 'string' && existing.value.trim() === '');
|
|
154
|
+
if (isMissing) {
|
|
155
|
+
merged[sectionKey][qName] = valObj;
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
// 3) Paragraph defaults: if still undefined/null, use fieldProperties.paragraphText
|
|
160
|
+
dynamicSections.forEach(section => {
|
|
161
|
+
const sectionKey = section.isOriginalSection
|
|
162
|
+
? section.name
|
|
163
|
+
: `${section.name}_${section.sectionPositionSuffix}`;
|
|
164
|
+
if (!merged[sectionKey])
|
|
165
|
+
merged[sectionKey] = {};
|
|
166
|
+
(section.formQuestions || []).forEach(q => {
|
|
167
|
+
var _a;
|
|
168
|
+
if (!q)
|
|
169
|
+
return;
|
|
170
|
+
if (q.fieldTypeId === UdpFormsFieldTypeEnum.Paragraph) {
|
|
171
|
+
const existing = merged[sectionKey][q.name];
|
|
172
|
+
const isMissing = existing == null ||
|
|
173
|
+
existing.value == null ||
|
|
174
|
+
(typeof existing.value === 'string' && existing.value.trim() === '');
|
|
175
|
+
if (isMissing) {
|
|
176
|
+
let fieldProps = q === null || q === void 0 ? void 0 : q.fieldProperties;
|
|
177
|
+
if (typeof fieldProps === 'string') {
|
|
178
|
+
try {
|
|
179
|
+
fieldProps = JSON.parse(fieldProps || '{}');
|
|
180
|
+
}
|
|
181
|
+
catch (_b) {
|
|
182
|
+
fieldProps = {};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
merged[sectionKey][q.name] = {
|
|
186
|
+
value: (_a = fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.paragraphText) !== null && _a !== void 0 ? _a : '',
|
|
187
|
+
comments: [],
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
return merged;
|
|
194
|
+
};
|
|
195
|
+
//# sourceMappingURL=udp-forms-renderer-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"udp-forms-renderer-utils.js","sourceRoot":"","sources":["../../../../../src/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { UdpFormsFieldTypeEnum } from '../udp-forms-utils/enums';\n\n// utility to find repeat group keys from current values\nexport const findRepeatGroupKeys = (sectionName: string, values: Object): number[] => {\n const keys = Object.keys(values);\n const repeatGroupSet = new Set<number>();\n\n // Match: sectionName_2\n const regex = new RegExp(`^${sectionName}_(\\\\d+)`);\n\n keys.forEach(key => {\n const match = key.match(regex);\n if (match && match[1]) {\n repeatGroupSet.add(Number(match[1]));\n }\n });\n\n return Array.from(repeatGroupSet).sort((a, b) => a - b);\n};\n\n\n// build dynamic sections based on the master form\nexport const initializeDynamicSections = (udpForm, currentValues) => {\n const dynamicSections: any[] = [];\n const sortedSections = structuredClone(udpForm.udpFormUdpFormSection).sort(\n (a, b) => a.order - b.order,\n );\n\n for (const section of sortedSections) {\n section.sectionProperties = JSON.parse(section.sectionProperties || {});\n const repeatGroupKeys = findRepeatGroupKeys(section.name, currentValues);\n section.isOriginalSection = true;\n section.sectionPositionSuffix = 1; // default position\n\n // always add the original section into dynamic sections\n dynamicSections.push({\n ...structuredClone(section),\n // dynamicSectionName: section.name,\n formQuestions: structuredClone(udpForm.formQuestions)\n .filter(q => q.formSectionId === section.id)\n .sort((a, b) => a.questionOrder - b.questionOrder)\n .map(q => ({\n ...q,\n questionIdentifierKey: `${section.name}.${q.name}`,\n isShowCommentInput: true,\n })),\n });\n\n // create then add additional sections if there are repeated sections\n if (section.sectionProperties?.isRepeatable && repeatGroupKeys.length > 0) {\n const maxRepeatedSectionSuffix = Math.max(...repeatGroupKeys); // create a new section for the max value of repeat group keys, even if there are no saved answers\n\n // for (const repeatKey of repeatGroupKeys) { // create a section only for the suffix saved\n for (let repeatKey = 2; repeatKey <= maxRepeatedSectionSuffix; repeatKey++) {\n const clonedSection = {\n ...structuredClone(section),\n formQuestions: structuredClone(udpForm.formQuestions)\n .filter(q => q.formSectionId === section.id)\n .sort((a, b) => a.questionOrder - b.questionOrder)\n .map(q => ({\n ...q,\n questionIdentifierKey: `${section.name}_${repeatKey}.${q.name}`,\n isShowCommentInput: true,\n })),\n isOriginalSection: false,\n sectionPositionSuffix: repeatKey,\n };\n dynamicSections.push(clonedSection);\n }\n }\n }\n\n return dynamicSections;\n};\n\n// urlContext is derived from query params that start with `udpf_` (see useUdpFormParameters).\n// Keys are stored without the prefix, e.g. `udpf_section1_3.question1=val` -> urlContext['section1_3.question1'] = 'val'\n// This helper finds the maximum repeat suffix requested by urlContext for a given section base name.\n// Example: { 'sectionA_3.q1': 'x', 'sectionA_2.q2': 'y' } -> { sectionA: 3 }\nexport const getMaxRepeatSuffixBySectionFromUrlContext = (urlContext: Record<string, any> | undefined | null) => {\n const context = (urlContext && typeof urlContext === 'object') ? urlContext : {};\n const maxBySection: Record<string, number> = {};\n\n Object.keys(context).forEach(key => {\n // Expect keys like: sectionName_3.questionName\n // Only treat it as a repeat hint if it has a dot after the suffix.\n const match = key.match(/^([^._?&#]+)_(\\d+)\\./);\n if (!match) return;\n const baseSectionName = match[1];\n const suffix = Number(match[2]);\n if (!Number.isFinite(suffix) || suffix < 2) return;\n\n const existing = maxBySection[baseSectionName] ?? 1;\n if (suffix > existing) maxBySection[baseSectionName] = suffix;\n });\n\n return maxBySection;\n};\n\n// build dynamic sections based on the master form plus optional repeat hints from URL context\nexport const initializeDynamicSectionsWithUrlContext = (udpForm, currentValues, urlContext) => {\n const maxRepeatFromUrl = getMaxRepeatSuffixBySectionFromUrlContext(urlContext);\n\n const dynamicSections: any[] = [];\n const sortedSections = structuredClone(udpForm.udpFormUdpFormSection).sort(\n (a, b) => a.order - b.order,\n );\n\n for (const section of sortedSections) {\n section.sectionProperties = JSON.parse(section.sectionProperties || {});\n\n const repeatGroupKeys = findRepeatGroupKeys(section.name, currentValues);\n const maxRepeatedFromValues = repeatGroupKeys.length > 0 ? Math.max(...repeatGroupKeys) : 1;\n const maxRepeatedFromUrl = maxRepeatFromUrl?.[section.name] ?? 1;\n const maxRepeatedSectionSuffix = Math.max(maxRepeatedFromValues, maxRepeatedFromUrl);\n\n section.isOriginalSection = true;\n section.sectionPositionSuffix = 1; // default position\n\n // always add the original section into dynamic sections\n dynamicSections.push({\n ...structuredClone(section),\n formQuestions: structuredClone(udpForm.formQuestions)\n .filter(q => q.formSectionId === section.id)\n .sort((a, b) => a.questionOrder - b.questionOrder)\n .map(q => ({\n ...q,\n questionIdentifierKey: `${section.name}.${q.name}`,\n isShowCommentInput: true,\n })),\n });\n\n // create then add additional sections if repeatable and suffix requested by saved values or url\n if (section.sectionProperties?.isRepeatable && maxRepeatedSectionSuffix >= 2) {\n for (let repeatKey = 2; repeatKey <= maxRepeatedSectionSuffix; repeatKey++) {\n const clonedSection = {\n ...structuredClone(section),\n formQuestions: structuredClone(udpForm.formQuestions)\n .filter(q => q.formSectionId === section.id)\n .sort((a, b) => a.questionOrder - b.questionOrder)\n .map(q => ({\n ...q,\n questionIdentifierKey: `${section.name}_${repeatKey}.${q.name}`,\n isShowCommentInput: true,\n })),\n isOriginalSection: false,\n sectionPositionSuffix: repeatKey,\n };\n dynamicSections.push(clonedSection);\n }\n }\n }\n\n return dynamicSections;\n};\n\n\nexport const applyUrlSeedValuesForAll = (dynamicSections, urlContext) => {\n if (!Array.isArray(dynamicSections)) return;\n\n // urlContext is derived from query params that start with `udpf_` (see useUdpFormParameters).\n // Keys are stored without the prefix, e.g. `udpf_section1.question1=val` -> urlContext['section1.question1'] = 'val'\n const context = (urlContext && typeof urlContext === 'object') ? urlContext : {};\n // Build a case-insensitive view of urlContext so callers can use udpf_ keys without worrying about case.\n // If duplicate keys exist with different casing, the last one encountered wins.\n const contextCI: Record<string, any> = {};\n Object.keys(context).forEach(k => {\n contextCI[String(k).toLowerCase()] = (context as any)[k];\n });\n\n // 1) Collect URL values into nested structure: { [sectionKey]: { [questionName]: { value, comments: [] } } }\n const urlValuesNested: {\n [sectionKey: string]: { [qName: string]: { value: any; comments: any[] } };\n } = {};\n dynamicSections.forEach(section => {\n const sectionKey = section.isOriginalSection\n ? section.name\n : `${section.name}_${section.sectionPositionSuffix}`;\n (section.formQuestions || []).forEach(q => {\n if (!q) return;\n const candidates = [q.processedSubmissionName, q.questionIdentifierKey, q.name].filter(\n Boolean,\n ) as string[];\n let urlVal: any = undefined;\n for (const c of candidates) {\n const key = String(c).toLowerCase();\n if (Object.prototype.hasOwnProperty.call(contextCI, key)) {\n urlVal = contextCI[key];\n break;\n }\n }\n if (urlVal !== undefined && urlVal !== null) {\n if (!urlValuesNested[sectionKey]) urlValuesNested[sectionKey] = {};\n urlValuesNested[sectionKey][q.name] = { value: urlVal, comments: [] };\n }\n });\n });\n\n // Caller is responsible for merging with saved submissionResponseData.\n // Here we only return the url-derived seed values + paragraph defaults.\n const merged: { [sectionKey: string]: { [qName: string]: { value: any; comments: any[] } } } = {};\n Object.entries(urlValuesNested).forEach(([sectionKey, qMap]) => {\n if (!merged[sectionKey]) merged[sectionKey] = {} as any;\n Object.entries(qMap).forEach(([qName, valObj]) => {\n const existing = merged[sectionKey][qName];\n // Only set from URL if no saved value exists (null/undefined/empty-string)\n const isMissing =\n existing == null ||\n existing.value == null ||\n (typeof existing.value === 'string' && existing.value.trim() === '');\n if (isMissing) {\n merged[sectionKey][qName] = valObj;\n }\n });\n });\n\n // 3) Paragraph defaults: if still undefined/null, use fieldProperties.paragraphText\n dynamicSections.forEach(section => {\n const sectionKey = section.isOriginalSection\n ? section.name\n : `${section.name}_${section.sectionPositionSuffix}`;\n if (!merged[sectionKey]) merged[sectionKey] = {} as any;\n (section.formQuestions || []).forEach(q => {\n if (!q) return;\n if (q.fieldTypeId === UdpFormsFieldTypeEnum.Paragraph) {\n const existing = merged[sectionKey][q.name];\n const isMissing =\n existing == null ||\n existing.value == null ||\n (typeof existing.value === 'string' && existing.value.trim() === '');\n if (isMissing) {\n let fieldProps: any = q?.fieldProperties;\n if (typeof fieldProps === 'string') {\n try {\n fieldProps = JSON.parse(fieldProps || '{}');\n } catch {\n fieldProps = {};\n }\n }\n merged[sectionKey][q.name] = {\n value: fieldProps?.paragraphText ?? '',\n comments: [],\n };\n }\n }\n });\n });\n\n return merged;\n};\n"]}
|