udp-stencil-component-library 25.18.2-beta.4 → 25.18.2-beta.6
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/add-map-feature-popup_4.cjs.entry.js +12 -12
- package/dist/cjs/advanced-search_12.cjs.entry.js +1 -1
- package/dist/cjs/ag-grid-base.ghost-render.grid-header.hint-panel.udp-dialog.udp-list-item.entry.cjs.js.map +1 -1
- package/dist/cjs/ag-grid-base_6.cjs.entry.js +27 -11
- package/dist/cjs/api-method-instance-grid.cjs.entry.js +1 -1
- package/dist/cjs/app-bar.cjs.entry.js +1 -1
- package/dist/cjs/check-box.cjs.entry.js +2 -2
- package/dist/cjs/chip-section.cjs.entry.js +2 -2
- package/dist/cjs/client-side-grid_2.cjs.entry.js +3 -3
- 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/entity-maintenance-grid.cjs.entry.js +1 -1
- package/dist/cjs/{enums-DVbZnzL8.js → enums-CgcTuQjC.js} +8 -2
- package/dist/cjs/enums-CgcTuQjC.js.map +1 -0
- package/dist/cjs/feature-details-card_2.cjs.entry.js +5 -5
- package/dist/cjs/filter-conditions_7.cjs.entry.js +2 -2
- 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 +15 -15
- package/dist/cjs/index-CGCOXUJE.js +10 -10
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/map-component_2.cjs.entry.js +2 -2
- package/dist/cjs/numeric-field_5.cjs.entry.js +15 -15
- package/dist/cjs/primary-action-header.udp-tabs.entry.cjs.js.map +1 -0
- package/dist/cjs/{primary-action-header_3.cjs.entry.js → primary-action-header_2.cjs.entry.js} +4 -266
- 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/resource-timeline-calendar.cjs.entry.js +1 -1
- package/dist/cjs/search-method-grid.cjs.entry.js +2 -1
- package/dist/cjs/search-method-grid.entry.cjs.js.map +1 -1
- package/dist/cjs/server-side-grid.cjs.entry.js +1 -1
- package/dist/cjs/side-sheet-container.cjs.entry.js +1 -1
- package/dist/cjs/stencil-library.cjs.js +1 -1
- package/dist/cjs/stencil-toggle.cjs.entry.js +4 -4
- package/dist/cjs/text-field_2.cjs.entry.js +7 -7
- package/dist/cjs/udp-chip_3.cjs.entry.js +1 -1
- package/dist/cjs/udp-container-query-grid-item.cjs.entry.js +1 -1
- package/dist/cjs/udp-container-query-grid.cjs.entry.js +1 -1
- package/dist/cjs/udp-container-query.cjs.entry.js +2 -2
- package/dist/cjs/udp-container.cjs.entry.js +35 -0
- package/dist/cjs/udp-container.entry.cjs.js.map +1 -0
- package/dist/cjs/udp-date-range-selector.cjs.entry.js +1 -1
- package/dist/cjs/udp-dynamic-container-with-menu.cjs.entry.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/udp-linear-loader.udp-side-sheet.entry.cjs.js.map +1 -0
- package/dist/cjs/udp-linear-loader_2.cjs.entry.js +289 -0
- package/dist/cjs/udp-map.cjs.entry.js +3 -3
- package/dist/cjs/udp-menu-item.udp-pop-over.entry.cjs.js.map +1 -0
- package/dist/cjs/{udp-pop-over.cjs.entry.js → udp-menu-item_2.cjs.entry.js} +23 -1
- package/dist/cjs/udp-page.cjs.entry.js +1 -1
- package/dist/cjs/udp-skeleton-loading.cjs.entry.js +1 -1
- package/dist/cjs/udp-split-screen.cjs.entry.js +1 -1
- package/dist/cjs/udp-stepper-demo.cjs.entry.js +1 -1
- package/dist/cjs/udp-tab-panel.cjs.entry.js +2 -2
- package/dist/cjs/udp-tab.cjs.entry.js +1 -1
- package/dist/cjs/udp-timeline-connector.cjs.entry.js +1 -1
- package/dist/cjs/udp-timeline-dot.cjs.entry.js +1 -1
- package/dist/cjs/udp-timeline-item.cjs.entry.js +2 -2
- package/dist/cjs/udp-timeline-separator.cjs.entry.js +1 -1
- package/dist/cjs/udp-timeline.cjs.entry.js +1 -1
- package/dist/cjs/udp-vertical-spacer.cjs.entry.js +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/grid/new-grid/ag-grid-base.js +2 -1
- package/dist/collection/components/grid/new-grid/ag-grid-base.js.map +1 -1
- package/dist/collection/components/grid/new-grid/api-method-instance-grid.js +1 -1
- package/dist/collection/components/grid/new-grid/client-side-grid.js +1 -1
- package/dist/collection/components/grid/new-grid/datasources/searchMethodDatasource.js +1 -0
- package/dist/collection/components/grid/new-grid/datasources/searchMethodDatasource.js.map +1 -1
- package/dist/collection/components/grid/new-grid/entity-maintenance-grid.js +1 -1
- package/dist/collection/components/grid/new-grid/gridFunctions/bulkActions.js +24 -9
- package/dist/collection/components/grid/new-grid/gridFunctions/bulkActions.js.map +1 -1
- package/dist/collection/components/grid/new-grid/interfaces/grid.js.map +1 -1
- package/dist/collection/components/grid/new-grid/search-method-grid.js +1 -1
- package/dist/collection/components/grid/new-grid/server-side-grid.js +1 -1
- package/dist/collection/components/grid/resource-timeline-calendar/resource-timeline-calendar.js +1 -1
- package/dist/collection/components/grid/resource-timeline-calendar/resource-timeline-primary-bar.js +2 -2
- package/dist/collection/components/inputs/checkbox/check-box.js +2 -2
- package/dist/collection/components/inputs/date-range-selector/udp-date-range-selector.js +1 -1
- package/dist/collection/components/inputs/date-selector/udp-date-selector.js +3 -3
- package/dist/collection/components/inputs/date-time-selector/udp-datetime-selector.js +3 -3
- 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/collection/components/inputs/image-upload/image-upload.js +1 -1
- package/dist/collection/components/inputs/numeric-field/numeric-field.js +3 -3
- package/dist/collection/components/inputs/signature-input/signature-input.js +2 -2
- package/dist/collection/components/inputs/tally/tally.js +2 -2
- package/dist/collection/components/inputs/text-area/text-area.js +3 -3
- package/dist/collection/components/inputs/text-field/text-field.js +3 -3
- package/dist/collection/components/inputs/time-selector/udp-time-selector.js +3 -3
- package/dist/collection/components/inputs/toggle/stencil-toggle.js +4 -4
- package/dist/collection/components/inputs/udp-selector/udp-selector.js +4 -4
- package/dist/collection/components/layout/udp-container/udp-container.js +2 -2
- package/dist/collection/components/layout/udp-container-query/udp-container-query.js +2 -2
- package/dist/collection/components/layout/udp-container-query-grid/udp-container-query-grid.js +1 -1
- package/dist/collection/components/layout/udp-container-query-grid-item/udp-container-query-grid-item.js +1 -1
- package/dist/collection/components/layout/udp-page/udp-page.js +1 -1
- package/dist/collection/components/layout/udp-split-screen/udp-split-screen.js +1 -1
- package/dist/collection/components/layout/udp-vertical-spacer.js +1 -1
- package/dist/collection/components/loaders/udp-grid-loader/udp-grid-loader.js +2 -2
- package/dist/collection/components/loaders/udp-linear-loader/udp-linear-loader.js +1 -1
- package/dist/collection/components/loaders/udp-skeleton-loading.js +1 -1
- package/dist/collection/components/map/udp-map/map-component.js +1 -1
- package/dist/collection/components/map/udp-map/popups/add-map-feature-popup.js +3 -3
- package/dist/collection/components/map/udp-map/popups/feature-details-card/feature-details-card.js +4 -4
- package/dist/collection/components/map/udp-map/popups/feature-details-popup.js +1 -1
- package/dist/collection/components/map/udp-map/popups/select-layer-popup.js +2 -2
- package/dist/collection/components/map/udp-map/popups/split-line-popup.js +1 -1
- package/dist/collection/components/map/udp-map/toolbar/map-toolbar.js +6 -6
- package/dist/collection/components/map/udp-map/udp-map-toolbar.js +1 -1
- package/dist/collection/components/map/udp-map/udp-map.js +3 -3
- package/dist/collection/components/menu/menu-item/udp-menu-item.js +1 -1
- package/dist/collection/components/menu/udp-menu.js +1 -1
- package/dist/collection/components/stepper/udp-stepper-demo.js +1 -1
- package/dist/collection/components/tabs/tab/tabs/udp-tabs.js +2 -2
- package/dist/collection/components/tabs/tab/udp-tab.js +1 -1
- package/dist/collection/components/tabs/udp-tab-panel/udp-tab-panel.js +2 -2
- package/dist/collection/components/timeline/udp-timeline-connector.js +1 -1
- package/dist/collection/components/timeline/udp-timeline-dot.js +1 -1
- package/dist/collection/components/timeline/udp-timeline-item.js +2 -2
- package/dist/collection/components/timeline/udp-timeline-separator.js +1 -1
- package/dist/collection/components/timeline/udp-timeline.js +1 -1
- package/dist/collection/components/toolbars/app-bar/app-bar.js +1 -1
- package/dist/collection/components/util/ghost-render/ghost-render.js +1 -1
- package/dist/collection/deprecated/components/side-sheet/side-sheet-container.js +1 -1
- package/dist/collection/deprecated/components/side-sheet/side-sheet.js +1 -1
- package/dist/collection/udp-utilities/layout/udp-dynamic-container-with-menu/chip-section/chip-section.js +2 -2
- package/dist/collection/udp-utilities/layout/udp-dynamic-container-with-menu/udp-dynamic-container-with-menu.js +1 -1
- package/dist/components/add-map-feature-popup2.js +3 -3
- package/dist/components/ag-grid-base2.js +78 -38
- package/dist/components/ag-grid-base2.js.map +1 -1
- package/dist/components/api-method-instance-grid.js +59 -35
- package/dist/components/api-method-instance-grid.js.map +1 -1
- package/dist/components/app-bar.js +1 -1
- package/dist/components/check-box.js +2 -2
- package/dist/components/chip-section.js +2 -2
- package/dist/components/client-side-grid2.js +55 -31
- package/dist/components/client-side-grid2.js.map +1 -1
- package/dist/components/date-time-renderer2.js.map +1 -1
- package/dist/components/entity-maintenance-grid.js +1 -1
- package/dist/components/enums.js +7 -1
- package/dist/components/enums.js.map +1 -1
- package/dist/components/feature-details-card2.js +4 -4
- package/dist/components/feature-details-popup2.js +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/ghost-render2.js +1 -1
- package/dist/components/image-upload2.js +1 -1
- package/dist/components/list-options-renderer2.js +3 -3
- package/dist/components/list-options-renderer2.js.map +1 -1
- package/dist/components/map-component2.js +1 -1
- package/dist/components/map-toolbar2.js +6 -6
- package/dist/components/numeric-field2.js +3 -3
- 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/resource-timeline-calendar.js +59 -35
- package/dist/components/resource-timeline-calendar.js.map +1 -1
- package/dist/components/resource-timeline-primary-bar2.js +2 -2
- package/dist/components/search-method-grid2.js +58 -33
- package/dist/components/search-method-grid2.js.map +1 -1
- package/dist/components/select-layer-popup2.js +2 -2
- package/dist/components/server-side-grid2.js +55 -31
- package/dist/components/server-side-grid2.js.map +1 -1
- package/dist/components/side-sheet-container2.js +1 -1
- package/dist/components/side-sheet2.js +1 -1
- package/dist/components/signature-input2.js +2 -2
- package/dist/components/signature-renderer2.js +1 -1
- package/dist/components/signature-renderer2.js.map +1 -1
- package/dist/components/split-line-popup2.js +1 -1
- package/dist/components/stencil-toggle2.js +4 -4
- package/dist/components/tally.js +2 -2
- package/dist/components/text-area2.js +3 -3
- package/dist/components/text-field2.js +3 -3
- package/dist/components/text-input-renderer2.js +2 -2
- package/dist/components/text-input-renderer2.js.map +1 -1
- package/dist/components/udp-container-query-grid-item.js +1 -1
- package/dist/components/udp-container-query-grid.js +1 -1
- package/dist/components/udp-container-query2.js +2 -2
- package/dist/components/udp-container2.js +2 -2
- package/dist/components/udp-date-range-selector.js +1 -1
- package/dist/components/udp-date-selector2.js +3 -3
- package/dist/components/udp-datetime-selector2.js +3 -3
- package/dist/components/udp-dynamic-container-with-menu2.js +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-grid-loader2.js +2 -2
- package/dist/components/udp-linear-loader2.js +1 -1
- package/dist/components/udp-map-toolbar2.js +1 -1
- package/dist/components/udp-map.js +3 -3
- package/dist/components/udp-menu-item2.js +1 -1
- package/dist/components/udp-menu2.js +1 -1
- package/dist/components/udp-page.js +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/udp-selector2.js +4 -4
- package/dist/components/udp-skeleton-loading2.js +1 -1
- package/dist/components/udp-split-screen.js +1 -1
- package/dist/components/udp-stepper-demo.js +1 -1
- package/dist/components/udp-tab-panel.js +2 -2
- package/dist/components/udp-tab.js +1 -1
- package/dist/components/udp-tabs2.js +2 -2
- package/dist/components/udp-time-selector2.js +3 -3
- package/dist/components/udp-timeline-connector.js +1 -1
- package/dist/components/udp-timeline-dot.js +1 -1
- package/dist/components/udp-timeline-item.js +2 -2
- package/dist/components/udp-timeline-separator.js +1 -1
- package/dist/components/udp-timeline.js +1 -1
- package/dist/components/udp-vertical-spacer.js +1 -1
- package/dist/components/utils.js +6 -6
- package/dist/components/utils.js.map +1 -1
- package/dist/docs.json +258 -205
- package/dist/esm/add-map-feature-popup_4.entry.js +12 -12
- package/dist/esm/advanced-search_12.entry.js +1 -1
- package/dist/esm/ag-grid-base.ghost-render.grid-header.hint-panel.udp-dialog.udp-list-item.entry.js.map +1 -1
- package/dist/esm/ag-grid-base_6.entry.js +27 -11
- package/dist/esm/api-method-instance-grid.entry.js +1 -1
- package/dist/esm/app-bar.entry.js +1 -1
- package/dist/esm/check-box.entry.js +2 -2
- package/dist/esm/chip-section.entry.js +2 -2
- package/dist/esm/client-side-grid_2.entry.js +3 -3
- 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/entity-maintenance-grid.entry.js +1 -1
- package/dist/esm/{enums-CHxgVY-B.js → enums-DHT5wSnX.js} +9 -3
- package/dist/esm/enums-DHT5wSnX.js.map +1 -0
- package/dist/esm/feature-details-card_2.entry.js +5 -5
- package/dist/esm/filter-conditions_7.entry.js +2 -2
- 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 +15 -15
- package/dist/esm/index-CaZq3YdB.js +10 -10
- package/dist/esm/loader.js +1 -1
- package/dist/esm/map-component_2.entry.js +2 -2
- package/dist/esm/numeric-field_5.entry.js +15 -15
- package/dist/esm/primary-action-header.udp-tabs.entry.js.map +1 -0
- package/dist/esm/{primary-action-header_3.entry.js → primary-action-header_2.entry.js} +5 -262
- 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/resource-timeline-calendar.entry.js +1 -1
- package/dist/esm/search-method-grid.entry.js +2 -1
- package/dist/esm/search-method-grid.entry.js.map +1 -1
- package/dist/esm/server-side-grid.entry.js +1 -1
- package/dist/esm/side-sheet-container.entry.js +1 -1
- package/dist/esm/stencil-library.js +1 -1
- package/dist/esm/stencil-toggle.entry.js +4 -4
- package/dist/esm/text-field_2.entry.js +7 -7
- package/dist/esm/udp-chip_3.entry.js +1 -1
- package/dist/esm/udp-container-query-grid-item.entry.js +1 -1
- package/dist/esm/udp-container-query-grid.entry.js +1 -1
- package/dist/esm/udp-container-query.entry.js +2 -2
- package/dist/esm/udp-container.entry.js +33 -0
- package/dist/esm/udp-container.entry.js.map +1 -0
- package/dist/esm/udp-date-range-selector.entry.js +1 -1
- package/dist/esm/udp-dynamic-container-with-menu.entry.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/udp-linear-loader.udp-side-sheet.entry.js.map +1 -0
- package/dist/esm/udp-linear-loader_2.entry.js +282 -0
- package/dist/esm/udp-map.entry.js +3 -3
- package/dist/esm/udp-menu-item.udp-pop-over.entry.js.map +1 -0
- package/dist/esm/{udp-pop-over.entry.js → udp-menu-item_2.entry.js} +24 -3
- package/dist/esm/udp-page.entry.js +1 -1
- package/dist/esm/udp-skeleton-loading.entry.js +1 -1
- package/dist/esm/udp-split-screen.entry.js +1 -1
- package/dist/esm/udp-stepper-demo.entry.js +1 -1
- package/dist/esm/udp-tab-panel.entry.js +2 -2
- package/dist/esm/udp-tab.entry.js +1 -1
- package/dist/esm/udp-timeline-connector.entry.js +1 -1
- package/dist/esm/udp-timeline-dot.entry.js +1 -1
- package/dist/esm/udp-timeline-item.entry.js +2 -2
- package/dist/esm/udp-timeline-separator.entry.js +1 -1
- package/dist/esm/udp-timeline.entry.js +1 -1
- package/dist/esm/udp-vertical-spacer.entry.js +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/add-map-feature-popup_4.entry.js +1 -1
- package/dist/stencil-library/advanced-search_12.entry.js +1 -1
- package/dist/stencil-library/ag-grid-base.ghost-render.grid-header.hint-panel.udp-dialog.udp-list-item.entry.esm.js.map +1 -1
- package/dist/stencil-library/ag-grid-base_6.entry.js +1 -1
- package/dist/stencil-library/ag-grid-base_6.entry.js.map +1 -1
- package/dist/stencil-library/api-method-instance-grid.entry.js +1 -1
- package/dist/stencil-library/app-bar.entry.js +1 -1
- package/dist/stencil-library/check-box.entry.js +1 -1
- package/dist/stencil-library/chip-section.entry.js +1 -1
- package/dist/stencil-library/client-side-grid_2.entry.js +1 -1
- 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/entity-maintenance-grid.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/feature-details-card_2.entry.js +1 -1
- package/dist/stencil-library/filter-conditions_7.entry.js +1 -1
- 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/map-component_2.entry.js +1 -1
- package/dist/stencil-library/numeric-field_5.entry.js +1 -1
- package/dist/stencil-library/primary-action-header.udp-tabs.entry.esm.js.map +1 -0
- package/dist/stencil-library/primary-action-header_2.entry.js +2 -0
- package/dist/stencil-library/primary-action-header_2.entry.js.map +1 -0
- 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/resource-timeline-calendar.entry.js +1 -1
- package/dist/stencil-library/search-method-grid.entry.esm.js.map +1 -1
- package/dist/stencil-library/search-method-grid.entry.js +1 -1
- package/dist/stencil-library/search-method-grid.entry.js.map +1 -1
- package/dist/stencil-library/server-side-grid.entry.js +1 -1
- package/dist/stencil-library/side-sheet-container.entry.js +1 -1
- package/dist/stencil-library/stencil-library.esm.js +1 -1
- package/dist/stencil-library/stencil-toggle.entry.js +1 -1
- package/dist/stencil-library/text-field_2.entry.js +1 -1
- package/dist/stencil-library/udp-chip_3.entry.js +1 -1
- package/dist/stencil-library/udp-container-query-grid-item.entry.js +1 -1
- package/dist/stencil-library/udp-container-query-grid.entry.js +1 -1
- package/dist/stencil-library/udp-container-query.entry.js +1 -1
- package/dist/stencil-library/udp-container.entry.esm.js.map +1 -0
- package/dist/stencil-library/udp-container.entry.js +2 -0
- package/dist/stencil-library/udp-container.entry.js.map +1 -0
- package/dist/stencil-library/udp-date-range-selector.entry.js +1 -1
- package/dist/stencil-library/udp-dynamic-container-with-menu.entry.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/udp-linear-loader.udp-side-sheet.entry.esm.js.map +1 -0
- package/dist/stencil-library/udp-linear-loader_2.entry.js +2 -0
- package/dist/stencil-library/udp-linear-loader_2.entry.js.map +1 -0
- package/dist/stencil-library/udp-map.entry.js +1 -1
- package/dist/stencil-library/udp-menu-item.udp-pop-over.entry.esm.js.map +1 -0
- package/dist/stencil-library/udp-menu-item_2.entry.js +2 -0
- package/dist/stencil-library/udp-menu-item_2.entry.js.map +1 -0
- package/dist/stencil-library/udp-page.entry.js +1 -1
- package/dist/stencil-library/udp-skeleton-loading.entry.js +1 -1
- package/dist/stencil-library/udp-split-screen.entry.js +1 -1
- package/dist/stencil-library/udp-stepper-demo.entry.js +1 -1
- package/dist/stencil-library/udp-tab-panel.entry.js +1 -1
- package/dist/stencil-library/udp-tab.entry.js +1 -1
- package/dist/stencil-library/udp-timeline-connector.entry.js +1 -1
- package/dist/stencil-library/udp-timeline-dot.entry.js +1 -1
- package/dist/stencil-library/udp-timeline-item.entry.js +1 -1
- package/dist/stencil-library/udp-timeline-item.entry.js.map +1 -1
- package/dist/stencil-library/udp-timeline-separator.entry.js +1 -1
- package/dist/stencil-library/udp-timeline.entry.js +1 -1
- package/dist/stencil-library/udp-vertical-spacer.entry.js +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/grid/new-grid/gridFunctions/bulkActions.d.ts +4 -2
- package/dist/types/components/grid/new-grid/interfaces/grid.d.ts +1 -0
- 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/primary-action-header.udp-side-sheet.udp-tabs.entry.cjs.js.map +0 -1
- package/dist/cjs/udp-container.udp-linear-loader.entry.cjs.js.map +0 -1
- package/dist/cjs/udp-container_2.cjs.entry.js +0 -56
- package/dist/cjs/udp-forms-builder-question-template-CNONS2l5.js.map +0 -1
- package/dist/cjs/udp-menu-item.cjs.entry.js +0 -27
- package/dist/cjs/udp-menu-item.entry.cjs.js.map +0 -1
- package/dist/cjs/udp-pop-over.entry.cjs.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/primary-action-header.udp-side-sheet.udp-tabs.entry.js.map +0 -1
- package/dist/esm/udp-container.udp-linear-loader.entry.js.map +0 -1
- package/dist/esm/udp-container_2.entry.js +0 -53
- package/dist/esm/udp-forms-builder-question-template-DQJb7f4Y.js.map +0 -1
- package/dist/esm/udp-menu-item.entry.js +0 -25
- package/dist/esm/udp-menu-item.entry.js.map +0 -1
- package/dist/esm/udp-pop-over.entry.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/primary-action-header.udp-side-sheet.udp-tabs.entry.esm.js.map +0 -1
- package/dist/stencil-library/primary-action-header_3.entry.js +0 -2
- package/dist/stencil-library/primary-action-header_3.entry.js.map +0 -1
- package/dist/stencil-library/udp-container.udp-linear-loader.entry.esm.js.map +0 -1
- package/dist/stencil-library/udp-container_2.entry.js +0 -2
- package/dist/stencil-library/udp-container_2.entry.js.map +0 -1
- package/dist/stencil-library/udp-forms-builder-question-template-DQJb7f4Y.js.map +0 -1
- package/dist/stencil-library/udp-menu-item.entry.esm.js.map +0 -1
- package/dist/stencil-library/udp-menu-item.entry.js +0 -2
- package/dist/stencil-library/udp-menu-item.entry.js.map +0 -1
- package/dist/stencil-library/udp-pop-over.entry.esm.js.map +0 -1
- package/dist/stencil-library/udp-pop-over.entry.js +0 -2
- package/dist/stencil-library/udp-pop-over.entry.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 +1 @@
|
|
|
1
|
-
{"file":"udp-forms-renderer.js","mappings":"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","names":["UdpFormsRenderer","__stencil_proxyCustomElement","HTMLElement","uuidv4"],"sources":["src/components/forms/udp-forms/utils/form-submission-handler/formUtils.ts","src/components/forms/udp-forms/utils/form-submission-handler/PublicFormSubmissionHandler.ts","src/components/forms/udp-forms/utils/classes/UdpFormSubmission.ts","src/components/forms/udp-forms/utils/form-submission-handler/PrivateFormSubmissionHandler.ts","src/components/forms/udp-forms/utils/form-submission-handler/FormSubmissionHandlerFactory.ts","src/components/forms/udp-forms/utils/form-handler/UdpFormHandler.ts","src/components/forms/udp-forms/utils/classes/UdpForm.ts","src/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.tsx"],"sourcesContent":["/**\n * Utility function to check if an array contains File objects\n */\nexport function isFileArray(array: any): array is File[] {\n // Check if it's an array\n if (!Array.isArray(array)) {\n return false;\n }\n\n // Check if all elements in the array are instances of File\n return array.every(item => item instanceof File);\n}\n","// @ts-nocheck\nimport { Guid, UdpFormSubmissionStatus } from '../../types';\nimport { createFormData } from '../../../../../udp-utilities/api/makeApiCall/makeApiCall';\nimport { isFileArray } from './formUtils';\nimport { UdpFormSubmission } from '../classes/UdpFormSubmission';\nimport { IFormSubmissionHandler } from './IFormSubmissionHandler';\n\n\n\n// TODO: This handler needs to be updated with new public form logic.\n// ******* THIS HANDLER IS OUTDATED, AND WILL LIKELY NOT WORK *********\n\n/**\n * Handles submission for *public* (unauthenticated) forms.\n */\nexport class PublicFormSubmissionHandler implements IFormSubmissionHandler {\n constructor(\n formId?: Guid,\n formVersion?: number,\n tenantId?: Guid\n ) {}\n\n public async fetchAndPopulateUdpFormSubmissionObj(submission: UdpFormSubmission) {\n return submission\n }\n\n\n private objectToFormData(obj: Record<string, any>): FormData {\n const files: File[] = [];\n const formObj: Record<string, any> = {};\n\n for (const key in obj) {\n let value = obj[key]?.value ?? obj[key];\n\n if (isFileArray(value)) {\n if (value.length > 0) {\n files.push(value[0]);\n formObj[key] = value[0].name;\n }\n } else if (Array.isArray(value)) {\n formObj[key] = value.map(v => (typeof v === 'string' ? v : v.value)).join(',');\n } else if (value !== null && value !== undefined && value !== '') {\n formObj[key] = value;\n }\n }\n\n return createFormData({\n formData: JSON.stringify(formObj),\n formFiles: files[0] || null\n });\n }\n\n async saveCurrentFormSubmissionState(values: Record<string, any>, submission: UdpFormSubmission): Promise<UdpFormSubmission> {\n return submission\n }\n\n\n async saveFormSubmissionComments(values: Record<string, any>, submission: UdpFormSubmission): Promise<UdpFormSubmission> {\n return submission\n }\n\n async createNewLinkedFollowUpFormSubmission(submission: UdpFormSubmission): Promise<UdpFormSubmission> {\n return submission\n }\n\n async finalizeFormSubmissionState(values: Record<string, any>, submission: UdpFormSubmission) : Promise<UdpFormSubmission> {\n try {\n // const formData = this.objectToFormData(values);\n\n // await makeApiCall(\n // 'POST',\n // `${ConfigService.productV1ApiUrl}/UdpForm/${this.formId}/${this.formVersion}/submit/public?tenantId=${this.tenantId}`,\n // formData,\n // true\n // );\n\n return submission;\n } catch (error) {\n console.error('Public form submission failed:', error);\n throw error\n }\n }\n}\n","import { UdpFormSubmissionStatus } from '../types';\nimport { Guid, UdpTag } from 'src/global/types';\nimport { createFormData } from '../../../../../udp-utilities/api/makeApiCall/makeApiCall';\nimport { isFileArray } from '../form-submission-handler/formUtils';\n\n\nexport class UdpFormSubmission {\n id: Guid | null = null;\n formId: Guid | null = null;\n formVersion: number | null = null;\n data: any | null = {};\n unityUserId: Guid | null = null;\n clusterId: number | null = null;\n userDisplayName: string | null = '';\n status: UdpFormSubmissionStatus | null = null;\n businessObjectKey: string | null = '';\n udpTags: UdpTag[] | null = [];\n form: any | null = null;\n initialCreatedOn: Date | null = null;\n lastModifiedOn: Date | null = null;\n submittedOn: Date | null = null;\n generic1: string | null = null;\n generic2: string | null = null;\n generic3: string | null = null;\n userEmail: string | null = null;\n\n constructor(initialData: Partial<UdpFormSubmission> = {}) {\n Object.assign(this, initialData);\n }\n\n // =============================\n // Form Data Processing\n // =============================\n\n public processSubmissionIntoFormDataWithoutValues(\n status: UdpFormSubmissionStatus,\n ): FormData {\n const statusValue = this.resolveSubmissionStatus(status);\n const baseData = this.buildBaseSubmissionData(statusValue);\n\n const formData = createFormData(baseData);\n\n formData.append('Data', JSON.stringify(this.data));\n\n return formData;\n }\n\n\n\n public processSubmissionIntoFormData(\n formInputValuesAndMetadata: Record<\n string,\n Record<\n string,\n { value: any; comments?: any[]; files?: File[]; metadata?: Record<string, any> }\n >\n >,\n status: UdpFormSubmissionStatus,\n ): FormData {\n const statusValue = this.resolveSubmissionStatus(status);\n const baseData = this.buildBaseSubmissionData(statusValue);\n\n const { cleanedData, files } = this.extractCleanedDataAndFiles(formInputValuesAndMetadata);\n const formData = createFormData(baseData);\n\n files.forEach(file => formData.append('FormFiles', file));\n\n const submissionDataObject = {\n submissionResponseData: cleanedData,\n submissionMetadata: this.data.submissionMetadata || null\n }\n\n formData.append('Data', JSON.stringify(submissionDataObject));\n\n return formData;\n }\n\n private resolveSubmissionStatus(status: UdpFormSubmissionStatus): number {\n if (status === 'submitted') return 2;\n if (status === 'in-progress') return 1;\n return typeof status === 'number' ? status : 1;\n }\n\n private buildBaseSubmissionData(statusValue: number): Record<string, any> {\n const baseData: Record<string, any> = {\n FormId: this.formId,\n FormVersion: this.formVersion.toString(),\n Status: statusValue.toString(),\n };\n\n if (this.id) {\n baseData.Id = this.id;\n }\n\n if (this.initialCreatedOn) {\n baseData.InitialCreatedOn = this.initialCreatedOn\n } else {\n baseData.InitialCreatedOn = new Date().toISOString();\n }\n\n if (this.lastModifiedOn) {\n baseData.LastModifiedOn = this.lastModifiedOn\n } else {\n baseData.LastModifiedOn = new Date().toISOString();\n }\n\n if (this.submittedOn) {\n baseData.submittedOn = this.submittedOn\n }\n\n if (this.generic1) {\n baseData.generic1 = this.generic1.toString();\n }\n\n if (this.generic2) {\n baseData.generic2 = this.generic2.toString();\n }\n\n if (this.generic3) {\n baseData.generic3 = this.generic3.toString();\n }\n\n return baseData;\n }\n\n private extractCleanedDataAndFiles(data: Record<string, any>) {\n const files: File[] = [];\n const cleanedData: Record<\n string,\n Record<string, { value: any; comments: any[]; metadata?: Record<string, any> }>\n > = {};\n\n for (const sectionName in data) {\n cleanedData[sectionName] = {};\n\n for (const questionName in data[sectionName]) {\n const entry = data[sectionName][questionName];\n const { value, fieldFiles } = this.extractValueAndFiles(entry);\n if (fieldFiles) files.push(...fieldFiles);\n\n const comments = this.processComments(entry.comments);\n const metadata = this.processMetadata(entry.metadata);\n\n cleanedData[sectionName][questionName] = { value, comments, ...(metadata && { metadata }) };\n }\n }\n\n return { cleanedData, files };\n }\n\n // =============================\n // Form Data Processing Private Helpers\n // =============================\n\n private extractValueAndFiles(entry: any): { value: any; fieldFiles?: File[] } {\n let rawValue = entry?.value?.files ? entry.value.value : entry?.value;\n const fieldFiles = entry?.value?.files;\n\n if (fieldFiles && Array.isArray(fieldFiles)) {\n return {\n value: typeof rawValue === 'string' && rawValue.trim() !== '' ? rawValue : '',\n fieldFiles,\n };\n }\n\n if (isFileArray(rawValue)) {\n return {\n value: rawValue.length > 0 ? rawValue.map(f => f.name).join(',') : '',\n fieldFiles: rawValue,\n };\n }\n\n if (rawValue instanceof File) {\n return { value: rawValue.name, fieldFiles: [rawValue] };\n }\n\n if (Array.isArray(rawValue)) {\n return { value: rawValue.map(i => (typeof i === 'string' ? i : i?.value)).join(',') };\n }\n\n return { value: rawValue };\n }\n\n private processComments(comments: any[] | undefined) {\n return comments?.map(comment => ({ ...comment })) ?? [];\n }\n\n private processMetadata(metadata: Record<string, any> | undefined) {\n return metadata && Object.keys(metadata).length > 0 ? { ...metadata } : undefined;\n }\n}\n\n\n\n","import { UdpFormSubmissionStatus } from '../types';\nimport { makeApiCall } from '../../../../../udp-utilities/api/makeApiCall/makeApiCall';\nimport { SearchBuilder, SearchOperators } from '../../../../../udp-utilities/search';\nimport { ConfigService } from 'src/udp-utilities/api-config';\nimport { UdpFormSubmission } from '../classes/UdpFormSubmission';\nimport { IFormSubmissionHandler } from './IFormSubmissionHandler';\n\n\n\n/**\n * Handles CRUD and submission operations for private UdpFormSubmission records.\n */\nexport class PrivateFormSubmissionHandler implements IFormSubmissionHandler {\n\n // =============================\n // Fetch Methods\n // =============================\n\n /**\n * Fetch and refresh an existing UdpFormSubmission instance.\n *\n * Attempts to load the latest server representation of the provided\n * udpFormSubmission. Uses generic fields (generic1/2/3) when present to\n * disambiguate records, otherwise falls back to a simple id lookup.\n *\n * @param udpFormSubmission - local UdpFormSubmission object to refresh\n * @returns a new UdpFormSubmission merged with server data, or the original on failure\n * @throws network or unexpected errors\n */\n async fetchAndPopulateUdpFormSubmissionObj(udpFormSubmission: UdpFormSubmission): Promise<UdpFormSubmission> {\n if (!udpFormSubmission?.id) {\n console.warn('Cannot fetch form submission without an ID.');\n return udpFormSubmission;\n }\n\n try {\n const { id, generic1, generic2, generic3 } = udpFormSubmission as any;\n let response: UdpFormSubmission | null = null;\n\n // Prefer the generics-aware lookup if any generic values are present\n if (generic1 || generic2 || generic3) {\n response = await this.getFormSubmissionByIdAndGenerics(\n id,\n generic1 || undefined,\n generic2 || undefined,\n generic3 || undefined\n );\n } else {\n response = await this.getFormSubmissionById(id);\n }\n\n if (!response) {\n console.warn('No form submission found for the provided object.');\n return udpFormSubmission;\n }\n\n return new UdpFormSubmission({ ...udpFormSubmission, ...response });\n } catch (error) {\n console.error('Error fetching form submission:', error);\n throw error;\n }\n }\n\n /** \n * Internal helper — lookup a form submission by its unique id.\n *\n * Performs a minimal search (page size 1) for the given id and returns\n * the first match or null if not found. Logs and returns null on errors.\n *\n * @param id - submission id to query\n * @returns UdpFormSubmission or null\n */\n private async getFormSubmissionById(id: string): Promise<UdpFormSubmission | null> {\n try {\n const search = new SearchBuilder(1, 1)\n .addFilter('id', id, SearchOperators.EQUALS)\n\n const response = await search.execute('UdpFormSubmission');\n return response?.pageList?.[0] as UdpFormSubmission || null;\n } catch (error) {\n console.error('Error fetching form submission by ID:', error);\n return null;\n }\n }\n\n /**\n * Internal helper — lookup a form submission by id and generic fields.\n *\n * Adds optional equality filters for generic1/generic2/generic3 when provided,\n * then executes a minimal search and returns the first match or null.\n *\n * @param id - submission id to query\n * @param generic1 - optional generic1 value to filter by\n * @param generic2 - optional generic2 value to filter by\n * @param generic3 - optional generic3 value to filter by\n * @returns UdpFormSubmission or null\n */\n private async getFormSubmissionByIdAndGenerics(id: string, generic1: string, generic2: string, generic3: string): Promise<UdpFormSubmission | null> {\n try {\n const search = new SearchBuilder(1, 1)\n .addFilter('id', id, SearchOperators.EQUALS);\n\n if (generic1) {\n search.addFilter('generic1', generic1, SearchOperators.EQUALS);\n }\n if (generic2) {\n search.addFilter('generic2', generic2, SearchOperators.EQUALS);\n }\n if (generic3) {\n search.addFilter('generic3', generic3, SearchOperators.EQUALS);\n }\n\n const response = await search.execute('UdpFormSubmission');\n return response?.pageList?.[0] as UdpFormSubmission || null;\n } catch (error) {\n console.error('Error fetching form submission by ID:', error);\n return null;\n }\n }\n\n\n // =============================\n // Save & Submit Methods\n // =============================\n\n /**\n * Create a new follow-up form submission that is linked to an existing submission.\n *\n * Saves a new UdpFormSubmission in 'in-progress' state without populating field values\n * (only metadata/links), and returns the created submission object.\n *\n * @param udpFormSubmission - template/parent submission to base the new follow-up on\n * @returns newly created UdpFormSubmission\n */\n async createNewLinkedFollowUpFormSubmission(udpFormSubmission): Promise<UdpFormSubmission> {\n const formData = await this.saveFormDataWithoutValues(udpFormSubmission, 'in-progress');\n return formData\n }\n\n /**\n * Persist submission metadata (without full field values).\n *\n * Converts provided udpFormSubmission into formData excluding field values,\n * determines whether to POST or PUT based on presence of id, and merges the\n * server response into a new UdpFormSubmission instance.\n *\n * @param udpFormSubmission - the submission to save\n * @param status - desired status to save (e.g., 'in-progress' or 'submitted')\n * @returns saved UdpFormSubmission (refetches if server returns empty PUT response)\n */\n private async saveFormDataWithoutValues(udpFormSubmission: UdpFormSubmission, status: UdpFormSubmissionStatus): Promise<UdpFormSubmission> {\n try {\n const formData = udpFormSubmission.processSubmissionIntoFormDataWithoutValues(status);\n const { method, url } = this.getApiRequestInfo(udpFormSubmission);\n\n const response = await makeApiCall(method, url, formData, true);\n\n // PUT returns an empty string; refetch to refresh local data\n if (response === '') {\n return await this.fetchAndPopulateUdpFormSubmissionObj(udpFormSubmission);\n }\n\n return new UdpFormSubmission({ ...udpFormSubmission, ...response });\n } catch (error) {\n console.error('Failed to save form udpFormSubmission:', error);\n throw error;\n }\n }\n\n /**\n * Save only comment-related fields for a submission.\n *\n * Delegates to the lower-level saveCommentsToDB helper to persist comment changes\n * while preserving existing submission state and metadata.\n *\n * @param values - comment values to persist\n * @param udpFormSubmission - target submission object\n * @returns updated UdpFormSubmission\n */\n async saveFormSubmissionComments(values: Record<string, any>, udpFormSubmission: UdpFormSubmission): Promise<UdpFormSubmission> {\n return this.saveCommentsToDB(values, udpFormSubmission)\n }\n\n\n /**\n * Save the current state of the form's data as a draft ('in-progress').\n *\n * Converts the provided values into the required form payload and persists them.\n * Determines POST vs PUT automatically and refreshes local object on empty PUT responses.\n *\n * @param values - field data to save\n * @param udpFormSubmission - submission being updated\n * @returns updated UdpFormSubmission\n */\n async saveCurrentFormSubmissionState(values: Record<string, any>, udpFormSubmission: UdpFormSubmission): Promise<UdpFormSubmission> {\n return this.saveSubmissionToDB(values, udpFormSubmission, 'in-progress')\n }\n\n\n /** \n * Finalize and submit the form (set state to 'submitted').\n *\n * Persists the provided values and marks the submission as 'submitted'.\n *\n * @param values - final form values to submit\n * @param udpFormSubmission - submission being finalized\n * @returns updated UdpFormSubmission\n */\n async finalizeFormSubmissionState(values: Record<string, any>, udpFormSubmission: UdpFormSubmission): Promise<UdpFormSubmission> {\n return this.saveSubmissionToDB(values, udpFormSubmission, 'submitted');\n }\n\n // =============================\n // Helpers\n // =============================\n\n /** \n * Determine correct HTTP verb and target URL for saving a UdpFormSubmission.\n *\n * Uses productV1ApiUrl from ConfigService and returns POST for new submissions\n * (no id) or PUT with the resource id for existing submissions.\n *\n * @param udpFormSubmission - submission to be saved\n * @returns object with method ('POST'|'PUT') and full url\n */\n private getApiRequestInfo(udpFormSubmission: UdpFormSubmission): { method: 'POST' | 'PUT'; url: string } {\n const baseUrl = `${ConfigService.productV1ApiUrl}/UdpFormSubmission`;\n\n return udpFormSubmission.id\n ? { method: 'PUT', url: `${baseUrl}/${udpFormSubmission.id}` }\n : { method: 'POST', url: baseUrl };\n }\n\n /**\n * Persist form values and metadata to the backend.\n *\n * Builds the form payload using udpFormSubmission.processSubmissionIntoFormData,\n * resolves POST vs PUT using getApiRequestInfo, and returns a merged UdpFormSubmission.\n * If the server returns an empty string for PUT, the method refetches the record.\n *\n * @param values - field values to be saved\n * @param udpFormSubmission - submission being updated\n * @param status - status to persist (e.g., 'in-progress' | 'submitted')\n * @returns updated UdpFormSubmission\n */\n private async saveSubmissionToDB(values: Record<string, any>, udpFormSubmission: UdpFormSubmission, status: UdpFormSubmissionStatus): Promise<UdpFormSubmission> {\n try {\n const formData = udpFormSubmission.processSubmissionIntoFormData(values, status);\n const { method, url } = this.getApiRequestInfo(udpFormSubmission);\n\n const response = await makeApiCall(method, url, formData, true);\n\n // PUT returns an empty string; refetch to refresh local data\n if (response === '') {\n return await this.fetchAndPopulateUdpFormSubmissionObj(udpFormSubmission);\n }\n\n return new UdpFormSubmission({ ...udpFormSubmission, ...response });\n } catch (error) {\n console.error('Failed to save form udpFormSubmission:', error);\n throw error;\n }\n }\n\n /**\n * Persist only comment changes for an existing submission via PUT.\n *\n * Forces a PUT to the specific submission id, builds a form payload containing\n * the provided comment values, and returns the updated submission. If the API\n * returns an empty string (PUT shorthand), the method refetches the record.\n *\n * @param values - comment fields to persist\n * @param udpFormSubmission - target submission (must have id)\n * @returns updated UdpFormSubmission\n */\n private async saveCommentsToDB(values: Record<string, any>, udpFormSubmission: UdpFormSubmission): Promise<UdpFormSubmission> {\n try {\n const method = 'PUT';\n const status = udpFormSubmission.status || 2; // default to 'submitted' if status is null\n const url = `${ConfigService.productV1ApiUrl}/UdpFormSubmission/${udpFormSubmission.id}`;\n const formData = udpFormSubmission.processSubmissionIntoFormData(values, status);\n const response = await makeApiCall(method, url, formData, true);\n\n // PUT returns an empty string; refetch to refresh local data\n if (response === '') {\n return await this.fetchAndPopulateUdpFormSubmissionObj(udpFormSubmission);\n }\n\n return new UdpFormSubmission({ ...udpFormSubmission, ...response });\n } catch (error) {\n console.error('Failed to save form udpFormSubmission:', error);\n throw error;\n }\n }\n}\n\n","import { IFormSubmissionHandler } from './IFormSubmissionHandler';\nimport { PublicFormSubmissionHandler } from './PublicFormSubmissionHandler';\nimport { PrivateFormSubmissionHandler } from './PrivateFormSubmissionHandler';\nimport { Guid } from '../types';\n\n/**\n * Factory for creating form submission handlers.\n */\nexport class FormSubmissionHandlerFactory {\n static create(\n isPublic: boolean,\n userId?: Guid | null,\n formId?: Guid,\n version?: number,\n tenantId?: Guid,\n ): IFormSubmissionHandler {\n\n if (isPublic) {\n return new PublicFormSubmissionHandler(formId, version, tenantId);\n }\n\n if (!userId) {\n throw new Error('User ID is required for private forms');\n }\n\n return new PrivateFormSubmissionHandler();\n }\n}\n","import { Guid, StyleOverrides } from '../types';\nimport { UdpForm } from '../classes/UdpForm';\nimport { makeApiCall } from '../../../../../udp-utilities/api/makeApiCall/makeApiCall';\nimport { ConfigService } from 'src/udp-utilities/api-config';\n\n/**\n * UDP Form handler (new UdpFormSubmission endpoint)\n */\nexport class UdpFormHandler {\n constructor(public tenantId?: Guid) {}\n\n // =============================\n // Fetching Form\n // =============================\n\n async getFormByFormId(formId): Promise<UdpForm> {\n const formData: UdpForm = await makeApiCall(\n 'GET',\n `${ConfigService.productV1ApiUrl}/UdpForm/${formId}/describe`,\n );\n\n if (formData.styleOverrides && typeof formData.styleOverrides === 'string') {\n formData.styleOverrides = JSON.parse(formData.styleOverrides) as StyleOverrides;\n }\n\n return formData;\n }\n\n async getFormByFormIdAndFormVersion(formId, formVersion): Promise<UdpForm> {\n const formData: UdpForm = await makeApiCall(\n 'GET',\n `${ConfigService.productV1ApiUrl}/UdpForm/${formId}/${formVersion}/describe`\n );\n\n if (formData.styleOverrides && typeof formData.styleOverrides === 'string') {\n formData.styleOverrides = JSON.parse(formData.styleOverrides) as StyleOverrides;\n }\n\n return formData;\n }\n}\n\n\n","import { StyleOverrides, UdpFormSection, UdpFormQuestion } from '../types';\nimport { Guid } from 'src/global/types';\nimport { UdpFormsTypeEnum } from '../enums';\n\nexport class UdpForm {\n id?: Guid;\n version?: number;\n type?: UdpFormsTypeEnum;\n isPrivate?: boolean;\n name?: string;\n description?: string;\n tenantId?: Guid;\n clusterId?: number;\n styleOverrides?: StyleOverrides;\n createdOn?: Date;\n formProperties?: any;\n udpFormUdpFormSection?: UdpFormSection[];\n formQuestions?: UdpFormQuestion[];\n\n constructor(initialData?: Partial<UdpForm>) {\n if (!initialData) return;\n\n Object.assign(this, initialData);\n }\n}\n","import { Component, Prop, State, Element, h } from '@stencil/core';\nimport { throttle } from 'lodash';\nimport { Guid } from 'src/global/types';\nimport { UdpFormsFieldTypeEnum } from '../utils/enums';\nimport { getCurrentTenantId } from 'src/udp-utilities/tenant/tenantUtils';\nimport { fetchLatestForms } from '../udp-forms-list/udp-form-api-utils';\nimport { UdpFormsTypeEnum, UdpFormsPageIdEnum } from '../utils/enums';\nimport { buildEmptyInitialValues } from '../utils/utils';\nimport { IFormSubmissionHandler } from '../utils/form-submission-handler/IFormSubmissionHandler';\nimport { FormSubmissionHandlerFactory } from '../utils/form-submission-handler/FormSubmissionHandlerFactory';\nimport { UdpFormHandler } from '../utils/form-handler/UdpFormHandler';\nimport { UdpFormSubmission } from '../utils/classes/UdpFormSubmission';\nimport { UdpForm } from '../utils/classes/UdpForm';\nimport { v4 as uuidv4 } from 'uuid';\n\n@Component({\n tag: 'udp-forms-renderer',\n shadow: true,\n})\nexport class UdpFormsRenderer {\n @Element() el: HTMLElement;\n \n @Prop() formId?: Guid | null;\n @Prop() version?: number | null;\n @Prop() submissionId?: Guid | null;\n @Prop() triggerAction: (actionId: Guid, params: Object) => void;\n @Prop() isPublic: boolean = false;\n @Prop() callbackUrl: string;\n @Prop() getUserCallback?: Function;\n @Prop() enqueueSnackbar: Function;\n @Prop() closeSnackbar: Function;\n @Prop() autoSaveDelay: number = 2000; // Debounce delay for auto-save in milliseconds (currently disabled)\n @Prop() history: any;\n @Prop() generic1: any; // generic prop for application specific logic\n @Prop() generic2: any; // generic prop for application specific logic\n @Prop() generic3: any; // generic prop for application specific logic\n \n \n @State() initialValues: { [name: string]: any } = {};\n @State() submitSuccessful: boolean = false;\n @State() currentFormData: { [name: string]: any } = {};\n @State() isLoading: boolean = false;\n @State() isSaving: boolean = false;\n @State() isSubmitted: boolean = false;\n @State() saveErrorMessage: string | null = null;\n @State() dynamicSections: any[] = [];\n @State() isUpdatingSections: boolean = false;\n @State() reRenderKey: number = 0;\n @State() isFormDirty: boolean = false;\n @State() isUserUpdatedSections: boolean = false;\n\n @State() sideSheetFollowUpFormsList: any[] = []; // used for follow up forms. \n @State() followUpSideSheetTotalItems: number = 0; // used for follow up forms. \n @State() isFollowUpFormsSideSheetOpen: boolean = false; // used for follow up forms.\n @State() followUpSideSheetListPageNumber: number = 1; // used for follow up forms.\n\n private FOLLOW_UP_SIDE_SHEET_PAGE_SIZE = 5;\n private readonly componentMap = {\n history: 'history',\n listItemData: 'listItemData',\n handleLaunchFollowUpForm: 'handleLaunchFollowUpForm'\n };\n\n\n private tenantId: Guid = getCurrentTenantId();\n // private debouncedAutoSave: (values: { [name: string]: any }) => void; // Kept for future use (currently disabled)\n private debouncedManualSave: (values: { [name: string]: any }) => void; // Debounced manual save (5 seconds)\n\n // info for the current logged in user on the client side\n private clientUserInfo: { id: string | null; displayName: string | null; email: string | null } = {\n id: null,\n displayName: null,\n email: null,\n }; \n \n private udpForm: UdpForm; // udpForm data object \n private udpFormSubmission: UdpFormSubmission; // udpFormSubmission data object \n\n private formHandler: UdpFormHandler // hanlder for API interactions with the UdpForm domain\n private formSubmissionHandler: IFormSubmissionHandler; // handler for API interactions with the UdpFormSubmission domain\n\n private followUpParentSectionKey: string = ''; // used for follow up forms.\n private followUpParentQuestionKey: string = ''; // used for follow up forms.\n\n componentDidLoad() {\n if (this.el)\n {\n this.el.addEventListener(\n 'questionCommentAction',\n async (e: CustomEvent<{ type: string; questionIdentifierKey: string, commentId: string }>) => this.handleQuestionCommentLiveCRUD(e)\n );\n // Listen for launchFollowUpFormSideSheet event from udp-question\n this.el.addEventListener(\n 'launchFollowUpFormSideSheet',\n (e: CustomEvent<any>) => this.handleLaunchFollowUpFormSideSheet(e),\n );\n\n this.el.addEventListener('formDirtyChange', (e: CustomEvent<boolean>) => {\n this.isFormDirty = e.detail;\n });\n }\n\n }\n\n\n private handleLaunchFollowUpFormSideSheet = async (e) => {\n try {\n await this.performBackgroundSaveAndUpdateLocalSubmissionState(this.udpFormSubmission.data.submissionResponseData);\n this.followUpParentSectionKey = e.detail.sectionKey;\n this.followUpParentQuestionKey = e.detail.questionKey;\n await this.loadFollowUpForms(this.followUpParentSectionKey, this.followUpParentQuestionKey);\n this.isFollowUpFormsSideSheetOpen = true;\n } catch (error) {\n console.error('Error loading follow-up forms:', error);\n }\n };\n\n async componentWillLoad() {\n this.isLoading = true;\n\n try {\n // Get client user info if available\n const user = this.getUserCallback?.();\n if (user) {\n this.clientUserInfo.id = user.id || null;\n this.clientUserInfo.displayName = user.name || null;\n this.clientUserInfo.email = user.email || null;\n } \n\n this.formSubmissionHandler = FormSubmissionHandlerFactory.create(this.isPublic, this.clientUserInfo.id)\n this.udpFormSubmission = new UdpFormSubmission({id: this.submissionId, formId: this.formId, formVersion: this.version, unityUserId: this.clientUserInfo.id, generic1: this.generic1, generic2: this.generic2, generic3: this.generic3});\n\n // fetch existing submission from Udp.FormSubmission if submissionId is provided \n // take exisitng object, and populate with db values, and return new obj with updated values\n if (this.submissionId) {\n this.udpFormSubmission = await this.formSubmissionHandler.fetchAndPopulateUdpFormSubmissionObj(this.udpFormSubmission); \n } \n\n // get the master form from Udp.Form\n let formId;\n let formVersion;\n\n if (this.submissionId) {\n formId = this.udpFormSubmission.formId;\n formVersion = this.udpFormSubmission.formVersion;\n } else if (this.formId && this.version) {\n formId = this.formId;\n formVersion = this.version;\n }\n \n this.formHandler = new UdpFormHandler(this.tenantId);\n const formData = await this.formHandler.getFormByFormIdAndFormVersion(formId, formVersion);\n this.udpForm = new UdpForm(formData);\n this.initialValues = buildEmptyInitialValues(this.udpForm);\n\n // if there's existing data, update the form's state\n if (this.udpFormSubmission.data.submissionResponseData) {\n this.initialValues = { ...this.udpFormSubmission.data.submissionResponseData };\n\n if (this.udpFormSubmission.status === 2 || this.udpFormSubmission.status === 'submitted') {\n this.isSubmitted = true;\n }\n }\n\n this.initializeDynamicSections(); // process the master form into dynamic sections \n \n // After sections/questions are prepared, seed initial values from URL for ALL questions,\n // with saved values taking precedence, and paragraph defaults as a fallback.\n this.applyUrlInitialValuesForAll();\n\n // Set up throttled manual save function (5 seconds) - fires immediately, then throttles\n this.debouncedManualSave = throttle(\n async (values: { [name: string]: any }) => {\n await this.handleManualSave(values);\n },\n 2000,\n { leading: true, trailing: false },\n );\n\n // Set up debounced auto-save function (currently disabled)\n // this.debouncedAutoSave = debounce(async (values: { [name: string]: any }) => {\n // // await this.handleAutoSave(values); // Disabled for now\n // }, this.autoSaveDelay);\n } catch (error) {\n console.error('Error failed to load form in the form renderer:', error);\n } finally {\n this.isLoading = false;\n }\n }\n\n\n // build dynamic sections based on the\n private initializeDynamicSections() {\n const tempDynamicSection: any[] = [];\n const sortedSections = structuredClone(this.udpForm.udpFormUdpFormSection).sort((a, b) => a.order - b.order);\n\n for (const section of sortedSections) {\n section.sectionProperties = JSON.parse(section.sectionProperties || {});\n const repeatGroupKeys = this.findRepeatGroupKeys(section.name, this.initialValues);\n section.isOriginalSection = true;\n section.sectionPositionSuffix = 1; // default position\n\n // always add the original section into dynamic sections\n tempDynamicSection.push({\n ...structuredClone(section),\n // dynamicSectionName: section.name,\n formQuestions: structuredClone(this.udpForm.formQuestions)\n .filter(q => q.formSectionId === section.id)\n .sort((a, b) => a.questionOrder - b.questionOrder)\n .map(q => ({ ...q, questionIdentifierKey: `${section.name}.${q.name}` , isShowCommentInput: true})),\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(this.udpForm.formQuestions)\n .filter(q => q.formSectionId === section.id)\n .sort((a, b) => a.questionOrder - b.questionOrder)\n .map(q => ({ ...q, questionIdentifierKey: `${section.name}_${repeatKey}.${q.name}` , isShowCommentInput: true})),\n isOriginalSection: false,\n sectionPositionSuffix: repeatKey,\n };\n tempDynamicSection.push(clonedSection);\n }\n }\n }\n\n this.dynamicSections = tempDynamicSection;\n }\n\n private 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 * Duplicate a repeatable section\n */\n private duplicateRepeatableSection = (index: number) => {\n if (this.isSubmitted || this.isUpdatingSections) return;\n this.isUpdatingSections = true;\n this.isLoading = true;\n\n try {\n const sectionToClone = this.dynamicSections[index];\n if (!sectionToClone) return;\n\n const cloningSectionName = sectionToClone.name;\n\n // Find existing repeat group indices\n const repeatKeys = this.findRepeatGroupKeys(cloningSectionName, this.initialValues);\n const nextRepeatIndex = repeatKeys.length > 0 ? Math.max(...repeatKeys) + 1 : 2;\n\n const clonedSection = {\n ...structuredClone(sectionToClone),\n formQuestions: sectionToClone.formQuestions.map(q => {\n const newQuestionObj = structuredClone(q);\n newQuestionObj.questionIdentifierKey = `${cloningSectionName}_${nextRepeatIndex}.${q.name}`;\n return newQuestionObj;\n }),\n isOriginalSection: false,\n sectionPositionSuffix: nextRepeatIndex,\n };\n\n // Find the last index of this section group\n let insertAtIndex = index;\n for (let i = index + 1; i < this.dynamicSections.length; i++) {\n const s = this.dynamicSections[i];\n if (s.name === cloningSectionName) {\n insertAtIndex = i;\n } else {\n break;\n }\n }\n\n // Insert after the last repeat of the section group\n this.dynamicSections = [\n ...this.dynamicSections.slice(0, insertAtIndex + 1),\n clonedSection,\n ...this.dynamicSections.slice(insertAtIndex + 1),\n ];\n\n // Create new initial values structure\n const newInitialValues = structuredClone(this.udpFormSubmission.data.submissionResponseData);\n\n clonedSection.formQuestions.forEach(q => {\n const newSectionNameWithSuffix = `${cloningSectionName}_${nextRepeatIndex}`;\n const newQuestionName = q.name;\n\n if (!newInitialValues[newSectionNameWithSuffix]) {\n newInitialValues[newSectionNameWithSuffix] = {};\n }\n\n // Preserve only Paragraph values from the source section; clear others\n let value = '';\n if (q.fieldTypeId === UdpFormsFieldTypeEnum.Paragraph) {\n // Determine source section key (the section being duplicated)\n const sourceSectionKey = sectionToClone.isOriginalSection\n ? cloningSectionName\n : `${cloningSectionName}_${sectionToClone.sectionPositionSuffix}`;\n const sourceVal = this.udpFormSubmission.data.submissionResponseData?.[sourceSectionKey]?.[newQuestionName]?.value;\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 const paragraphDefault = fieldProps?.paragraphText ?? '';\n value = sourceVal ?? paragraphDefault;\n }\n\n newInitialValues[newSectionNameWithSuffix][newQuestionName] = { value, comments: [], metadata : {}};\n });\n // This will trigger a complete form re-render\n this.initialValues = {...newInitialValues};\n this.udpFormSubmission.data.submissionResponseData = {...newInitialValues};\n this.triggerFormRerender();\n } finally {\n this.isUpdatingSections = false;\n this.isLoading = false;\n this.isUserUpdatedSections = true;\n }\n };\n\n /**\n * Delete a repeatable section\n */\n private deleteRepeatableSection = (index: number) => {\n if (this.isSubmitted) return;\n\n const sectionToDelete = this.dynamicSections[index];\n if (!sectionToDelete || sectionToDelete.isOriginalSection) return;\n\n this.isUpdatingSections = true;\n this.isLoading = true;\n try {\n const deleteSectionName = sectionToDelete.name;\n const deleteSuffix = sectionToDelete.sectionPositionSuffix;\n const sectionKeyToDelete = `${deleteSectionName}_${deleteSuffix}`;\n\n const newInitialValues = { ...this.udpFormSubmission.data.submissionResponseData };\n delete newInitialValues[sectionKeyToDelete];\n\n // Remove the section from dynamicSections\n const updatedSections = structuredClone(this.dynamicSections);\n updatedSections.splice(index, 1);\n\n // Shift all later repeatable sections backward by 1\n updatedSections.forEach(section => {\n if (\n section.name !== deleteSectionName ||\n section.isOriginalSection ||\n section.sectionPositionSuffix <= deleteSuffix\n ) {\n return;\n }\n\n const oldSuffix = section.sectionPositionSuffix;\n const oldSectionKey = `${deleteSectionName}_${oldSuffix}`;\n const newSuffix = oldSuffix - 1;\n const newSectionKey = `${deleteSectionName}_${newSuffix}`;\n\n // Update suffix\n section.sectionPositionSuffix = newSuffix;\n\n // Update questionIdentifierKeys\n section.formQuestions = section.formQuestions.map(q => {\n const newSectionQuestion = structuredClone(q);\n newSectionQuestion.questionIdentifierKey = `${newSectionKey}.${q.name}`;\n return newSectionQuestion;\n });\n\n // Move data in initial values\n if (newInitialValues[oldSectionKey]) {\n newInitialValues[newSectionKey] = structuredClone(newInitialValues[oldSectionKey]);\n delete newInitialValues[oldSectionKey];\n }\n });\n\n this.dynamicSections = updatedSections;\n this.initialValues = {...newInitialValues};\n this.udpFormSubmission.data.submissionResponseData = {...newInitialValues};\n this.triggerFormRerender();\n } finally {\n this.isUpdatingSections = false;\n this.isLoading = false;\n this.isUserUpdatedSections = true;\n }\n };\n\n // Build initial values from URL for ALL fields, but do NOT override saved values.\n // For Paragraph, also fall back to the builder's default text when nothing else provided.\n private applyUrlInitialValuesForAll() {\n if (!Array.isArray(this.dynamicSections)) return;\n\n const urlParams =\n typeof window !== 'undefined' ? new URLSearchParams(window.location.search) : null;\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 if (urlParams) {\n this.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: string | null = null;\n for (const c of candidates) {\n urlVal = urlParams.get(c);\n if (urlVal !== null) break;\n }\n if (urlVal !== null) {\n if (!urlValuesNested[sectionKey]) urlValuesNested[sectionKey] = {};\n urlValuesNested[sectionKey][q.name] = { value: urlVal, comments: [] };\n }\n });\n });\n }\n\n // 2) Merge with saved values (this.initialValues) taking precedence\n const merged: { [sectionKey: string]: { [qName: string]: { value: any; comments: any[] } } } =\n structuredClone(this.initialValues) || {};\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 this.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 this.initialValues = merged;\n this.udpFormSubmission.data.submissionResponseData = { ...merged } as any;\n }\n\n private async handleSubmit(values: { [name: string]: any }) {\n this.isLoading = true\n try {\n this.udpFormSubmission = await this.formSubmissionHandler.finalizeFormSubmissionState(values, this.udpFormSubmission);\n this.submitSuccessful = true;\n } catch (error) {\n this.enqueueSnackbar('There was an error submitting this form', {\n variant: 'error',\n anchorOrigin: { vertical: 'top', horizontal: 'center' },\n });\n throw error;\n } finally {\n this.isLoading = false \n }\n }\n\n\n /**\n * Auto save (background save)\n */\n private performBackgroundSaveAndUpdateLocalSubmissionState = async (values: { [name: string]: any }) => {\n this.saveErrorMessage = null;\n try {\n const updatedUdpFormSubmission = await this.formSubmissionHandler.saveCurrentFormSubmissionState(values, this.udpFormSubmission);\n this.udpFormSubmission = updatedUdpFormSubmission\n this.initialValues = { ...(updatedUdpFormSubmission.data?.submissionResponseData || {}) };\n if (!new URLSearchParams(window.location.search).has('udpf_submissionId')) {\n // replace the current entry's query string with udpf_submissionId without needing to know the path\n this.replaceUrlWithSubmissionId(updatedUdpFormSubmission.id);\n }\n } catch (error) {\n this.saveErrorMessage = 'Failed to save form data';\n } finally {\n this.isSaving = false;\n this.isUserUpdatedSections = false;\n this.isFormDirty = false;\n }\n };\n\n private replaceUrlWithSubmissionId(submissionId: Guid) {\n // build a URL that preserves the current pathname + hash but replaces the query string\n const pathname = typeof window !== 'undefined' ? window.location.pathname : `/page/${UdpFormsPageIdEnum.FormRendererPageId}`;\n const hash = typeof window !== 'undefined' ? window.location.hash : '';\n const newUrl = `${pathname}?udpf_submissionId=${submissionId}${hash}`;\n\n const h = this.history as any;\n\n // Prefer history.replace when available, handle react-router v6 navigate function, fallback to push or native replaceState\n if (h) {\n if (typeof h.replace === 'function') {\n h.replace(newUrl);\n return;\n }\n if (typeof h.push === 'function') {\n h.push(newUrl);\n return;\n }\n // react-router v6 exposes a navigate function\n if (typeof h === 'function') {\n try {\n h(newUrl, { replace: true });\n } catch {\n h(newUrl);\n }\n return;\n }\n }\n\n if (typeof window !== 'undefined' && window.history && typeof window.history.replaceState === 'function') {\n window.history.replaceState({}, '', newUrl);\n } else if (typeof window !== 'undefined') {\n window.location.href = newUrl;\n }\n }\n\n\n\n/**\n * Handle the user saving or deleting a comment\n */\n private handleCommmentUpdate = async (values: { [name: string]: any }) => {\n this.isSaving = true;\n this.saveErrorMessage = null;\n\n try {\n const updatedUdpFormSubmission = await this.formSubmissionHandler.saveFormSubmissionComments(values, this.udpFormSubmission);\n this.udpFormSubmission = updatedUdpFormSubmission\n this.initialValues = { ...(updatedUdpFormSubmission.data?.submissionResponseData || {}) };\n this.enqueueSnackbar('Saved sucessfully.', {\n variant: 'success',\n anchorOrigin: { vertical: 'top', horizontal: 'center' },\n });\n } catch (error) {\n this.enqueueSnackbar('There was an error saving.', {\n variant: 'error',\n anchorOrigin: { vertical: 'top', horizontal: 'center' },\n });\n } finally {\n this.isSaving = false;\n this.isUserUpdatedSections = false;\n this.isFormDirty = false;\n }\n };\n\n\n\n /**\n * Manual save function - debounced to 5 seconds\n */\n private handleManualSave = async (values: { [name: string]: any }) => {\n // Only save if handler supports it and user is authenticated\n // if (!this.formSubmissionHandler.supportsAutoSave() || !this.userId || !this.formSubmissionHandler.saveCurrentFormSubmissionState) {\n // return;\n // }\n\n this.isSaving = true;\n this.saveErrorMessage = null;\n\n try {\n const updatedUdpFormSubmission = await this.formSubmissionHandler.saveCurrentFormSubmissionState(values, this.udpFormSubmission);\n this.udpFormSubmission = updatedUdpFormSubmission\n this.initialValues = { ...(updatedUdpFormSubmission.data?.submissionResponseData || {}) };\n if (!new URLSearchParams(window.location.search).has('udpf_submissionId')) {\n // replace the current entry's query string with udpf_submissionId without needing to know the path\n this.replaceUrlWithSubmissionId(updatedUdpFormSubmission.id);\n }\n this.enqueueSnackbar('Form saved successfully.', {\n variant: 'success',\n anchorOrigin: { vertical: 'top', horizontal: 'center' },\n });\n } catch (error) {\n this.enqueueSnackbar('There was an error saving this form', {\n variant: 'error',\n anchorOrigin: { vertical: 'top', horizontal: 'center' },\n });\n this.saveErrorMessage = 'Failed to save form data';\n } finally {\n this.isSaving = false;\n this.isUserUpdatedSections = false;\n this.isFormDirty = false;\n }\n };\n\n private async handleQuestionCommentLiveCRUD(e: CustomEvent<{type: string, questionIdentifierKey: string, commentId: string}>) {\n try {\n const { type, questionIdentifierKey, commentId } = e.detail;\n const [sectionName, questionName] = questionIdentifierKey.split('.');\n let newInitialValues = structuredClone(this.udpFormSubmission.data.submissionResponseData || {});\n \n // ensure structure exists WITHOUT overwriting existing data\n if (!newInitialValues[sectionName]) newInitialValues[sectionName] = {};\n\n if (!newInitialValues[sectionName][questionName]) {\n // create defaults but do not clobber any existing saved shape from submissionResponseData\n newInitialValues[sectionName][questionName] = {\n value: '',\n comments: [],\n draftComments: [],\n metadata: {},\n };\n } else {\n // ensure arrays/objects exist so later code can safely push/filter\n newInitialValues[sectionName][questionName].comments = newInitialValues[sectionName][questionName].comments ?? [];\n newInitialValues[sectionName][questionName].draftComments = newInitialValues[sectionName][questionName].draftComments ?? [];\n newInitialValues[sectionName][questionName].metadata = newInitialValues[sectionName][questionName].metadata ?? {};\n }\n\n // normalize draftComments to array if needed (back-compat)\n const maybeDraft = newInitialValues[sectionName][questionName].draftComments;\n if (maybeDraft && !Array.isArray(maybeDraft)) {\n newInitialValues[sectionName][questionName].draftComments = [maybeDraft];\n } else if (!maybeDraft) {\n newInitialValues[sectionName][questionName].draftComments = [];\n }\n\n const commentsArr = newInitialValues[sectionName][questionName].comments || [];\n const draftsArr = newInitialValues[sectionName][questionName].draftComments || [];\n\n switch (type) {\n case 'add': {\n const newDraft = {\n value: '',\n commentId: uuidv4(),\n isTempComment: true,\n timestamp: null,\n };\n // put new draft first so activeDraft === draftComments[0] matches UX\n newInitialValues[sectionName][questionName].draftComments = [newDraft, ...draftsArr];\n break;\n }\n\n case 'save': {\n // find draft by id\n const draftIdx = draftsArr.findIndex(d => d.commentId === commentId);\n if (draftIdx === -1) return;\n const draft = draftsArr[draftIdx];\n const saveTimestamp = draft.timestamp || new Date().toISOString();\n const savedComment = {\n ...draft,\n timestamp: saveTimestamp,\n editedTimestamp: new Date().toISOString(),\n userId: this.clientUserInfo.id,\n userDisplayName: this.clientUserInfo.displayName,\n isDraftComment: false,\n };\n\n // If a saved comment with same id exists, replace it. Otherwise append.\n const existingIdx = commentsArr.findIndex(c => c.commentId === commentId);\n if (existingIdx !== -1) {\n const newComments = [...commentsArr];\n newComments[existingIdx] = { ...savedComment };\n newInitialValues[sectionName][questionName].comments = newComments;\n } else {\n newInitialValues[sectionName][questionName].comments = [...commentsArr, savedComment];\n }\n\n // remove that draft\n newInitialValues[sectionName][questionName].draftComments = draftsArr.filter(d => d.commentId !== commentId);\n break;\n }\n\n case 'edit': {\n // create a draft copy of the saved comment but DO NOT remove the saved comment from the list.\n const saved = commentsArr.find(c => c.commentId === commentId);\n if (!saved) return;\n const draftFromSaved = { ...saved, isDraftComment: true, timestamp: null };\n\n // Add this draft at the front; keep saved comment intact so content doesn't disappear.\n newInitialValues[sectionName][questionName].draftComments = [draftFromSaved, ...draftsArr];\n newInitialValues[sectionName][questionName].comments = commentsArr;\n break;\n }\n\n case 'delete': {\n // mark the comment as deleted and clear its value, then persist.\n newInitialValues[sectionName][questionName].comments = commentsArr.map(c => {\n if (c.commentId === commentId) {\n return {\n ...c,\n isDeleted: true,\n value: '',\n editedTimestamp: new Date().toISOString(),\n };\n }\n return c;\n });\n\n break;\n }\n\n case 'editClose': {\n // Cancel edit: remove the draft only, do NOT restore/alter saved comments.\n newInitialValues[sectionName][questionName].draftComments = draftsArr.filter(d => d.commentId !== commentId);\n break;\n }\n }\n\n // if it's a save or delete action, persist immediately\n if (type === 'save' || type === 'delete') {\n this.udpFormSubmission.data.submissionResponseData = { ...newInitialValues };\n await this.handleCommmentUpdate(newInitialValues);\n } else {\n this.initialValues = { ...newInitialValues };\n this.udpFormSubmission.data.submissionResponseData = { ...newInitialValues };\n }\n\n } catch (error) {\n console.error('Error handling live comment CRUD:', error);\n } finally {\n this.triggerFormRerender();\n }\n }\n\n private handleFormChange = (values: { [name: string]: any }) => {\n if (this.isUpdatingSections) return;\n this.udpFormSubmission.data.submissionResponseData = values;\n };\n\n private handleFinish = () => {\n // Trigger any finish actions\n if (this.triggerAction) {\n this.triggerAction(null as any, { action: 'finish' });\n } \n };\n\n private triggerFormRerender = () => {\n const scrollY = window.scrollY;\n this.reRenderKey += 1;\n\n // We use requestAnimationFrame to wait for the browser to \n // finish the paint cycle of the new key-rendered component\n requestAnimationFrame(() => {\n window.scrollTo({\n top: scrollY,\n behavior: 'auto' // 'auto' is faster and prevents jitter compared to 'smooth'\n });\n });\n};\n\n private async loadFollowUpForms(sectionKey, questionKey) {\n this.isLoading = true;\n this.saveErrorMessage = '';\n try {\n const response = await fetchLatestForms(this.followUpSideSheetListPageNumber, this.FOLLOW_UP_SIDE_SHEET_PAGE_SIZE, [{ searchField: 'type', searchOperator: '=', searchValue: UdpFormsTypeEnum.FollowUp }], { sortDirection: 'DESC', sortColumn: 'lastModifiedOn' });\n\n const data = response.data;\n\n if (!data || !Array.isArray(data.pageList)) {\n throw new Error('Malformed form versions data.');\n }\n\n this.sideSheetFollowUpFormsList = this.formatFollowUpFormsList(data.pageList, sectionKey, questionKey);\n this.followUpSideSheetTotalItems = data.total ?? 0;\n } catch (err) {\n console.error('Failed to follow up form.', err);\n this.saveErrorMessage = 'Failed to follow up forms.';\n } finally {\n this.isLoading = false;\n }\n }\n\n handleLaunchFollowUpForm = async (followUpFormId, followUpFormVersion, parentFormSubmissionId, parentFormId, parentFormVersion, sectionKey, questionKey) => {\n // create a new follow up form submission instance wiht a link to the parent form submission\n const followUpMasterForm = await this.formHandler.getFormByFormIdAndFormVersion(followUpFormId, followUpFormVersion);\n const followUpSubmissionData = {\n submissionResponseData: buildEmptyInitialValues(followUpMasterForm),\n submissionMetadata: {\n ParentSubmission: {\n submissionId: parentFormSubmissionId,\n formId: parentFormId,\n formVersion: parentFormVersion\n }\n }\n }\n\n const followUpFormSubmission = new UdpFormSubmission({formId: followUpFormId, formVersion: followUpFormVersion, unityUserId: this.clientUserInfo.id, data: followUpSubmissionData})\n const followUpFormSubmissionHandler = FormSubmissionHandlerFactory.create(false, this.clientUserInfo.id);\n const response = await followUpFormSubmissionHandler.createNewLinkedFollowUpFormSubmission(followUpFormSubmission);\n\n // update the current form submission state with the follow up form submission id in the metadata\n const itemMetadata = this.udpFormSubmission.data.submissionResponseData[sectionKey][questionKey].metadata\n this.udpFormSubmission.data.submissionResponseData[sectionKey][questionKey].metadata = {... itemMetadata, followUpFormSubmissionId: response.id}\n await this.performBackgroundSaveAndUpdateLocalSubmissionState(this.udpFormSubmission.data.submissionResponseData);\n\n const url = `/page/${UdpFormsPageIdEnum.FormRendererPageId}?udpf_submissionId=${response.id}`;\n window.open(url, '_blank'); \n this.handleSideSheetClose();\n this.triggerFormRerender();\n };\n\n private formatFollowUpFormsList(followUpFormsList, sectionKey, questionKey) {\n return followUpFormsList.map(item => ({\n listItemData: item,\n history: this.history,\n handleLaunchFollowUpForm: async () => await this.handleLaunchFollowUpForm(item.id, item.version, this.udpFormSubmission.id, this.udpFormSubmission.formId, this.udpFormSubmission.formVersion, sectionKey, questionKey),\n }));\n }\n\n private handleSideSheetClose = () => {\n // reset side sheet data\n this.sideSheetFollowUpFormsList = [];\n this.followUpSideSheetListPageNumber = 1;\n this.followUpSideSheetTotalItems = 0;\n this.isFollowUpFormsSideSheetOpen = false;\n this.followUpParentSectionKey = '';\n this.followUpParentQuestionKey = '';\n };\n\n private async handleSideSheetPageChange(page: number) {\n this.followUpSideSheetListPageNumber = page;\n await this.loadFollowUpForms(this.followUpParentSectionKey, this.followUpParentQuestionKey);\n }\n\n private renderFollowUpSideSheet() {\n return (\n <udp-side-sheet\n title=\"Link a Follow Up Form\"\n open={this.isFollowUpFormsSideSheetOpen}\n onUdpSideSheetClose={() => this.handleSideSheetClose()}\n position=\"right\"\n width=\"md\"\n >\n {this.isLoading && this.isFollowUpFormsSideSheetOpen && <udp-linear-loader />}\n <udp-list-renderer\n itemComponent=\"udp-forms-follow-up-list-card\"\n data={this.sideSheetFollowUpFormsList}\n pagination\n isServerSide\n isLoading={this.isLoading}\n itemsPerPage={this.FOLLOW_UP_SIDE_SHEET_PAGE_SIZE}\n currentPage={this.followUpSideSheetListPageNumber}\n totalItems={this.followUpSideSheetTotalItems}\n onPageChange={e => this.handleSideSheetPageChange(e.detail)}\n componentDataMap={this.componentMap}\n spacing='md'\n />\n </udp-side-sheet>\n );\n }\n\n private isShowManualSaveIcon(): boolean{\n // return (this.isFormDirty || this.isUserUpdatedSections) && !this.isSubmitted && !!this.userId;\n const showSaveIcon = (this.isFormDirty || this.isUserUpdatedSections) && !!this.clientUserInfo.id;\n return showSaveIcon;\n };\n\n\n private get isReadOnlyMode() : boolean {\n return this.isSubmitted || this.udpFormSubmission.unityUserId !== this.clientUserInfo.id;\n }\n\n\n render() {\n return (\n <div \n class=\"forms-renderer-container\"\n style={this.isLoading ? { minHeight: '100vh' } : {}} // used for keeping the UI smoother during rerender. ensure the container has a minimum height during loading\n >\n {this.renderFollowUpSideSheet()}\n <udp-forms-ui\n udpForm={this.udpForm}\n initialValues={this.initialValues}\n udpFormSubmission={this.udpFormSubmission}\n submitSuccessful={this.submitSuccessful}\n isSaving={this.isSaving}\n saveErrorMessage={this.saveErrorMessage}\n // showAutoSaveStatus={this.formSubmissionHandler.supportsAutoSave() && !!this.userId}\n readonly={this.isReadOnlyMode}\n handleSubmit={this.handleSubmit.bind(this)}\n handleSave={values => Promise.resolve(this.debouncedManualSave(values))}\n handleChange={this.handleFormChange}\n handleAction={this.triggerAction}\n handleFinish={this.handleFinish}\n clientUserInfo={this.clientUserInfo}\n isSubmitted={this.isSubmitted}\n dynamicSections={this.dynamicSections}\n duplicateRepeatableSection={this.duplicateRepeatableSection}\n deleteRepeatableSection={this.deleteRepeatableSection}\n key={`form-rerender-key-${this.reRenderKey}`}\n isShowManualSaveIcon={this.isShowManualSaveIcon()}\n isLoading={this.isLoading}\n performBackgroundSaveAndUpdateLocalSubmissionState={this.performBackgroundSaveAndUpdateLocalSubmissionState}\n />\n </div>\n );\n }\n}\n"],"version":3}
|
|
1
|
+
{"file":"udp-forms-renderer.js","mappings":"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","names":["UdpFormsRenderer","__stencil_proxyCustomElement","HTMLElement","uuidv4"],"sources":["src/components/forms/udp-forms/udp-forms-utils/form-submission-handler/formUtils.ts","src/components/forms/udp-forms/udp-forms-utils/form-submission-handler/PublicFormSubmissionHandler.ts","src/components/forms/udp-forms/udp-forms-utils/classes/UdpFormSubmission.ts","src/components/forms/udp-forms/udp-forms-utils/form-submission-handler/PrivateFormSubmissionHandler.ts","src/components/forms/udp-forms/udp-forms-utils/form-submission-handler/FormSubmissionHandlerFactory.ts","src/components/forms/udp-forms/udp-forms-utils/form-handler/UdpFormHandler.ts","src/components/forms/udp-forms/udp-forms-utils/classes/UdpForm.ts","src/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer-utils.ts","src/components/forms/udp-forms/udp-forms-renderer/udp-forms-renderer.tsx"],"sourcesContent":["/**\n * Utility function to check if an array contains File objects\n */\nexport function isFileArray(array: any): array is File[] {\n // Check if it's an array\n if (!Array.isArray(array)) {\n return false;\n }\n\n // Check if all elements in the array are instances of File\n return array.every(item => item instanceof File);\n}\n","// @ts-nocheck\nimport { Guid, UdpFormSubmissionStatus } from '../../types';\nimport { createFormData } from '../../../../../udp-utilities/api/makeApiCall/makeApiCall';\nimport { isFileArray } from './formUtils';\nimport { UdpFormSubmission } from '../classes/UdpFormSubmission';\nimport { IFormSubmissionHandler } from './IFormSubmissionHandler';\n\n\n\n// TODO: This handler needs to be updated with new public form logic.\n// ******* THIS HANDLER IS OUTDATED, AND WILL LIKELY NOT WORK *********\n\n/**\n * Handles submission for *public* (unauthenticated) forms.\n */\nexport class PublicFormSubmissionHandler implements IFormSubmissionHandler {\n constructor(\n formId?: Guid,\n formVersion?: number,\n tenantId?: Guid\n ) {}\n\n public async fetchAndPopulateUdpFormSubmissionObj(submission: UdpFormSubmission) {\n return submission\n }\n\n\n private objectToFormData(obj: Record<string, any>): FormData {\n const files: File[] = [];\n const formObj: Record<string, any> = {};\n\n for (const key in obj) {\n let value = obj[key]?.value ?? obj[key];\n\n if (isFileArray(value)) {\n if (value.length > 0) {\n files.push(value[0]);\n formObj[key] = value[0].name;\n }\n } else if (Array.isArray(value)) {\n formObj[key] = value.map(v => (typeof v === 'string' ? v : v.value)).join(',');\n } else if (value !== null && value !== undefined && value !== '') {\n formObj[key] = value;\n }\n }\n\n return createFormData({\n formData: JSON.stringify(formObj),\n formFiles: files[0] || null\n });\n }\n\n async saveCurrentFormSubmissionState(values: Record<string, any>, submission: UdpFormSubmission): Promise<UdpFormSubmission> {\n return submission\n }\n\n\n async saveFormSubmissionComments(values: Record<string, any>, submission: UdpFormSubmission): Promise<UdpFormSubmission> {\n return submission\n }\n\n async createNewLinkedFollowUpFormSubmission(submission: UdpFormSubmission): Promise<UdpFormSubmission> {\n return submission\n }\n\n async finalizeFormSubmissionState(values: Record<string, any>, submission: UdpFormSubmission) : Promise<UdpFormSubmission> {\n try {\n // const formData = this.objectToFormData(values);\n\n // await makeApiCall(\n // 'POST',\n // `${ConfigService.productV1ApiUrl}/UdpForm/${this.formId}/${this.formVersion}/submit/public?tenantId=${this.tenantId}`,\n // formData,\n // true\n // );\n\n return submission;\n } catch (error) {\n console.error('Public form submission failed:', error);\n throw error\n }\n }\n}\n","import { Guid, UdpTag } from 'src/global/types';\nimport { createFormData } from '../../../../../udp-utilities/api/makeApiCall/makeApiCall';\nimport { isFileArray } from '../form-submission-handler/formUtils';\nimport { UdpFormsSubmissionStatusEnum } from '../enums';\n\n\nexport class UdpFormSubmission {\n id: Guid | null = null;\n formId: Guid | null = null;\n formVersion: number | null = null;\n data: any | null = {};\n unityUserId: Guid | null = null;\n clusterId: number | null = null;\n userDisplayName: string | null = '';\n status: UdpFormsSubmissionStatusEnum | null = null;\n businessObjectKey: string | null = '';\n udpTags: UdpTag[] | null = [];\n form: any | null = null;\n initialCreatedOn: Date | null = null;\n lastModifiedOn: Date | null = null;\n submittedOn: Date | null = null;\n generic1: string | null = null;\n generic2: string | null = null;\n generic3: string | null = null;\n userEmail: string | null = null;\n\n constructor(initialData: Partial<UdpFormSubmission> = {}) {\n Object.assign(this, initialData);\n }\n\n // =============================\n // Form Data Processing\n // =============================\n\n public processSubmissionIntoFormDataWithoutValues(status: UdpFormsSubmissionStatusEnum): FormData {;\n const baseData = this.buildBaseSubmissionData(status);\n const formData = createFormData(baseData);\n formData.append('Data', JSON.stringify(this.data));\n return formData;\n }\n\n public processSubmissionIntoFormData(\n formInputValuesAndMetadata: Record<\n string,\n Record<\n string,\n { value: any; comments?: any[]; files?: File[]; metadata?: Record<string, any> }\n >\n >,\n status: UdpFormsSubmissionStatusEnum,\n ): FormData {\n const baseData = this.buildBaseSubmissionData(status);\n\n const { cleanedData, files } = this.extractCleanedDataAndFiles(formInputValuesAndMetadata);\n const formData = createFormData(baseData);\n\n files.forEach(file => formData.append('FormFiles', file));\n\n const submissionDataObject = {\n submissionResponseData: cleanedData,\n submissionMetadata: this.data.submissionMetadata || null\n }\n\n formData.append('Data', JSON.stringify(submissionDataObject));\n\n return formData;\n }\n\n private buildBaseSubmissionData(statusValue: UdpFormsSubmissionStatusEnum): Record<string, any> {\n const baseData: Record<string, any> = {\n FormId: this.formId,\n FormVersion: this.formVersion.toString(),\n Status: statusValue,\n };\n\n if (this.id) {\n baseData.Id = this.id;\n }\n\n if (this.initialCreatedOn) {\n baseData.InitialCreatedOn = this.initialCreatedOn\n } else {\n baseData.InitialCreatedOn = new Date().toISOString();\n }\n\n if (this.lastModifiedOn) {\n baseData.LastModifiedOn = this.lastModifiedOn\n } else {\n baseData.LastModifiedOn = new Date().toISOString();\n }\n\n if (this.submittedOn) {\n baseData.submittedOn = this.submittedOn\n }\n\n if (this.generic1) {\n baseData.generic1 = this.generic1.toString();\n }\n\n if (this.generic2) {\n baseData.generic2 = this.generic2.toString();\n }\n\n if (this.generic3) {\n baseData.generic3 = this.generic3.toString();\n }\n\n return baseData;\n }\n\n private extractCleanedDataAndFiles(data: Record<string, any>) {\n const files: File[] = [];\n const cleanedData: Record<\n string,\n Record<string, { value: any; comments: any[]; metadata?: Record<string, any> }>\n > = {};\n\n for (const sectionName in data) {\n cleanedData[sectionName] = {};\n\n for (const questionName in data[sectionName]) {\n const entry = data[sectionName][questionName];\n const { value, fieldFiles } = this.extractValueAndFiles(entry);\n if (fieldFiles) files.push(...fieldFiles);\n\n const comments = this.processComments(entry.comments);\n const metadata = this.processMetadata(entry.metadata);\n\n cleanedData[sectionName][questionName] = { value, comments, ...(metadata && { metadata }) };\n }\n }\n\n return { cleanedData, files };\n }\n\n // =============================\n // Form Data Processing Private Helpers\n // =============================\n\n private extractValueAndFiles(entry: any): { value: any; fieldFiles?: File[] } {\n let rawValue = entry?.value?.files ? entry.value.value : entry?.value;\n const fieldFiles = entry?.value?.files;\n\n if (fieldFiles && Array.isArray(fieldFiles)) {\n return {\n value: typeof rawValue === 'string' && rawValue.trim() !== '' ? rawValue : '',\n fieldFiles,\n };\n }\n\n if (isFileArray(rawValue)) {\n return {\n value: rawValue.length > 0 ? rawValue.map(f => f.name).join(',') : '',\n fieldFiles: rawValue,\n };\n }\n\n if (rawValue instanceof File) {\n return { value: rawValue.name, fieldFiles: [rawValue] };\n }\n\n if (Array.isArray(rawValue)) {\n return { value: rawValue.map(i => (typeof i === 'string' ? i : i?.value)).join(',') };\n }\n\n return { value: rawValue };\n }\n\n private processComments(comments: any[] | undefined) {\n return comments?.map(comment => ({ ...comment })) ?? [];\n }\n\n private processMetadata(metadata: Record<string, any> | undefined) {\n return metadata && Object.keys(metadata).length > 0 ? { ...metadata } : undefined;\n }\n}\n\n\n\n","import { makeApiCall } from '../../../../../udp-utilities/api/makeApiCall/makeApiCall';\nimport { SearchBuilder, SearchOperators } from '../../../../../udp-utilities/search';\nimport { ConfigService } from 'src/udp-utilities/api-config';\nimport { UdpFormSubmission } from '../classes/UdpFormSubmission';\nimport { IFormSubmissionHandler } from './IFormSubmissionHandler';\nimport { UdpFormsSubmissionStatusEnum } from '../enums';\n\n/**\n * Handles CRUD and submission operations for private UdpFormSubmission records.\n */\nexport class PrivateFormSubmissionHandler implements IFormSubmissionHandler {\n\n // =============================\n // Fetch Methods\n // =============================\n\n /**\n * Fetch and refresh an existing UdpFormSubmission instance.\n *\n * Attempts to load the latest server representation of the provided\n * udpFormSubmission. Uses generic fields (generic1/2/3) when present to\n * disambiguate records, otherwise falls back to a simple id lookup.\n *\n * @param udpFormSubmission - local UdpFormSubmission object to refresh\n * @returns a new UdpFormSubmission merged with server data, or the original on failure\n * @throws network or unexpected errors\n */\n async fetchAndPopulateUdpFormSubmissionObj(udpFormSubmission: UdpFormSubmission): Promise<UdpFormSubmission> {\n if (!udpFormSubmission?.id) {\n console.warn('Cannot fetch form submission without an ID.');\n return udpFormSubmission;\n }\n\n try {\n const { id, generic1, generic2, generic3 } = udpFormSubmission as any;\n let response: UdpFormSubmission | null = null;\n\n // Prefer the generics-aware lookup if any generic values are present\n if (generic1 || generic2 || generic3) {\n response = await this.getFormSubmissionByIdAndGenerics(\n id,\n generic1 || undefined,\n generic2 || undefined,\n generic3 || undefined\n );\n } else {\n response = await this.getFormSubmissionById(id);\n }\n\n if (!response) {\n console.warn('No form submission found for the provided object.');\n return udpFormSubmission;\n }\n\n return new UdpFormSubmission({ ...udpFormSubmission, ...response });\n } catch (error) {\n console.error('Error fetching form submission:', error);\n throw error;\n }\n }\n\n /** \n * Internal helper — lookup a form submission by its unique id.\n *\n * Performs a minimal search (page size 1) for the given id and returns\n * the first match or null if not found. Logs and returns null on errors.\n *\n * @param id - submission id to query\n * @returns UdpFormSubmission or null\n */\n private async getFormSubmissionById(id: string): Promise<UdpFormSubmission | null> {\n try {\n const search = new SearchBuilder(1, 1)\n .addFilter('id', id, SearchOperators.EQUALS)\n\n const response = await search.execute('UdpFormSubmission');\n return response?.pageList?.[0] as UdpFormSubmission || null;\n } catch (error) {\n console.error('Error fetching form submission by ID:', error);\n return null;\n }\n }\n\n /**\n * Internal helper — lookup a form submission by id and generic fields.\n *\n * Adds optional equality filters for generic1/generic2/generic3 when provided,\n * then executes a minimal search and returns the first match or null.\n *\n * @param id - submission id to query\n * @param generic1 - optional generic1 value to filter by\n * @param generic2 - optional generic2 value to filter by\n * @param generic3 - optional generic3 value to filter by\n * @returns UdpFormSubmission or null\n */\n private async getFormSubmissionByIdAndGenerics(id: string, generic1: string, generic2: string, generic3: string): Promise<UdpFormSubmission | null> {\n try {\n const search = new SearchBuilder(1, 1)\n .addFilter('id', id, SearchOperators.EQUALS);\n\n if (generic1) {\n search.addFilter('generic1', generic1, SearchOperators.EQUALS);\n }\n if (generic2) {\n search.addFilter('generic2', generic2, SearchOperators.EQUALS);\n }\n if (generic3) {\n search.addFilter('generic3', generic3, SearchOperators.EQUALS);\n }\n\n const response = await search.execute('UdpFormSubmission');\n return response?.pageList?.[0] as UdpFormSubmission || null;\n } catch (error) {\n console.error('Error fetching form submission by ID:', error);\n return null;\n }\n }\n\n\n // =============================\n // Save & Submit Methods\n // =============================\n\n /**\n * Create a new follow-up form submission that is linked to an existing submission.\n *\n * Saves a new UdpFormSubmission in 'in-progress' state without populating field values\n * (only metadata/links), and returns the created submission object.\n *\n * @param udpFormSubmission - template/parent submission to base the new follow-up on\n * @returns newly created UdpFormSubmission\n */\n async createNewLinkedFollowUpFormSubmission(udpFormSubmission): Promise<UdpFormSubmission> {\n const formData = await this.saveFormDataWithoutValues(udpFormSubmission, UdpFormsSubmissionStatusEnum.InProgress);\n return formData\n }\n\n /**\n * Persist submission metadata (without full field values).\n *\n * Converts provided udpFormSubmission into formData excluding field values,\n * determines whether to POST or PUT based on presence of id, and merges the\n * server response into a new UdpFormSubmission instance.\n *\n * @param udpFormSubmission - the submission to save\n * @param status - desired status to save (e.g., 'in-progress' or 'submitted')\n * @returns saved UdpFormSubmission (refetches if server returns empty PUT response)\n */\n private async saveFormDataWithoutValues(udpFormSubmission: UdpFormSubmission, status: UdpFormsSubmissionStatusEnum): Promise<UdpFormSubmission> {\n try {\n const formData = udpFormSubmission.processSubmissionIntoFormDataWithoutValues(status);\n const { method, url } = this.getApiRequestInfo(udpFormSubmission);\n\n const response = await makeApiCall(method, url, formData, true);\n\n // PUT returns an empty string; refetch to refresh local data\n if (response === '') {\n return await this.fetchAndPopulateUdpFormSubmissionObj(udpFormSubmission);\n }\n\n return new UdpFormSubmission({ ...udpFormSubmission, ...response });\n } catch (error) {\n console.error('Failed to save form udpFormSubmission:', error);\n throw error;\n }\n }\n\n /**\n * Save only comment-related fields for a submission.\n *\n * Delegates to the lower-level saveCommentsToDB helper to persist comment changes\n * while preserving existing submission state and metadata.\n *\n * @param values - comment values to persist\n * @param udpFormSubmission - target submission object\n * @returns updated UdpFormSubmission\n */\n async saveFormSubmissionComments(values: Record<string, any>, udpFormSubmission: UdpFormSubmission): Promise<UdpFormSubmission> {\n return this.saveCommentsToDB(values, udpFormSubmission)\n }\n\n\n /**\n * Save the current state of the form's data as a draft ('in-progress').\n *\n * Converts the provided values into the required form payload and persists them.\n * Determines POST vs PUT automatically and refreshes local object on empty PUT responses.\n *\n * @param values - field data to save\n * @param udpFormSubmission - submission being updated\n * @returns updated UdpFormSubmission\n */\n async saveCurrentFormSubmissionState(values: Record<string, any>, udpFormSubmission: UdpFormSubmission): Promise<UdpFormSubmission> {\n return this.saveSubmissionToDB(values, udpFormSubmission, UdpFormsSubmissionStatusEnum.InProgress)\n }\n\n\n /** \n * Finalize and submit the form (set state to 'submitted').\n *\n * Persists the provided values and marks the submission as 'submitted'.\n *\n * @param values - final form values to submit\n * @param udpFormSubmission - submission being finalized\n * @returns updated UdpFormSubmission\n */\n async finalizeFormSubmissionState(values: Record<string, any>, udpFormSubmission: UdpFormSubmission): Promise<UdpFormSubmission> {\n return this.saveSubmissionToDB(values, udpFormSubmission, UdpFormsSubmissionStatusEnum.Submitted);\n }\n\n // =============================\n // Helpers\n // =============================\n\n /** \n * Determine correct HTTP verb and target URL for saving a UdpFormSubmission.\n *\n * Uses productV1ApiUrl from ConfigService and returns POST for new submissions\n * (no id) or PUT with the resource id for existing submissions.\n *\n * @param udpFormSubmission - submission to be saved\n * @returns object with method ('POST'|'PUT') and full url\n */\n private getApiRequestInfo(udpFormSubmission: UdpFormSubmission): { method: 'POST' | 'PUT'; url: string } {\n const baseUrl = `${ConfigService.productV1ApiUrl}/UdpFormSubmission`;\n\n return udpFormSubmission.id\n ? { method: 'PUT', url: `${baseUrl}/${udpFormSubmission.id}` }\n : { method: 'POST', url: baseUrl };\n }\n\n /**\n * Persist form values and metadata to the backend.\n *\n * Builds the form payload using udpFormSubmission.processSubmissionIntoFormData,\n * resolves POST vs PUT using getApiRequestInfo, and returns a merged UdpFormSubmission.\n * If the server returns an empty string for PUT, the method refetches the record.\n *\n * @param values - field values to be saved\n * @param udpFormSubmission - submission being updated\n * @param status - status to persist (e.g., 'in-progress' | 'submitted')\n * @returns updated UdpFormSubmission\n */\n private async saveSubmissionToDB(values: Record<string, any>, udpFormSubmission: UdpFormSubmission, status: UdpFormsSubmissionStatusEnum): Promise<UdpFormSubmission> {\n try {\n const formData = udpFormSubmission.processSubmissionIntoFormData(values, status);\n const { method, url } = this.getApiRequestInfo(udpFormSubmission);\n\n const response = await makeApiCall(method, url, formData, true);\n\n // PUT returns an empty string; refetch to refresh local data\n if (response === '') {\n return await this.fetchAndPopulateUdpFormSubmissionObj(udpFormSubmission);\n }\n\n return new UdpFormSubmission({ ...udpFormSubmission, ...response });\n } catch (error) {\n console.error('Failed to save form udpFormSubmission:', error);\n throw error;\n }\n }\n\n /**\n * Persist only comment changes for an existing submission via PUT.\n *\n * Forces a PUT to the specific submission id, builds a form payload containing\n * the provided comment values, and returns the updated submission. If the API\n * returns an empty string (PUT shorthand), the method refetches the record.\n *\n * @param values - comment fields to persist\n * @param udpFormSubmission - target submission (must have id)\n * @returns updated UdpFormSubmission\n */\n private async saveCommentsToDB(values: Record<string, any>, udpFormSubmission: UdpFormSubmission): Promise<UdpFormSubmission> {\n try {\n const method = 'PUT';\n const status = udpFormSubmission.status ?? UdpFormsSubmissionStatusEnum.Submitted;\n const url = `${ConfigService.productV1ApiUrl}/UdpFormSubmission/${udpFormSubmission.id}`;\n const formData = udpFormSubmission.processSubmissionIntoFormData(values, status);\n const response = await makeApiCall(method, url, formData, true);\n\n // PUT returns an empty string; refetch to refresh local data\n if (response === '') {\n return await this.fetchAndPopulateUdpFormSubmissionObj(udpFormSubmission);\n }\n\n return new UdpFormSubmission({ ...udpFormSubmission, ...response });\n } catch (error) {\n console.error('Failed to save form udpFormSubmission:', error);\n throw error;\n }\n }\n}\n\n","import { IFormSubmissionHandler } from './IFormSubmissionHandler';\nimport { PublicFormSubmissionHandler } from './PublicFormSubmissionHandler';\nimport { PrivateFormSubmissionHandler } from './PrivateFormSubmissionHandler';\nimport { Guid } from '../types';\n\n/**\n * Factory for creating form submission handlers.\n */\nexport class FormSubmissionHandlerFactory {\n static create(\n isPublic: boolean,\n userId?: Guid | null,\n formId?: Guid,\n version?: number,\n tenantId?: Guid,\n ): IFormSubmissionHandler {\n\n if (isPublic) {\n return new PublicFormSubmissionHandler(formId, version, tenantId);\n }\n\n if (!userId) {\n throw new Error('User ID is required for private forms');\n }\n\n return new PrivateFormSubmissionHandler();\n }\n}\n","import { Guid, StyleOverrides } from '../types';\nimport { UdpForm } from '../classes/UdpForm';\nimport { makeApiCall } from '../../../../../udp-utilities/api/makeApiCall/makeApiCall';\nimport { ConfigService } from 'src/udp-utilities/api-config';\n\n/**\n * UDP Form handler (new UdpFormSubmission endpoint)\n */\nexport class UdpFormHandler {\n constructor(public tenantId?: Guid) {}\n\n // =============================\n // Fetching Form\n // =============================\n\n async getFormByFormId(formId): Promise<UdpForm> {\n const formData: UdpForm = await makeApiCall(\n 'GET',\n `${ConfigService.productV1ApiUrl}/UdpForm/${formId}/describe`,\n );\n\n if (formData.styleOverrides && typeof formData.styleOverrides === 'string') {\n formData.styleOverrides = JSON.parse(formData.styleOverrides) as StyleOverrides;\n }\n\n return formData;\n }\n\n async getFormByFormIdAndFormVersion(formId, formVersion): Promise<UdpForm> {\n const formData: UdpForm = await makeApiCall(\n 'GET',\n `${ConfigService.productV1ApiUrl}/UdpForm/${formId}/${formVersion}/describe`\n );\n\n if (formData.styleOverrides && typeof formData.styleOverrides === 'string') {\n formData.styleOverrides = JSON.parse(formData.styleOverrides) as StyleOverrides;\n }\n\n return formData;\n }\n}\n\n\n","import { StyleOverrides, UdpFormSection, UdpFormQuestion } from '../types';\nimport { Guid } from 'src/global/types';\nimport { UdpFormsTypeEnum } from '../enums';\n\nexport class UdpForm {\n id?: Guid;\n version?: number;\n type?: UdpFormsTypeEnum;\n isPrivate?: boolean;\n name?: string;\n description?: string;\n tenantId?: Guid;\n clusterId?: number;\n styleOverrides?: StyleOverrides;\n createdOn?: Date;\n formProperties?: any;\n udpFormUdpFormSection?: UdpFormSection[];\n formQuestions?: UdpFormQuestion[];\n\n constructor(initialData?: Partial<UdpForm>) {\n if (!initialData) return;\n\n Object.assign(this, initialData);\n }\n}\n","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","import { Component, Prop, State, Element, h } from '@stencil/core';\nimport { throttle } from 'lodash';\nimport { Guid } from 'src/global/types';\nimport { getCurrentTenantId } from 'src/udp-utilities/tenant/tenantUtils';\nimport { fetchLatestForms } from '../udp-forms-list/udp-form-api-utils';\nimport { UdpFormsTypeEnum, UdpFormsPageIdEnum, UdpFormsSubmissionStatusEnum, UdpFormsFieldTypeEnum} from '../udp-forms-utils/enums';\nimport { buildEmptyCurrentValues } from '../udp-forms-utils/utils';\nimport { IFormSubmissionHandler } from '../udp-forms-utils/form-submission-handler/IFormSubmissionHandler';\nimport { FormSubmissionHandlerFactory } from '../udp-forms-utils/form-submission-handler/FormSubmissionHandlerFactory';\nimport { UdpFormHandler } from '../udp-forms-utils/form-handler/UdpFormHandler';\nimport { UdpFormSubmission } from '../udp-forms-utils/classes/UdpFormSubmission';\nimport { UdpForm } from '../udp-forms-utils/classes/UdpForm';\nimport { v4 as uuidv4 } from 'uuid';\nimport { applyUrlSeedValuesForAll, initializeDynamicSections, initializeDynamicSectionsWithUrlContext, findRepeatGroupKeys } from './udp-forms-renderer-utils';\n\n@Component({\n tag: 'udp-forms-renderer',\n shadow: true,\n})\nexport class UdpFormsRenderer {\n @Element() el: HTMLElement;\n \n @Prop() formId?: Guid | null;\n @Prop() version?: number | null;\n @Prop() submissionId?: Guid | null;\n @Prop() triggerAction: (actionId: Guid, params: Object) => void;\n @Prop() isPublic: boolean = false;\n @Prop() callbackUrl: string;\n @Prop() getUserCallback?: Function;\n @Prop() enqueueSnackbar: Function;\n @Prop() closeSnackbar: Function;\n @Prop() autoSaveDelay: number = 2000; // Debounce delay for auto-save in milliseconds (currently disabled)\n @Prop() history: any;\n @Prop() urlContext: Record<string, any> = {}; // additional context from URL if needed, eg. generic1, gernic2, generic3, or any initial prepopulated values for form inputs. eg section1.question1 = 'some value'\n \n @State() currentValues: { [name: string]: any } = {}; // values of the current form state\n @State() formInputSeedValues: { [name: string]: any } = {}; // support for a initial set of values to seed the form with\n @State() submitSuccessful: boolean = false;\n @State() isLoading: boolean = false;\n @State() isSaving: boolean = false;\n @State() isSubmitted: boolean = false;\n @State() saveErrorMessage: string | null = null;\n @State() dynamicSections: any[] = [];\n @State() isUpdatingSections: boolean = false;\n @State() reRenderKey: number = 0;\n @State() isFormDirty: boolean = false;\n @State() isUserUpdatedSections: boolean = false;\n\n @State() sideSheetFollowUpFormsList: any[] = []; // used for follow up forms. \n @State() followUpSideSheetTotalItems: number = 0; // used for follow up forms. \n @State() isFollowUpFormsSideSheetOpen: boolean = false; // used for follow up forms.\n @State() followUpSideSheetListPageNumber: number = 1; // used for follow up forms.\n\n private FOLLOW_UP_SIDE_SHEET_PAGE_SIZE = 5;\n private readonly componentMap = {\n history: 'history',\n listItemData: 'listItemData',\n handleLaunchFollowUpForm: 'handleLaunchFollowUpForm'\n };\n\n\n private tenantId: Guid = getCurrentTenantId();\n // private debouncedAutoSave: (values: { [name: string]: any }) => void; // Kept for future use (currently disabled)\n private debouncedManualSave: (values: { [name: string]: any }) => void; // Debounced manual save (5 seconds)\n\n // info for the current logged in user on the client side\n private clientUserInfo: { id: string | null; displayName: string | null; email: string | null } = {\n id: null,\n displayName: null,\n email: null,\n }; \n \n private udpForm: UdpForm; // udpForm data object \n private udpFormSubmission: UdpFormSubmission; // udpFormSubmission data object \n\n private formHandler: UdpFormHandler // hanlder for API interactions with the UdpForm domain\n private formSubmissionHandler: IFormSubmissionHandler; // handler for API interactions with the UdpFormSubmission domain\n\n private followUpParentSectionKey: string = ''; // used for follow up forms.\n private followUpParentQuestionKey: string = ''; // used for follow up forms.\n\n componentDidLoad() {\n if (this.el)\n {\n this.el.addEventListener(\n 'questionCommentAction',\n async (e: CustomEvent<{ type: string; questionIdentifierKey: string, commentId: string }>) => this.handleQuestionCommentLiveCRUD(e)\n );\n // Listen for launchFollowUpFormSideSheet event from udp-question\n this.el.addEventListener(\n 'launchFollowUpFormSideSheet',\n (e: CustomEvent<any>) => this.handleLaunchFollowUpFormSideSheet(e),\n );\n\n this.el.addEventListener('formDirtyChange', (e: CustomEvent<boolean>) => {\n this.isFormDirty = e.detail;\n });\n }\n\n }\n\n\n private handleLaunchFollowUpFormSideSheet = async (e) => {\n try {\n await this.performBackgroundSaveAndUpdateLocalSubmissionState(this.udpFormSubmission.data.submissionResponseData);\n this.followUpParentSectionKey = e.detail.sectionKey;\n this.followUpParentQuestionKey = e.detail.questionKey;\n await this.loadFollowUpForms(this.followUpParentSectionKey, this.followUpParentQuestionKey);\n this.isFollowUpFormsSideSheetOpen = true;\n } catch (error) {\n console.error('Error loading follow-up forms:', error);\n }\n };\n\n async componentWillLoad() {\n this.isLoading = true;\n\n try {\n // Get client user info if available\n const user = this.getUserCallback?.();\n if (user) {\n this.clientUserInfo.id = user.id || null;\n this.clientUserInfo.displayName = user.name || null;\n this.clientUserInfo.email = user.email || null;\n } \n\n this.formSubmissionHandler = FormSubmissionHandlerFactory.create(this.isPublic, this.clientUserInfo.id)\n this.udpFormSubmission = new UdpFormSubmission({id: this.submissionId, formId: this.formId, formVersion: this.version, unityUserId: this.clientUserInfo.id, generic1: this.urlContext.generic1, generic2: this.urlContext.generic2, generic3: this.urlContext.generic3});\n\n // fetch existing submission from Udp.FormSubmission if submissionId is provided \n // take exisitng object, and populate with db values, and return new obj with updated values\n if (this.submissionId) {\n this.udpFormSubmission = await this.formSubmissionHandler.fetchAndPopulateUdpFormSubmissionObj(this.udpFormSubmission); \n } \n\n // get the master form from Udp.Form\n let formId;\n let formVersion;\n\n if (this.submissionId) {\n formId = this.udpFormSubmission.formId;\n formVersion = this.udpFormSubmission.formVersion;\n } else if (this.formId && this.version) {\n formId = this.formId;\n formVersion = this.version;\n }\n \n this.formHandler = new UdpFormHandler(this.tenantId);\n const formData = await this.formHandler.getFormByFormIdAndFormVersion(formId, formVersion);\n this.udpForm = new UdpForm(formData);\n this.currentValues = buildEmptyCurrentValues(this.udpForm);\n\n // if there's existing data, update the form's state\n if (this.udpFormSubmission.data.submissionResponseData) {\n this.currentValues = { ...this.udpFormSubmission.data.submissionResponseData };\n\n if (this.udpFormSubmission.status === UdpFormsSubmissionStatusEnum.Submitted) {\n this.isSubmitted = true;\n }\n }\n\n // For new submissions (un-instiantiated or in the 'created' status), we allow the seeding of initial values from URL params\n // So we build dynamicSections with urlContext first, then seed values.\n // URL params (udpf_*) may imply repeatable section instances (e.g. section1_3.question1).\n // For existing submissions that are in progress, skip URL-based seeding and do not create additional sections from URL.\n if ((!this.udpFormSubmission.id || this.udpFormSubmission.status === UdpFormsSubmissionStatusEnum.Created) && this.urlContext && Object.keys(this.urlContext).length > 0) {\n this.dynamicSections = initializeDynamicSectionsWithUrlContext(this.udpForm, this.currentValues, this.urlContext);\n const seeded = applyUrlSeedValuesForAll(this.dynamicSections, this.urlContext);\n if (seeded) {\n this.currentValues = seeded;\n this.udpFormSubmission.data.submissionResponseData = { ...seeded } as any;\n }\n } else {\n this.dynamicSections = initializeDynamicSections(this.udpForm, this.currentValues);\n }\n\n // Set up throttled manual save function (5 seconds) - fires immediately, then throttles\n this.debouncedManualSave = throttle(\n async (values: { [name: string]: any }) => {\n await this.handleManualSave(values);\n },\n 2000,\n { leading: true, trailing: false },\n );\n\n // Set up debounced auto-save function (currently disabled)\n // this.debouncedAutoSave = debounce(async (values: { [name: string]: any }) => {\n // // await this.handleAutoSave(values); // Disabled for now\n // }, this.autoSaveDelay);\n } catch (error) {\n console.error('Error failed to load form in the form renderer:', error);\n } finally {\n this.isLoading = false;\n }\n }\n\n /**\n * Duplicate a repeatable section\n */\n private duplicateRepeatableSection = (index: number) => {\n if (this.isSubmitted || this.isUpdatingSections) return;\n this.isUpdatingSections = true;\n this.isLoading = true;\n\n try {\n const sectionToClone = this.dynamicSections[index];\n if (!sectionToClone) return;\n\n const cloningSectionName = sectionToClone.name;\n\n // Find existing repeat group indices\n const repeatKeys = findRepeatGroupKeys(cloningSectionName, this.currentValues);\n const nextRepeatIndex = repeatKeys.length > 0 ? Math.max(...repeatKeys) + 1 : 2;\n\n const clonedSection = {\n ...structuredClone(sectionToClone),\n formQuestions: sectionToClone.formQuestions.map(q => {\n const newQuestionObj = structuredClone(q);\n newQuestionObj.questionIdentifierKey = `${cloningSectionName}_${nextRepeatIndex}.${q.name}`;\n return newQuestionObj;\n }),\n isOriginalSection: false,\n sectionPositionSuffix: nextRepeatIndex,\n };\n\n // Find the last index of this section group\n let insertAtIndex = index;\n for (let i = index + 1; i < this.dynamicSections.length; i++) {\n const s = this.dynamicSections[i];\n if (s.name === cloningSectionName) {\n insertAtIndex = i;\n } else {\n break;\n }\n }\n\n // Insert after the last repeat of the section group\n this.dynamicSections = [\n ...this.dynamicSections.slice(0, insertAtIndex + 1),\n clonedSection,\n ...this.dynamicSections.slice(insertAtIndex + 1),\n ];\n\n // Create new initial values structure\n const newCurrentValues = structuredClone(this.udpFormSubmission.data.submissionResponseData);\n\n clonedSection.formQuestions.forEach(q => {\n const newSectionNameWithSuffix = `${cloningSectionName}_${nextRepeatIndex}`;\n const newQuestionName = q.name;\n\n if (!newCurrentValues[newSectionNameWithSuffix]) {\n newCurrentValues[newSectionNameWithSuffix] = {};\n }\n\n // Preserve only Paragraph values from the source section; clear others\n let value = '';\n if (q.fieldTypeId === UdpFormsFieldTypeEnum.Paragraph) {\n // Determine source section key (the section being duplicated)\n const sourceSectionKey = sectionToClone.isOriginalSection\n ? cloningSectionName\n : `${cloningSectionName}_${sectionToClone.sectionPositionSuffix}`;\n const sourceVal = this.udpFormSubmission.data.submissionResponseData?.[sourceSectionKey]?.[newQuestionName]?.value;\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 const paragraphDefault = fieldProps?.paragraphText ?? '';\n value = sourceVal ?? paragraphDefault;\n }\n\n newCurrentValues[newSectionNameWithSuffix][newQuestionName] = { value, comments: [], metadata : {}};\n });\n // This will trigger a complete form re-render\n this.currentValues = {...newCurrentValues};\n this.udpFormSubmission.data.submissionResponseData = {...newCurrentValues};\n this.triggerFormRerender();\n } finally {\n this.isUpdatingSections = false;\n this.isLoading = false;\n this.isUserUpdatedSections = true;\n }\n };\n\n /**\n * Delete a repeatable section\n */\n private deleteRepeatableSection = (index: number) => {\n if (this.isSubmitted) return;\n\n const sectionToDelete = this.dynamicSections[index];\n if (!sectionToDelete || sectionToDelete.isOriginalSection) return;\n\n this.isUpdatingSections = true;\n this.isLoading = true;\n try {\n const deleteSectionName = sectionToDelete.name;\n const deleteSuffix = sectionToDelete.sectionPositionSuffix;\n const sectionKeyToDelete = `${deleteSectionName}_${deleteSuffix}`;\n\n const newCurrentValues = { ...this.udpFormSubmission.data.submissionResponseData };\n delete newCurrentValues[sectionKeyToDelete];\n\n // Remove the section from dynamicSections\n const updatedSections = structuredClone(this.dynamicSections);\n updatedSections.splice(index, 1);\n\n // Shift all later repeatable sections backward by 1\n updatedSections.forEach(section => {\n if (\n section.name !== deleteSectionName ||\n section.isOriginalSection ||\n section.sectionPositionSuffix <= deleteSuffix\n ) {\n return;\n }\n\n const oldSuffix = section.sectionPositionSuffix;\n const oldSectionKey = `${deleteSectionName}_${oldSuffix}`;\n const newSuffix = oldSuffix - 1;\n const newSectionKey = `${deleteSectionName}_${newSuffix}`;\n\n // Update suffix\n section.sectionPositionSuffix = newSuffix;\n\n // Update questionIdentifierKeys\n section.formQuestions = section.formQuestions.map(q => {\n const newSectionQuestion = structuredClone(q);\n newSectionQuestion.questionIdentifierKey = `${newSectionKey}.${q.name}`;\n return newSectionQuestion;\n });\n\n // Move data in initial values\n if (newCurrentValues[oldSectionKey]) {\n newCurrentValues[newSectionKey] = structuredClone(newCurrentValues[oldSectionKey]);\n delete newCurrentValues[oldSectionKey];\n }\n });\n\n this.dynamicSections = updatedSections;\n this.currentValues = {...newCurrentValues};\n this.udpFormSubmission.data.submissionResponseData = {...newCurrentValues};\n this.triggerFormRerender();\n } finally {\n this.isUpdatingSections = false;\n this.isLoading = false;\n this.isUserUpdatedSections = true;\n }\n };\n\n private async handleSubmit(values: { [name: string]: any }) {\n this.isLoading = true\n try {\n this.udpFormSubmission = await this.formSubmissionHandler.finalizeFormSubmissionState(values, this.udpFormSubmission);\n this.submitSuccessful = true;\n } catch (error) {\n this.enqueueSnackbar('There was an error submitting this form', {\n variant: 'error',\n anchorOrigin: { vertical: 'top', horizontal: 'center' },\n });\n throw error;\n } finally {\n this.isLoading = false \n }\n }\n\n\n /**\n * Auto save (background save)\n */\n private performBackgroundSaveAndUpdateLocalSubmissionState = async (values: { [name: string]: any }) => {\n this.saveErrorMessage = null;\n try {\n const updatedUdpFormSubmission = await this.formSubmissionHandler.saveCurrentFormSubmissionState(values, this.udpFormSubmission);\n this.udpFormSubmission = updatedUdpFormSubmission\n this.currentValues = { ...(updatedUdpFormSubmission.data?.submissionResponseData || {}) };\n if (!new URLSearchParams(window.location.search).has('udpf_submissionId')) {\n // replace the current entry's query string with udpf_submissionId without needing to know the path\n this.replaceUrlWithSubmissionId(updatedUdpFormSubmission.id);\n }\n } catch (error) {\n this.saveErrorMessage = 'Failed to save form data';\n } finally {\n this.isSaving = false;\n this.isUserUpdatedSections = false;\n this.isFormDirty = false;\n }\n };\n\n private replaceUrlWithSubmissionId(submissionId: Guid) {\n // build a URL that preserves the current pathname + hash but replaces the query string\n const pathname = typeof window !== 'undefined' ? window.location.pathname : `/page/${UdpFormsPageIdEnum.FormRendererPageId}`;\n const hash = typeof window !== 'undefined' ? window.location.hash : '';\n const newUrl = `${pathname}?udpf_submissionId=${submissionId}${hash}`;\n\n const h = this.history as any;\n\n // Prefer history.replace when available, handle react-router v6 navigate function, fallback to push or native replaceState\n if (h) {\n if (typeof h.replace === 'function') {\n h.replace(newUrl);\n return;\n }\n if (typeof h.push === 'function') {\n h.push(newUrl);\n return;\n }\n // react-router v6 exposes a navigate function\n if (typeof h === 'function') {\n try {\n h(newUrl, { replace: true });\n } catch {\n h(newUrl);\n }\n return;\n }\n }\n\n if (typeof window !== 'undefined' && window.history && typeof window.history.replaceState === 'function') {\n window.history.replaceState({}, '', newUrl);\n } else if (typeof window !== 'undefined') {\n window.location.href = newUrl;\n }\n }\n\n\n\n/**\n * Handle the user saving or deleting a comment\n */\n private handleCommmentUpdate = async (values: { [name: string]: any }) => {\n this.isSaving = true;\n this.saveErrorMessage = null;\n\n try {\n const updatedUdpFormSubmission = await this.formSubmissionHandler.saveFormSubmissionComments(values, this.udpFormSubmission);\n this.udpFormSubmission = updatedUdpFormSubmission\n this.currentValues = { ...(updatedUdpFormSubmission.data?.submissionResponseData || {}) };\n this.enqueueSnackbar('Saved sucessfully.', {\n variant: 'success',\n anchorOrigin: { vertical: 'top', horizontal: 'center' },\n });\n } catch (error) {\n this.enqueueSnackbar('There was an error saving.', {\n variant: 'error',\n anchorOrigin: { vertical: 'top', horizontal: 'center' },\n });\n } finally {\n this.isSaving = false;\n this.isUserUpdatedSections = false;\n this.isFormDirty = false;\n }\n };\n\n\n\n /**\n * Manual save function - debounced to 5 seconds\n */\n private handleManualSave = async (values: { [name: string]: any }) => {\n // Only save if handler supports it and user is authenticated\n // if (!this.formSubmissionHandler.supportsAutoSave() || !this.userId || !this.formSubmissionHandler.saveCurrentFormSubmissionState) {\n // return;\n // }\n\n this.isSaving = true;\n this.saveErrorMessage = null;\n\n try {\n const updatedUdpFormSubmission = await this.formSubmissionHandler.saveCurrentFormSubmissionState(values, this.udpFormSubmission);\n this.udpFormSubmission = updatedUdpFormSubmission\n this.currentValues = { ...(updatedUdpFormSubmission.data?.submissionResponseData || {}) };\n if (!new URLSearchParams(window.location.search).has('udpf_submissionId')) {\n // replace the current entry's query string with udpf_submissionId without needing to know the path\n this.replaceUrlWithSubmissionId(updatedUdpFormSubmission.id);\n }\n this.enqueueSnackbar('Form saved successfully.', {\n variant: 'success',\n anchorOrigin: { vertical: 'top', horizontal: 'center' },\n });\n } catch (error) {\n this.enqueueSnackbar('There was an error saving this form', {\n variant: 'error',\n anchorOrigin: { vertical: 'top', horizontal: 'center' },\n });\n this.saveErrorMessage = 'Failed to save form data';\n } finally {\n this.isSaving = false;\n this.isUserUpdatedSections = false;\n this.isFormDirty = false;\n }\n };\n\n private async handleQuestionCommentLiveCRUD(e: CustomEvent<{type: string, questionIdentifierKey: string, commentId: string}>) {\n try {\n const { type, questionIdentifierKey, commentId } = e.detail;\n const [sectionName, questionName] = questionIdentifierKey.split('.');\n let newCurrentValues = structuredClone(this.udpFormSubmission.data.submissionResponseData || {});\n \n // ensure structure exists WITHOUT overwriting existing data\n if (!newCurrentValues[sectionName]) newCurrentValues[sectionName] = {};\n\n if (!newCurrentValues[sectionName][questionName]) {\n // create defaults but do not clobber any existing saved shape from submissionResponseData\n newCurrentValues[sectionName][questionName] = {\n value: '',\n comments: [],\n draftComments: [],\n metadata: {},\n };\n } else {\n // ensure arrays/objects exist so later code can safely push/filter\n newCurrentValues[sectionName][questionName].comments = newCurrentValues[sectionName][questionName].comments ?? [];\n newCurrentValues[sectionName][questionName].draftComments = newCurrentValues[sectionName][questionName].draftComments ?? [];\n newCurrentValues[sectionName][questionName].metadata = newCurrentValues[sectionName][questionName].metadata ?? {};\n }\n\n // normalize draftComments to array if needed (back-compat)\n const maybeDraft = newCurrentValues[sectionName][questionName].draftComments;\n if (maybeDraft && !Array.isArray(maybeDraft)) {\n newCurrentValues[sectionName][questionName].draftComments = [maybeDraft];\n } else if (!maybeDraft) {\n newCurrentValues[sectionName][questionName].draftComments = [];\n }\n\n const commentsArr = newCurrentValues[sectionName][questionName].comments || [];\n const draftsArr = newCurrentValues[sectionName][questionName].draftComments || [];\n\n switch (type) {\n case 'add': {\n const newDraft = {\n value: '',\n commentId: uuidv4(),\n isTempComment: true,\n timestamp: null,\n };\n // put new draft first so activeDraft === draftComments[0] matches UX\n newCurrentValues[sectionName][questionName].draftComments = [newDraft, ...draftsArr];\n break;\n }\n\n case 'save': {\n // find draft by id\n const draftIdx = draftsArr.findIndex(d => d.commentId === commentId);\n if (draftIdx === -1) return;\n const draft = draftsArr[draftIdx];\n const saveTimestamp = draft.timestamp || new Date().toISOString();\n const savedComment = {\n ...draft,\n timestamp: saveTimestamp,\n editedTimestamp: new Date().toISOString(),\n userId: this.clientUserInfo.id,\n userDisplayName: this.clientUserInfo.displayName,\n isDraftComment: false,\n };\n\n // If a saved comment with same id exists, replace it. Otherwise append.\n const existingIdx = commentsArr.findIndex(c => c.commentId === commentId);\n if (existingIdx !== -1) {\n const newComments = [...commentsArr];\n newComments[existingIdx] = { ...savedComment };\n newCurrentValues[sectionName][questionName].comments = newComments;\n } else {\n newCurrentValues[sectionName][questionName].comments = [...commentsArr, savedComment];\n }\n\n // remove that draft\n newCurrentValues[sectionName][questionName].draftComments = draftsArr.filter(d => d.commentId !== commentId);\n break;\n }\n\n case 'edit': {\n // create a draft copy of the saved comment but DO NOT remove the saved comment from the list.\n const saved = commentsArr.find(c => c.commentId === commentId);\n if (!saved) return;\n const draftFromSaved = { ...saved, isDraftComment: true, timestamp: null };\n\n // Add this draft at the front; keep saved comment intact so content doesn't disappear.\n newCurrentValues[sectionName][questionName].draftComments = [draftFromSaved, ...draftsArr];\n newCurrentValues[sectionName][questionName].comments = commentsArr;\n break;\n }\n\n case 'delete': {\n // mark the comment as deleted and clear its value, then persist.\n newCurrentValues[sectionName][questionName].comments = commentsArr.map(c => {\n if (c.commentId === commentId) {\n return {\n ...c,\n isDeleted: true,\n value: '',\n editedTimestamp: new Date().toISOString(),\n };\n }\n return c;\n });\n\n break;\n }\n\n case 'editClose': {\n // Cancel edit: remove the draft only, do NOT restore/alter saved comments.\n newCurrentValues[sectionName][questionName].draftComments = draftsArr.filter(d => d.commentId !== commentId);\n break;\n }\n }\n\n // if it's a save or delete action, persist immediately\n if (type === 'save' || type === 'delete') {\n this.udpFormSubmission.data.submissionResponseData = { ...newCurrentValues };\n await this.handleCommmentUpdate(newCurrentValues);\n } else {\n this.currentValues = { ...newCurrentValues };\n this.udpFormSubmission.data.submissionResponseData = { ...newCurrentValues };\n }\n\n } catch (error) {\n console.error('Error handling live comment CRUD:', error);\n } finally {\n this.triggerFormRerender();\n }\n }\n\n private handleFormChange = (values: { [name: string]: any }) => {\n if (this.isUpdatingSections) return;\n this.udpFormSubmission.data.submissionResponseData = values;\n };\n\n private handleFinish = () => {\n // Trigger any finish actions\n if (this.triggerAction) {\n this.triggerAction(null as any, { action: 'finish' });\n } \n };\n\n private triggerFormRerender = () => {\n const scrollY = window.scrollY;\n this.reRenderKey += 1;\n\n // We use requestAnimationFrame to wait for the browser to \n // finish the paint cycle of the new key-rendered component\n requestAnimationFrame(() => {\n window.scrollTo({\n top: scrollY,\n behavior: 'auto' // 'auto' is faster and prevents jitter compared to 'smooth'\n });\n });\n};\n\n private async loadFollowUpForms(sectionKey, questionKey) {\n this.isLoading = true;\n this.saveErrorMessage = '';\n try {\n const response = await fetchLatestForms(this.followUpSideSheetListPageNumber, this.FOLLOW_UP_SIDE_SHEET_PAGE_SIZE, [{ searchField: 'type', searchOperator: '=', searchValue: UdpFormsTypeEnum.FollowUp }], { sortDirection: 'DESC', sortColumn: 'lastModifiedOn' });\n\n const data = response.data;\n\n if (!data || !Array.isArray(data.pageList)) {\n throw new Error('Malformed form versions data.');\n }\n\n this.sideSheetFollowUpFormsList = this.formatFollowUpFormsList(data.pageList, sectionKey, questionKey);\n this.followUpSideSheetTotalItems = data.total ?? 0;\n } catch (err) {\n console.error('Failed to follow up form.', err);\n this.saveErrorMessage = 'Failed to follow up forms.';\n } finally {\n this.isLoading = false;\n }\n }\n\n handleLaunchFollowUpForm = async (followUpFormId, followUpFormVersion, parentFormSubmissionId, parentFormId, parentFormVersion, sectionKey, questionKey) => {\n // create a new follow up form submission instance wiht a link to the parent form submission\n const followUpMasterForm = await this.formHandler.getFormByFormIdAndFormVersion(followUpFormId, followUpFormVersion);\n const followUpSubmissionData = {\n submissionResponseData: buildEmptyCurrentValues(followUpMasterForm),\n submissionMetadata: {\n ParentSubmission: {\n submissionId: parentFormSubmissionId,\n formId: parentFormId,\n formVersion: parentFormVersion\n }\n }\n }\n\n const followUpFormSubmission = new UdpFormSubmission({formId: followUpFormId, formVersion: followUpFormVersion, unityUserId: this.clientUserInfo.id, data: followUpSubmissionData})\n const followUpFormSubmissionHandler = FormSubmissionHandlerFactory.create(false, this.clientUserInfo.id);\n const response = await followUpFormSubmissionHandler.createNewLinkedFollowUpFormSubmission(followUpFormSubmission);\n\n // update the current form submission state with the follow up form submission id in the metadata\n const itemMetadata = this.udpFormSubmission.data.submissionResponseData[sectionKey][questionKey].metadata\n this.udpFormSubmission.data.submissionResponseData[sectionKey][questionKey].metadata = {... itemMetadata, followUpFormSubmissionId: response.id}\n await this.performBackgroundSaveAndUpdateLocalSubmissionState(this.udpFormSubmission.data.submissionResponseData);\n\n const url = `/page/${UdpFormsPageIdEnum.FormRendererPageId}?udpf_submissionId=${response.id}`;\n window.open(url, '_blank'); \n this.handleSideSheetClose();\n this.triggerFormRerender();\n };\n\n private formatFollowUpFormsList(followUpFormsList, sectionKey, questionKey) {\n return followUpFormsList.map(item => ({\n listItemData: item,\n history: this.history,\n handleLaunchFollowUpForm: async () => await this.handleLaunchFollowUpForm(item.id, item.version, this.udpFormSubmission.id, this.udpFormSubmission.formId, this.udpFormSubmission.formVersion, sectionKey, questionKey),\n }));\n }\n\n private handleSideSheetClose = () => {\n // reset side sheet data\n this.sideSheetFollowUpFormsList = [];\n this.followUpSideSheetListPageNumber = 1;\n this.followUpSideSheetTotalItems = 0;\n this.isFollowUpFormsSideSheetOpen = false;\n this.followUpParentSectionKey = '';\n this.followUpParentQuestionKey = '';\n };\n\n private async handleSideSheetPageChange(page: number) {\n this.followUpSideSheetListPageNumber = page;\n await this.loadFollowUpForms(this.followUpParentSectionKey, this.followUpParentQuestionKey);\n }\n\n private renderFollowUpSideSheet() {\n return (\n <udp-side-sheet\n title=\"Link a Follow Up Form\"\n open={this.isFollowUpFormsSideSheetOpen}\n onUdpSideSheetClose={() => this.handleSideSheetClose()}\n position=\"right\"\n width=\"md\"\n >\n {this.isLoading && this.isFollowUpFormsSideSheetOpen && <udp-linear-loader />}\n <udp-list-renderer\n itemComponent=\"udp-forms-follow-up-list-card\"\n data={this.sideSheetFollowUpFormsList}\n pagination\n isServerSide\n isLoading={this.isLoading}\n itemsPerPage={this.FOLLOW_UP_SIDE_SHEET_PAGE_SIZE}\n currentPage={this.followUpSideSheetListPageNumber}\n totalItems={this.followUpSideSheetTotalItems}\n onPageChange={e => this.handleSideSheetPageChange(e.detail)}\n componentDataMap={this.componentMap}\n spacing='md'\n />\n </udp-side-sheet>\n );\n }\n\n private isShowManualSaveIcon(): boolean{\n // return (this.isFormDirty || this.isUserUpdatedSections) && !this.isSubmitted && !!this.userId;\n const showSaveIcon = (this.isFormDirty || this.isUserUpdatedSections) && !!this.clientUserInfo.id;\n return showSaveIcon;\n };\n\n\n private get isReadOnlyMode() : boolean {\n return this.isSubmitted || this.udpFormSubmission.unityUserId !== this.clientUserInfo.id;\n }\n\n\n render() {\n return (\n <div \n class=\"forms-renderer-container\"\n style={this.isLoading ? { minHeight: '100vh' } : {}} // used for keeping the UI smoother during rerender. ensure the container has a minimum height during loading\n >\n {this.renderFollowUpSideSheet()}\n <udp-forms-ui\n udpForm={this.udpForm}\n currentValues={this.currentValues}\n udpFormSubmission={this.udpFormSubmission}\n submitSuccessful={this.submitSuccessful}\n isSaving={this.isSaving}\n saveErrorMessage={this.saveErrorMessage}\n // showAutoSaveStatus={this.formSubmissionHandler.supportsAutoSave() && !!this.userId}\n readonly={this.isReadOnlyMode}\n handleSubmit={this.handleSubmit.bind(this)}\n handleSave={values => Promise.resolve(this.debouncedManualSave(values))}\n handleChange={this.handleFormChange}\n handleAction={this.triggerAction}\n handleFinish={this.handleFinish}\n clientUserInfo={this.clientUserInfo}\n isSubmitted={this.isSubmitted}\n dynamicSections={this.dynamicSections}\n duplicateRepeatableSection={this.duplicateRepeatableSection}\n deleteRepeatableSection={this.deleteRepeatableSection}\n key={`form-rerender-key-${this.reRenderKey}`}\n isShowManualSaveIcon={this.isShowManualSaveIcon()}\n isLoading={this.isLoading}\n performBackgroundSaveAndUpdateLocalSubmissionState={this.performBackgroundSaveAndUpdateLocalSubmissionState}\n />\n </div>\n );\n }\n}\n"],"version":3}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { p as proxyCustomElement, H, c as createEvent, h } from './index2.js';
|
|
2
|
-
import { U as UdpFormsFieldTypeEnum } from './enums.js';
|
|
2
|
+
import { c as UdpFormsSubmissionStatusEnum, U as UdpFormsFieldTypeEnum } from './enums.js';
|
|
3
3
|
import { f as fontOverrideMapping, o as overrideFont } from './utils.js';
|
|
4
4
|
import { g as getIconFromName, d as defineCustomElement$9 } from './udp-icon2.js';
|
|
5
5
|
import { d as defineCustomElement$v } from './custom-button2.js';
|
|
@@ -43,7 +43,7 @@ const UdpFormsUi = /*@__PURE__*/ proxyCustomElement(class UdpFormsUi extends H {
|
|
|
43
43
|
}
|
|
44
44
|
this.__attachShadow();
|
|
45
45
|
this.formDirtyChange = createEvent(this, "formDirtyChange");
|
|
46
|
-
this.
|
|
46
|
+
this.currentValues = {};
|
|
47
47
|
this.submitSuccessful = false;
|
|
48
48
|
this.isLoading = false;
|
|
49
49
|
this.isSaving = false;
|
|
@@ -135,7 +135,7 @@ const UdpFormsUi = /*@__PURE__*/ proxyCustomElement(class UdpFormsUi extends H {
|
|
|
135
135
|
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) {
|
|
136
136
|
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;
|
|
137
137
|
}
|
|
138
|
-
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.
|
|
138
|
+
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 &&
|
|
139
139
|
(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) && {
|
|
140
140
|
backgroundColor: this.udpForm.styleOverrides.headerBackgroundColor,
|
|
141
141
|
})) }, 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,
|
|
@@ -165,9 +165,9 @@ const UdpFormsUi = /*@__PURE__*/ proxyCustomElement(class UdpFormsUi extends H {
|
|
|
165
165
|
helperText: (_a = this.udpForm.styleOverrides) === null || _a === void 0 ? void 0 : _a.helperText,
|
|
166
166
|
paragraphText: (_b = this.udpForm.styleOverrides) === null || _b === void 0 ? void 0 : _b.paragraphText,
|
|
167
167
|
questionText: (_c = this.udpForm.styleOverrides) === null || _c === void 0 ? void 0 : _c.questionText,
|
|
168
|
-
}, question: question, questionNumber: num, value: (_g = (_f = (_e = (_d = this.
|
|
168
|
+
}, 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 })));
|
|
169
169
|
}))))));
|
|
170
|
-
}), ((_r = this.udpFormSubmission) === null || _r === void 0 ? void 0 : _r.status) !=
|
|
170
|
+
}), ((_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: () => {
|
|
171
171
|
console.log('Submit button clicked');
|
|
172
172
|
// Let the form handle the submit naturally
|
|
173
173
|
} })))))) : (
|
|
@@ -181,7 +181,7 @@ const UdpFormsUi = /*@__PURE__*/ proxyCustomElement(class UdpFormsUi extends H {
|
|
|
181
181
|
static get style() { return udpFormsUiCss; }
|
|
182
182
|
}, [257, "udp-forms-ui", {
|
|
183
183
|
"udpForm": [16],
|
|
184
|
-
"
|
|
184
|
+
"currentValues": [16],
|
|
185
185
|
"udpFormSubmission": [16],
|
|
186
186
|
"submitSuccessful": [4, "submit-successful"],
|
|
187
187
|
"isLoading": [4, "is-loading"],
|