@digigov/form 0.6.10 → 0.8.0
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/CHANGELOG.md +24 -1
- package/Field/FieldBase.js +102 -0
- package/Field/FieldConditional.js +72 -0
- package/Field/FieldContainer.js +65 -0
- package/Field/index.js +50 -327
- package/Field/utils.js +162 -0
- package/FieldArray/FieldArray.stories.js +44 -0
- package/FieldArray/__stories__/Default.js +109 -0
- package/FieldArray/__stories__/WithExactLength.js +108 -0
- package/FieldArray/index.js +88 -0
- package/FieldObject/index.js +80 -0
- package/FormBuilder.js +34 -24
- package/MultiplicityField/MultiplicityField.stories.js +86 -0
- package/MultiplicityField/__stories__/Default.js +121 -0
- package/MultiplicityField/__stories__/WithExactLength.js +116 -0
- package/MultiplicityField/__stories__/WithMaxLength.js +119 -0
- package/MultiplicityField/__stories__/WithMinAndMaxLength.js +120 -0
- package/MultiplicityField/__stories__/WithMinLength.js +119 -0
- package/MultiplicityField/add-objects.js +180 -0
- package/MultiplicityField/index.js +146 -0
- package/Questions/__snapshots__/index.spec.tsx.snap +461 -2499
- package/es/Field/FieldBase.js +85 -0
- package/es/Field/FieldConditional.js +54 -0
- package/es/Field/FieldContainer.js +43 -0
- package/es/Field/index.js +46 -309
- package/es/Field/utils.js +138 -0
- package/es/FieldArray/FieldArray.stories.js +7 -0
- package/es/FieldArray/__stories__/Default.js +88 -0
- package/es/FieldArray/__stories__/WithExactLength.js +87 -0
- package/es/FieldArray/index.js +65 -0
- package/es/FieldObject/index.js +55 -0
- package/es/FormBuilder.js +33 -22
- package/es/MultiplicityField/MultiplicityField.stories.js +10 -0
- package/es/MultiplicityField/__stories__/Default.js +100 -0
- package/es/MultiplicityField/__stories__/WithExactLength.js +95 -0
- package/es/MultiplicityField/__stories__/WithMaxLength.js +98 -0
- package/es/MultiplicityField/__stories__/WithMinAndMaxLength.js +99 -0
- package/es/MultiplicityField/__stories__/WithMinLength.js +98 -0
- package/es/MultiplicityField/add-objects.js +156 -0
- package/es/MultiplicityField/index.js +116 -0
- package/es/Questions/__snapshots__/index.spec.tsx.snap +461 -2499
- package/es/inputs/Radio/index.js +8 -13
- package/es/internal.js +4 -0
- package/es/utils.js +65 -48
- package/es/validators/index.js +171 -0
- package/es/validators/types.js +1 -0
- package/es/validators/utils/afm.js +35 -0
- package/es/validators/utils/file.js +52 -0
- package/es/validators/utils/iban.js +123 -0
- package/es/validators/utils/index.js +87 -0
- package/es/validators/utils/phone.js +122 -0
- package/es/validators/utils/postal_code.js +29 -0
- package/es/validators/utils/uuid4.js +20 -0
- package/es/{validators.spec.js → validators/validators.spec.js} +1 -1
- package/esm/Field/FieldBase.js +85 -0
- package/esm/Field/FieldConditional.js +54 -0
- package/esm/Field/FieldContainer.js +43 -0
- package/esm/Field/index.js +46 -309
- package/esm/Field/utils.js +138 -0
- package/esm/FieldArray/FieldArray.stories.js +7 -0
- package/esm/FieldArray/__stories__/Default.js +88 -0
- package/esm/FieldArray/__stories__/WithExactLength.js +87 -0
- package/esm/FieldArray/index.js +65 -0
- package/esm/FieldObject/index.js +55 -0
- package/esm/FormBuilder.js +33 -22
- package/esm/MultiplicityField/MultiplicityField.stories.js +10 -0
- package/esm/MultiplicityField/__stories__/Default.js +100 -0
- package/esm/MultiplicityField/__stories__/WithExactLength.js +95 -0
- package/esm/MultiplicityField/__stories__/WithMaxLength.js +98 -0
- package/esm/MultiplicityField/__stories__/WithMinAndMaxLength.js +99 -0
- package/esm/MultiplicityField/__stories__/WithMinLength.js +98 -0
- package/esm/MultiplicityField/add-objects.js +156 -0
- package/esm/MultiplicityField/index.js +116 -0
- package/esm/Questions/__snapshots__/index.spec.tsx.snap +461 -2499
- package/esm/index.js +1 -1
- package/esm/inputs/Radio/index.js +8 -13
- package/esm/internal.js +4 -0
- package/esm/utils.js +65 -48
- package/esm/validators/index.js +171 -0
- package/esm/validators/types.js +1 -0
- package/esm/validators/utils/afm.js +35 -0
- package/esm/validators/utils/file.js +52 -0
- package/esm/validators/utils/iban.js +123 -0
- package/esm/validators/utils/index.js +87 -0
- package/esm/validators/utils/phone.js +122 -0
- package/esm/validators/utils/postal_code.js +29 -0
- package/esm/validators/utils/uuid4.js +20 -0
- package/esm/{validators.spec.js → validators/validators.spec.js} +1 -1
- package/inputs/Radio/index.js +8 -20
- package/internal.js +42 -0
- package/libs/form/src/Field/FieldBase.d.ts +3 -0
- package/libs/form/src/Field/FieldConditional.d.ts +4 -0
- package/libs/form/src/Field/FieldContainer.d.ts +4 -0
- package/libs/form/src/Field/index.d.ts +1 -3
- package/libs/form/src/Field/types.d.ts +23 -15
- package/libs/form/src/Field/utils.d.ts +5 -0
- package/libs/form/src/FieldArray/FieldArray.stories.d.ts +8 -0
- package/libs/form/src/FieldArray/__stories__/Default.d.ts +1 -0
- package/libs/form/src/FieldArray/__stories__/WithExactLength.d.ts +1 -0
- package/libs/form/src/FieldArray/index.d.ts +11 -0
- package/libs/form/src/FieldObject/index.d.ts +20 -0
- package/libs/form/src/FormContext.d.ts +2 -2
- package/libs/form/src/MultiplicityField/MultiplicityField.stories.d.ts +11 -0
- package/libs/form/src/MultiplicityField/__stories__/Default.d.ts +1 -0
- package/libs/form/src/MultiplicityField/__stories__/WithExactLength.d.ts +1 -0
- package/libs/form/src/MultiplicityField/__stories__/WithMaxLength.d.ts +1 -0
- package/libs/form/src/MultiplicityField/__stories__/WithMinAndMaxLength.d.ts +1 -0
- package/libs/form/src/MultiplicityField/__stories__/WithMinLength.d.ts +1 -0
- package/libs/form/src/MultiplicityField/add-objects.d.ts +13 -0
- package/libs/form/src/MultiplicityField/index.d.ts +32 -0
- package/libs/form/src/inputs/DateInput/index.d.ts +0 -1
- package/libs/form/src/inputs/Label/index.d.ts +1 -0
- package/libs/form/src/internal.d.ts +4 -0
- package/libs/form/src/types.d.ts +22 -13
- package/libs/form/src/utils.d.ts +8 -3
- package/libs/form/src/validators/index.d.ts +9 -0
- package/libs/form/src/validators/types.d.ts +2 -0
- package/libs/form/src/validators/utils/afm.d.ts +6 -0
- package/libs/form/src/validators/utils/file.d.ts +3 -0
- package/libs/form/src/validators/utils/iban.d.ts +4 -0
- package/libs/form/src/validators/utils/index.d.ts +24 -0
- package/libs/form/src/validators/utils/phone.d.ts +11 -0
- package/libs/form/src/validators/utils/postal_code.d.ts +4 -0
- package/libs/form/src/validators/utils/uuid4.d.ts +6 -0
- package/libs/form/src/{validators.spec.d.ts → validators/validators.spec.d.ts} +0 -0
- package/libs/ui/src/app/i18n.d.ts +2 -2
- package/libs/ui/src/core/Accordion/index.d.ts +3 -3
- package/libs/ui/src/core/Base/index.d.ts +3 -0
- package/libs/ui/src/core/Blockquote/index.d.ts +1 -1
- package/libs/ui/src/core/Button/BackButton.d.ts +1 -1
- package/libs/ui/src/core/Button/ButtonLink.d.ts +1 -1
- package/libs/ui/src/core/Button/index.d.ts +1 -1
- package/libs/ui/src/core/Divider/index.d.ts +1 -1
- package/libs/ui/src/core/Form/index.d.ts +3 -0
- package/libs/ui/src/core/Label/index.d.ts +4 -0
- package/libs/ui/src/core/Link/index.d.ts +1 -0
- package/libs/ui/src/core/NavList/NavHorizontal.d.ts +3 -0
- package/libs/ui/src/core/NavList/NavHorizontalList.d.ts +3 -0
- package/libs/ui/src/core/NavList/NavHorizontalListItem.d.ts +3 -0
- package/libs/ui/src/core/NavList/NavListItem.d.ts +1 -0
- package/libs/ui/src/core/NavList/NavListItemBase.d.ts +2 -1
- package/libs/ui/src/core/NavList/NavVertical.d.ts +3 -0
- package/libs/ui/src/core/NavList/NavVerticalItem.d.ts +3 -0
- package/libs/ui/src/core/NavList/index.d.ts +5 -0
- package/libs/ui/src/core/NavList/types.d.ts +1 -0
- package/libs/ui/src/core/SkipLink/index.d.ts +3 -0
- package/libs/ui/src/core/SvgIcon/index.d.ts +1 -0
- package/libs/ui/src/core/Table/TableFloatingScroll.d.ts +0 -1
- package/libs/ui/src/core/index.d.ts +4 -0
- package/libs/ui/src/locales/el.d.ts +6 -0
- package/libs/ui/src/typography/Caption/index.d.ts +3 -2
- package/libs/ui/src/typography/Title/index.d.ts +2 -1
- package/libs-ui/react-core/src/Accordion/index.d.ts +3 -3
- package/libs-ui/react-core/src/AccordionControls/index.d.ts +3 -3
- package/libs-ui/react-core/src/AccordionSection/index.d.ts +3 -3
- package/libs-ui/react-core/src/AccordionSectionContent/index.d.ts +3 -3
- package/libs-ui/react-core/src/AccordionSectionHeader/index.d.ts +3 -3
- package/libs-ui/react-core/src/AccordionSectionSummary/index.d.ts +4 -3
- package/libs-ui/react-core/src/AccordionSectionSummaryHeading/index.d.ts +3 -3
- package/libs-ui/react-core/src/Aside/index.d.ts +10 -0
- package/libs-ui/react-core/src/BackLink/index.d.ts +3 -3
- package/libs-ui/react-core/src/Base/index.d.ts +43 -0
- package/libs-ui/react-core/src/Blockquote/index.d.ts +3 -3
- package/libs-ui/react-core/src/Bottom/index.d.ts +9 -0
- package/libs-ui/react-core/src/Breadcrumbs/index.d.ts +3 -3
- package/libs-ui/react-core/src/BreadcrumbsList/index.d.ts +3 -3
- package/libs-ui/react-core/src/BreadcrumbsListItem/index.d.ts +3 -3
- package/libs-ui/react-core/src/Button/index.d.ts +3 -3
- package/libs-ui/react-core/src/ButtonGroup/index.d.ts +3 -3
- package/libs-ui/react-core/src/ButtonLink/index.d.ts +3 -3
- package/libs-ui/react-core/src/CallToAction/index.d.ts +1 -1
- package/libs-ui/react-core/src/Card/index.d.ts +3 -3
- package/libs-ui/react-core/src/CardAction/index.d.ts +3 -3
- package/libs-ui/react-core/src/CardHeading/index.d.ts +3 -3
- package/libs-ui/react-core/src/CardText/index.d.ts +3 -3
- package/libs-ui/react-core/src/CheckIcon/index.d.ts +15 -0
- package/libs-ui/react-core/src/Checkbox/index.d.ts +3 -3
- package/libs-ui/react-core/src/CheckboxConditional/index.d.ts +11 -0
- package/libs-ui/react-core/src/CheckboxItem/index.d.ts +3 -3
- package/libs-ui/react-core/src/Confirmation/index.d.ts +3 -3
- package/libs-ui/react-core/src/ConfirmationBody/index.d.ts +3 -3
- package/libs-ui/react-core/src/ConfirmationTitle/index.d.ts +3 -3
- package/libs-ui/react-core/src/Container/index.d.ts +17 -0
- package/libs-ui/react-core/src/Copyright/index.d.ts +10 -0
- package/libs-ui/react-core/src/DateInput/index.d.ts +3 -3
- package/libs-ui/react-core/src/DateInputItem/index.d.ts +3 -3
- package/libs-ui/react-core/src/Details/index.d.ts +3 -3
- package/libs-ui/react-core/src/DetailsContent/index.d.ts +3 -3
- package/libs-ui/react-core/src/DetailsSummary/index.d.ts +3 -3
- package/libs-ui/react-core/src/ErrorMessage/index.d.ts +3 -3
- package/libs-ui/react-core/src/ErrorSummary/index.d.ts +3 -3
- package/libs-ui/react-core/src/Field/index.d.ts +3 -3
- package/libs-ui/react-core/src/Fieldset/index.d.ts +3 -3
- package/libs-ui/react-core/src/FieldsetLegend/index.d.ts +3 -3
- package/libs-ui/react-core/src/FileUpload/index.d.ts +3 -3
- package/libs-ui/react-core/src/Footer/index.d.ts +9 -0
- package/libs-ui/react-core/src/FooterContainer/index.d.ts +16 -0
- package/libs-ui/react-core/src/FooterContent/index.d.ts +10 -0
- package/libs-ui/react-core/src/FooterContentLogos/index.d.ts +11 -0
- package/libs-ui/react-core/src/FooterHeading/index.d.ts +15 -0
- package/libs-ui/react-core/src/FooterImage/index.d.ts +15 -0
- package/libs-ui/react-core/src/FooterInlineList/index.d.ts +11 -0
- package/libs-ui/react-core/src/FooterInlineListItem/index.d.ts +9 -0
- package/libs-ui/react-core/src/FooterLink/index.d.ts +13 -0
- package/libs-ui/react-core/src/FooterList/index.d.ts +15 -0
- package/libs-ui/react-core/src/FooterListItem/index.d.ts +10 -0
- package/libs-ui/react-core/src/FooterMeta/index.d.ts +11 -0
- package/libs-ui/react-core/src/FooterMetaItem/index.d.ts +14 -0
- package/libs-ui/react-core/src/FooterNavigation/index.d.ts +11 -0
- package/libs-ui/react-core/src/FooterSection/index.d.ts +11 -0
- package/libs-ui/react-core/src/Form/index.d.ts +11 -0
- package/libs-ui/react-core/src/GovGRFooter/index.d.ts +9 -0
- package/libs-ui/react-core/src/GovGRLogo/index.d.ts +9 -0
- package/libs-ui/react-core/src/Grid/index.d.ts +3 -3
- package/libs-ui/react-core/src/Header/index.d.ts +10 -0
- package/libs-ui/react-core/src/HeaderContent/index.d.ts +9 -0
- package/libs-ui/react-core/src/HeaderLogo/index.d.ts +21 -0
- package/libs-ui/react-core/src/HeaderSecondaryLogo/index.d.ts +21 -0
- package/libs-ui/react-core/src/HeaderSection/index.d.ts +9 -0
- package/libs-ui/react-core/src/HeaderSubtitle/index.d.ts +9 -0
- package/libs-ui/react-core/src/HeaderTitle/index.d.ts +13 -0
- package/libs-ui/react-core/src/Heading/index.d.ts +3 -3
- package/libs-ui/react-core/src/HeadingCaption/index.d.ts +3 -3
- package/libs-ui/react-core/src/HellenicRepublicLogo/index.d.ts +20 -0
- package/libs-ui/react-core/src/HellenicRepublicLogo/logo-el.d.ts +2 -0
- package/libs-ui/react-core/src/HellenicRepublicLogo/logo-en.d.ts +2 -0
- package/libs-ui/react-core/src/Hidden/index.d.ts +3 -3
- package/libs-ui/react-core/src/Hint/index.d.ts +3 -3
- package/libs-ui/react-core/src/Label/index.d.ts +3 -3
- package/libs-ui/react-core/src/LabelTitle/index.d.ts +7 -7
- package/libs-ui/react-core/src/Layout/index.d.ts +10 -0
- package/libs-ui/react-core/src/Link/index.d.ts +3 -3
- package/libs-ui/react-core/src/List/index.d.ts +3 -3
- package/libs-ui/react-core/src/ListItem/index.d.ts +3 -3
- package/libs-ui/react-core/src/Main/index.d.ts +9 -0
- package/libs-ui/react-core/src/Masthead/index.d.ts +9 -0
- package/libs-ui/react-core/src/MastheadBody/index.d.ts +9 -0
- package/libs-ui/react-core/src/NavHorizontal/index.d.ts +16 -0
- package/libs-ui/react-core/src/NavHorizontalList/index.d.ts +10 -0
- package/libs-ui/react-core/src/NavHorizontalListItem/index.d.ts +18 -0
- package/libs-ui/react-core/src/NavVertical/index.d.ts +11 -0
- package/libs-ui/react-core/src/NavVerticalItem/index.d.ts +14 -0
- package/libs-ui/react-core/src/NormalText/index.d.ts +3 -3
- package/libs-ui/react-core/src/NotificationBanner/index.d.ts +3 -3
- package/libs-ui/react-core/src/NotificationBannerContent/index.d.ts +3 -3
- package/libs-ui/react-core/src/NotificationBannerHeader/index.d.ts +3 -3
- package/libs-ui/react-core/src/NotificationBannerHeading/index.d.ts +3 -3
- package/libs-ui/react-core/src/NotificationBannerLink/index.d.ts +3 -3
- package/libs-ui/react-core/src/PageTitle/index.d.ts +9 -0
- package/libs-ui/react-core/src/PageTitleCaption/index.d.ts +14 -0
- package/libs-ui/react-core/src/PageTitleHeading/index.d.ts +13 -0
- package/libs-ui/react-core/src/PageTitleSection/index.d.ts +10 -0
- package/libs-ui/react-core/src/Paragraph/index.d.ts +3 -3
- package/libs-ui/react-core/src/PhaseBanner/index.d.ts +3 -3
- package/libs-ui/react-core/src/PhaseBannerHeaderContainer/index.d.ts +3 -3
- package/libs-ui/react-core/src/PhaseBannerTag/index.d.ts +3 -3
- package/libs-ui/react-core/src/PhaseBannerText/index.d.ts +3 -3
- package/libs-ui/react-core/src/Radio/index.d.ts +3 -3
- package/libs-ui/react-core/src/RadioConditional/index.d.ts +11 -0
- package/libs-ui/react-core/src/RadioItem/index.d.ts +3 -3
- package/libs-ui/react-core/src/SectionBreak/index.d.ts +3 -3
- package/libs-ui/react-core/src/Select/index.d.ts +3 -3
- package/libs-ui/react-core/src/SelectOption/index.d.ts +3 -3
- package/libs-ui/react-core/src/ServiceBadge/index.d.ts +11 -0
- package/libs-ui/react-core/src/SkipLink/index.d.ts +10 -0
- package/libs-ui/react-core/src/SummaryList/index.d.ts +3 -3
- package/libs-ui/react-core/src/SummaryListItem/index.d.ts +3 -3
- package/libs-ui/react-core/src/SummaryListItemAction/index.d.ts +3 -3
- package/libs-ui/react-core/src/SummaryListItemKey/index.d.ts +3 -3
- package/libs-ui/react-core/src/SummaryListItemValue/index.d.ts +3 -3
- package/libs-ui/react-core/src/SvgIcon/index.d.ts +3 -3
- package/libs-ui/react-core/src/Table/index.d.ts +3 -3
- package/libs-ui/react-core/src/TableBody/index.d.ts +3 -3
- package/libs-ui/react-core/src/TableCaption/index.d.ts +3 -3
- package/libs-ui/react-core/src/TableContainer/index.d.ts +3 -3
- package/libs-ui/react-core/src/TableDataCell/index.d.ts +3 -3
- package/libs-ui/react-core/src/TableHead/index.d.ts +3 -3
- package/libs-ui/react-core/src/TableHeadCell/index.d.ts +3 -3
- package/libs-ui/react-core/src/TableNoDataRow/index.d.ts +3 -3
- package/libs-ui/react-core/src/TableRow/index.d.ts +3 -3
- package/libs-ui/react-core/src/Tabs/index.d.ts +3 -3
- package/libs-ui/react-core/src/TabsHeading/index.d.ts +3 -3
- package/libs-ui/react-core/src/TabsList/index.d.ts +3 -3
- package/libs-ui/react-core/src/TabsListItem/index.d.ts +3 -3
- package/libs-ui/react-core/src/TabsPanel/index.d.ts +3 -3
- package/libs-ui/react-core/src/TextArea/index.d.ts +3 -3
- package/libs-ui/react-core/src/TextInput/index.d.ts +3 -3
- package/libs-ui/react-core/src/Top/index.d.ts +9 -0
- package/libs-ui/react-core/src/UncheckIcon/index.d.ts +4 -4
- package/libs-ui/react-core/src/VisuallyHidden/index.d.ts +3 -3
- package/libs-ui/react-core/src/WarningText/index.d.ts +3 -3
- package/libs-ui/react-core/src/index.d.ts +141 -0
- package/package.json +7 -5
- package/utils.js +64 -48
- package/validators/index.js +197 -0
- package/validators/types.js +5 -0
- package/validators/utils/afm.js +45 -0
- package/validators/utils/file.js +62 -0
- package/validators/utils/iban.js +134 -0
- package/validators/utils/index.js +188 -0
- package/validators/utils/phone.js +144 -0
- package/validators/utils/postal_code.js +40 -0
- package/validators/utils/uuid4.js +30 -0
- package/validators/validators.spec.js +88 -0
- package/es/validators.js +0 -626
- package/esm/validators.js +0 -626
- package/libs/form/src/validators.d.ts +0 -14
- package/validators.js +0 -662
- package/validators.spec.js +0 -88
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import * as yup from 'yup';
|
|
2
|
+
export * from '@digigov/form/validators/utils/afm';
|
|
3
|
+
export * from '@digigov/form/validators/utils/file';
|
|
4
|
+
export * from '@digigov/form/validators/utils/iban';
|
|
5
|
+
export * from '@digigov/form/validators/utils/phone';
|
|
6
|
+
export * from '@digigov/form/validators/utils/postal_code';
|
|
7
|
+
export * from '@digigov/form/validators/utils/uuid4';
|
|
8
|
+
export function getYupField(field, yupTypeMap) {
|
|
9
|
+
var yupField = yupTypeMap[(field === null || field === void 0 ? void 0 : field.type) || 'string'] || yupTypeMap['string'];
|
|
10
|
+
return yupField(field);
|
|
11
|
+
}
|
|
12
|
+
export function computeShape(fields, yupTypeMap, validatorRegistry) {
|
|
13
|
+
var fieldSchemas = {};
|
|
14
|
+
var objectFields = {};
|
|
15
|
+
fields.forEach(function (field) {
|
|
16
|
+
var yupField = getYupField(field, yupTypeMap);
|
|
17
|
+
|
|
18
|
+
if (field.condition) {
|
|
19
|
+
for (var key in field.condition) {
|
|
20
|
+
var then = void 0,
|
|
21
|
+
otherwise = void 0;
|
|
22
|
+
|
|
23
|
+
if (field.condition[key].then) {
|
|
24
|
+
var _field$condition$key$, _field$condition$key$2;
|
|
25
|
+
|
|
26
|
+
if (((_field$condition$key$ = field.condition[key].then) === null || _field$condition$key$ === void 0 ? void 0 : _field$condition$key$.required) === false) {
|
|
27
|
+
then = yupField;
|
|
28
|
+
} else if (((_field$condition$key$2 = field.condition[key].then) === null || _field$condition$key$2 === void 0 ? void 0 : _field$condition$key$2.required) === true) {
|
|
29
|
+
then = yupField.required('form.error.required');
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
if (field.condition[key]["else"]) {
|
|
34
|
+
var _field$condition$key$3, _field$condition$key$4;
|
|
35
|
+
|
|
36
|
+
if (((_field$condition$key$3 = field.condition[key]["else"]) === null || _field$condition$key$3 === void 0 ? void 0 : _field$condition$key$3.required) === false) {
|
|
37
|
+
otherwise = yupField;
|
|
38
|
+
} else if (((_field$condition$key$4 = field.condition[key]["else"]) === null || _field$condition$key$4 === void 0 ? void 0 : _field$condition$key$4.required) === true) {
|
|
39
|
+
otherwise = yupField.required('form.error.required');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (then || otherwise) {
|
|
44
|
+
yupField = yupField.when(key, {
|
|
45
|
+
is: field.condition[key].is,
|
|
46
|
+
then: then,
|
|
47
|
+
otherwise: otherwise
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
} else if (field.required) {
|
|
52
|
+
yupField = yupField.required('form.error.required');
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (validatorRegistry && field.type && validatorRegistry[field.type]) {
|
|
56
|
+
validatorRegistry[field.type].forEach(function (validator) {
|
|
57
|
+
yupField = yupField.test(validator);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (field.validators) {
|
|
62
|
+
field.validators.forEach(function (validator) {
|
|
63
|
+
yupField = yupField.test(validator);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
fieldSchemas[field.key] = yupField;
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
for (var objectKey in objectFields) {
|
|
71
|
+
fieldSchemas[objectKey] = getYupObjectShape(objectFields[objectKey], yupTypeMap, validatorRegistry);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return fieldSchemas;
|
|
75
|
+
}
|
|
76
|
+
export function getYupObjectShape( // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
77
|
+
fields, yupTypeMap, validatorRegistry) {
|
|
78
|
+
if (!fields.current) {
|
|
79
|
+
var fieldSchemas = computeShape(fields, yupTypeMap, validatorRegistry);
|
|
80
|
+
return yup.object().shape(fieldSchemas);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return yup.lazy(function () {
|
|
84
|
+
var fieldSchemas = computeShape(Object.values(fields.current), yupTypeMap, validatorRegistry);
|
|
85
|
+
return yup.object().shape(fieldSchemas);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import * as gPhoneNumber from 'google-libphonenumber';
|
|
2
|
+
export function validatePhoneNumber(phoneNumber) {
|
|
3
|
+
var countries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ['gr'];
|
|
4
|
+
var typeOfPhoneNumber = arguments.length > 2 ? arguments[2] : undefined;
|
|
5
|
+
var phoneUtil = gPhoneNumber.PhoneNumberUtil.getInstance();
|
|
6
|
+
|
|
7
|
+
if (!countries || countries.length === 0) {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return countries.some(function (country) {
|
|
12
|
+
try {
|
|
13
|
+
var phone = phoneUtil.parse(phoneNumber, country.toUpperCase());
|
|
14
|
+
|
|
15
|
+
if (phoneUtil.isValidNumber(phone)) {
|
|
16
|
+
if (typeOfPhoneNumber) {
|
|
17
|
+
if (matchTypeOfPhoneNumber(phone, typeOfPhoneNumber, phoneUtil)) {
|
|
18
|
+
return true;
|
|
19
|
+
} else {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
} else {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return false;
|
|
28
|
+
} catch (error) {
|
|
29
|
+
console.error(error);
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
var phoneNumberTypes = {
|
|
35
|
+
0: 'landline',
|
|
36
|
+
1: 'mobile',
|
|
37
|
+
2: 'landline_or_mobile'
|
|
38
|
+
};
|
|
39
|
+
export function matchTypeOfPhoneNumber(phone, type, phoneUtil) {
|
|
40
|
+
try {
|
|
41
|
+
var phoneNumberType = phoneUtil.getNumberType(phone);
|
|
42
|
+
var numberType = phoneNumberTypes[phoneNumberType];
|
|
43
|
+
|
|
44
|
+
if (numberType === 'landline_or_mobile' || numberType === type) {
|
|
45
|
+
return true;
|
|
46
|
+
} else {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
} catch (error) {
|
|
50
|
+
console.error(error);
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function validateMobile(value) {
|
|
56
|
+
var phoneUtil = gPhoneNumber.PhoneNumberUtil.getInstance();
|
|
57
|
+
var origValue = value; // probably catch all the cases with a regex instead of gphonenumber
|
|
58
|
+
|
|
59
|
+
if (!value.match(/^((\+|00){0,1}\d{1,3}[- ]?)?\d{10}$/)) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
try {
|
|
64
|
+
var phone;
|
|
65
|
+
|
|
66
|
+
try {
|
|
67
|
+
phone = phoneUtil.parse(value);
|
|
68
|
+
} catch (err) {
|
|
69
|
+
try {
|
|
70
|
+
value = '+' + value;
|
|
71
|
+
phone = phoneUtil.parse(value);
|
|
72
|
+
} catch (err) {
|
|
73
|
+
value = '+30' + origValue;
|
|
74
|
+
phone = phoneUtil.parse(value);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return phoneUtil.isValidNumber(phone);
|
|
79
|
+
} catch (err) {
|
|
80
|
+
console.error(err);
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export var MOBILE_PHONE_VALIDATOR = {
|
|
86
|
+
name: 'mobile-phone-validator',
|
|
87
|
+
message: 'form.error.mobile_phone',
|
|
88
|
+
test: function test(value) {
|
|
89
|
+
if (value) {
|
|
90
|
+
return validateMobile(value);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
export var PHONE_NUMBER_VALIDATOR = function PHONE_NUMBER_VALIDATOR(field) {
|
|
97
|
+
var _field$extra, _field$extra2;
|
|
98
|
+
|
|
99
|
+
var countryCode = field === null || field === void 0 ? void 0 : (_field$extra = field.extra) === null || _field$extra === void 0 ? void 0 : _field$extra.countries;
|
|
100
|
+
var typeOfPhone = field === null || field === void 0 ? void 0 : (_field$extra2 = field.extra) === null || _field$extra2 === void 0 ? void 0 : _field$extra2.phoneType;
|
|
101
|
+
return {
|
|
102
|
+
name: 'phone-number-validator',
|
|
103
|
+
message: function message() {
|
|
104
|
+
if (typeOfPhone === 'mobile') {
|
|
105
|
+
return 'form.error.mobile_phone';
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (typeOfPhone === 'landline') {
|
|
109
|
+
return 'form.error.landline';
|
|
110
|
+
} else {
|
|
111
|
+
return 'form.error.phone_number';
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
test: function test(value) {
|
|
115
|
+
if (!value) {
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return validatePhoneNumber(value, countryCode, typeOfPhone);
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
var CODE_REGEX = /^[12345678][0-9]{4}$/;
|
|
2
|
+
export function validatePostalCode(number, countries) {
|
|
3
|
+
if (!countries) {
|
|
4
|
+
return false;
|
|
5
|
+
} else {
|
|
6
|
+
if (countries.length === 1 && countries[0].toUpperCase() === 'GR') {
|
|
7
|
+
// Greek postal code must be 5 digits long and shouldn't start with 0 or 9.
|
|
8
|
+
return CODE_REGEX.test(number);
|
|
9
|
+
} else {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export var POSTALCODE_VALIDATOR = function POSTALCODE_VALIDATOR(field) {
|
|
15
|
+
var _field$extra;
|
|
16
|
+
|
|
17
|
+
var countryCode = field === null || field === void 0 ? void 0 : (_field$extra = field.extra) === null || _field$extra === void 0 ? void 0 : _field$extra.countries;
|
|
18
|
+
return {
|
|
19
|
+
name: 'postal-code-validator',
|
|
20
|
+
message: 'form.error.postalCode',
|
|
21
|
+
test: function test(value) {
|
|
22
|
+
if (!value) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return validatePostalCode(value, countryCode);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
var UUID4_PATTERN = /^[0-9A-F]{8}-[0-9A-F]{4}-[4][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;
|
|
2
|
+
export function validateUUID4(uuid4) {
|
|
3
|
+
if (uuid4.length !== 36) {
|
|
4
|
+
// This uuid4 should be 36 characters long
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
return UUID4_PATTERN.test(uuid4);
|
|
9
|
+
}
|
|
10
|
+
export var UUID4_VALIDATOR = {
|
|
11
|
+
name: 'uuid4-validator',
|
|
12
|
+
message: 'form.error.uuid4',
|
|
13
|
+
test: function test(value) {
|
|
14
|
+
if (value) {
|
|
15
|
+
return validateUUID4(value);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { validateUUID4, validateIban, validatePostalCode, validatePhoneNumber } from '@digigov/form/validators';
|
|
1
|
+
import { validateUUID4, validateIban, validatePostalCode, validatePhoneNumber } from '@digigov/form/validators/utils';
|
|
2
2
|
it('validates wrong uuid4 for empty value', function () {
|
|
3
3
|
expect(validateUUID4('')).toBe(false);
|
|
4
4
|
});
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
3
|
+
var _excluded = ["required", "name", "component", "wrapper", "control", "type", "controlled", "enabled", "editable", "defaultValue", "label", "extra", "layout", "error", "register"];
|
|
4
|
+
import React from 'react';
|
|
5
|
+
import FieldContainer from '@digigov/form/Field/FieldContainer';
|
|
6
|
+
import { Controller } from 'react-hook-form';
|
|
7
|
+
export var FieldBase = function FieldBase(props) {
|
|
8
|
+
var required = props.required,
|
|
9
|
+
name = props.name,
|
|
10
|
+
Component = props.component,
|
|
11
|
+
wrapper = props.wrapper,
|
|
12
|
+
control = props.control,
|
|
13
|
+
type = props.type,
|
|
14
|
+
_props$controlled = props.controlled,
|
|
15
|
+
controlled = _props$controlled === void 0 ? false : _props$controlled,
|
|
16
|
+
_props$enabled = props.enabled,
|
|
17
|
+
enabled = _props$enabled === void 0 ? true : _props$enabled,
|
|
18
|
+
editable = props.editable,
|
|
19
|
+
defaultValue = props.defaultValue,
|
|
20
|
+
label = props.label,
|
|
21
|
+
_props$extra = props.extra,
|
|
22
|
+
extra = _props$extra === void 0 ? {} : _props$extra,
|
|
23
|
+
layout = props.layout,
|
|
24
|
+
error = props.error,
|
|
25
|
+
register = props.register,
|
|
26
|
+
componentProps = _objectWithoutProperties(props, _excluded);
|
|
27
|
+
|
|
28
|
+
if (!enabled) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (controlled) {
|
|
33
|
+
return /*#__PURE__*/React.createElement(FieldContainer, {
|
|
34
|
+
label: label,
|
|
35
|
+
layout: layout,
|
|
36
|
+
error: error,
|
|
37
|
+
wrapper: wrapper,
|
|
38
|
+
name: name
|
|
39
|
+
}, /*#__PURE__*/React.createElement(Controller, {
|
|
40
|
+
control: control,
|
|
41
|
+
name: name,
|
|
42
|
+
render: function render(_ref) {
|
|
43
|
+
var field = _ref.field;
|
|
44
|
+
return /*#__PURE__*/React.createElement(Component, _extends({}, field, {
|
|
45
|
+
defaultValue: defaultValue,
|
|
46
|
+
extra: extra,
|
|
47
|
+
error: !!error,
|
|
48
|
+
type: type,
|
|
49
|
+
"aria-required": !!required,
|
|
50
|
+
"aria-describedby": error && "".concat(name, "-error"),
|
|
51
|
+
required: required,
|
|
52
|
+
disabled: editable === false
|
|
53
|
+
}, componentProps));
|
|
54
|
+
}
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return /*#__PURE__*/React.createElement(FieldContainer, {
|
|
59
|
+
label: label,
|
|
60
|
+
layout: layout,
|
|
61
|
+
error: error,
|
|
62
|
+
wrapper: wrapper,
|
|
63
|
+
name: name
|
|
64
|
+
}, Component !== null && Component !== void 0 && Component.render ? /*#__PURE__*/React.createElement(Component, _extends({}, register(name), {
|
|
65
|
+
control: control,
|
|
66
|
+
error: !!error,
|
|
67
|
+
extra: extra,
|
|
68
|
+
type: type,
|
|
69
|
+
"aria-required": !!required,
|
|
70
|
+
"aria-describedby": error && "".concat(name, "-error"),
|
|
71
|
+
required: required,
|
|
72
|
+
disabled: editable === false
|
|
73
|
+
}, componentProps)) : /*#__PURE__*/React.createElement(Component, _extends({
|
|
74
|
+
name: name,
|
|
75
|
+
register: register,
|
|
76
|
+
control: control,
|
|
77
|
+
error: !!error,
|
|
78
|
+
extra: extra,
|
|
79
|
+
type: type,
|
|
80
|
+
"aria-required": !!required,
|
|
81
|
+
"aria-describedby": error && "".concat(name, "-error"),
|
|
82
|
+
required: required,
|
|
83
|
+
disabled: editable === false
|
|
84
|
+
}, componentProps)));
|
|
85
|
+
};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { useWatch } from 'react-hook-form';
|
|
4
|
+
import { evaluateFieldWithConditions } from '@digigov/form/Field/utils';
|
|
5
|
+
import { FieldBase } from '@digigov/form/Field/FieldBase';
|
|
6
|
+
var ChildFieldMemo = /*#__PURE__*/React.memo(function ChildField(_ref) {
|
|
7
|
+
var dependencies = _ref.dependencies,
|
|
8
|
+
field = _ref.field,
|
|
9
|
+
control = _ref.control,
|
|
10
|
+
register = _ref.register,
|
|
11
|
+
error = _ref.error;
|
|
12
|
+
var newField = evaluateFieldWithConditions(field, dependencies);
|
|
13
|
+
return /*#__PURE__*/React.createElement(FieldBase, _extends({}, newField, {
|
|
14
|
+
name: newField.key,
|
|
15
|
+
control: control,
|
|
16
|
+
register: register,
|
|
17
|
+
error: error
|
|
18
|
+
}));
|
|
19
|
+
}, function (prev, next) {
|
|
20
|
+
if (!prev || !prev.dependencies) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (prev.error !== next.error) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
for (var dep in next.dependencies) {
|
|
29
|
+
if (next.dependencies[dep] !== prev.dependencies[dep]) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return true;
|
|
35
|
+
});
|
|
36
|
+
export var FieldConditional = function FieldConditional(_ref2) {
|
|
37
|
+
var control = _ref2.control,
|
|
38
|
+
field = _ref2.field,
|
|
39
|
+
register = _ref2.register,
|
|
40
|
+
error = _ref2.error;
|
|
41
|
+
var dependencyKeys = Object.keys(field.condition);
|
|
42
|
+
var variables = useWatch({
|
|
43
|
+
name: dependencyKeys,
|
|
44
|
+
control: control
|
|
45
|
+
});
|
|
46
|
+
return /*#__PURE__*/React.createElement(ChildFieldMemo, {
|
|
47
|
+
dependencies: variables,
|
|
48
|
+
field: field,
|
|
49
|
+
control: control,
|
|
50
|
+
register: register,
|
|
51
|
+
error: error
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
export default FieldConditional;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/extends";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import CoreField from '@digigov/react-core/Field';
|
|
4
|
+
import CoreLabel from '@digigov/react-core/Label';
|
|
5
|
+
import CoreFieldset from '@digigov/react-core/Fieldset';
|
|
6
|
+
import Hint from '@digigov/react-core/Hint';
|
|
7
|
+
import FieldsetLegend from '@digigov/react-core/FieldsetLegend';
|
|
8
|
+
import ErrorMessage from '@digigov/react-core/ErrorMessage';
|
|
9
|
+
import { useTranslation } from '@digigov/ui/app/i18n';
|
|
10
|
+
import Label from '@digigov/form/inputs/Label';
|
|
11
|
+
export var FieldContainer = function FieldContainer(_ref) {
|
|
12
|
+
var name = _ref.name,
|
|
13
|
+
wrapper = _ref.wrapper,
|
|
14
|
+
label = _ref.label,
|
|
15
|
+
children = _ref.children,
|
|
16
|
+
error = _ref.error,
|
|
17
|
+
layout = _ref.layout;
|
|
18
|
+
|
|
19
|
+
var _useTranslation = useTranslation(),
|
|
20
|
+
t = _useTranslation.t;
|
|
21
|
+
|
|
22
|
+
var errorMessage = error !== null && error !== void 0 && error.message.key ? error.message.key : (error === null || error === void 0 ? void 0 : error.message) || '';
|
|
23
|
+
var errorContext = (error === null || error === void 0 ? void 0 : error.message.context) || {};
|
|
24
|
+
|
|
25
|
+
if (wrapper === 'fieldset') {
|
|
26
|
+
return /*#__PURE__*/React.createElement(CoreField, _extends({
|
|
27
|
+
error: !!error
|
|
28
|
+
}, layout), /*#__PURE__*/React.createElement(CoreFieldset, null, /*#__PURE__*/React.createElement(FieldsetLegend, {
|
|
29
|
+
size: "s"
|
|
30
|
+
}, label && label.primary), label && label.secondary && /*#__PURE__*/React.createElement(Hint, null, t(label.secondary)), error && /*#__PURE__*/React.createElement(ErrorMessage, {
|
|
31
|
+
id: "".concat(name, "-error")
|
|
32
|
+
}, t(errorMessage, errorContext)), children));
|
|
33
|
+
} else {
|
|
34
|
+
return /*#__PURE__*/React.createElement(CoreField, _extends({
|
|
35
|
+
error: !!error
|
|
36
|
+
}, layout), /*#__PURE__*/React.createElement(CoreLabel, null, label && /*#__PURE__*/React.createElement(Label, {
|
|
37
|
+
label: label
|
|
38
|
+
}), error && /*#__PURE__*/React.createElement(ErrorMessage, {
|
|
39
|
+
id: "".concat(name, "-error")
|
|
40
|
+
}, t(errorMessage, errorContext)), children));
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
export default FieldContainer;
|