@digigov/form 0.4.8 → 0.5.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 +31 -1
- package/Field/index.js +9 -2
- package/Questions/Step/index.js +1 -0
- package/es/Field/index.js +8 -2
- package/es/Questions/Step/index.js +2 -0
- package/es/index.js +2 -0
- package/es/index.mdx +0 -3
- package/es/inputs/Checkboxes/index.js +7 -1
- package/es/inputs/DateInput/index.js +149 -0
- package/es/inputs/FileInput/index.js +1 -0
- package/es/inputs/Input/index.js +5 -2
- package/es/utils.js +1 -0
- package/es/validators.js +83 -4
- package/esm/Field/index.js +8 -2
- package/esm/Questions/Step/index.js +2 -0
- package/esm/index.js +3 -1
- package/esm/index.mdx +0 -3
- package/esm/inputs/Checkboxes/index.js +7 -1
- package/esm/inputs/DateInput/index.js +149 -0
- package/esm/inputs/FileInput/index.js +1 -0
- package/esm/inputs/Input/index.js +5 -2
- package/esm/utils.js +1 -0
- package/esm/validators.js +83 -4
- package/index.js +1 -0
- package/index.mdx +0 -3
- package/inputs/Checkboxes/index.js +7 -1
- package/inputs/DateInput/index.js +173 -0
- package/inputs/FileInput/index.js +1 -0
- package/inputs/Input/index.js +5 -2
- package/libs/form/src/Field/index.d.ts +7 -6
- package/libs/form/src/Fieldset/index.d.ts +9 -3
- package/libs/form/src/inputs/Checkboxes/index.d.ts +2 -1
- package/libs/form/src/inputs/DateInput/index.d.ts +14 -0
- package/libs/form/src/validators.d.ts +4 -2
- package/libs/ui/src/core/Accordion/index.d.ts +3 -3
- 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 +2 -1
- package/libs/ui/src/core/Link/index.d.ts +3 -8
- package/libs/ui/src/core/NavList/NavList.d.ts +1 -1
- package/libs/ui/src/core/NavList/NavListItemBase.d.ts +1 -1
- package/libs/ui/src/core/NotificationBanner/index.d.ts +9 -8
- package/libs/ui/src/core/ServiceBadge/index.d.ts +1 -0
- package/libs/ui/src/locales/el.d.ts +10 -0
- package/libs/ui/src/typography/Caption.d.ts +1 -1
- package/libs-ui/react-core/src/Accordion/index.d.ts +1 -1
- package/libs-ui/react-core/src/AccordionControls/index.d.ts +1 -1
- package/libs-ui/react-core/src/AccordionSection/index.d.ts +1 -1
- package/libs-ui/react-core/src/AccordionSectionContent/index.d.ts +1 -1
- package/libs-ui/react-core/src/AccordionSectionHeader/index.d.ts +1 -1
- package/libs-ui/react-core/src/ArrowIcon/index.d.ts +15 -0
- package/libs-ui/react-core/src/BackLink/index.d.ts +1 -1
- package/libs-ui/react-core/src/Blockquote/index.d.ts +1 -1
- package/libs-ui/react-core/src/Button/index.d.ts +1 -1
- package/libs-ui/react-core/src/ButtonGroup/index.d.ts +9 -0
- package/libs-ui/react-core/src/ButtonLink/index.d.ts +1 -1
- package/libs-ui/react-core/src/CallToAction/index.d.ts +1 -1
- package/libs-ui/react-core/src/CaretIcon/index.d.ts +15 -0
- package/libs-ui/react-core/src/Checkbox/index.d.ts +1 -1
- package/libs-ui/react-core/src/CheckboxItem/index.d.ts +1 -1
- package/libs-ui/react-core/src/DateInput/index.d.ts +12 -0
- package/libs-ui/react-core/src/DateInputItem/index.d.ts +25 -0
- package/libs-ui/react-core/src/Details/index.d.ts +1 -1
- package/libs-ui/react-core/src/DetailsContent/index.d.ts +1 -1
- package/libs-ui/react-core/src/DetailsSummary/index.d.ts +1 -1
- package/libs-ui/react-core/src/ErrorMessage/index.d.ts +1 -1
- package/libs-ui/react-core/src/ErrorSummary/index.d.ts +1 -1
- package/libs-ui/react-core/src/Field/index.d.ts +1 -1
- package/libs-ui/react-core/src/Fieldset/index.d.ts +1 -1
- package/libs-ui/react-core/src/FieldsetLegend/index.d.ts +1 -1
- package/libs-ui/react-core/src/FileUpload/index.d.ts +1 -1
- package/libs-ui/react-core/src/Heading/index.d.ts +1 -1
- package/libs-ui/react-core/src/HeadingCaption/index.d.ts +1 -1
- package/libs-ui/react-core/src/Hint/index.d.ts +1 -1
- package/libs-ui/react-core/src/Label/index.d.ts +1 -1
- package/libs-ui/react-core/src/LabelTitle/index.d.ts +1 -1
- package/libs-ui/react-core/src/Link/index.d.ts +14 -0
- package/libs-ui/react-core/src/List/index.d.ts +1 -1
- package/libs-ui/react-core/src/ListItem/index.d.ts +1 -1
- package/libs-ui/react-core/src/NormalText/index.d.ts +1 -1
- package/libs-ui/react-core/src/NotificationBanner/index.d.ts +1 -1
- package/libs-ui/react-core/src/NotificationBannerContent/index.d.ts +1 -1
- package/libs-ui/react-core/src/NotificationBannerHeader/index.d.ts +1 -1
- package/libs-ui/react-core/src/NotificationBannerHeading/index.d.ts +1 -1
- package/libs-ui/react-core/src/NotificationBannerLink/index.d.ts +15 -0
- package/libs-ui/react-core/src/Paragraph/index.d.ts +1 -1
- package/libs-ui/react-core/src/PhaseBanner/index.d.ts +1 -1
- package/libs-ui/react-core/src/PhaseBannerTag/index.d.ts +1 -1
- package/libs-ui/react-core/src/PhaseBannerText/index.d.ts +11 -0
- package/libs-ui/react-core/src/Radio/index.d.ts +1 -1
- package/libs-ui/react-core/src/RadioItem/index.d.ts +1 -1
- package/libs-ui/react-core/src/SectionBreak/index.d.ts +1 -1
- package/libs-ui/react-core/src/Select/index.d.ts +1 -1
- package/libs-ui/react-core/src/SelectOption/index.d.ts +1 -1
- package/libs-ui/react-core/src/SummaryList/index.d.ts +1 -1
- package/libs-ui/react-core/src/SummaryListItem/index.d.ts +1 -1
- package/libs-ui/react-core/src/SummaryListItemAction/index.d.ts +1 -1
- package/libs-ui/react-core/src/SummaryListItemKey/index.d.ts +1 -1
- package/libs-ui/react-core/src/SummaryListItemValue/index.d.ts +1 -1
- package/libs-ui/react-core/src/Tabs/index.d.ts +1 -1
- package/libs-ui/react-core/src/TabsHeading/index.d.ts +1 -1
- package/libs-ui/react-core/src/TabsList/index.d.ts +1 -1
- package/libs-ui/react-core/src/TabsListItem/index.d.ts +1 -1
- package/libs-ui/react-core/src/TabsPanel/index.d.ts +1 -1
- package/libs-ui/react-core/src/TextArea/index.d.ts +1 -1
- package/libs-ui/react-core/src/TextInput/index.d.ts +1 -1
- package/libs-ui/react-core/src/WarningText/index.d.ts +1 -1
- package/package.json +4 -3
- package/utils.js +1 -0
- package/validators.js +86 -4
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
var _excluded = ["label"],
|
|
4
|
+
_excluded2 = ["name", "type"];
|
|
5
|
+
import React, { useMemo, useState } from 'react';
|
|
6
|
+
import dayjs from 'dayjs';
|
|
7
|
+
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
8
|
+
import { useTranslation } from '@digigov/ui/app/i18n';
|
|
9
|
+
import CoreDateInput from '@digigov/react-core/DateInput';
|
|
10
|
+
import CoreDateInputItem from '@digigov/react-core/DateInputItem';
|
|
11
|
+
dayjs.extend(customParseFormat);
|
|
12
|
+
|
|
13
|
+
function useDate(value, onChange) {
|
|
14
|
+
var _useMemo = useMemo(function () {
|
|
15
|
+
if (!value || value.length === '') {
|
|
16
|
+
return ['', '', ''];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
var _value$split = value.split('/'),
|
|
20
|
+
_value$split2 = _slicedToArray(_value$split, 3),
|
|
21
|
+
day = _value$split2[0],
|
|
22
|
+
month = _value$split2[1],
|
|
23
|
+
year = _value$split2[2];
|
|
24
|
+
|
|
25
|
+
return [year, month, day];
|
|
26
|
+
}, [value]),
|
|
27
|
+
_useMemo2 = _slicedToArray(_useMemo, 3),
|
|
28
|
+
year = _useMemo2[0],
|
|
29
|
+
month = _useMemo2[1],
|
|
30
|
+
day = _useMemo2[2];
|
|
31
|
+
|
|
32
|
+
function set(year, month, day) {
|
|
33
|
+
var value = "".concat(day || '', "/").concat(month || '', "/").concat(year || '');
|
|
34
|
+
|
|
35
|
+
if (!year && !month && !day) {
|
|
36
|
+
onChange(null);
|
|
37
|
+
} else {
|
|
38
|
+
onChange(value);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function setYear(evt) {
|
|
43
|
+
var val = evt.target.value;
|
|
44
|
+
set(val, month, day);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function setMonth(evt, cast) {
|
|
48
|
+
var val = evt.target.value;
|
|
49
|
+
|
|
50
|
+
if (cast && val && val.length === 1) {
|
|
51
|
+
val = '0' + val;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
set(year, val, day);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function setDay(evt, cast) {
|
|
58
|
+
var val = evt.target.value;
|
|
59
|
+
|
|
60
|
+
if (cast && val && val.length === 1) {
|
|
61
|
+
val = '0' + val;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
set(year, month, val);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return {
|
|
68
|
+
day: day,
|
|
69
|
+
month: month,
|
|
70
|
+
year: year,
|
|
71
|
+
setYear: setYear,
|
|
72
|
+
setMonth: setMonth,
|
|
73
|
+
setDay: setDay
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
var VALID_FORMATS = ['DD/MM/YYYY'];
|
|
78
|
+
|
|
79
|
+
var makeDate = function makeDate(val) {
|
|
80
|
+
var date = dayjs(val, VALID_FORMATS, true);
|
|
81
|
+
|
|
82
|
+
if (date.isValid()) {
|
|
83
|
+
return date.format('DD/MM/YYYY');
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return '';
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
var DatePart = function DatePart(_ref) {
|
|
90
|
+
var label = _ref.label,
|
|
91
|
+
props = _objectWithoutProperties(_ref, _excluded);
|
|
92
|
+
|
|
93
|
+
return /*#__PURE__*/React.createElement(CoreDateInputItem, props, label);
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
var DateInput = function DateInput(_ref2) {
|
|
97
|
+
var name = _ref2.name,
|
|
98
|
+
type = _ref2.type,
|
|
99
|
+
props = _objectWithoutProperties(_ref2, _excluded2);
|
|
100
|
+
|
|
101
|
+
var _useTranslation = useTranslation(),
|
|
102
|
+
t = _useTranslation.t;
|
|
103
|
+
|
|
104
|
+
var _useState = useState(props.value),
|
|
105
|
+
_useState2 = _slicedToArray(_useState, 1),
|
|
106
|
+
initial = _useState2[0];
|
|
107
|
+
|
|
108
|
+
var value = useMemo(function () {
|
|
109
|
+
if (initial === props.value) {
|
|
110
|
+
return makeDate(props.value);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return props.value;
|
|
114
|
+
}, [props.value, initial]);
|
|
115
|
+
var date = useDate(value || makeDate(props.defaultValue), props.onChange);
|
|
116
|
+
return /*#__PURE__*/React.createElement(CoreDateInput, null, /*#__PURE__*/React.createElement(DatePart, {
|
|
117
|
+
label: t('form.label.day'),
|
|
118
|
+
onChange: date.setDay,
|
|
119
|
+
onBlur: function onBlur(e) {
|
|
120
|
+
return date.setDay(e, true);
|
|
121
|
+
},
|
|
122
|
+
value: date.day,
|
|
123
|
+
width: 2,
|
|
124
|
+
name: "".concat(name, "-day"),
|
|
125
|
+
maxlength: "2",
|
|
126
|
+
disabled: props.disabled
|
|
127
|
+
}), /*#__PURE__*/React.createElement(DatePart, {
|
|
128
|
+
label: t('form.label.month'),
|
|
129
|
+
onChange: date.setMonth,
|
|
130
|
+
onBlur: function onBlur(e) {
|
|
131
|
+
return date.setMonth(e, true);
|
|
132
|
+
},
|
|
133
|
+
value: date.month,
|
|
134
|
+
width: 2,
|
|
135
|
+
name: "".concat(props.name, "-month"),
|
|
136
|
+
maxlength: "2",
|
|
137
|
+
disabled: props.disabled
|
|
138
|
+
}), /*#__PURE__*/React.createElement(DatePart, {
|
|
139
|
+
label: t('form.label.year'),
|
|
140
|
+
onChange: date.setYear,
|
|
141
|
+
value: date.year,
|
|
142
|
+
width: 4,
|
|
143
|
+
name: "".concat(props.name, "-year"),
|
|
144
|
+
maxlength: "4",
|
|
145
|
+
disabled: props.disabled
|
|
146
|
+
}));
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export default DateInput;
|
|
@@ -2,6 +2,7 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
|
2
2
|
import React, { useState } from 'react';
|
|
3
3
|
import NormalText from '@digigov/react-core/NormalText';
|
|
4
4
|
import FileUpload from '@digigov/react-core/FileUpload';
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
5
6
|
var FileInput = /*#__PURE__*/React.forwardRef(function FileInput(_ref, ref) {
|
|
6
7
|
var name = _ref.name,
|
|
7
8
|
_ref$extra = _ref.extra,
|
|
@@ -19,8 +19,10 @@ var Input = /*#__PURE__*/React.forwardRef(function WrappedInput(_ref, ref) {
|
|
|
19
19
|
var _ref2 = extra || {},
|
|
20
20
|
_ref2$multiline = _ref2.multiline,
|
|
21
21
|
multiline = _ref2$multiline === void 0 ? false : _ref2$multiline,
|
|
22
|
-
rows = _ref2.rows
|
|
23
|
-
|
|
22
|
+
rows = _ref2.rows;
|
|
23
|
+
|
|
24
|
+
var _ref3 = extra || {},
|
|
25
|
+
className = _ref3.className; // if enforced to multiline use true. Derive from type otherwise.
|
|
24
26
|
|
|
25
27
|
|
|
26
28
|
multiline = multiline === true || type === 'text'; // use explicit rows value if set. Derive from multiline otherwise.
|
|
@@ -40,6 +42,7 @@ var Input = /*#__PURE__*/React.forwardRef(function WrappedInput(_ref, ref) {
|
|
|
40
42
|
return /*#__PURE__*/React.createElement(TextInput, _extends({
|
|
41
43
|
name: name,
|
|
42
44
|
type: fieldType,
|
|
45
|
+
className: className,
|
|
43
46
|
ref: ref
|
|
44
47
|
}, props));
|
|
45
48
|
}
|
package/esm/utils.js
CHANGED
|
@@ -4,6 +4,7 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
|
4
4
|
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
5
5
|
import _extends from "@babel/runtime/helpers/extends";
|
|
6
6
|
|
|
7
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
7
8
|
var parseErrorSchema = function parseErrorSchema(error, validateAllFieldCriteria) {
|
|
8
9
|
return Array.isArray(error.inner) && error.inner.length ? error.inner.reduce(function (previous, _ref) {
|
|
9
10
|
var path = _ref.path,
|
package/esm/validators.js
CHANGED
|
@@ -10,6 +10,9 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
|
|
|
10
10
|
import * as yup from 'yup';
|
|
11
11
|
import * as gPhoneNumber from 'google-libphonenumber';
|
|
12
12
|
import { useMemo } from 'react';
|
|
13
|
+
import dayjs from 'dayjs';
|
|
14
|
+
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
15
|
+
dayjs.extend(customParseFormat);
|
|
13
16
|
var DEFAULT_FILE_MAX_SIZE = 10000000;
|
|
14
17
|
export function validateAFM(afm) {
|
|
15
18
|
if (afm.length !== 9) {
|
|
@@ -280,6 +283,13 @@ var IBAN_VALIDATOR = function IBAN_VALIDATOR(field) {
|
|
|
280
283
|
};
|
|
281
284
|
};
|
|
282
285
|
|
|
286
|
+
var VALID_DATE_FORMATS = ['DD/MM/YYYY'];
|
|
287
|
+
var DATE_CACHE = {};
|
|
288
|
+
|
|
289
|
+
var getDate = function getDate(v) {
|
|
290
|
+
return DATE_CACHE[v] ? DATE_CACHE[v] : dayjs(v, VALID_DATE_FORMATS, true);
|
|
291
|
+
};
|
|
292
|
+
|
|
283
293
|
function getYupField(field, yupTypeMap) {
|
|
284
294
|
var yupField = yupTypeMap[field.type] || yupTypeMap.string;
|
|
285
295
|
return yupField(field);
|
|
@@ -366,7 +376,8 @@ function computeShape(fields, yupTypeMap, validatorRegistry) {
|
|
|
366
376
|
return fieldSchemas;
|
|
367
377
|
}
|
|
368
378
|
|
|
369
|
-
function getYupObjectShape(
|
|
379
|
+
function getYupObjectShape( // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
380
|
+
fields, yupTypeMap, validatorRegistry) {
|
|
370
381
|
if (!fields.current) {
|
|
371
382
|
var fieldSchemas = computeShape(fields, yupTypeMap, validatorRegistry);
|
|
372
383
|
return yup.object().shape(fieldSchemas);
|
|
@@ -407,7 +418,6 @@ var getYUPTypeMap = function getYUPTypeMap() {
|
|
|
407
418
|
iban: function iban(field) {
|
|
408
419
|
return yup.string().test(IBAN_VALIDATOR(field));
|
|
409
420
|
},
|
|
410
|
-
// eslint-disable-next-line @typescript-eslint/camelcase
|
|
411
421
|
mobile_phone: function mobile_phone() {
|
|
412
422
|
return yup.string().test(MOBILE_PHONE_VALIDATOR);
|
|
413
423
|
},
|
|
@@ -416,12 +426,81 @@ var getYUPTypeMap = function getYUPTypeMap() {
|
|
|
416
426
|
},
|
|
417
427
|
'choice:single': function choiceSingle() {
|
|
418
428
|
return yup.string().nullable();
|
|
429
|
+
},
|
|
430
|
+
date: function date(field) {
|
|
431
|
+
var simpleDate = yup.string().nullable(true).test('date', 'form.error.date.invalid', function (value) {
|
|
432
|
+
if (!value) return true;
|
|
433
|
+
value = getDate(value);
|
|
434
|
+
return value.isValid();
|
|
435
|
+
});
|
|
436
|
+
var params = field.extra || {};
|
|
437
|
+
|
|
438
|
+
if (params.max) {
|
|
439
|
+
var maxDate;
|
|
440
|
+
|
|
441
|
+
if (params.max === 'now') {
|
|
442
|
+
var today = new Date();
|
|
443
|
+
maxDate = new Date(today);
|
|
444
|
+
} else {
|
|
445
|
+
maxDate = getDate(params.max).toDate();
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
var maxNextDate = new Date(maxDate);
|
|
449
|
+
maxNextDate.setDate(maxDate.getDate() + 1);
|
|
450
|
+
simpleDate = simpleDate.test({
|
|
451
|
+
name: 'earlier-than',
|
|
452
|
+
message: {
|
|
453
|
+
key: 'form.error.date.earlier_than',
|
|
454
|
+
context: {
|
|
455
|
+
maxDate: maxNextDate.toLocaleDateString()
|
|
456
|
+
}
|
|
457
|
+
},
|
|
458
|
+
test: function test(value) {
|
|
459
|
+
if (!value) return true;
|
|
460
|
+
value = getDate(value);
|
|
461
|
+
var isValid = +value.toDate() < +maxDate;
|
|
462
|
+
return isValid;
|
|
463
|
+
}
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
if (params.min) {
|
|
468
|
+
var minDate;
|
|
469
|
+
|
|
470
|
+
if (params.min === 'now') {
|
|
471
|
+
var _today = new Date();
|
|
472
|
+
|
|
473
|
+
minDate = new Date(_today);
|
|
474
|
+
} else {
|
|
475
|
+
minDate = getDate(params.min).toDate();
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
var minPreviousDate = new Date(minDate);
|
|
479
|
+
minPreviousDate.setDate(minDate.getDate() - 1);
|
|
480
|
+
simpleDate = simpleDate.test({
|
|
481
|
+
name: 'later-than',
|
|
482
|
+
message: {
|
|
483
|
+
key: 'form.error.date.later_than',
|
|
484
|
+
context: {
|
|
485
|
+
minDate: minPreviousDate.toLocaleDateString()
|
|
486
|
+
}
|
|
487
|
+
},
|
|
488
|
+
test: function test(value) {
|
|
489
|
+
if (!value) return true;
|
|
490
|
+
value = getDate(value);
|
|
491
|
+
var isValid = +value.toDate() > +minDate;
|
|
492
|
+
return isValid;
|
|
493
|
+
}
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
return simpleDate;
|
|
419
498
|
}
|
|
420
499
|
};
|
|
421
500
|
return yupTypeMap;
|
|
422
|
-
};
|
|
423
|
-
|
|
501
|
+
};
|
|
424
502
|
|
|
503
|
+
// Create a yup validation schema from given fields input
|
|
425
504
|
export function useValidationSchema(fields, validatorRegistry) {
|
|
426
505
|
return useMemo(function () {
|
|
427
506
|
var yupTypeMap = getYUPTypeMap();
|
package/index.js
CHANGED
|
@@ -64,6 +64,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
|
64
64
|
|
|
65
65
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
66
66
|
|
|
67
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
67
68
|
var FormContext = /*#__PURE__*/(0, _react.createContext)({
|
|
68
69
|
fieldsMap: {},
|
|
69
70
|
fieldsetsMap: {}
|
package/index.mdx
CHANGED
|
@@ -3,10 +3,7 @@ title: Form
|
|
|
3
3
|
parent: docs/ui/components
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
import { useState, useEffect } from 'react';
|
|
7
6
|
import FormBuilder from '@digigov/form/';
|
|
8
|
-
import PropsDoc from '@docs-components/propsDoc';
|
|
9
|
-
import StylesDoc from '@docs-components/stylesDoc';
|
|
10
7
|
|
|
11
8
|
export const fields = [
|
|
12
9
|
{
|
|
@@ -34,8 +34,12 @@ var Checkboxes = function Checkboxes(_ref) {
|
|
|
34
34
|
var newValue;
|
|
35
35
|
|
|
36
36
|
if (evt.currentTarget.checked) {
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
38
|
+
// @ts-ignore
|
|
37
39
|
newValue = value.concat([optionValue]);
|
|
38
40
|
} else {
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
42
|
+
// @ts-ignore
|
|
39
43
|
newValue = value.filter(function (val) {
|
|
40
44
|
return val !== optionValue;
|
|
41
45
|
});
|
|
@@ -54,7 +58,9 @@ var Checkboxes = function Checkboxes(_ref) {
|
|
|
54
58
|
return /*#__PURE__*/_react["default"].createElement(_CheckboxItem["default"], (0, _extends2["default"])({
|
|
55
59
|
name: name,
|
|
56
60
|
disabled: disabled,
|
|
57
|
-
key: key
|
|
61
|
+
key: key // eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
62
|
+
// @ts-ignore
|
|
63
|
+
,
|
|
58
64
|
checked: value.includes(option.value),
|
|
59
65
|
onChange: handleChange(option.value)
|
|
60
66
|
}, option), option.label && option.label.primary && t(option.label.primary) || value, option.label && option.label.secondary && /*#__PURE__*/_react["default"].createElement(_Hint["default"], null, t(option.label.secondary)));
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
exports["default"] = void 0;
|
|
11
|
+
|
|
12
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
13
|
+
|
|
14
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
+
|
|
16
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
17
|
+
|
|
18
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
19
|
+
|
|
20
|
+
var _customParseFormat = _interopRequireDefault(require("dayjs/plugin/customParseFormat"));
|
|
21
|
+
|
|
22
|
+
var _i18n = require("@digigov/ui/app/i18n");
|
|
23
|
+
|
|
24
|
+
var _DateInput = _interopRequireDefault(require("@digigov/react-core/DateInput"));
|
|
25
|
+
|
|
26
|
+
var _DateInputItem = _interopRequireDefault(require("@digigov/react-core/DateInputItem"));
|
|
27
|
+
|
|
28
|
+
var _excluded = ["label"],
|
|
29
|
+
_excluded2 = ["name", "type"];
|
|
30
|
+
|
|
31
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
32
|
+
|
|
33
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
34
|
+
|
|
35
|
+
_dayjs["default"].extend(_customParseFormat["default"]);
|
|
36
|
+
|
|
37
|
+
function useDate(value, onChange) {
|
|
38
|
+
var _useMemo = (0, _react.useMemo)(function () {
|
|
39
|
+
if (!value || value.length === '') {
|
|
40
|
+
return ['', '', ''];
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
var _value$split = value.split('/'),
|
|
44
|
+
_value$split2 = (0, _slicedToArray2["default"])(_value$split, 3),
|
|
45
|
+
day = _value$split2[0],
|
|
46
|
+
month = _value$split2[1],
|
|
47
|
+
year = _value$split2[2];
|
|
48
|
+
|
|
49
|
+
return [year, month, day];
|
|
50
|
+
}, [value]),
|
|
51
|
+
_useMemo2 = (0, _slicedToArray2["default"])(_useMemo, 3),
|
|
52
|
+
year = _useMemo2[0],
|
|
53
|
+
month = _useMemo2[1],
|
|
54
|
+
day = _useMemo2[2];
|
|
55
|
+
|
|
56
|
+
function set(year, month, day) {
|
|
57
|
+
var value = "".concat(day || '', "/").concat(month || '', "/").concat(year || '');
|
|
58
|
+
|
|
59
|
+
if (!year && !month && !day) {
|
|
60
|
+
onChange(null);
|
|
61
|
+
} else {
|
|
62
|
+
onChange(value);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function setYear(evt) {
|
|
67
|
+
var val = evt.target.value;
|
|
68
|
+
set(val, month, day);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function setMonth(evt, cast) {
|
|
72
|
+
var val = evt.target.value;
|
|
73
|
+
|
|
74
|
+
if (cast && val && val.length === 1) {
|
|
75
|
+
val = '0' + val;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
set(year, val, day);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function setDay(evt, cast) {
|
|
82
|
+
var val = evt.target.value;
|
|
83
|
+
|
|
84
|
+
if (cast && val && val.length === 1) {
|
|
85
|
+
val = '0' + val;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
set(year, month, val);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
day: day,
|
|
93
|
+
month: month,
|
|
94
|
+
year: year,
|
|
95
|
+
setYear: setYear,
|
|
96
|
+
setMonth: setMonth,
|
|
97
|
+
setDay: setDay
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
var VALID_FORMATS = ['DD/MM/YYYY'];
|
|
102
|
+
|
|
103
|
+
var makeDate = function makeDate(val) {
|
|
104
|
+
var date = (0, _dayjs["default"])(val, VALID_FORMATS, true);
|
|
105
|
+
|
|
106
|
+
if (date.isValid()) {
|
|
107
|
+
return date.format('DD/MM/YYYY');
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return '';
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
var DatePart = function DatePart(_ref) {
|
|
114
|
+
var label = _ref.label,
|
|
115
|
+
props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
|
|
116
|
+
return /*#__PURE__*/_react["default"].createElement(_DateInputItem["default"], props, label);
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
var DateInput = function DateInput(_ref2) {
|
|
120
|
+
var name = _ref2.name,
|
|
121
|
+
type = _ref2.type,
|
|
122
|
+
props = (0, _objectWithoutProperties2["default"])(_ref2, _excluded2);
|
|
123
|
+
|
|
124
|
+
var _useTranslation = (0, _i18n.useTranslation)(),
|
|
125
|
+
t = _useTranslation.t;
|
|
126
|
+
|
|
127
|
+
var _useState = (0, _react.useState)(props.value),
|
|
128
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 1),
|
|
129
|
+
initial = _useState2[0];
|
|
130
|
+
|
|
131
|
+
var value = (0, _react.useMemo)(function () {
|
|
132
|
+
if (initial === props.value) {
|
|
133
|
+
return makeDate(props.value);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return props.value;
|
|
137
|
+
}, [props.value, initial]);
|
|
138
|
+
var date = useDate(value || makeDate(props.defaultValue), props.onChange);
|
|
139
|
+
return /*#__PURE__*/_react["default"].createElement(_DateInput["default"], null, /*#__PURE__*/_react["default"].createElement(DatePart, {
|
|
140
|
+
label: t('form.label.day'),
|
|
141
|
+
onChange: date.setDay,
|
|
142
|
+
onBlur: function onBlur(e) {
|
|
143
|
+
return date.setDay(e, true);
|
|
144
|
+
},
|
|
145
|
+
value: date.day,
|
|
146
|
+
width: 2,
|
|
147
|
+
name: "".concat(name, "-day"),
|
|
148
|
+
maxlength: "2",
|
|
149
|
+
disabled: props.disabled
|
|
150
|
+
}), /*#__PURE__*/_react["default"].createElement(DatePart, {
|
|
151
|
+
label: t('form.label.month'),
|
|
152
|
+
onChange: date.setMonth,
|
|
153
|
+
onBlur: function onBlur(e) {
|
|
154
|
+
return date.setMonth(e, true);
|
|
155
|
+
},
|
|
156
|
+
value: date.month,
|
|
157
|
+
width: 2,
|
|
158
|
+
name: "".concat(props.name, "-month"),
|
|
159
|
+
maxlength: "2",
|
|
160
|
+
disabled: props.disabled
|
|
161
|
+
}), /*#__PURE__*/_react["default"].createElement(DatePart, {
|
|
162
|
+
label: t('form.label.year'),
|
|
163
|
+
onChange: date.setYear,
|
|
164
|
+
value: date.year,
|
|
165
|
+
width: 4,
|
|
166
|
+
name: "".concat(props.name, "-year"),
|
|
167
|
+
maxlength: "4",
|
|
168
|
+
disabled: props.disabled
|
|
169
|
+
}));
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
var _default = DateInput;
|
|
173
|
+
exports["default"] = _default;
|
|
@@ -21,6 +21,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
|
21
21
|
|
|
22
22
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
23
23
|
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
25
|
var FileInput = /*#__PURE__*/_react["default"].forwardRef(function FileInput(_ref, ref) {
|
|
25
26
|
var name = _ref.name,
|
|
26
27
|
_ref$extra = _ref.extra,
|
package/inputs/Input/index.js
CHANGED
|
@@ -34,8 +34,10 @@ var Input = /*#__PURE__*/_react["default"].forwardRef(function WrappedInput(_ref
|
|
|
34
34
|
var _ref2 = extra || {},
|
|
35
35
|
_ref2$multiline = _ref2.multiline,
|
|
36
36
|
multiline = _ref2$multiline === void 0 ? false : _ref2$multiline,
|
|
37
|
-
rows = _ref2.rows
|
|
38
|
-
|
|
37
|
+
rows = _ref2.rows;
|
|
38
|
+
|
|
39
|
+
var _ref3 = extra || {},
|
|
40
|
+
className = _ref3.className; // if enforced to multiline use true. Derive from type otherwise.
|
|
39
41
|
|
|
40
42
|
|
|
41
43
|
multiline = multiline === true || type === 'text'; // use explicit rows value if set. Derive from multiline otherwise.
|
|
@@ -55,6 +57,7 @@ var Input = /*#__PURE__*/_react["default"].forwardRef(function WrappedInput(_ref
|
|
|
55
57
|
return /*#__PURE__*/_react["default"].createElement(_TextInput["default"], (0, _extends2["default"])({
|
|
56
58
|
name: name,
|
|
57
59
|
type: fieldType,
|
|
60
|
+
className: className,
|
|
58
61
|
ref: ref
|
|
59
62
|
}, props));
|
|
60
63
|
}
|
|
@@ -15,12 +15,13 @@ export interface FieldContainerProps {
|
|
|
15
15
|
wrapper?: FieldSpec['wrapper'];
|
|
16
16
|
}
|
|
17
17
|
export declare type OmittedFieldSpec = Omit<FieldSpec, 'component'>;
|
|
18
|
+
export declare type UnknownValue = never | never[];
|
|
18
19
|
export interface ControlledFieldProps {
|
|
19
|
-
value:
|
|
20
|
-
onChange: (v:
|
|
21
|
-
defaultValue?:
|
|
20
|
+
value: UnknownValue;
|
|
21
|
+
onChange: (v: UnknownValue) => void;
|
|
22
|
+
defaultValue?: UnknownValue;
|
|
22
23
|
onBlur?: (e: Event) => void;
|
|
23
|
-
extra?:
|
|
24
|
+
extra?: never;
|
|
24
25
|
error?: boolean;
|
|
25
26
|
name?: string;
|
|
26
27
|
disabled?: boolean;
|
|
@@ -31,14 +32,14 @@ export interface UncontrolledFieldProps {
|
|
|
31
32
|
ref?: FieldBaseProps['register'];
|
|
32
33
|
control?: FieldBaseProps['control'];
|
|
33
34
|
error?: boolean;
|
|
34
|
-
extra?: Record<string,
|
|
35
|
+
extra?: Record<string, never>;
|
|
35
36
|
type?: string;
|
|
36
37
|
disabled?: boolean;
|
|
37
38
|
}
|
|
38
39
|
export interface CalculatedField extends OmittedFieldSpec {
|
|
39
40
|
name: string;
|
|
40
41
|
component: any;
|
|
41
|
-
defaultValue?:
|
|
42
|
+
defaultValue?: never;
|
|
42
43
|
error?: FieldError;
|
|
43
44
|
wrapper?: FieldComponentItem['wrapper'];
|
|
44
45
|
}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
export
|
|
2
|
+
export interface FieldsetLabelProps {
|
|
3
|
+
}
|
|
4
|
+
export interface FieldsetCaptionProps {
|
|
5
|
+
}
|
|
6
|
+
export interface FieldsetBodyProps {
|
|
7
|
+
}
|
|
8
|
+
export declare const FieldsetLabel: React.FC<FieldsetLabelProps>;
|
|
9
|
+
export declare const FieldsetCaption: React.FC<FieldsetCaptionProps>;
|
|
10
|
+
export declare const FieldsetBody: React.FC<FieldsetBodyProps>;
|
|
5
11
|
export declare const FieldsetWithContext: React.FC<{
|
|
6
12
|
name: string;
|
|
7
13
|
}>;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { FieldOptionProps } from '@digigov/form/inputs/Label';
|
|
3
3
|
import { ControlledFieldProps } from '@digigov/form/Field';
|
|
4
|
-
export interface CheckboxesProps extends Omit<ControlledFieldProps, 'extra'> {
|
|
4
|
+
export interface CheckboxesProps extends Omit<ControlledFieldProps, 'extra' | 'value'> {
|
|
5
|
+
value?: string[];
|
|
5
6
|
extra: {
|
|
6
7
|
className?: string;
|
|
7
8
|
options: Array<FieldOptionProps>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { UncontrolledFieldProps } from '@digigov/form/Field';
|
|
3
|
+
export interface DateInputProps extends Omit<UncontrolledFieldProps, 'extra'> {
|
|
4
|
+
extra?: {
|
|
5
|
+
max?: string;
|
|
6
|
+
min?: string;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
declare const DateInput: ({ name, type, ...props }: {
|
|
10
|
+
[x: string]: any;
|
|
11
|
+
name: any;
|
|
12
|
+
type: any;
|
|
13
|
+
}) => JSX.Element;
|
|
14
|
+
export default DateInput;
|
|
@@ -2,7 +2,9 @@ import * as yup from 'yup';
|
|
|
2
2
|
import { FieldSpec } from '@digigov/form';
|
|
3
3
|
import { MutableRefObject } from 'react';
|
|
4
4
|
export declare type ValidatorSchema = yup.BaseTestOptions;
|
|
5
|
-
export declare function validateAFM(afm:
|
|
5
|
+
export declare function validateAFM(afm: string): boolean;
|
|
6
6
|
export declare function validateUUID4(uuid4: string): boolean;
|
|
7
7
|
export declare function validateIban(value: string, countryCode: string): boolean;
|
|
8
|
-
export
|
|
8
|
+
export interface MutableRefObjectProps {
|
|
9
|
+
}
|
|
10
|
+
export declare function useValidationSchema(fields: FieldSpec[] | MutableRefObject<MutableRefObjectProps>, validatorRegistry?: Record<string, ValidatorSchema>): Record<string, unknown> | void;
|