@ukhomeoffice/cop-react-form-renderer 6.0.6-peter → 6.7.0-alpha
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/components/CheckYourAnswers/Answer.js +12 -12
- package/dist/components/CheckYourAnswers/Answer.test.js +92 -127
- package/dist/components/CheckYourAnswers/CheckYourAnswers.js +101 -131
- package/dist/components/CheckYourAnswers/CheckYourAnswers.scss +2 -2
- package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +463 -769
- package/dist/components/CollectionPage/CollectionPage.js +75 -59
- package/dist/components/CollectionPage/CollectionPage.test.js +316 -366
- package/dist/components/CollectionSummary/BannerStrip.js +15 -14
- package/dist/components/CollectionSummary/BannerStrip.scss +2 -2
- package/dist/components/CollectionSummary/BannerStrip.test.js +98 -59
- package/dist/components/CollectionSummary/CollectionSummary.js +144 -135
- package/dist/components/CollectionSummary/CollectionSummary.scss +1 -1
- package/dist/components/CollectionSummary/CollectionSummary.test.js +167 -197
- package/dist/components/CollectionSummary/Confirmation.js +14 -12
- package/dist/components/CollectionSummary/Confirmation.scss +1 -1
- package/dist/components/CollectionSummary/Confirmation.test.js +68 -63
- package/dist/components/CollectionSummary/RenderListView.js +54 -56
- package/dist/components/CollectionSummary/RenderListView.scss +10 -1
- package/dist/components/CollectionSummary/RenderListView.test.js +89 -78
- package/dist/components/CollectionSummary/SummaryCard.js +135 -145
- package/dist/components/CollectionSummary/SummaryCard.scss +2 -1
- package/dist/components/CollectionSummary/SummaryCard.test.js +943 -932
- package/dist/components/CollectionSummary/SummaryCardDetails.js +120 -62
- package/dist/components/CollectionSummary/SummaryCardDetails.scss +43 -6
- package/dist/components/CollectionSummary/SummaryCardDetails.test.js +261 -120
- package/dist/components/CollectionSummary/SummaryCardValidationContext.js +38 -33
- package/dist/components/CollectionSummary/SummaryCardValidationContext.test.js +62 -73
- package/dist/components/FormComponent/Collection.js +81 -108
- package/dist/components/FormComponent/Collection.test.js +909 -943
- package/dist/components/FormComponent/Container.js +40 -38
- package/dist/components/FormComponent/Container.test.js +314 -345
- package/dist/components/FormComponent/FormComponent.js +80 -71
- package/dist/components/FormComponent/FormComponent.test.js +353 -414
- package/dist/components/FormComponent/helpers/addLabel.js +4 -7
- package/dist/components/FormComponent/helpers/getComponentDisabled.js +1 -1
- package/dist/components/FormComponent/helpers/getComponentDisabled.test.js +7 -7
- package/dist/components/FormComponent/helpers/getComponentError.js +3 -5
- package/dist/components/FormComponent/helpers/getComponentError.test.js +14 -14
- package/dist/components/FormComponent/helpers/getComponentFieldSet.js +3 -4
- package/dist/components/FormComponent/helpers/getComponentFieldSet.test.js +6 -6
- package/dist/components/FormComponent/helpers/index.js +4 -4
- package/dist/components/FormPage/FormPage.js +65 -80
- package/dist/components/FormPage/FormPage.scss +1 -1
- package/dist/components/FormPage/FormPage.test.js +127 -163
- package/dist/components/FormRenderer/FormRenderer.js +150 -183
- package/dist/components/FormRenderer/FormRenderer.scss +1 -1
- package/dist/components/FormRenderer/FormRenderer.test.js +730 -1115
- package/dist/components/FormRenderer/handlers/cyaAction.js +2 -2
- package/dist/components/FormRenderer/handlers/getPageId.js +1 -3
- package/dist/components/FormRenderer/handlers/getPageId.test.js +14 -14
- package/dist/components/FormRenderer/handlers/handlers.test.js +32 -32
- package/dist/components/FormRenderer/handlers/index.js +1 -1
- package/dist/components/FormRenderer/handlers/navigate.js +3 -3
- package/dist/components/FormRenderer/handlers/submissionError.js +1 -1
- package/dist/components/FormRenderer/helpers/canActionProceed.js +1 -1
- package/dist/components/FormRenderer/helpers/canActionProceed.test.js +15 -15
- package/dist/components/FormRenderer/helpers/canCYASubmit.js +1 -3
- package/dist/components/FormRenderer/helpers/canCYASubmit.test.js +16 -20
- package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.js +17 -22
- package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.test.js +16 -16
- package/dist/components/FormRenderer/helpers/getCYA.js +3 -5
- package/dist/components/FormRenderer/helpers/getCYA.test.js +11 -11
- package/dist/components/FormRenderer/helpers/getFormState.js +5 -7
- package/dist/components/FormRenderer/helpers/getFormState.test.js +10 -10
- package/dist/components/FormRenderer/helpers/getNextPageId.js +13 -24
- package/dist/components/FormRenderer/helpers/getNextPageId.test.js +67 -67
- package/dist/components/FormRenderer/helpers/getPage.js +2 -4
- package/dist/components/FormRenderer/helpers/getPage.test.js +11 -11
- package/dist/components/FormRenderer/helpers/getRelevantPages.js +7 -9
- package/dist/components/FormRenderer/helpers/getRelevantPages.test.js +14 -14
- package/dist/components/FormRenderer/helpers/getSubmissionStatus.js +5 -5
- package/dist/components/FormRenderer/helpers/getSubmissionStatus.test.js +103 -97
- package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +62 -60
- package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +71 -78
- package/dist/components/FormRenderer/helpers/index.js +2 -4
- package/dist/components/FormRenderer/onCYAAction.js +59 -51
- package/dist/components/FormRenderer/onCYAAction.test.js +164 -152
- package/dist/components/FormRenderer/onPageAction.js +50 -48
- package/dist/components/FormRenderer/onPageAction.test.js +241 -217
- package/dist/components/FormRenderer/onTaskAction.js +9 -13
- package/dist/components/FormRenderer/onTaskAction.test.js +93 -88
- package/dist/components/PageActions/ActionButton.js +12 -15
- package/dist/components/PageActions/ActionButton.test.js +56 -78
- package/dist/components/PageActions/PageActions.js +10 -10
- package/dist/components/PageActions/PageActions.test.js +86 -115
- package/dist/components/SummaryList/GroupAction.js +9 -17
- package/dist/components/SummaryList/GroupAction.test.js +37 -33
- package/dist/components/SummaryList/RowAction.js +11 -16
- package/dist/components/SummaryList/RowAction.test.js +37 -33
- package/dist/components/SummaryList/SummaryList.js +21 -26
- package/dist/components/SummaryList/SummaryList.scss +2 -2
- package/dist/components/SummaryList/SummaryList.test.js +143 -166
- package/dist/components/SummaryList/SummaryListHeadingRow.js +6 -4
- package/dist/components/SummaryList/SummaryListRow.js +6 -4
- package/dist/components/SummaryList/SummaryListTitleRow.js +5 -3
- package/dist/components/SummaryList/helpers/getGroupActionAttributes.js +3 -5
- package/dist/components/SummaryList/helpers/getGroupActionAttributes.test.js +22 -22
- package/dist/components/SummaryList/helpers/getRowActionAttributes.js +3 -5
- package/dist/components/SummaryList/helpers/getRowActionAttributes.test.js +22 -22
- package/dist/components/SummaryList/helpers/index.js +1 -1
- package/dist/components/TaskList/Task.js +19 -29
- package/dist/components/TaskList/Task.test.js +83 -76
- package/dist/components/TaskList/TaskList.js +45 -71
- package/dist/components/TaskList/TaskList.scss +1 -1
- package/dist/components/TaskList/TaskList.test.js +113 -111
- package/dist/components/TaskList/TaskState.js +7 -5
- package/dist/components/TaskList/TaskState.test.js +52 -45
- package/dist/components/index.js +7 -7
- package/dist/context/HooksContext/HooksContext.js +57 -80
- package/dist/context/HooksContext/HooksContext.test.js +26 -35
- package/dist/context/HooksContext/index.js +3 -4
- package/dist/context/ValidationContext/ValidationContext.js +65 -72
- package/dist/context/ValidationContext/ValidationContext.test.js +58 -61
- package/dist/context/ValidationContext/index.js +3 -4
- package/dist/context/index.js +2 -2
- package/dist/hooks/index.js +9 -10
- package/dist/hooks/useAxios.js +14 -40
- package/dist/hooks/useGetRequest.js +61 -97
- package/dist/hooks/useHooks.js +1 -3
- package/dist/hooks/useRefData.js +27 -40
- package/dist/hooks/useValidation.js +1 -3
- package/dist/index.js +13 -14
- package/dist/models/CollectionLabels.js +1 -1
- package/dist/models/ComponentTypes.js +25 -25
- package/dist/models/EventTypes.js +4 -4
- package/dist/models/FormPages.js +4 -4
- package/dist/models/FormTypes.js +8 -8
- package/dist/models/HubFormats.js +3 -3
- package/dist/models/PageAction.js +44 -38
- package/dist/models/TaskStates.js +29 -28
- package/dist/models/index.js +9 -9
- package/dist/setupTests.js +30 -31
- package/dist/utils/CheckYourAnswers/getCYAAction.js +5 -5
- package/dist/utils/CheckYourAnswers/getCYAAction.test.js +52 -54
- package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.js +15 -25
- package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.test.js +33 -35
- package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.js +17 -31
- package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.test.js +42 -44
- package/dist/utils/CheckYourAnswers/getCYARow.js +6 -6
- package/dist/utils/CheckYourAnswers/getCYARow.test.js +86 -86
- package/dist/utils/CheckYourAnswers/getCYARowForGroup.js +18 -24
- package/dist/utils/CheckYourAnswers/getCYARowForGroup.test.js +15 -16
- package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +33 -36
- package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +58 -61
- package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +83 -89
- package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +164 -138
- package/dist/utils/CheckYourAnswers/getCYARowsForContainer.js +25 -20
- package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +103 -97
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +13 -18
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +70 -76
- package/dist/utils/CheckYourAnswers/getComponentRowForCYA.js +11 -11
- package/dist/utils/CheckYourAnswers/getComponentRowForCYA.test.js +7 -7
- package/dist/utils/CheckYourAnswers/index.js +1 -1
- package/dist/utils/CheckYourAnswers/showComponentCYA.js +4 -5
- package/dist/utils/CheckYourAnswers/showComponentCYA.test.js +29 -24
- package/dist/utils/CollectionPage/addCollectionPageEntry.js +3 -4
- package/dist/utils/CollectionPage/addCollectionPageEntry.test.js +7 -27
- package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.js +2 -2
- package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.test.js +17 -18
- package/dist/utils/CollectionPage/duplicateCollectionPageEntry.js +29 -19
- package/dist/utils/CollectionPage/duplicateCollectionPageEntry.test.js +66 -22
- package/dist/utils/CollectionPage/getCollectionPageActiveId.js +2 -2
- package/dist/utils/CollectionPage/getCollectionPageActiveId.test.js +10 -10
- package/dist/utils/CollectionPage/getCollectionPageActiveIndex.js +7 -11
- package/dist/utils/CollectionPage/getCollectionPageActiveIndex.test.js +22 -22
- package/dist/utils/CollectionPage/getCollectionPageData.js +8 -12
- package/dist/utils/CollectionPage/getCollectionPageData.test.js +19 -19
- package/dist/utils/CollectionPage/getErrorsForCollection.js +55 -0
- package/dist/utils/CollectionPage/getErrorsForCollection.test.js +153 -0
- package/dist/utils/CollectionPage/getQuickEditPage.js +37 -23
- package/dist/utils/CollectionPage/getQuickEditPage.test.js +26 -45
- package/dist/utils/CollectionPage/index.js +3 -1
- package/dist/utils/CollectionPage/mergeCollectionPages.js +31 -35
- package/dist/utils/CollectionPage/mergeCollectionPages.test.js +20 -20
- package/dist/utils/CollectionPage/removeCollectionPageEntry.js +4 -6
- package/dist/utils/CollectionPage/removeCollectionPageEntry.test.js +10 -10
- package/dist/utils/CollectionPage/setCollectionPageData.js +16 -17
- package/dist/utils/CollectionPage/setCollectionPageData.test.js +38 -20
- package/dist/utils/Component/addShowWhen.js +4 -8
- package/dist/utils/Component/addShowWhen.test.js +37 -37
- package/dist/utils/Component/applyToComponentTree.js +18 -18
- package/dist/utils/Component/applyToComponentTree.test.js +27 -32
- package/dist/utils/Component/cleanAttributes.js +10 -13
- package/dist/utils/Component/cleanAttributes.test.js +17 -18
- package/dist/utils/Component/elevateNestedComponents.js +5 -5
- package/dist/utils/Component/elevateNestedComponents.test.js +30 -30
- package/dist/utils/Component/getComponent.js +88 -94
- package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +18 -17
- package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +46 -59
- package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +39 -48
- package/dist/utils/Component/getComponentTests/getComponent.date.test.js +23 -33
- package/dist/utils/Component/getComponentTests/getComponent.details.test.js +20 -18
- package/dist/utils/Component/getComponentTests/getComponent.email.test.js +17 -22
- package/dist/utils/Component/getComponentTests/getComponent.file.test.js +20 -25
- package/dist/utils/Component/getComponentTests/getComponent.heading.test.js +10 -9
- package/dist/utils/Component/getComponentTests/getComponent.html.test.js +17 -15
- package/dist/utils/Component/getComponentTests/getComponent.insetText.test.js +9 -8
- package/dist/utils/Component/getComponentTests/getComponent.list.test.js +17 -15
- package/dist/utils/Component/getComponentTests/getComponent.multifile.test.js +22 -26
- package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +155 -175
- package/dist/utils/Component/getComponentTests/getComponent.paragraph.test.js +17 -15
- package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +17 -22
- package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +57 -72
- package/dist/utils/Component/getComponentTests/getComponent.select.test.js +17 -22
- package/dist/utils/Component/getComponentTests/getComponent.text.test.js +17 -22
- package/dist/utils/Component/getComponentTests/getComponent.textArea.test.js +31 -38
- package/dist/utils/Component/getComponentTests/getComponent.time.test.js +20 -29
- package/dist/utils/Component/getComponentTests/getComponent.unknown.test.js +2 -2
- package/dist/utils/Component/getComponentTests/getComponent.warningText.test.js +9 -8
- package/dist/utils/Component/getDefaultValue.js +6 -8
- package/dist/utils/Component/getDefaultValue.test.js +12 -12
- package/dist/utils/Component/getDefaultValueFromConfig.js +22 -21
- package/dist/utils/Component/getDefaultValueFromConfig.test.js +31 -31
- package/dist/utils/Component/index.js +1 -1
- package/dist/utils/Component/isEditable.js +2 -4
- package/dist/utils/Component/isEditable.test.js +14 -15
- package/dist/utils/Component/optionIsSelected.js +1 -1
- package/dist/utils/Component/optionIsSelected.test.js +9 -9
- package/dist/utils/Component/setupContainerComponentsPath.js +27 -29
- package/dist/utils/Component/setupContainerComponentsPath.test.js +11 -11
- package/dist/utils/Component/showComponent.js +1 -1
- package/dist/utils/Component/showComponent.test.js +28 -28
- package/dist/utils/Component/wrapInFormGroup.js +2 -2
- package/dist/utils/Condition/index.js +1 -1
- package/dist/utils/Condition/meetsAllConditions.js +8 -8
- package/dist/utils/Condition/meetsAllConditions.test.js +20 -20
- package/dist/utils/Condition/meetsCondition.js +28 -19
- package/dist/utils/Condition/meetsCondition.test.js +476 -376
- package/dist/utils/Condition/meetsOneCondition.js +5 -5
- package/dist/utils/Condition/meetsOneCondition.test.js +16 -16
- package/dist/utils/Condition/setupConditions.js +13 -18
- package/dist/utils/Condition/setupConditions.test.js +7 -7
- package/dist/utils/Container/getEditableComponents.js +3 -5
- package/dist/utils/Container/getEditableComponents.test.js +43 -45
- package/dist/utils/Container/index.js +1 -1
- package/dist/utils/Container/setupNesting.js +16 -20
- package/dist/utils/Container/setupNesting.test.js +27 -30
- package/dist/utils/Container/showContainer.js +3 -7
- package/dist/utils/Container/showContainer.test.js +30 -30
- package/dist/utils/Data/applyFormula.js +38 -48
- package/dist/utils/Data/applyFormula.test.js +20 -20
- package/dist/utils/Data/getAutocompleteSource.js +18 -26
- package/dist/utils/Data/getAutocompleteSource.test.js +80 -86
- package/dist/utils/Data/getDataPath.js +18 -28
- package/dist/utils/Data/getDataPath.test.js +12 -12
- package/dist/utils/Data/getOptions.js +29 -25
- package/dist/utils/Data/getOptions.test.js +93 -20
- package/dist/utils/Data/getSourceData.js +6 -19
- package/dist/utils/Data/getSourceData.test.js +84 -80
- package/dist/utils/Data/index.js +1 -1
- package/dist/utils/Data/nestInRefdataOptions.js +42 -0
- package/dist/utils/Data/nestInRefdataOptions.test.js +236 -0
- package/dist/utils/Data/refDataToOptions.js +10 -13
- package/dist/utils/Data/refDataToOptions.test.js +19 -19
- package/dist/utils/Data/setDataItem.js +7 -8
- package/dist/utils/Data/setDataItem.test.js +37 -37
- package/dist/utils/Data/setupFormData.js +13 -21
- package/dist/utils/Data/setupFormData.test.js +51 -50
- package/dist/utils/Data/setupRefDataUrlForComponent.js +20 -26
- package/dist/utils/Data/setupRefDataUrlForComponent.test.js +24 -24
- package/dist/utils/FormPage/applyConditionalProperties.js +5 -9
- package/dist/utils/FormPage/applyConditionalProperties.test.js +15 -18
- package/dist/utils/FormPage/getConditionalText.js +3 -3
- package/dist/utils/FormPage/getConditionalText.test.js +29 -29
- package/dist/utils/FormPage/getFormPage.js +15 -16
- package/dist/utils/FormPage/getFormPage.test.js +47 -46
- package/dist/utils/FormPage/getFormPages.js +7 -12
- package/dist/utils/FormPage/getFormPages.test.js +20 -23
- package/dist/utils/FormPage/getPageActions.js +9 -15
- package/dist/utils/FormPage/getPageActions.test.js +32 -32
- package/dist/utils/FormPage/getParagraphFromText.js +5 -7
- package/dist/utils/FormPage/getParagraphFromText.test.js +6 -6
- package/dist/utils/FormPage/index.js +2 -4
- package/dist/utils/FormPage/showFormPage.js +3 -7
- package/dist/utils/FormPage/showFormPage.test.js +32 -32
- package/dist/utils/FormPage/showFormPageCYA.js +1 -1
- package/dist/utils/FormPage/showFormPageCYA.test.js +8 -8
- package/dist/utils/FormPage/useComponent.js +21 -28
- package/dist/utils/FormPage/useComponent.test.js +77 -79
- package/dist/utils/Format/formatData.js +1 -1
- package/dist/utils/Format/formatData.test.js +18 -18
- package/dist/utils/Format/formatDataForComponent.js +5 -6
- package/dist/utils/Format/formatDataForComponent.test.js +50 -78
- package/dist/utils/Format/formatDataForForm.js +6 -8
- package/dist/utils/Format/formatDataForForm.test.js +13 -16
- package/dist/utils/Format/formatDataForPage.js +4 -5
- package/dist/utils/Format/formatDataForPage.test.js +20 -25
- package/dist/utils/Format/index.js +1 -1
- package/dist/utils/Hub/getFormHub.js +1 -1
- package/dist/utils/Hub/getFormHub.test.js +28 -31
- package/dist/utils/Hub/index.js +1 -1
- package/dist/utils/Meta/constants.js +2 -2
- package/dist/utils/Meta/documents/getDocuments.js +1 -1
- package/dist/utils/Meta/documents/getDocuments.test.js +24 -16
- package/dist/utils/Meta/documents/index.js +1 -1
- package/dist/utils/Meta/documents/setDocumentsForField.js +14 -16
- package/dist/utils/Meta/documents/setDocumentsForField.test.js +68 -34
- package/dist/utils/Meta/index.js +1 -1
- package/dist/utils/Operate/checkValueIsTruthy.js +2 -2
- package/dist/utils/Operate/checkValueIsTruthy.test.js +16 -16
- package/dist/utils/Operate/getFirstOf.js +5 -5
- package/dist/utils/Operate/getFirstOf.test.js +31 -31
- package/dist/utils/Operate/getIndexOfMatchingValueIn.js +10 -10
- package/dist/utils/Operate/getIndexOfMatchingValueIn.test.js +46 -52
- package/dist/utils/Operate/index.js +1 -1
- package/dist/utils/Operate/persistValueInFormData.js +3 -3
- package/dist/utils/Operate/persistValueInFormData.test.js +22 -20
- package/dist/utils/Operate/runPageOperations.js +7 -7
- package/dist/utils/Operate/runPageOperations.test.js +35 -36
- package/dist/utils/Operate/setValueInFormData.js +2 -2
- package/dist/utils/Operate/setValueInFormData.test.js +16 -16
- package/dist/utils/Operate/shouldRun.js +6 -6
- package/dist/utils/Operate/shouldRun.test.js +21 -27
- package/dist/utils/Validate/additional/conditionallyRequired.js +4 -4
- package/dist/utils/Validate/additional/conditionallyRequired.test.js +18 -18
- package/dist/utils/Validate/additional/index.js +6 -6
- package/dist/utils/Validate/additional/index.test.js +12 -12
- package/dist/utils/Validate/additional/mustBeAfter.js +2 -2
- package/dist/utils/Validate/additional/mustBeAfter.test.js +40 -40
- package/dist/utils/Validate/additional/mustBeBefore.js +2 -2
- package/dist/utils/Validate/additional/mustBeBefore.test.js +28 -28
- package/dist/utils/Validate/additional/mustBeEarlierDateTime.js +7 -11
- package/dist/utils/Validate/additional/mustBeEarlierDateTime.test.js +37 -41
- package/dist/utils/Validate/additional/mustBeGreaterThan.js +2 -2
- package/dist/utils/Validate/additional/mustBeGreaterThan.test.js +18 -18
- package/dist/utils/Validate/additional/mustBeInTheFuture.js +2 -2
- package/dist/utils/Validate/additional/mustBeInTheFuture.test.js +12 -12
- package/dist/utils/Validate/additional/mustBeInThePast.js +3 -3
- package/dist/utils/Validate/additional/mustBeInThePast.test.js +12 -12
- package/dist/utils/Validate/additional/mustBeLessThan.js +2 -2
- package/dist/utils/Validate/additional/mustBeLessThan.test.js +17 -17
- package/dist/utils/Validate/additional/mustBeLongerThan.js +1 -1
- package/dist/utils/Validate/additional/mustBeLongerThan.test.js +16 -16
- package/dist/utils/Validate/additional/mustBeNumbersOnly.js +2 -2
- package/dist/utils/Validate/additional/mustBeNumbersOnly.test.js +20 -20
- package/dist/utils/Validate/additional/mustBeShorterThan.js +1 -1
- package/dist/utils/Validate/additional/mustBeShorterThan.test.js +16 -16
- package/dist/utils/Validate/additional/mustBeUniqueInCollection.js +8 -4
- package/dist/utils/Validate/additional/mustBeUniqueInCollection.test.js +64 -32
- package/dist/utils/Validate/additional/mustEnterAtLeastOne.js +2 -2
- package/dist/utils/Validate/additional/mustEnterAtLeastOne.test.js +14 -16
- package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.js +1 -1
- package/dist/utils/Validate/additional/mustHaveLessThanDecimalPlaces.test.js +12 -12
- package/dist/utils/Validate/additional/mustNotContainSql.js +3 -4
- package/dist/utils/Validate/additional/mustNotContainSql.test.js +14 -14
- package/dist/utils/Validate/additional/mustSelectOnlyOne.js +2 -2
- package/dist/utils/Validate/additional/mustSelectOnlyOne.test.js +28 -26
- package/dist/utils/Validate/additional/utils.js +9 -22
- package/dist/utils/Validate/index.js +1 -1
- package/dist/utils/Validate/validateCollection.js +19 -25
- package/dist/utils/Validate/validateCollection.test.js +74 -66
- package/dist/utils/Validate/validateComponent.js +17 -15
- package/dist/utils/Validate/validateComponent.test.js +167 -146
- package/dist/utils/Validate/validateContainer.js +16 -19
- package/dist/utils/Validate/validateContainer.test.js +84 -45
- package/dist/utils/Validate/validateDate.js +15 -21
- package/dist/utils/Validate/validateDate.test.js +31 -32
- package/dist/utils/Validate/validateEmail.js +6 -8
- package/dist/utils/Validate/validateEmail.test.js +25 -25
- package/dist/utils/Validate/validateMultifile.js +5 -7
- package/dist/utils/Validate/validateMultifile.test.js +17 -18
- package/dist/utils/Validate/validatePage.js +24 -18
- package/dist/utils/Validate/validatePage.test.js +263 -182
- package/dist/utils/Validate/validateRegex.js +3 -5
- package/dist/utils/Validate/validateRegex.test.js +14 -14
- package/dist/utils/Validate/validateRequired.js +4 -6
- package/dist/utils/Validate/validateRequired.test.js +18 -18
- package/dist/utils/Validate/validateTextArea.js +4 -6
- package/dist/utils/Validate/validateTextArea.test.js +20 -20
- package/dist/utils/Validate/validateTime.js +11 -18
- package/dist/utils/Validate/validateTime.test.js +16 -16
- package/dist/utils/index.js +7 -9
- package/package.json +5 -5
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/component-used-in-multiple-pages-data.json +0 -4
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/component-used-in-multiple-pages-form.json +0 -61
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-collection-data-removed.json +0 -4
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-collections.json +0 -8
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-components-removed.json +0 -3
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-components.json +0 -5
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-entire-collection-removed.json +0 -3
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-nested-component-removed.json +0 -10
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/data-with-nested-components.json +0 -11
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/form-for-nested-components.json +0 -96
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/form-with-collections-delete-entire.json +0 -47
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/form-with-collections.json +0 -46
- package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/form-with-components.json +0 -48
- package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.js +0 -175
- package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.test.js +0 -113
- package/dist/components/FormRenderer/helpers/deleteNodeByPath.js +0 -20
- package/dist/components/FormRenderer/helpers/deleteNodeByPath.test.js +0 -56
|
@@ -2,30 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
var _mustHaveLessThanDecimalPlaces = _interopRequireDefault(require("./mustHaveLessThanDecimalPlaces"));
|
|
4
4
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
5
|
-
describe('utils',
|
|
6
|
-
describe('Validate',
|
|
7
|
-
describe('additional',
|
|
8
|
-
describe('mustHaveLessThanDecimalPlaces',
|
|
9
|
-
test('should return false given a number with more than the allowed number of decimal places',
|
|
10
|
-
|
|
5
|
+
describe('utils', () => {
|
|
6
|
+
describe('Validate', () => {
|
|
7
|
+
describe('additional', () => {
|
|
8
|
+
describe('mustHaveLessThanDecimalPlaces', () => {
|
|
9
|
+
test('should return false given a number with more than the allowed number of decimal places', () => {
|
|
10
|
+
const result = (0, _mustHaveLessThanDecimalPlaces.default)('999999999.9999', {
|
|
11
11
|
maxDecimals: 3
|
|
12
12
|
});
|
|
13
13
|
expect(result).toEqual(false);
|
|
14
14
|
});
|
|
15
|
-
test('should return true given a number with less than the allowed number of decimal places',
|
|
16
|
-
|
|
15
|
+
test('should return true given a number with less than the allowed number of decimal places', () => {
|
|
16
|
+
const result = (0, _mustHaveLessThanDecimalPlaces.default)('999999999.99', {
|
|
17
17
|
maxDecimals: 3
|
|
18
18
|
});
|
|
19
19
|
expect(result).toEqual(true);
|
|
20
20
|
});
|
|
21
|
-
test('should return true given a number with no decimal places',
|
|
22
|
-
|
|
21
|
+
test('should return true given a number with no decimal places', () => {
|
|
22
|
+
const result = (0, _mustHaveLessThanDecimalPlaces.default)('999999999', {
|
|
23
23
|
maxDecimals: 3
|
|
24
24
|
});
|
|
25
25
|
expect(result).toEqual(true);
|
|
26
26
|
});
|
|
27
|
-
test('should return true given nothing',
|
|
28
|
-
|
|
27
|
+
test('should return true given nothing', () => {
|
|
28
|
+
const result = (0, _mustHaveLessThanDecimalPlaces.default)(undefined, {
|
|
29
29
|
maxDecimals: 3
|
|
30
30
|
});
|
|
31
31
|
expect(result).toEqual(true);
|
|
@@ -4,14 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
8
7
|
// NOTE: SQL RegEx reference:
|
|
9
8
|
// http://www.symantec.com/connect/articles/detection-sql-injection-and-cross-site-scripting-attacks
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
const SQL_COMBINED = /(%27)|(')|(--)|(%23)|(#)|((%3D)|(=))[^\n]*((%27)|(')|(--)|(%3B)|(;))|w*((%27)|('))((%6F)|o|(%4F))((%72)|r|(%52))|((%27)|('))union/i;
|
|
10
|
+
const mustNotContainSql = value => {
|
|
12
11
|
// eslint-disable-next-line no-extra-boolean-cast
|
|
13
12
|
if (!!value) {
|
|
14
|
-
|
|
13
|
+
const string = typeof value === 'object' ? JSON.stringify(value) : String(value);
|
|
15
14
|
return !SQL_COMBINED.test(string);
|
|
16
15
|
}
|
|
17
16
|
return false;
|
|
@@ -2,28 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
var _mustNotContainSql = _interopRequireDefault(require("./mustNotContainSql"));
|
|
4
4
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
5
|
-
describe('utils',
|
|
6
|
-
describe('Validate',
|
|
7
|
-
describe('additional',
|
|
8
|
-
describe('mustNotContainSql',
|
|
9
|
-
test('should return true given a string not containing sql characters',
|
|
10
|
-
|
|
5
|
+
describe('utils', () => {
|
|
6
|
+
describe('Validate', () => {
|
|
7
|
+
describe('additional', () => {
|
|
8
|
+
describe('mustNotContainSql', () => {
|
|
9
|
+
test('should return true given a string not containing sql characters', () => {
|
|
10
|
+
const result = (0, _mustNotContainSql.default)('test');
|
|
11
11
|
expect(result).toEqual(true);
|
|
12
12
|
});
|
|
13
|
-
test('should return true given non-string datatype is converted to string',
|
|
14
|
-
|
|
13
|
+
test('should return true given non-string datatype is converted to string', () => {
|
|
14
|
+
const result = (0, _mustNotContainSql.default)(123);
|
|
15
15
|
expect(result).toEqual(true);
|
|
16
16
|
});
|
|
17
|
-
test('should return false given a string containing sql characters',
|
|
18
|
-
|
|
17
|
+
test('should return false given a string containing sql characters', () => {
|
|
18
|
+
const result = (0, _mustNotContainSql.default)("test' OR '1'='1'");
|
|
19
19
|
expect(result).toEqual(false);
|
|
20
20
|
});
|
|
21
|
-
test('should return false given string is null',
|
|
22
|
-
|
|
21
|
+
test('should return false given string is null', () => {
|
|
22
|
+
const result = (0, _mustNotContainSql.default)(null);
|
|
23
23
|
expect(result).toEqual(false);
|
|
24
24
|
});
|
|
25
|
-
test('should return false given string is not defined',
|
|
26
|
-
|
|
25
|
+
test('should return false given string is not defined', () => {
|
|
26
|
+
const result = (0, _mustNotContainSql.default)(undefined);
|
|
27
27
|
expect(result).toEqual(false);
|
|
28
28
|
});
|
|
29
29
|
});
|
|
@@ -10,9 +10,9 @@ exports.default = void 0;
|
|
|
10
10
|
* @param {object} component the container component
|
|
11
11
|
* @returns true if the user has only provided a value for one of the components in the container, otherwise false.
|
|
12
12
|
*/
|
|
13
|
-
|
|
13
|
+
const mustSelectOnlyOne = (data, _, component) => {
|
|
14
14
|
var _component$components;
|
|
15
|
-
|
|
15
|
+
const valueCount = (_component$components = component.components) === null || _component$components === void 0 ? void 0 : _component$components.reduce((acc, inner) => {
|
|
16
16
|
var _data$component$id;
|
|
17
17
|
if ((_data$component$id = data[component.id]) !== null && _data$component$id !== void 0 && _data$component$id[inner.id]) {
|
|
18
18
|
// Account for checkboxes that the user may have unselected
|
|
@@ -2,16 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
var _mustSelectOnlyOne = _interopRequireDefault(require("./mustSelectOnlyOne"));
|
|
4
4
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
describe('additional', function () {
|
|
12
|
-
describe('mustSelectOnlyOne', function () {
|
|
13
|
-
var CONTAINER_ID = 'containerId';
|
|
14
|
-
var COMPONENT = {
|
|
5
|
+
describe('utils', () => {
|
|
6
|
+
describe('Validate', () => {
|
|
7
|
+
describe('additional', () => {
|
|
8
|
+
describe('mustSelectOnlyOne', () => {
|
|
9
|
+
const CONTAINER_ID = 'containerId';
|
|
10
|
+
const COMPONENT = {
|
|
15
11
|
id: CONTAINER_ID,
|
|
16
12
|
type: 'container',
|
|
17
13
|
components: [{
|
|
@@ -22,28 +18,34 @@ describe('utils', function () {
|
|
|
22
18
|
id: 'charlie'
|
|
23
19
|
}]
|
|
24
20
|
};
|
|
25
|
-
test('should return true if all components are empty',
|
|
26
|
-
|
|
21
|
+
test('should return true if all components are empty', () => {
|
|
22
|
+
const DATA = {};
|
|
27
23
|
expect((0, _mustSelectOnlyOne.default)(DATA, {}, COMPONENT)).toEqual(true);
|
|
28
24
|
});
|
|
29
|
-
test('should return true if one component has data',
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
25
|
+
test('should return true if one component has data', () => {
|
|
26
|
+
const DATA = {
|
|
27
|
+
[CONTAINER_ID]: {
|
|
28
|
+
alpha: 'text'
|
|
29
|
+
}
|
|
30
|
+
};
|
|
33
31
|
expect((0, _mustSelectOnlyOne.default)(DATA, {}, COMPONENT)).toEqual(true);
|
|
34
32
|
});
|
|
35
|
-
test('should return false if more than one component has data',
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
33
|
+
test('should return false if more than one component has data', () => {
|
|
34
|
+
const DATA = {
|
|
35
|
+
[CONTAINER_ID]: {
|
|
36
|
+
alpha: 'text',
|
|
37
|
+
bravo: 'test'
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
40
|
expect((0, _mustSelectOnlyOne.default)(DATA, {}, COMPONENT)).toEqual(false);
|
|
41
41
|
});
|
|
42
|
-
test('should return true if more than one component has data but one is an empty array',
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
test('should return true if more than one component has data but one is an empty array', () => {
|
|
43
|
+
const DATA = {
|
|
44
|
+
[CONTAINER_ID]: {
|
|
45
|
+
alpha: 'text',
|
|
46
|
+
bravo: []
|
|
47
|
+
}
|
|
48
|
+
};
|
|
47
49
|
expect((0, _mustSelectOnlyOne.default)(DATA, {}, COMPONENT)).toEqual(true);
|
|
48
50
|
});
|
|
49
51
|
});
|
|
@@ -4,15 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.formattedTime = exports.formatString = exports.DATE_FORMAT = void 0;
|
|
7
|
-
|
|
8
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
9
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
10
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
11
|
-
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
12
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
13
|
-
var isNumeric = function isNumeric(value) {
|
|
14
|
-
return /^-?\d+$/.test(value);
|
|
15
|
-
};
|
|
7
|
+
const isNumeric = value => /^-?\d+$/.test(value);
|
|
16
8
|
|
|
17
9
|
/**
|
|
18
10
|
|
|
@@ -23,25 +15,20 @@ var isNumeric = function isNumeric(value) {
|
|
|
23
15
|
* @param {string} dateComponent - the value representing a day or month.
|
|
24
16
|
* @returns the value (appended with a leading zero, if the value passed in was a single digit)
|
|
25
17
|
*/
|
|
26
|
-
|
|
18
|
+
const formatInTwoDigits = dateComponent => {
|
|
27
19
|
if (isNumeric(dateComponent)) {
|
|
28
20
|
return dateComponent.padStart(2, '0');
|
|
29
21
|
}
|
|
30
22
|
return '';
|
|
31
23
|
};
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
_date$split2 = _slicedToArray(_date$split, 3),
|
|
35
|
-
day = _date$split2[0],
|
|
36
|
-
month = _date$split2[1],
|
|
37
|
-
year = _date$split2[2];
|
|
24
|
+
const formatString = date => {
|
|
25
|
+
const [day, month, year] = date.split('-');
|
|
38
26
|
return "".concat(formatInTwoDigits(day), "-").concat(formatInTwoDigits(month), "-").concat(year);
|
|
39
27
|
};
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
hour = _time$split2[0],
|
|
44
|
-
minute = _time$split2[1];
|
|
28
|
+
exports.formatString = formatString;
|
|
29
|
+
const formattedTime = time => {
|
|
30
|
+
const [hour, minute] = time.split(':');
|
|
45
31
|
return "".concat(formatInTwoDigits(hour), ":").concat(formatInTwoDigits(minute));
|
|
46
32
|
};
|
|
47
|
-
|
|
33
|
+
exports.formattedTime = formattedTime;
|
|
34
|
+
const DATE_FORMAT = exports.DATE_FORMAT = 'DD-MM-YYYY';
|
|
@@ -17,7 +17,7 @@ var _validateTime = _interopRequireDefault(require("./validateTime"));
|
|
|
17
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
18
18
|
// Local imports
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
const Validate = {
|
|
21
21
|
component: _validateComponent.default,
|
|
22
22
|
container: _validateContainer.default,
|
|
23
23
|
email: _validateEmail.default,
|
|
@@ -7,12 +7,8 @@ exports.default = void 0;
|
|
|
7
7
|
var _copReactComponents = require("@ukhomeoffice/cop-react-components");
|
|
8
8
|
var _validateContainer = _interopRequireDefault(require("./validateContainer"));
|
|
9
9
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
13
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
14
|
-
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
15
|
-
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } // Local imports
|
|
10
|
+
// Local imports
|
|
11
|
+
|
|
16
12
|
/**
|
|
17
13
|
* Validates all of the items within a collection.
|
|
18
14
|
* @param {object} collection The collection to validate.
|
|
@@ -20,26 +16,26 @@ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input ==
|
|
|
20
16
|
* @param {object} formData The data at the top level of the form.
|
|
21
17
|
* @returns Errors for all components for all items within the collection.
|
|
22
18
|
*/
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
const validateCollection = (collection, items, formData) => {
|
|
20
|
+
const errors = [];
|
|
25
21
|
if (collection && Array.isArray(collection.item) && Array.isArray(items)) {
|
|
26
|
-
items.forEach(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
22
|
+
items.forEach((item, index) => {
|
|
23
|
+
const labelCount = (collection.countOffset || 0) + index + 1;
|
|
24
|
+
const fullPath = "".concat(collection.full_path || collection.fieldId, "[").concat(index, "]");
|
|
25
|
+
const container = {
|
|
30
26
|
full_path: fullPath,
|
|
31
|
-
components: collection.item.map(
|
|
32
|
-
|
|
27
|
+
components: collection.item.map(component => {
|
|
28
|
+
const newComponent = {
|
|
29
|
+
...component,
|
|
33
30
|
full_path: "".concat(fullPath, ".").concat(component.fieldId)
|
|
34
|
-
}
|
|
31
|
+
};
|
|
35
32
|
if (component.custom_errors && Array.isArray(component.custom_errors)) {
|
|
36
|
-
newComponent.custom_errors = component.custom_errors.map(
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
});
|
|
33
|
+
newComponent.custom_errors = component.custom_errors.map(error => ({
|
|
34
|
+
...error,
|
|
35
|
+
message: _copReactComponents.Utils.interpolateString(index === 0 && error.firstOnlyMessage ? error.firstOnlyMessage : error.message, {
|
|
36
|
+
index: labelCount
|
|
37
|
+
})
|
|
38
|
+
}));
|
|
43
39
|
}
|
|
44
40
|
return newComponent;
|
|
45
41
|
})
|
|
@@ -47,8 +43,6 @@ var validateCollection = function validateCollection(collection, items, formData
|
|
|
47
43
|
errors.push((0, _validateContainer.default)(container, item, formData));
|
|
48
44
|
});
|
|
49
45
|
}
|
|
50
|
-
return errors.filter(
|
|
51
|
-
return !!e;
|
|
52
|
-
}).flat();
|
|
46
|
+
return errors.filter(e => !!e).flat();
|
|
53
47
|
};
|
|
54
48
|
var _default = exports.default = validateCollection;
|
|
@@ -3,119 +3,127 @@
|
|
|
3
3
|
var _models = require("../../models");
|
|
4
4
|
var _validateCollection = _interopRequireDefault(require("./validateCollection"));
|
|
5
5
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
item: item
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
it('should return an empty array when the component is null', function () {
|
|
6
|
+
// Local imports
|
|
7
|
+
|
|
8
|
+
describe('utils.Validate.Collection', () => {
|
|
9
|
+
const setup = (id, type, label, required, item) => ({
|
|
10
|
+
id,
|
|
11
|
+
fieldId: id,
|
|
12
|
+
type,
|
|
13
|
+
label,
|
|
14
|
+
required,
|
|
15
|
+
item
|
|
16
|
+
});
|
|
17
|
+
it('should return an empty array when the component is null', () => {
|
|
22
18
|
expect((0, _validateCollection.default)(null, [])).toEqual([]);
|
|
23
19
|
});
|
|
24
|
-
it('should return an empty array when the collection has an undefined item array',
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
20
|
+
it('should return an empty array when the collection has an undefined item array', () => {
|
|
21
|
+
const ID = 'collection';
|
|
22
|
+
const LABEL = 'field';
|
|
23
|
+
const COLLECTION = setup(ID, _models.ComponentTypes.COLLECTION, LABEL, false, undefined);
|
|
28
24
|
expect((0, _validateCollection.default)(COLLECTION, [])).toEqual([]);
|
|
29
25
|
});
|
|
30
|
-
it('should return an empty array when the collection has an empty item array',
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
it('should return an empty array when the collection has an empty item array', () => {
|
|
27
|
+
const ID = 'collection';
|
|
28
|
+
const LABEL = 'field';
|
|
29
|
+
const COLLECTION = setup(ID, _models.ComponentTypes.COLLECTION, LABEL, false, []);
|
|
34
30
|
expect((0, _validateCollection.default)(COLLECTION, [])).toEqual([]);
|
|
35
31
|
});
|
|
36
|
-
it('should return an empty array when the collection has only valid items',
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
32
|
+
it('should return an empty array when the collection has only valid items', () => {
|
|
33
|
+
const EMAIL_ID = 'email';
|
|
34
|
+
const EMAIL_LABEL = 'Email';
|
|
35
|
+
const EMAIL = setup(EMAIL_ID, _models.ComponentTypes.EMAIL, EMAIL_LABEL, false);
|
|
36
|
+
const ID = 'collection';
|
|
37
|
+
const LABEL = 'field';
|
|
38
|
+
const COLLECTION = setup(ID, _models.ComponentTypes.COLLECTION, LABEL, false, [EMAIL]);
|
|
39
|
+
const ITEMS = [{
|
|
40
|
+
[EMAIL_ID]: 'alpha.bravo@homeoffice.gov.uk'
|
|
41
|
+
}, {
|
|
42
|
+
[EMAIL_ID]: 'charlie.delta@homeoffice.gov.uk'
|
|
43
|
+
}];
|
|
44
44
|
expect((0, _validateCollection.default)(COLLECTION, ITEMS)).toEqual([]);
|
|
45
45
|
});
|
|
46
|
-
it('should return an array containing an error when the collection has an invalid first item',
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
46
|
+
it('should return an array containing an error when the collection has an invalid first item', () => {
|
|
47
|
+
const EMAIL_ID = 'email';
|
|
48
|
+
const EMAIL_LABEL = 'Email';
|
|
49
|
+
const EMAIL = setup(EMAIL_ID, _models.ComponentTypes.EMAIL, EMAIL_LABEL, false);
|
|
50
|
+
const ID = 'container';
|
|
51
|
+
const LABEL = 'field';
|
|
52
|
+
const COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [EMAIL]);
|
|
53
|
+
const ITEMS = [{
|
|
54
|
+
[EMAIL_ID]: 'alpha.bravo@digital.homeoffice.com'
|
|
55
|
+
}, {
|
|
56
|
+
[EMAIL_ID]: 'alpha.bravo@digital.homeoffice.gov.uk'
|
|
57
|
+
}];
|
|
54
58
|
expect((0, _validateCollection.default)(COLLECTION, ITEMS)).toEqual([{
|
|
55
59
|
id: "".concat(ID, "[0].").concat(EMAIL_ID),
|
|
56
60
|
error: "Enter ".concat(EMAIL_LABEL.toLowerCase(), " in the correct format, like jane.doe@homeoffice.gov.uk")
|
|
57
61
|
}]);
|
|
58
62
|
});
|
|
59
|
-
it('should return an array containing an error when the collection has an invalid second item',
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
it('should return an array containing an error when the collection has an invalid second item', () => {
|
|
64
|
+
const EMAIL_ID = 'email';
|
|
65
|
+
const EMAIL_LABEL = 'Email';
|
|
66
|
+
const EMAIL = setup(EMAIL_ID, _models.ComponentTypes.EMAIL, EMAIL_LABEL, false);
|
|
67
|
+
const ID = 'container';
|
|
68
|
+
const LABEL = 'field';
|
|
69
|
+
const COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [EMAIL]);
|
|
70
|
+
const ITEMS = [{
|
|
71
|
+
[EMAIL_ID]: 'alpha.bravo@digital.homeoffice.gov.uk'
|
|
72
|
+
}, {
|
|
73
|
+
[EMAIL_ID]: 'alpha.bravo@digital.homeoffice.com'
|
|
74
|
+
}];
|
|
67
75
|
expect((0, _validateCollection.default)(COLLECTION, ITEMS)).toEqual([{
|
|
68
76
|
id: "".concat(ID, "[1].").concat(EMAIL_ID),
|
|
69
77
|
error: "Enter ".concat(EMAIL_LABEL.toLowerCase(), " in the correct format, like jane.doe@homeoffice.gov.uk")
|
|
70
78
|
}]);
|
|
71
79
|
});
|
|
72
|
-
it('should correctly interpolate error messages using collection\'s index',
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
80
|
+
it('should correctly interpolate error messages using collection\'s index', () => {
|
|
81
|
+
const ID = 'container';
|
|
82
|
+
const LABEL = 'field';
|
|
83
|
+
const TYPE = 'autocomplete';
|
|
84
|
+
const ITEM = setup(ID, TYPE, LABEL, true, []);
|
|
77
85
|
ITEM.custom_errors = [{
|
|
78
86
|
"type": "required",
|
|
79
87
|
// eslint-disable-next-line no-template-curly-in-string
|
|
80
88
|
"message": "Test to check that ${index} is 1"
|
|
81
89
|
}];
|
|
82
|
-
|
|
90
|
+
const COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [ITEM]);
|
|
83
91
|
COLLECTION.countOffset = 0;
|
|
84
92
|
expect((0, _validateCollection.default)(COLLECTION, ITEM.custom_errors)).toEqual([{
|
|
85
93
|
error: "Test to check that 1 is 1",
|
|
86
94
|
id: "".concat(ID, "[0].").concat(COLLECTION.type)
|
|
87
95
|
}]);
|
|
88
96
|
});
|
|
89
|
-
it('should correctly display firstOnlyMessage error message',
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
97
|
+
it('should correctly display firstOnlyMessage error message', () => {
|
|
98
|
+
const ID = 'container';
|
|
99
|
+
const LABEL = 'field';
|
|
100
|
+
const TYPE = 'autocomplete';
|
|
101
|
+
const ITEM = setup(ID, TYPE, LABEL, true, []);
|
|
94
102
|
ITEM.custom_errors = [{
|
|
95
103
|
"type": "required",
|
|
96
104
|
// eslint-disable-next-line no-template-curly-in-string
|
|
97
105
|
"message": "Test to check that ${index} is 1",
|
|
98
106
|
"firstOnlyMessage": "Test for first message"
|
|
99
107
|
}];
|
|
100
|
-
|
|
108
|
+
const COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [ITEM]);
|
|
101
109
|
COLLECTION.countOffset = 0;
|
|
102
110
|
expect((0, _validateCollection.default)(COLLECTION, ITEM.custom_errors)).toEqual([{
|
|
103
111
|
error: "Test for first message",
|
|
104
112
|
id: "".concat(ID, "[0].").concat(COLLECTION.type)
|
|
105
113
|
}]);
|
|
106
114
|
});
|
|
107
|
-
it('should correctly display message if firstOnlyMessage is undefined',
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
115
|
+
it('should correctly display message if firstOnlyMessage is undefined', () => {
|
|
116
|
+
const ID = 'container';
|
|
117
|
+
const LABEL = 'field';
|
|
118
|
+
const TYPE = 'autocomplete';
|
|
119
|
+
const ITEM = setup(ID, TYPE, LABEL, true, []);
|
|
112
120
|
ITEM.custom_errors = [{
|
|
113
121
|
"type": "required",
|
|
114
122
|
// eslint-disable-next-line no-template-curly-in-string
|
|
115
123
|
"message": "Test to check that ${index} is 1",
|
|
116
124
|
"firstOnlyMessage": undefined
|
|
117
125
|
}];
|
|
118
|
-
|
|
126
|
+
const COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [ITEM]);
|
|
119
127
|
COLLECTION.countOffset = 0;
|
|
120
128
|
expect((0, _validateCollection.default)(COLLECTION, ITEM.custom_errors)).toEqual([{
|
|
121
129
|
error: "Test to check that 1 is 1",
|
|
@@ -19,7 +19,8 @@ var _validateRequired = _interopRequireDefault(require("./validateRequired"));
|
|
|
19
19
|
var _validateTextArea = _interopRequireDefault(require("./validateTextArea"));
|
|
20
20
|
var _validateTime = _interopRequireDefault(require("./validateTime"));
|
|
21
21
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
22
|
-
|
|
22
|
+
// Local imports
|
|
23
|
+
|
|
23
24
|
/**
|
|
24
25
|
* Validates a single component.
|
|
25
26
|
* @param {object} component The component to validate.
|
|
@@ -27,18 +28,18 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
|
|
|
27
28
|
* @param {object} formData The data at the top level of the form.
|
|
28
29
|
* @returns The first encountered error with the component.
|
|
29
30
|
*/
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
const validateComponent = (component, outerData, formData) => {
|
|
32
|
+
const fd = formData || outerData;
|
|
32
33
|
if (!(0, _showComponent.default)(component, fd)) {
|
|
33
34
|
return undefined;
|
|
34
35
|
}
|
|
35
36
|
if (component.type === _models.ComponentTypes.CONTAINER) {
|
|
36
37
|
return (0, _validateContainer.default)(component, outerData, fd);
|
|
37
38
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
let error;
|
|
40
|
+
let properties;
|
|
41
|
+
const data = outerData && typeof outerData === 'object' ? outerData : {};
|
|
42
|
+
let value = data[component.fieldId];
|
|
42
43
|
if (component.type === _models.ComponentTypes.COLLECTION_SUMMARY) {
|
|
43
44
|
value = (0, _getCollectionPageData.default)(component.collectionName, fd);
|
|
44
45
|
}
|
|
@@ -55,10 +56,11 @@ var validateComponent = function validateComponent(component, outerData, formDat
|
|
|
55
56
|
case _models.ComponentTypes.DATE:
|
|
56
57
|
case _models.ComponentTypes.TIME:
|
|
57
58
|
{
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
message
|
|
61
|
-
propsInError
|
|
59
|
+
const validator = component.type === _models.ComponentTypes.DATE ? _validateDate.default : _validateTime.default;
|
|
60
|
+
const {
|
|
61
|
+
message,
|
|
62
|
+
propsInError
|
|
63
|
+
} = validator(value);
|
|
62
64
|
properties = propsInError;
|
|
63
65
|
error = message;
|
|
64
66
|
break;
|
|
@@ -68,8 +70,8 @@ var validateComponent = function validateComponent(component, outerData, formDat
|
|
|
68
70
|
case _models.ComponentTypes.RADIOS:
|
|
69
71
|
{
|
|
70
72
|
var _component$data$optio;
|
|
71
|
-
|
|
72
|
-
(_component$data$optio = component.data.options) === null || _component$data$optio === void 0 || _component$data$optio.forEach(
|
|
73
|
+
let nestedErrors = [];
|
|
74
|
+
(_component$data$optio = component.data.options) === null || _component$data$optio === void 0 || _component$data$optio.forEach(option => {
|
|
73
75
|
if (option.nested && (0, _optionIsSelected.default)(formData[component.id], option)) {
|
|
74
76
|
nestedErrors = nestedErrors.concat((0, _validateContainer.default)({
|
|
75
77
|
components: option.nested
|
|
@@ -108,8 +110,8 @@ var validateComponent = function validateComponent(component, outerData, formDat
|
|
|
108
110
|
if (error) {
|
|
109
111
|
return {
|
|
110
112
|
id: component.full_path || component.id,
|
|
111
|
-
error
|
|
112
|
-
properties
|
|
113
|
+
error,
|
|
114
|
+
properties
|
|
113
115
|
};
|
|
114
116
|
}
|
|
115
117
|
return undefined;
|