@ukhomeoffice/cop-react-form-renderer 6.7.0-alpha → 6.11.1
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 +22 -16
- package/dist/components/CheckYourAnswers/Answer.test.js +180 -92
- package/dist/components/CheckYourAnswers/CheckYourAnswers.js +137 -103
- package/dist/components/CheckYourAnswers/CheckYourAnswers.test.js +861 -463
- package/dist/components/CollectionPage/CollectionPage.js +63 -73
- package/dist/components/CollectionPage/CollectionPage.test.js +366 -316
- package/dist/components/CollectionSummary/BannerStrip.js +13 -13
- package/dist/components/CollectionSummary/BannerStrip.test.js +76 -80
- package/dist/components/CollectionSummary/CollectionSummary.js +126 -99
- package/dist/components/CollectionSummary/CollectionSummary.test.js +188 -152
- package/dist/components/CollectionSummary/Confirmation.js +12 -14
- package/dist/components/CollectionSummary/Confirmation.test.js +63 -68
- package/dist/components/CollectionSummary/RenderListView.js +52 -46
- package/dist/components/CollectionSummary/RenderListView.scss +1 -1
- package/dist/components/CollectionSummary/RenderListView.test.js +77 -78
- package/dist/components/CollectionSummary/SummaryCard.js +152 -110
- package/dist/components/CollectionSummary/SummaryCard.test.js +1018 -929
- package/dist/components/CollectionSummary/SummaryCardDetails.js +137 -94
- package/dist/components/CollectionSummary/SummaryCardDetails.scss +13 -4
- package/dist/components/CollectionSummary/SummaryCardDetails.test.js +331 -128
- package/dist/components/CollectionSummary/SummaryCardValidationContext.js +35 -30
- package/dist/components/CollectionSummary/SummaryCardValidationContext.test.js +74 -62
- package/dist/components/FormComponent/Collection.js +108 -74
- package/dist/components/FormComponent/Collection.test.js +1081 -909
- package/dist/components/FormComponent/Container.js +39 -40
- package/dist/components/FormComponent/Container.test.js +412 -312
- package/dist/components/FormComponent/FormComponent.js +72 -69
- package/dist/components/FormComponent/FormComponent.test.js +414 -353
- package/dist/components/FormComponent/helpers/addLabel.js +7 -4
- 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 +5 -3
- package/dist/components/FormComponent/helpers/getComponentError.test.js +14 -14
- package/dist/components/FormComponent/helpers/getComponentFieldSet.js +4 -3
- 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 +80 -65
- package/dist/components/FormPage/FormPage.test.js +163 -127
- package/dist/components/FormRenderer/FormRenderer.js +180 -143
- package/dist/components/FormRenderer/FormRenderer.test.js +1115 -730
- package/dist/components/FormRenderer/handlers/cyaAction.js +2 -2
- package/dist/components/FormRenderer/handlers/getPageId.js +3 -1
- 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 +3 -1
- package/dist/components/FormRenderer/helpers/canCYASubmit.test.js +20 -16
- package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.js +22 -17
- package/dist/components/FormRenderer/helpers/cleanHiddenNestedData.test.js +16 -16
- package/dist/components/FormRenderer/helpers/getCYA.js +5 -3
- package/dist/components/FormRenderer/helpers/getCYA.test.js +11 -11
- package/dist/components/FormRenderer/helpers/getFormState.js +7 -5
- package/dist/components/FormRenderer/helpers/getFormState.test.js +10 -10
- package/dist/components/FormRenderer/helpers/getNextPageId.js +24 -13
- package/dist/components/FormRenderer/helpers/getNextPageId.test.js +67 -67
- package/dist/components/FormRenderer/helpers/getPage.js +4 -2
- package/dist/components/FormRenderer/helpers/getPage.test.js +11 -11
- package/dist/components/FormRenderer/helpers/getRelevantPages.js +9 -7
- 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 +97 -103
- package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.js +60 -62
- package/dist/components/FormRenderer/helpers/getUpdatedSectionStates.test.js +78 -71
- package/dist/components/FormRenderer/helpers/index.js +1 -1
- package/dist/components/FormRenderer/onCYAAction.js +51 -59
- package/dist/components/FormRenderer/onCYAAction.test.js +152 -164
- package/dist/components/FormRenderer/onPageAction.js +39 -43
- package/dist/components/FormRenderer/onPageAction.test.js +208 -223
- package/dist/components/FormRenderer/onTaskAction.js +13 -9
- package/dist/components/FormRenderer/onTaskAction.test.js +88 -93
- package/dist/components/PageActions/ActionButton.js +15 -12
- package/dist/components/PageActions/ActionButton.test.js +78 -56
- package/dist/components/PageActions/PageActions.js +10 -10
- package/dist/components/PageActions/PageActions.test.js +115 -86
- package/dist/components/SummaryList/GroupAction.js +17 -9
- package/dist/components/SummaryList/GroupAction.test.js +33 -37
- package/dist/components/SummaryList/RowAction.js +16 -11
- package/dist/components/SummaryList/RowAction.test.js +33 -37
- package/dist/components/SummaryList/SummaryList.js +34 -21
- package/dist/components/SummaryList/SummaryList.scss +15 -0
- package/dist/components/SummaryList/SummaryList.test.js +226 -143
- package/dist/components/SummaryList/SummaryListHeadingRow.js +4 -6
- package/dist/components/SummaryList/SummaryListHeadingRowWithAction.js +53 -0
- package/dist/components/SummaryList/SummaryListHeadingRowWithAction.scss +38 -0
- package/dist/components/SummaryList/SummaryListRow.js +4 -6
- package/dist/components/SummaryList/SummaryListTitleRow.js +3 -5
- package/dist/components/SummaryList/helpers/getGroupActionAttributes.js +5 -3
- package/dist/components/SummaryList/helpers/getGroupActionAttributes.test.js +22 -22
- package/dist/components/SummaryList/helpers/getRowActionAttributes.js +5 -3
- 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 +29 -19
- package/dist/components/TaskList/Task.test.js +76 -83
- package/dist/components/TaskList/TaskList.js +92 -49
- package/dist/components/TaskList/TaskList.scss +24 -0
- package/dist/components/TaskList/TaskList.test.js +255 -113
- package/dist/components/TaskList/TaskState.js +5 -7
- package/dist/components/TaskList/TaskState.test.js +45 -52
- package/dist/components/index.js +7 -7
- package/dist/context/HooksContext/HooksContext.js +80 -57
- package/dist/context/HooksContext/HooksContext.test.js +35 -26
- package/dist/context/HooksContext/index.js +4 -3
- package/dist/context/ValidationContext/ValidationContext.js +94 -43
- package/dist/context/ValidationContext/ValidationContext.test.js +68 -56
- package/dist/context/ValidationContext/index.js +4 -3
- package/dist/context/index.js +2 -2
- package/dist/hooks/index.js +10 -9
- package/dist/hooks/useAxios.js +40 -14
- package/dist/hooks/useGetRequest.js +97 -61
- package/dist/hooks/useHooks.js +3 -1
- package/dist/hooks/useRefData.js +39 -26
- package/dist/hooks/useValidation.js +3 -1
- package/dist/index.js +14 -13
- 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 +38 -44
- package/dist/models/TaskStates.js +28 -29
- package/dist/models/index.js +9 -9
- package/dist/setupTests.js +31 -30
- package/dist/utils/CheckYourAnswers/getCYAAction.js +5 -5
- package/dist/utils/CheckYourAnswers/getCYAAction.test.js +54 -52
- package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.js +25 -15
- package/dist/utils/CheckYourAnswers/getCYACollectionChangeAction.test.js +35 -33
- package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.js +31 -17
- package/dist/utils/CheckYourAnswers/getCYACollectionDeleteAction.test.js +44 -42
- package/dist/utils/CheckYourAnswers/getCYARow.js +6 -6
- package/dist/utils/CheckYourAnswers/getCYARow.test.js +86 -86
- package/dist/utils/CheckYourAnswers/getCYARowForGroup.js +24 -18
- package/dist/utils/CheckYourAnswers/getCYARowForGroup.test.js +16 -15
- package/dist/utils/CheckYourAnswers/getCYARowsForCollection.js +36 -33
- package/dist/utils/CheckYourAnswers/getCYARowsForCollection.test.js +61 -58
- package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.js +108 -87
- package/dist/utils/CheckYourAnswers/getCYARowsForCollectionPage.test.js +281 -162
- package/dist/utils/CheckYourAnswers/getCYARowsForContainer.js +20 -25
- package/dist/utils/CheckYourAnswers/getCYARowsForContainer.test.js +97 -103
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.js +18 -13
- package/dist/utils/CheckYourAnswers/getCYARowsForPage.test.js +76 -70
- package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.js +42 -0
- package/dist/utils/CheckYourAnswers/getSummaryListRowForDetails.test.js +56 -0
- package/dist/utils/CheckYourAnswers/index.js +1 -1
- package/dist/utils/CheckYourAnswers/showComponentCYA.js +4 -4
- package/dist/utils/CheckYourAnswers/showComponentCYA.test.js +25 -25
- package/dist/utils/CollectionPage/addCollectionPageEntry.js +2 -2
- package/dist/utils/CollectionPage/addCollectionPageEntry.test.js +5 -5
- package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.js +2 -2
- package/dist/utils/CollectionPage/duplicateCollectionPageActiveEntry.test.js +18 -17
- package/dist/utils/CollectionPage/duplicateCollectionPageEntry.js +22 -12
- package/dist/utils/CollectionPage/duplicateCollectionPageEntry.test.js +38 -47
- package/dist/utils/CollectionPage/getCollectionPageActiveId.js +2 -2
- package/dist/utils/CollectionPage/getCollectionPageActiveId.test.js +10 -10
- package/dist/utils/CollectionPage/getCollectionPageActiveIndex.js +11 -7
- package/dist/utils/CollectionPage/getCollectionPageActiveIndex.test.js +22 -22
- package/dist/utils/CollectionPage/getCollectionPageData.js +12 -8
- package/dist/utils/CollectionPage/getCollectionPageData.test.js +19 -19
- package/dist/utils/CollectionPage/getErrorsForCollection.js +24 -24
- package/dist/utils/CollectionPage/getErrorsForCollection.test.js +22 -20
- package/dist/utils/CollectionPage/getQuickEditPage.js +31 -35
- package/dist/utils/CollectionPage/getQuickEditPage.test.js +27 -15
- package/dist/utils/CollectionPage/index.js +1 -1
- package/dist/utils/CollectionPage/mergeCollectionPages.js +43 -31
- package/dist/utils/CollectionPage/mergeCollectionPages.test.js +26 -26
- package/dist/utils/CollectionPage/removeCollectionPageEntry.js +6 -4
- package/dist/utils/CollectionPage/removeCollectionPageEntry.test.js +10 -10
- package/dist/utils/CollectionPage/setCollectionPageData.js +16 -10
- package/dist/utils/CollectionPage/setCollectionPageData.test.js +24 -24
- package/dist/utils/Component/addShowWhen.js +8 -4
- package/dist/utils/Component/addShowWhen.test.js +37 -37
- package/dist/utils/Component/applyToComponentTree.js +18 -18
- package/dist/utils/Component/applyToComponentTree.test.js +32 -27
- package/dist/utils/Component/cleanAttributes.js +13 -10
- package/dist/utils/Component/cleanAttributes.test.js +18 -17
- package/dist/utils/Component/elevateNestedComponents.js +7 -6
- package/dist/utils/Component/elevateNestedComponents.test.js +68 -30
- package/dist/utils/Component/getComponent.js +94 -88
- package/dist/utils/Component/getComponentTests/getComponent.autocomplete.test.js +17 -18
- package/dist/utils/Component/getComponentTests/getComponent.calculation.test.js +59 -46
- package/dist/utils/Component/getComponentTests/getComponent.checkboxes.test.js +48 -39
- package/dist/utils/Component/getComponentTests/getComponent.date.test.js +33 -23
- package/dist/utils/Component/getComponentTests/getComponent.details.test.js +18 -20
- package/dist/utils/Component/getComponentTests/getComponent.email.test.js +22 -17
- package/dist/utils/Component/getComponentTests/getComponent.file.test.js +25 -20
- package/dist/utils/Component/getComponentTests/getComponent.heading.test.js +9 -10
- package/dist/utils/Component/getComponentTests/getComponent.html.test.js +15 -17
- package/dist/utils/Component/getComponentTests/getComponent.insetText.test.js +8 -9
- package/dist/utils/Component/getComponentTests/getComponent.list.test.js +15 -17
- package/dist/utils/Component/getComponentTests/getComponent.multifile.test.js +26 -22
- package/dist/utils/Component/getComponentTests/getComponent.nested.test.js +175 -155
- package/dist/utils/Component/getComponentTests/getComponent.paragraph.test.js +15 -17
- package/dist/utils/Component/getComponentTests/getComponent.phoneNumber.test.js +22 -17
- package/dist/utils/Component/getComponentTests/getComponent.radios.test.js +72 -57
- package/dist/utils/Component/getComponentTests/getComponent.select.test.js +22 -17
- package/dist/utils/Component/getComponentTests/getComponent.text.test.js +22 -17
- package/dist/utils/Component/getComponentTests/getComponent.textArea.test.js +38 -31
- package/dist/utils/Component/getComponentTests/getComponent.time.test.js +29 -20
- package/dist/utils/Component/getComponentTests/getComponent.unknown.test.js +2 -2
- package/dist/utils/Component/getComponentTests/getComponent.warningText.test.js +8 -9
- package/dist/utils/Component/getDefaultValue.js +8 -6
- package/dist/utils/Component/getDefaultValue.test.js +12 -12
- package/dist/utils/Component/getDefaultValueFromConfig.js +21 -22
- package/dist/utils/Component/getDefaultValueFromConfig.test.js +31 -31
- package/dist/utils/Component/index.js +1 -1
- package/dist/utils/Component/isEditable.js +4 -2
- package/dist/utils/Component/isEditable.test.js +15 -14
- package/dist/utils/Component/optionIsSelected.js +6 -1
- package/dist/utils/Component/optionIsSelected.test.js +35 -9
- package/dist/utils/Component/setupContainerComponentsPath.js +29 -27
- 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 +25 -16
- package/dist/utils/Condition/meetsCondition.test.js +402 -402
- package/dist/utils/Condition/meetsOneCondition.js +5 -5
- package/dist/utils/Condition/meetsOneCondition.test.js +16 -16
- package/dist/utils/Condition/setupConditions.js +18 -13
- package/dist/utils/Condition/setupConditions.test.js +7 -7
- package/dist/utils/Container/getEditableComponents.js +5 -3
- package/dist/utils/Container/getEditableComponents.test.js +45 -43
- package/dist/utils/Container/index.js +1 -1
- package/dist/utils/Container/setupNesting.js +20 -16
- package/dist/utils/Container/setupNesting.test.js +30 -27
- package/dist/utils/Container/showContainer.js +7 -3
- package/dist/utils/Container/showContainer.test.js +30 -30
- package/dist/utils/Data/applyFormula.js +48 -38
- package/dist/utils/Data/applyFormula.test.js +20 -20
- package/dist/utils/Data/getAutocompleteSource.js +26 -18
- package/dist/utils/Data/getAutocompleteSource.test.js +86 -80
- package/dist/utils/Data/getDataPath.js +28 -18
- package/dist/utils/Data/getDataPath.test.js +12 -12
- package/dist/utils/Data/getOptions.js +30 -24
- package/dist/utils/Data/getOptions.test.js +27 -27
- package/dist/utils/Data/getSourceData.js +19 -6
- package/dist/utils/Data/getSourceData.test.js +80 -84
- package/dist/utils/Data/index.js +1 -1
- package/dist/utils/Data/nestInRefdataOptions.js +16 -9
- package/dist/utils/Data/nestInRefdataOptions.test.js +16 -16
- package/dist/utils/Data/refDataToOptions.js +13 -10
- package/dist/utils/Data/refDataToOptions.test.js +19 -19
- package/dist/utils/Data/setDataItem.js +8 -7
- package/dist/utils/Data/setDataItem.test.js +37 -37
- package/dist/utils/Data/setupFormData.js +21 -13
- package/dist/utils/Data/setupFormData.test.js +50 -51
- package/dist/utils/Data/setupRefDataUrlForComponent.js +26 -20
- package/dist/utils/Data/setupRefDataUrlForComponent.test.js +24 -24
- package/dist/utils/FormPage/applyConditionalProperties.js +9 -5
- package/dist/utils/FormPage/applyConditionalProperties.test.js +18 -15
- package/dist/utils/FormPage/getConditionalText.js +3 -3
- package/dist/utils/FormPage/getConditionalText.test.js +29 -29
- package/dist/utils/FormPage/getFormPage.js +16 -15
- package/dist/utils/FormPage/getFormPage.test.js +46 -47
- package/dist/utils/FormPage/getFormPages.js +12 -7
- package/dist/utils/FormPage/getFormPages.test.js +23 -20
- package/dist/utils/FormPage/getPageActions.js +15 -9
- package/dist/utils/FormPage/getPageActions.test.js +32 -32
- package/dist/utils/FormPage/getParagraphFromText.js +7 -5
- package/dist/utils/FormPage/getParagraphFromText.test.js +6 -6
- package/dist/utils/FormPage/index.js +4 -2
- package/dist/utils/FormPage/showFormPage.js +7 -3
- 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 +28 -21
- package/dist/utils/FormPage/useComponent.test.js +79 -77
- package/dist/utils/Format/formatData.js +1 -1
- package/dist/utils/Format/formatData.test.js +18 -18
- package/dist/utils/Format/formatDataForComponent.js +6 -5
- package/dist/utils/Format/formatDataForComponent.test.js +78 -50
- package/dist/utils/Format/formatDataForForm.js +8 -6
- package/dist/utils/Format/formatDataForForm.test.js +16 -13
- package/dist/utils/Format/formatDataForPage.js +5 -4
- package/dist/utils/Format/formatDataForPage.test.js +25 -20
- package/dist/utils/Format/index.js +1 -1
- package/dist/utils/Hub/getFormHub.js +1 -1
- package/dist/utils/Hub/getFormHub.test.js +31 -28
- 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 +16 -24
- package/dist/utils/Meta/documents/index.js +1 -1
- package/dist/utils/Meta/documents/setDocumentsForField.js +16 -14
- package/dist/utils/Meta/documents/setDocumentsForField.test.js +34 -68
- 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 +52 -46
- package/dist/utils/Operate/getLength.js +50 -0
- package/dist/utils/Operate/getLength.test.js +89 -0
- package/dist/utils/Operate/index.js +1 -1
- package/dist/utils/Operate/persistValueInFormData.js +3 -3
- package/dist/utils/Operate/persistValueInFormData.test.js +20 -22
- package/dist/utils/Operate/runPageOperations.js +9 -7
- package/dist/utils/Operate/runPageOperations.test.js +36 -35
- 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 +27 -21
- 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 +11 -7
- package/dist/utils/Validate/additional/mustBeEarlierDateTime.test.js +41 -37
- 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 +4 -4
- package/dist/utils/Validate/additional/mustBeUniqueInCollection.test.js +39 -35
- package/dist/utils/Validate/additional/mustEnterAtLeastOne.js +2 -2
- package/dist/utils/Validate/additional/mustEnterAtLeastOne.test.js +16 -14
- 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 +4 -3
- 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 +26 -28
- package/dist/utils/Validate/additional/utils.js +22 -9
- package/dist/utils/Validate/index.js +1 -1
- package/dist/utils/Validate/validateCollection.js +25 -19
- package/dist/utils/Validate/validateCollection.test.js +66 -74
- package/dist/utils/Validate/validateComponent.js +21 -18
- package/dist/utils/Validate/validateComponent.test.js +176 -166
- package/dist/utils/Validate/validateContainer.js +20 -15
- package/dist/utils/Validate/validateContainer.test.js +52 -58
- package/dist/utils/Validate/validateDate.js +21 -15
- package/dist/utils/Validate/validateDate.test.js +32 -31
- package/dist/utils/Validate/validateEmail.js +8 -6
- package/dist/utils/Validate/validateEmail.test.js +25 -25
- package/dist/utils/Validate/validateMultifile.js +7 -5
- package/dist/utils/Validate/validateMultifile.test.js +18 -17
- package/dist/utils/Validate/validatePage.js +22 -19
- package/dist/utils/Validate/validatePage.test.js +203 -215
- package/dist/utils/Validate/validateRegex.js +5 -3
- package/dist/utils/Validate/validateRegex.test.js +14 -14
- package/dist/utils/Validate/validateRequired.js +6 -4
- package/dist/utils/Validate/validateRequired.test.js +18 -18
- package/dist/utils/Validate/validateTextArea.js +6 -4
- package/dist/utils/Validate/validateTextArea.test.js +20 -20
- package/dist/utils/Validate/validateTime.js +26 -11
- package/dist/utils/Validate/validateTime.test.js +62 -16
- package/dist/utils/index.js +9 -7
- package/package.json +2 -2
- package/dist/utils/CheckYourAnswers/getComponentRowForCYA.js +0 -37
- package/dist/utils/CheckYourAnswers/getComponentRowForCYA.test.js +0 -41
|
@@ -9,7 +9,7 @@ exports.default = void 0;
|
|
|
9
9
|
* @param {number} config.maxDecimals - the maximum amount of decimal places to allow
|
|
10
10
|
* @returns true if string has less than maxDecimals decimal places else returns false
|
|
11
11
|
*/
|
|
12
|
-
|
|
12
|
+
var mustHaveLessThanDecimalPlaces = function mustHaveLessThanDecimalPlaces(string, config) {
|
|
13
13
|
if (!string || !string.includes('.')) {
|
|
14
14
|
return true;
|
|
15
15
|
}
|
|
@@ -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', function () {
|
|
6
|
+
describe('Validate', function () {
|
|
7
|
+
describe('additional', function () {
|
|
8
|
+
describe('mustHaveLessThanDecimalPlaces', function () {
|
|
9
|
+
test('should return false given a number with more than the allowed number of decimal places', function () {
|
|
10
|
+
var 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', function () {
|
|
16
|
+
var 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', function () {
|
|
22
|
+
var 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', function () {
|
|
28
|
+
var result = (0, _mustHaveLessThanDecimalPlaces.default)(undefined, {
|
|
29
29
|
maxDecimals: 3
|
|
30
30
|
});
|
|
31
31
|
expect(result).toEqual(true);
|
|
@@ -4,13 +4,14 @@ 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); }
|
|
7
8
|
// NOTE: SQL RegEx reference:
|
|
8
9
|
// http://www.symantec.com/connect/articles/detection-sql-injection-and-cross-site-scripting-attacks
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
var SQL_COMBINED = /(%27)|(')|(--)|(%23)|(#)|((%3D)|(=))[^\n]*((%27)|(')|(--)|(%3B)|(;))|w*((%27)|('))((%6F)|o|(%4F))((%72)|r|(%52))|((%27)|('))union/i;
|
|
11
|
+
var mustNotContainSql = function mustNotContainSql(value) {
|
|
11
12
|
// eslint-disable-next-line no-extra-boolean-cast
|
|
12
13
|
if (!!value) {
|
|
13
|
-
|
|
14
|
+
var string = _typeof(value) === 'object' ? JSON.stringify(value) : String(value);
|
|
14
15
|
return !SQL_COMBINED.test(string);
|
|
15
16
|
}
|
|
16
17
|
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', function () {
|
|
6
|
+
describe('Validate', function () {
|
|
7
|
+
describe('additional', function () {
|
|
8
|
+
describe('mustNotContainSql', function () {
|
|
9
|
+
test('should return true given a string not containing sql characters', function () {
|
|
10
|
+
var 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', function () {
|
|
14
|
+
var 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', function () {
|
|
18
|
+
var 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', function () {
|
|
22
|
+
var 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', function () {
|
|
26
|
+
var 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
|
+
var mustSelectOnlyOne = function mustSelectOnlyOne(data, _, component) {
|
|
14
14
|
var _component$components;
|
|
15
|
-
|
|
15
|
+
var valueCount = (_component$components = component.components) === null || _component$components === void 0 ? void 0 : _component$components.reduce(function (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,12 +2,16 @@
|
|
|
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
|
-
|
|
5
|
+
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); }
|
|
6
|
+
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; }
|
|
7
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
8
|
+
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); }
|
|
9
|
+
describe('utils', function () {
|
|
10
|
+
describe('Validate', function () {
|
|
11
|
+
describe('additional', function () {
|
|
12
|
+
describe('mustSelectOnlyOne', function () {
|
|
13
|
+
var CONTAINER_ID = 'containerId';
|
|
14
|
+
var COMPONENT = {
|
|
11
15
|
id: CONTAINER_ID,
|
|
12
16
|
type: 'container',
|
|
13
17
|
components: [{
|
|
@@ -18,34 +22,28 @@ describe('utils', () => {
|
|
|
18
22
|
id: 'charlie'
|
|
19
23
|
}]
|
|
20
24
|
};
|
|
21
|
-
test('should return true if all components are empty', ()
|
|
22
|
-
|
|
25
|
+
test('should return true if all components are empty', function () {
|
|
26
|
+
var DATA = {};
|
|
23
27
|
expect((0, _mustSelectOnlyOne.default)(DATA, {}, COMPONENT)).toEqual(true);
|
|
24
28
|
});
|
|
25
|
-
test('should return true if one component has data', ()
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
};
|
|
29
|
+
test('should return true if one component has data', function () {
|
|
30
|
+
var DATA = _defineProperty({}, CONTAINER_ID, {
|
|
31
|
+
alpha: 'text'
|
|
32
|
+
});
|
|
31
33
|
expect((0, _mustSelectOnlyOne.default)(DATA, {}, COMPONENT)).toEqual(true);
|
|
32
34
|
});
|
|
33
|
-
test('should return false if more than one component has data', ()
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
};
|
|
35
|
+
test('should return false if more than one component has data', function () {
|
|
36
|
+
var DATA = _defineProperty({}, CONTAINER_ID, {
|
|
37
|
+
alpha: 'text',
|
|
38
|
+
bravo: 'test'
|
|
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
|
-
|
|
47
|
-
}
|
|
48
|
-
};
|
|
42
|
+
test('should return true if more than one component has data but one is an empty array', function () {
|
|
43
|
+
var DATA = _defineProperty({}, CONTAINER_ID, {
|
|
44
|
+
alpha: 'text',
|
|
45
|
+
bravo: []
|
|
46
|
+
});
|
|
49
47
|
expect((0, _mustSelectOnlyOne.default)(DATA, {}, COMPONENT)).toEqual(true);
|
|
50
48
|
});
|
|
51
49
|
});
|
|
@@ -4,7 +4,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.formattedTime = exports.formatString = exports.DATE_FORMAT = void 0;
|
|
7
|
-
|
|
7
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
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
|
+
};
|
|
8
16
|
|
|
9
17
|
/**
|
|
10
18
|
|
|
@@ -15,20 +23,25 @@ const isNumeric = value => /^-?\d+$/.test(value);
|
|
|
15
23
|
* @param {string} dateComponent - the value representing a day or month.
|
|
16
24
|
* @returns the value (appended with a leading zero, if the value passed in was a single digit)
|
|
17
25
|
*/
|
|
18
|
-
|
|
26
|
+
var formatInTwoDigits = function formatInTwoDigits(dateComponent) {
|
|
19
27
|
if (isNumeric(dateComponent)) {
|
|
20
28
|
return dateComponent.padStart(2, '0');
|
|
21
29
|
}
|
|
22
30
|
return '';
|
|
23
31
|
};
|
|
24
|
-
|
|
25
|
-
|
|
32
|
+
var formatString = exports.formatString = function formatString(date) {
|
|
33
|
+
var _date$split = date.split('-'),
|
|
34
|
+
_date$split2 = _slicedToArray(_date$split, 3),
|
|
35
|
+
day = _date$split2[0],
|
|
36
|
+
month = _date$split2[1],
|
|
37
|
+
year = _date$split2[2];
|
|
26
38
|
return "".concat(formatInTwoDigits(day), "-").concat(formatInTwoDigits(month), "-").concat(year);
|
|
27
39
|
};
|
|
28
|
-
exports.
|
|
29
|
-
|
|
30
|
-
|
|
40
|
+
var formattedTime = exports.formattedTime = function formattedTime(time) {
|
|
41
|
+
var _time$split = time.split(':'),
|
|
42
|
+
_time$split2 = _slicedToArray(_time$split, 2),
|
|
43
|
+
hour = _time$split2[0],
|
|
44
|
+
minute = _time$split2[1];
|
|
31
45
|
return "".concat(formatInTwoDigits(hour), ":").concat(formatInTwoDigits(minute));
|
|
32
46
|
};
|
|
33
|
-
exports.
|
|
34
|
-
const DATE_FORMAT = exports.DATE_FORMAT = 'DD-MM-YYYY';
|
|
47
|
+
var 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
|
+
var Validate = {
|
|
21
21
|
component: _validateComponent.default,
|
|
22
22
|
container: _validateContainer.default,
|
|
23
23
|
email: _validateEmail.default,
|
|
@@ -7,8 +7,12 @@ 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
|
-
|
|
10
|
+
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); }
|
|
11
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
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
|
|
12
16
|
/**
|
|
13
17
|
* Validates all of the items within a collection.
|
|
14
18
|
* @param {object} collection The collection to validate.
|
|
@@ -16,26 +20,26 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
16
20
|
* @param {object} formData The data at the top level of the form.
|
|
17
21
|
* @returns Errors for all components for all items within the collection.
|
|
18
22
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
23
|
+
var validateCollection = function validateCollection(collection, items, formData) {
|
|
24
|
+
var errors = [];
|
|
21
25
|
if (collection && Array.isArray(collection.item) && Array.isArray(items)) {
|
|
22
|
-
items.forEach((item, index)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
items.forEach(function (item, index) {
|
|
27
|
+
var labelCount = (collection.countOffset || 0) + index + 1;
|
|
28
|
+
var fullPath = "".concat(collection.full_path || collection.fieldId, "[").concat(index, "]");
|
|
29
|
+
var container = {
|
|
26
30
|
full_path: fullPath,
|
|
27
|
-
components: collection.item.map(component
|
|
28
|
-
|
|
29
|
-
...component,
|
|
31
|
+
components: collection.item.map(function (component) {
|
|
32
|
+
var newComponent = _objectSpread(_objectSpread({}, component), {}, {
|
|
30
33
|
full_path: "".concat(fullPath, ".").concat(component.fieldId)
|
|
31
|
-
};
|
|
34
|
+
});
|
|
32
35
|
if (component.custom_errors && Array.isArray(component.custom_errors)) {
|
|
33
|
-
newComponent.custom_errors = component.custom_errors.map(error
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
newComponent.custom_errors = component.custom_errors.map(function (error) {
|
|
37
|
+
return _objectSpread(_objectSpread({}, error), {}, {
|
|
38
|
+
message: _copReactComponents.Utils.interpolateString(index === 0 && error.firstOnlyMessage ? error.firstOnlyMessage : error.message, {
|
|
39
|
+
index: labelCount
|
|
40
|
+
})
|
|
41
|
+
});
|
|
42
|
+
});
|
|
39
43
|
}
|
|
40
44
|
return newComponent;
|
|
41
45
|
})
|
|
@@ -43,6 +47,8 @@ const validateCollection = (collection, items, formData) => {
|
|
|
43
47
|
errors.push((0, _validateContainer.default)(container, item, formData));
|
|
44
48
|
});
|
|
45
49
|
}
|
|
46
|
-
return errors.filter(
|
|
50
|
+
return errors.filter(function (e) {
|
|
51
|
+
return !!e;
|
|
52
|
+
}).flat();
|
|
47
53
|
};
|
|
48
54
|
var _default = exports.default = validateCollection;
|
|
@@ -3,127 +3,119 @@
|
|
|
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
|
-
|
|
6
|
+
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); }
|
|
7
|
+
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; }
|
|
8
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
9
|
+
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
|
+
describe('utils.Validate.Collection', function () {
|
|
11
|
+
var setup = function setup(id, type, label, required, item) {
|
|
12
|
+
return {
|
|
13
|
+
id: id,
|
|
14
|
+
fieldId: id,
|
|
15
|
+
type: type,
|
|
16
|
+
label: label,
|
|
17
|
+
required: required,
|
|
18
|
+
item: item
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
it('should return an empty array when the component is null', function () {
|
|
18
22
|
expect((0, _validateCollection.default)(null, [])).toEqual([]);
|
|
19
23
|
});
|
|
20
|
-
it('should return an empty array when the collection has an undefined item array', ()
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
it('should return an empty array when the collection has an undefined item array', function () {
|
|
25
|
+
var ID = 'collection';
|
|
26
|
+
var LABEL = 'field';
|
|
27
|
+
var COLLECTION = setup(ID, _models.ComponentTypes.COLLECTION, LABEL, false, undefined);
|
|
24
28
|
expect((0, _validateCollection.default)(COLLECTION, [])).toEqual([]);
|
|
25
29
|
});
|
|
26
|
-
it('should return an empty array when the collection has an empty item array', ()
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
it('should return an empty array when the collection has an empty item array', function () {
|
|
31
|
+
var ID = 'collection';
|
|
32
|
+
var LABEL = 'field';
|
|
33
|
+
var COLLECTION = setup(ID, _models.ComponentTypes.COLLECTION, LABEL, false, []);
|
|
30
34
|
expect((0, _validateCollection.default)(COLLECTION, [])).toEqual([]);
|
|
31
35
|
});
|
|
32
|
-
it('should return an empty array when the collection has only valid items', ()
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
[EMAIL_ID]: 'alpha.bravo@homeoffice.gov.uk'
|
|
41
|
-
}, {
|
|
42
|
-
[EMAIL_ID]: 'charlie.delta@homeoffice.gov.uk'
|
|
43
|
-
}];
|
|
36
|
+
it('should return an empty array when the collection has only valid items', function () {
|
|
37
|
+
var EMAIL_ID = 'email';
|
|
38
|
+
var EMAIL_LABEL = 'Email';
|
|
39
|
+
var EMAIL = setup(EMAIL_ID, _models.ComponentTypes.EMAIL, EMAIL_LABEL, false);
|
|
40
|
+
var ID = 'collection';
|
|
41
|
+
var LABEL = 'field';
|
|
42
|
+
var COLLECTION = setup(ID, _models.ComponentTypes.COLLECTION, LABEL, false, [EMAIL]);
|
|
43
|
+
var ITEMS = [_defineProperty({}, EMAIL_ID, 'alpha.bravo@homeoffice.gov.uk'), _defineProperty({}, EMAIL_ID, 'charlie.delta@homeoffice.gov.uk')];
|
|
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
|
-
|
|
54
|
-
[EMAIL_ID]: 'alpha.bravo@digital.homeoffice.com'
|
|
55
|
-
}, {
|
|
56
|
-
[EMAIL_ID]: 'alpha.bravo@digital.homeoffice.gov.uk'
|
|
57
|
-
}];
|
|
46
|
+
it('should return an array containing an error when the collection has an invalid first item', function () {
|
|
47
|
+
var EMAIL_ID = 'email';
|
|
48
|
+
var EMAIL_LABEL = 'Email';
|
|
49
|
+
var EMAIL = setup(EMAIL_ID, _models.ComponentTypes.EMAIL, EMAIL_LABEL, false);
|
|
50
|
+
var ID = 'container';
|
|
51
|
+
var LABEL = 'field';
|
|
52
|
+
var COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [EMAIL]);
|
|
53
|
+
var ITEMS = [_defineProperty({}, EMAIL_ID, 'alpha.bravo@digital.homeoffice.com'), _defineProperty({}, EMAIL_ID, 'alpha.bravo@digital.homeoffice.gov.uk')];
|
|
58
54
|
expect((0, _validateCollection.default)(COLLECTION, ITEMS)).toEqual([{
|
|
59
55
|
id: "".concat(ID, "[0].").concat(EMAIL_ID),
|
|
60
56
|
error: "Enter ".concat(EMAIL_LABEL.toLowerCase(), " in the correct format, like jane.doe@homeoffice.gov.uk")
|
|
61
57
|
}]);
|
|
62
58
|
});
|
|
63
|
-
it('should return an array containing an error when the collection has an invalid second item', ()
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
[EMAIL_ID]: 'alpha.bravo@digital.homeoffice.gov.uk'
|
|
72
|
-
}, {
|
|
73
|
-
[EMAIL_ID]: 'alpha.bravo@digital.homeoffice.com'
|
|
74
|
-
}];
|
|
59
|
+
it('should return an array containing an error when the collection has an invalid second item', function () {
|
|
60
|
+
var EMAIL_ID = 'email';
|
|
61
|
+
var EMAIL_LABEL = 'Email';
|
|
62
|
+
var EMAIL = setup(EMAIL_ID, _models.ComponentTypes.EMAIL, EMAIL_LABEL, false);
|
|
63
|
+
var ID = 'container';
|
|
64
|
+
var LABEL = 'field';
|
|
65
|
+
var COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [EMAIL]);
|
|
66
|
+
var ITEMS = [_defineProperty({}, EMAIL_ID, 'alpha.bravo@digital.homeoffice.gov.uk'), _defineProperty({}, EMAIL_ID, 'alpha.bravo@digital.homeoffice.com')];
|
|
75
67
|
expect((0, _validateCollection.default)(COLLECTION, ITEMS)).toEqual([{
|
|
76
68
|
id: "".concat(ID, "[1].").concat(EMAIL_ID),
|
|
77
69
|
error: "Enter ".concat(EMAIL_LABEL.toLowerCase(), " in the correct format, like jane.doe@homeoffice.gov.uk")
|
|
78
70
|
}]);
|
|
79
71
|
});
|
|
80
|
-
it('should correctly interpolate error messages using collection\'s index', ()
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
72
|
+
it('should correctly interpolate error messages using collection\'s index', function () {
|
|
73
|
+
var ID = 'container';
|
|
74
|
+
var LABEL = 'field';
|
|
75
|
+
var TYPE = 'autocomplete';
|
|
76
|
+
var ITEM = setup(ID, TYPE, LABEL, true, []);
|
|
85
77
|
ITEM.custom_errors = [{
|
|
86
78
|
"type": "required",
|
|
87
79
|
// eslint-disable-next-line no-template-curly-in-string
|
|
88
80
|
"message": "Test to check that ${index} is 1"
|
|
89
81
|
}];
|
|
90
|
-
|
|
82
|
+
var COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [ITEM]);
|
|
91
83
|
COLLECTION.countOffset = 0;
|
|
92
84
|
expect((0, _validateCollection.default)(COLLECTION, ITEM.custom_errors)).toEqual([{
|
|
93
85
|
error: "Test to check that 1 is 1",
|
|
94
86
|
id: "".concat(ID, "[0].").concat(COLLECTION.type)
|
|
95
87
|
}]);
|
|
96
88
|
});
|
|
97
|
-
it('should correctly display firstOnlyMessage error message', ()
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
89
|
+
it('should correctly display firstOnlyMessage error message', function () {
|
|
90
|
+
var ID = 'container';
|
|
91
|
+
var LABEL = 'field';
|
|
92
|
+
var TYPE = 'autocomplete';
|
|
93
|
+
var ITEM = setup(ID, TYPE, LABEL, true, []);
|
|
102
94
|
ITEM.custom_errors = [{
|
|
103
95
|
"type": "required",
|
|
104
96
|
// eslint-disable-next-line no-template-curly-in-string
|
|
105
97
|
"message": "Test to check that ${index} is 1",
|
|
106
98
|
"firstOnlyMessage": "Test for first message"
|
|
107
99
|
}];
|
|
108
|
-
|
|
100
|
+
var COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [ITEM]);
|
|
109
101
|
COLLECTION.countOffset = 0;
|
|
110
102
|
expect((0, _validateCollection.default)(COLLECTION, ITEM.custom_errors)).toEqual([{
|
|
111
103
|
error: "Test for first message",
|
|
112
104
|
id: "".concat(ID, "[0].").concat(COLLECTION.type)
|
|
113
105
|
}]);
|
|
114
106
|
});
|
|
115
|
-
it('should correctly display message if firstOnlyMessage is undefined', ()
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
107
|
+
it('should correctly display message if firstOnlyMessage is undefined', function () {
|
|
108
|
+
var ID = 'container';
|
|
109
|
+
var LABEL = 'field';
|
|
110
|
+
var TYPE = 'autocomplete';
|
|
111
|
+
var ITEM = setup(ID, TYPE, LABEL, true, []);
|
|
120
112
|
ITEM.custom_errors = [{
|
|
121
113
|
"type": "required",
|
|
122
114
|
// eslint-disable-next-line no-template-curly-in-string
|
|
123
115
|
"message": "Test to check that ${index} is 1",
|
|
124
116
|
"firstOnlyMessage": undefined
|
|
125
117
|
}];
|
|
126
|
-
|
|
118
|
+
var COLLECTION = setup(ID, _models.ComponentTypes.CONTAINER, LABEL, false, [ITEM]);
|
|
127
119
|
COLLECTION.countOffset = 0;
|
|
128
120
|
expect((0, _validateCollection.default)(COLLECTION, ITEM.custom_errors)).toEqual([{
|
|
129
121
|
error: "Test to check that 1 is 1",
|
|
@@ -19,8 +19,12 @@ 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
|
-
|
|
23
|
-
|
|
22
|
+
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); }
|
|
23
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
24
|
+
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; }
|
|
25
|
+
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; }
|
|
26
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
27
|
+
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
|
|
24
28
|
/**
|
|
25
29
|
* Validates a single component.
|
|
26
30
|
* @param {object} component The component to validate.
|
|
@@ -28,18 +32,18 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
28
32
|
* @param {object} formData The data at the top level of the form.
|
|
29
33
|
* @returns The first encountered error with the component.
|
|
30
34
|
*/
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
if (!(0, _showComponent.default)(component, fd)) {
|
|
35
|
+
var validateComponent = function validateComponent(component, outerData, formData) {
|
|
36
|
+
var fd = formData || outerData;
|
|
37
|
+
if (!(0, _showComponent.default)(component, _objectSpread(_objectSpread({}, fd), outerData))) {
|
|
34
38
|
return undefined;
|
|
35
39
|
}
|
|
36
40
|
if (component.type === _models.ComponentTypes.CONTAINER) {
|
|
37
41
|
return (0, _validateContainer.default)(component, outerData, fd);
|
|
38
42
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
var error;
|
|
44
|
+
var properties;
|
|
45
|
+
var data = outerData && _typeof(outerData) === 'object' ? outerData : {};
|
|
46
|
+
var value = data[component.fieldId];
|
|
43
47
|
if (component.type === _models.ComponentTypes.COLLECTION_SUMMARY) {
|
|
44
48
|
value = (0, _getCollectionPageData.default)(component.collectionName, fd);
|
|
45
49
|
}
|
|
@@ -56,11 +60,10 @@ const validateComponent = (component, outerData, formData) => {
|
|
|
56
60
|
case _models.ComponentTypes.DATE:
|
|
57
61
|
case _models.ComponentTypes.TIME:
|
|
58
62
|
{
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
message,
|
|
62
|
-
propsInError
|
|
63
|
-
} = validator(value);
|
|
63
|
+
var validator = component.type === _models.ComponentTypes.DATE ? _validateDate.default : _validateTime.default;
|
|
64
|
+
var _validator = validator(value),
|
|
65
|
+
message = _validator.message,
|
|
66
|
+
propsInError = _validator.propsInError;
|
|
64
67
|
properties = propsInError;
|
|
65
68
|
error = message;
|
|
66
69
|
break;
|
|
@@ -70,8 +73,8 @@ const validateComponent = (component, outerData, formData) => {
|
|
|
70
73
|
case _models.ComponentTypes.RADIOS:
|
|
71
74
|
{
|
|
72
75
|
var _component$data$optio;
|
|
73
|
-
|
|
74
|
-
(_component$data$optio = component.data.options) === null || _component$data$optio === void 0 || _component$data$optio.forEach(option
|
|
76
|
+
var nestedErrors = [];
|
|
77
|
+
(_component$data$optio = component.data.options) === null || _component$data$optio === void 0 || _component$data$optio.forEach(function (option) {
|
|
75
78
|
if (option.nested && (0, _optionIsSelected.default)(formData[component.id], option)) {
|
|
76
79
|
nestedErrors = nestedErrors.concat((0, _validateContainer.default)({
|
|
77
80
|
components: option.nested
|
|
@@ -110,8 +113,8 @@ const validateComponent = (component, outerData, formData) => {
|
|
|
110
113
|
if (error) {
|
|
111
114
|
return {
|
|
112
115
|
id: component.full_path || component.id,
|
|
113
|
-
error,
|
|
114
|
-
properties
|
|
116
|
+
error: error,
|
|
117
|
+
properties: properties
|
|
115
118
|
};
|
|
116
119
|
}
|
|
117
120
|
return undefined;
|