@uncinc/uncinc-react-kitchen-sink 2.6.7 → 2.7.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.
Files changed (30) hide show
  1. package/dist/components/Cookie/Checkbox/style.scss +25 -23
  2. package/dist/components/Form/Checkbox/index.js +23 -6
  3. package/dist/components/Form/Checkboxes/index.js +61 -11
  4. package/dist/components/Form/DateField/index.d.ts +3 -0
  5. package/dist/components/Form/DateField/index.js +50 -0
  6. package/dist/components/Form/DatePicker/index.js +53 -15
  7. package/dist/components/Form/DateSelect/index.d.ts +1 -0
  8. package/dist/components/Form/DateSelect/index.js +116 -89
  9. package/dist/components/Form/FormikWrapper/index.d.ts +6 -1
  10. package/dist/components/Form/FormikWrapper/index.js +34 -53
  11. package/dist/components/Form/Number/index.js +19 -12
  12. package/dist/components/Form/RadioButtons/index.js +42 -11
  13. package/dist/components/Form/RadioButtons/style.scss +1 -0
  14. package/dist/components/Form/Select/Input/index.js +33 -7
  15. package/dist/components/Form/Select/index.js +14 -7
  16. package/dist/components/Form/TextField/index.js +24 -8
  17. package/dist/components/Form/Textarea/index.js +38 -11
  18. package/dist/components/Form/index.d.ts +13 -0
  19. package/dist/components/Form/index.js +97 -0
  20. package/dist/components/Layout/Container/index.d.ts +6 -0
  21. package/dist/components/Layout/Container/index.js +6 -2
  22. package/dist/components/MediaPlayer/index.d.ts +1 -1
  23. package/dist/components/MediaPlayer/index.js +2 -1
  24. package/dist/components/index.d.ts +2 -2
  25. package/dist/components/index.js +12 -3
  26. package/dist/index.d.ts +2 -2
  27. package/dist/index.js +12 -3
  28. package/package.json +1 -1
  29. package/dist/components/Form/Date/index.d.ts +0 -3
  30. package/dist/components/Form/Date/index.js +0 -17
@@ -10,6 +10,7 @@ var _formik = require("formik");
10
10
  var _reactI18next = require("react-i18next");
11
11
  var _GenericFormElement = _interopRequireDefault(require("../GenericFormElement"));
12
12
  var _Input = _interopRequireDefault(require("../Select/Input"));
13
+ var _FormikWrapper = require("../FormikWrapper");
13
14
  require("./style.scss");
14
15
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
16
  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); }
@@ -23,21 +24,31 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
23
24
  var DateSelect = function DateSelect(props) {
24
25
  var title = props.title,
25
26
  fieldName = props.fieldName,
27
+ validation = props.validation,
26
28
  yearMin = props.yearMin,
27
29
  yearMax = props.yearMax,
30
+ minDate = props.minDate,
31
+ maxDate = props.maxDate,
28
32
  hideYear = props.hideYear,
29
33
  fixedYear = props.fixedYear,
30
34
  required = props.required,
31
- displayRequiredIndicator = props.displayRequiredIndicator,
32
35
  requiredError = props.requiredError,
33
36
  notValidError = props.notValidError,
34
37
  dayPlaceholder = props.dayPlaceholder,
35
38
  monthPlaceholder = props.monthPlaceholder,
36
- yearPlaceholder = props.yearPlaceholder;
37
- var _useFormikContext = (0, _formik.useFormikContext)(),
38
- setFieldValue = _useFormikContext.setFieldValue,
39
- isSubmitting = _useFormikContext.isSubmitting,
40
- values = _useFormikContext.values;
39
+ yearPlaceholder = props.yearPlaceholder,
40
+ onChange = props.onChange;
41
+ var _useExtendedFormikCon = (0, _FormikWrapper.useExtendedFormikContext)(),
42
+ setFieldValue = _useExtendedFormikCon.setFieldValue,
43
+ setFieldError = _useExtendedFormikCon.setFieldError,
44
+ isSubmitting = _useExtendedFormikCon.isSubmitting,
45
+ touched = _useExtendedFormikCon.touched,
46
+ values = _useExtendedFormikCon.values,
47
+ errors = _useExtendedFormikCon.errors,
48
+ displayRequiredIndicator = _useExtendedFormikCon.displayRequiredIndicator;
49
+ var isTouched = touched[fieldName];
50
+ var value = values[fieldName];
51
+ var error = errors[fieldName];
41
52
  var _useTranslation = (0, _reactI18next.useTranslation)(),
42
53
  t = _useTranslation.t;
43
54
 
@@ -54,21 +65,9 @@ var DateSelect = function DateSelect(props) {
54
65
  _useState6 = _slicedToArray(_useState5, 2),
55
66
  year = _useState6[0],
56
67
  setYear = _useState6[1];
57
- var _useState7 = (0, _react.useState)(),
58
- _useState8 = _slicedToArray(_useState7, 2),
59
- showError = _useState8[0],
60
- setShowError = _useState8[1];
61
- var _useState9 = (0, _react.useState)(),
62
- _useState10 = _slicedToArray(_useState9, 2),
63
- error = _useState10[0],
64
- setError = _useState10[1];
65
- var _useState11 = (0, _react.useState)(),
66
- _useState12 = _slicedToArray(_useState11, 2),
67
- dateNotValid = _useState12[0],
68
- setDateNotValid = _useState12[1];
69
68
 
70
69
  // List all day options
71
- var dayOptions = (0, _react.useCallback)(function (placeholder) {
70
+ var dayOptions = (0, _react.useMemo)(function (placeholder) {
72
71
  var options = [];
73
72
  if (placeholder) {
74
73
  options.push({
@@ -84,9 +83,21 @@ var DateSelect = function DateSelect(props) {
84
83
  }
85
84
  return options;
86
85
  }, []);
86
+ var onChangeHandler = function onChangeHandler(_ref) {
87
+ var changedDay = _ref.changedDay,
88
+ changedMonth = _ref.changedMonth,
89
+ changedYear = _ref.changedYear;
90
+ if (onChange) {
91
+ onChange({
92
+ day: changedDay || day,
93
+ month: changedMonth || month,
94
+ year: changedYear || year
95
+ });
96
+ }
97
+ };
87
98
 
88
99
  // List all month options
89
- var monthOptions = (0, _react.useCallback)(function () {
100
+ var monthOptions = (0, _react.useMemo)(function () {
90
101
  var months = [t('dateselect.months.jan', 'Januari'), t('dateselect.months.feb', 'Februari'), t('dateselect.months.mar', 'Maart'), t('dateselect.months.apr', 'April'), t('dateselect.months.may', 'Mei'), t('dateselect.months.jun', 'Juni'), t('dateselect.months.jul', 'Juli'), t('dateselect.months.aug', 'Augustus'), t('dateselect.months.sep', 'September'), t('dateselect.months.oct', 'Oktober'), t('dateselect.months.nov', 'November'), t('dateselect.months.dec', 'December')];
91
102
  return months.map(function (e, i) {
92
103
  return {
@@ -94,10 +105,10 @@ var DateSelect = function DateSelect(props) {
94
105
  label: e
95
106
  };
96
107
  });
97
- }, []);
108
+ }, [t]);
98
109
 
99
110
  // List all options for possible years from the yearMin and yearMax variables.
100
- var yearOptions = (0, _react.useCallback)(function () {
111
+ var yearOptions = (0, _react.useMemo)(function () {
101
112
  var options = [];
102
113
  for (var index = yearMin; index <= yearMax; index++) {
103
114
  options.push({
@@ -108,85 +119,100 @@ var DateSelect = function DateSelect(props) {
108
119
  return options;
109
120
  }, [yearMin, yearMax]);
110
121
 
111
- // Check if all fields are filled
112
- (0, _react.useEffect)(function () {
113
- if (isSubmitting) {
114
- if (required && !values[fieldName]) {
115
- !dateNotValid && setError(requiredError);
116
- setShowError(true);
117
- }
118
- }
119
- }, [isSubmitting]);
120
-
121
122
  // Validation and setting either an error or the FieldValue
122
123
  (0, _react.useEffect)(function () {
123
124
  hideYear && setYear(fixedYear || new Date().getFullYear());
124
125
 
125
126
  // All options are filled, start validation
126
- if (day && month && year) {
127
+ if (required && (!day || !month || !year)) {
128
+ setFieldError(fieldName, requiredError);
129
+ } else if (day && month && year) {
127
130
  var date = new Date("".concat(year, "-").concat(month, "-").concat(day));
128
- if (!(
129
- // Take note of the exclamation mark
130
- date.getDate() === day && date.getMonth() + 1 === month && date.getFullYear() === year)) {
131
- // Depending on your browser, an invalid date overflows to the next month.
132
- // For example, the 30th of Februari can become the 2nd of March.
133
- // If that is the case, you still get a valid Date object, but it's not what
134
- // the user filled in.
135
- setError(notValidError);
136
- setShowError(true);
137
- setDateNotValid(true);
138
- setFieldValue('dateSelect', '');
139
- return;
140
- }
141
-
142
- // The Date is valid, so we hide previous errors and set the FieldValue
143
- setShowError(false);
144
- setDateNotValid(false);
145
- setFieldValue('dateSelect', date);
146
- return;
131
+ setFieldValue(fieldName, date);
147
132
  }
148
-
149
- // In case a Date was selected and set as FieldValue, but the user decides
150
- // to change the date, we want to hide previous errors and clear the FieldValue
151
- // so that validation - and also the useEffect on isSubmitting - can do it's job.
152
- setShowError(false);
153
- setDateNotValid(false);
154
- setFieldValue('dateSelect', '');
155
- }, [day, month, year]);
133
+ }, [isSubmitting, day, month, year]);
134
+ var handleValidation = function handleValidation(value) {
135
+ if (validation && typeof validation === 'function') {
136
+ return validation(value);
137
+ }
138
+ if (required && (!day || !month || !year)) {
139
+ return requiredError || t(['webform.components.date_select.required', 'webform.required', 'webform_required']);
140
+ }
141
+ var date = new Date("".concat(year, "-").concat(month, "-").concat(day));
142
+ if (!(
143
+ // Take note of the exclamation mark
144
+ date.getDate() === day && date.getMonth() + 1 === month && date.getFullYear() === year)) {
145
+ // Depending on your browser, an invalid date overflows to the next month.
146
+ // For example, the 30th of Februari can become the 2nd of March.
147
+ // If that is the case, you still get a valid Date object, but it's not what
148
+ // the user filled in.
149
+ return notValidError || t(['webform.components.date_select.invalid', 'webform.invalid', 'webform_invalid']);
150
+ }
151
+ var isoDate = date.toISOString().split('T')[0];
152
+ if (minDate && date.getTime() < new Date(minDate).getTime()) {
153
+ return t(['webform.components.date_select.min', 'webform.min', 'webform_min'], {
154
+ date: isoDate,
155
+ minDate: minDate
156
+ });
157
+ }
158
+ if (maxDate && date.getTime() > new Date(maxDate).getTime()) {
159
+ return t(['webform.components.date_select.max', 'webform.max', 'webform_max'], {
160
+ date: isoDate,
161
+ maxDate: maxDate
162
+ });
163
+ }
164
+ };
156
165
  return /*#__PURE__*/_react.default.createElement(_GenericFormElement.default, {
157
166
  className: "DateSelect",
158
167
  title: title,
159
168
  required: required,
160
169
  displayRequiredIndicator: displayRequiredIndicator,
161
170
  error: error,
162
- touched: showError
163
- }, /*#__PURE__*/_react.default.createElement(_Input.default, {
164
- id: "".concat(fieldName, "day"),
165
- fieldName: "".concat(fieldName, "day"),
166
- options: dayOptions(),
167
- value: day,
168
- placeholder: dayPlaceholder,
169
- onChange: function onChange(day) {
170
- return setDay(day);
171
- }
172
- }), /*#__PURE__*/_react.default.createElement(_Input.default, {
173
- id: "".concat(fieldName, "month"),
174
- fieldName: "".concat(fieldName, "month"),
175
- options: monthOptions(),
176
- value: month,
177
- placeholder: monthPlaceholder,
178
- onChange: function onChange(month) {
179
- return setMonth(month);
180
- }
181
- }), !hideYear && /*#__PURE__*/_react.default.createElement(_Input.default, {
182
- id: "".concat(fieldName, "year"),
183
- fieldName: "".concat(fieldName, "year"),
184
- options: yearOptions(),
185
- value: year,
186
- placeholder: yearPlaceholder,
187
- onChange: function onChange(year) {
188
- return setYear(year);
189
- }
171
+ touched: isTouched,
172
+ fieldName: fieldName
173
+ }, /*#__PURE__*/_react.default.createElement(_formik.Field, {
174
+ id: fieldName,
175
+ name: fieldName,
176
+ validate: handleValidation,
177
+ value: value
178
+ }, function () {
179
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Input.default, {
180
+ id: "".concat(fieldName, "day"),
181
+ fieldName: "".concat(fieldName, "day"),
182
+ options: dayOptions,
183
+ value: day,
184
+ placeholder: dayPlaceholder,
185
+ onChange: function onChange(day) {
186
+ setDay(day);
187
+ onChangeHandler({
188
+ changedDay: day
189
+ });
190
+ }
191
+ }), /*#__PURE__*/_react.default.createElement(_Input.default, {
192
+ id: "".concat(fieldName, "month"),
193
+ fieldName: "".concat(fieldName, "month"),
194
+ options: monthOptions,
195
+ value: month,
196
+ placeholder: monthPlaceholder,
197
+ onChange: function onChange(month) {
198
+ setMonth(month);
199
+ onChangeHandler({
200
+ changedMonth: month
201
+ });
202
+ }
203
+ }), !hideYear && /*#__PURE__*/_react.default.createElement(_Input.default, {
204
+ id: "".concat(fieldName, "year"),
205
+ fieldName: "".concat(fieldName, "year"),
206
+ options: yearOptions,
207
+ value: year,
208
+ placeholder: yearPlaceholder,
209
+ onChange: function onChange(year) {
210
+ setYear(year);
211
+ onChangeHandler({
212
+ changedYear: year
213
+ });
214
+ }
215
+ }));
190
216
  }));
191
217
  };
192
218
  DateSelect.defaultProps = {
@@ -199,7 +225,8 @@ DateSelect.defaultProps = {
199
225
  notValidError: 'Ongeldige datum',
200
226
  dayPlaceholder: 'Dag',
201
227
  monthPlaceholder: 'Maand',
202
- yearPlaceholder: 'Jaar'
228
+ yearPlaceholder: 'Jaar',
229
+ validation: undefined
203
230
  };
204
231
  var _default = DateSelect;
205
232
  exports.default = _default;
@@ -1,3 +1,8 @@
1
+ export function useExtendedFormikContext(): any;
2
+ export function FormikExtendedContextProvider({ children, ...props }: {
3
+ [x: string]: any;
4
+ children: any;
5
+ }): React.JSX.Element;
1
6
  export default FormikWrapper;
2
- declare function FormikWrapper(props: any): React.JSX.Element;
3
7
  import React from 'react';
8
+ declare function FormikWrapper(props: any): React.JSX.Element;
@@ -1,74 +1,55 @@
1
1
  "use strict";
2
2
 
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
- exports.default = void 0;
7
- var _react = _interopRequireDefault(require("react"));
7
+ exports.useExtendedFormikContext = exports.default = exports.FormikExtendedContextProvider = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
8
9
  var _formik = require("formik");
9
- var _excluded = ["initialValues", "onSubmit", "displayRequiredIndicator", "validate", "validateOnChange", "validateOnBlur", "validateOnMount", "onReset"];
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
10
+ var _excluded = ["children"],
11
+ _excluded2 = ["initialValues", "onSubmit", "validate", "validateOnChange", "validateOnBlur", "validateOnMount", "onReset", "children", "displayRequiredIndicator"];
12
+ 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); }
13
+ 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; }
12
14
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
13
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
14
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
15
15
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
16
16
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
17
17
  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; }
18
18
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
19
19
  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); }
20
- var renderChildrenRecursively = function renderChildrenRecursively(child, childProps, displayRequiredIndicator) {
21
- var _child$props = child.props,
22
- fieldName = _child$props.fieldName,
23
- type = _child$props.type,
24
- htmlType = _child$props.htmlType,
25
- children = _child$props.children;
26
- if (type === 'submit' || htmlType === 'submit') {
27
- return /*#__PURE__*/_react.default.cloneElement(child, {
28
- disabled: childProps.isSubmitting
29
- }, children);
30
- }
31
- var fieldProps = {
32
- touched: childProps.touched[fieldName],
33
- error: childProps.errors[fieldName],
34
- value: childProps.values[fieldName],
35
- displayRequiredIndicator: displayRequiredIndicator
36
- };
37
- return /*#__PURE__*/_react.default.cloneElement(child, _objectSpread(_objectSpread({}, child.props), fieldProps), _react.default.Children.map(children, function (subchild) {
38
- // Happens when we conditionally render elements.
39
- if (!subchild) {
40
- return null;
41
- }
20
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
21
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
22
+ var CustomFormikContext = /*#__PURE__*/(0, _react.createContext)();
23
+ var useExtendedFormikContext = function useExtendedFormikContext() {
24
+ return (0, _react.useContext)(CustomFormikContext);
25
+ };
26
+ exports.useExtendedFormikContext = useExtendedFormikContext;
27
+ var FormikExtendedContextProvider = function FormikExtendedContextProvider(_ref) {
28
+ var children = _ref.children,
29
+ props = _objectWithoutProperties(_ref, _excluded);
30
+ var formikContext = (0, _formik.useFormikContext)();
42
31
 
43
- // Happens for simple text nodes.
44
- if (!subchild.props) {
45
- return /*#__PURE__*/_react.default.createElement("span", null, subchild);
46
- }
47
- var _subchild$props = subchild.props,
48
- fieldName = _subchild$props.fieldName,
49
- children = _subchild$props.children;
50
- var fieldProps = {
51
- touched: childProps.touched[fieldName],
52
- error: childProps.errors[fieldName],
53
- value: childProps.values[fieldName],
54
- displayRequiredIndicator: displayRequiredIndicator
55
- };
56
- if (children) {
57
- return renderChildrenRecursively(subchild, _objectSpread({}, childProps), displayRequiredIndicator);
58
- }
59
- return /*#__PURE__*/_react.default.cloneElement(subchild, _objectSpread(_objectSpread({}, childProps), fieldProps), null);
60
- }));
32
+ // We want to supply the elements with extra properties,
33
+ // so we extend the default FormikContext here with our own.
34
+ var value = (0, _react.useMemo)(function () {
35
+ return _objectSpread(_objectSpread({}, formikContext), props);
36
+ }, [formikContext, props]);
37
+ return /*#__PURE__*/_react.default.createElement(CustomFormikContext.Provider, {
38
+ value: value
39
+ }, /*#__PURE__*/_react.default.createElement(_formik.Form, null, children));
61
40
  };
41
+ exports.FormikExtendedContextProvider = FormikExtendedContextProvider;
62
42
  var FormikWrapper = function FormikWrapper(props) {
63
43
  var initialValues = props.initialValues,
64
44
  onSubmit = props.onSubmit,
65
- displayRequiredIndicator = props.displayRequiredIndicator,
66
45
  validate = props.validate,
67
46
  validateOnChange = props.validateOnChange,
68
47
  validateOnBlur = props.validateOnBlur,
69
48
  validateOnMount = props.validateOnMount,
70
49
  onReset = props.onReset,
71
- restProps = _objectWithoutProperties(props, _excluded);
50
+ children = props.children,
51
+ displayRequiredIndicator = props.displayRequiredIndicator,
52
+ restProps = _objectWithoutProperties(props, _excluded2);
72
53
  return /*#__PURE__*/_react.default.createElement(_formik.Formik, _extends({
73
54
  initialValues: initialValues || {},
74
55
  onSubmit: onSubmit,
@@ -77,10 +58,10 @@ var FormikWrapper = function FormikWrapper(props) {
77
58
  validateOnBlur: validateOnBlur,
78
59
  validateOnMount: validateOnMount,
79
60
  onReset: onReset
80
- }, restProps), function (childProps) {
81
- return /*#__PURE__*/_react.default.createElement(_formik.Form, null, _react.default.Children.map(props.children, function (child) {
82
- return renderChildrenRecursively(child, childProps, displayRequiredIndicator);
83
- }));
61
+ }, restProps), function () {
62
+ return /*#__PURE__*/_react.default.createElement(FormikExtendedContextProvider, {
63
+ displayRequiredIndicator: displayRequiredIndicator
64
+ }, children);
84
65
  });
85
66
  };
86
67
  var _default = FormikWrapper;
@@ -7,39 +7,46 @@ exports.default = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _reactI18next = require("react-i18next");
9
9
  var _TextField = _interopRequireDefault(require("../TextField"));
10
+ var _excluded = ["min", "max", "step", "required", "requiredError", "validation"];
10
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
12
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
13
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
14
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
12
15
  var Number = function Number(props) {
13
- var _useTranslation = (0, _reactI18next.useTranslation)(),
14
- t = _useTranslation.t;
15
16
  var min = props.min,
16
17
  max = props.max,
17
18
  step = props.step,
18
19
  required = props.required,
19
- requiredError = props.requiredError;
20
- var validation = function validation(value) {
21
- var error;
20
+ requiredError = props.requiredError,
21
+ validation = props.validation,
22
+ restProps = _objectWithoutProperties(props, _excluded);
23
+ var _useTranslation = (0, _reactI18next.useTranslation)(),
24
+ t = _useTranslation.t;
25
+ var handleValidation = function handleValidation(value) {
22
26
  if (required && !value) {
23
- error = requiredError || t('webform.required');
27
+ return requiredError || t(['webform.number.required', 'webform.required', 'webform_required']);
24
28
  }
25
29
  if (min && parseInt(value) < min) {
26
- error = t('webform.number.min', {
30
+ return t(['webform.number.min', 'webform.min', 'webform_min'], {
27
31
  min: min
28
32
  });
29
33
  }
30
34
  if (max && parseInt(value) > max) {
31
- error = t('webform.number.max', {
35
+ return t(['webform.number.max', 'webform.max', 'webform_max'], {
32
36
  max: max
33
37
  });
34
38
  }
35
- return error;
39
+ if (validation) {
40
+ return validation(value);
41
+ }
36
42
  };
37
- return /*#__PURE__*/_react.default.createElement(_TextField.default, _extends({}, props, {
43
+ return /*#__PURE__*/_react.default.createElement(_TextField.default, _extends({}, restProps, {
38
44
  type: "number",
39
- validation: validation,
45
+ validation: handleValidation,
40
46
  min: min,
41
47
  max: max,
42
- step: step
48
+ step: step,
49
+ required: required
43
50
  }));
44
51
  };
45
52
  var _default = Number;
@@ -7,13 +7,16 @@ exports.default = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
8
  var _formik = require("formik");
9
9
  var _classnames = _interopRequireDefault(require("classnames"));
10
+ var _reactI18next = require("react-i18next");
10
11
  var _GenericFormElement = _interopRequireDefault(require("../GenericFormElement"));
12
+ var _FormikWrapper = require("../FormikWrapper");
11
13
  require("./style.scss");
12
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
15
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
14
16
  var Radio = function Radio(props) {
15
17
  var className = props.className,
16
- disabled = props.disabled;
18
+ disabled = props.disabled,
19
+ _onChange = props.onChange;
17
20
  return /*#__PURE__*/_react.default.createElement(_formik.Field, {
18
21
  name: props.name,
19
22
  validate: props.validate
@@ -24,6 +27,7 @@ var Radio = function Radio(props) {
24
27
  var classes = (0, _classnames.default)('WebformRadios__radio__input', {
25
28
  'icon-before': true,
26
29
  'icon-radio': true,
30
+ 'icon-variant-0': !(field.value && field.value === props.value),
27
31
  'icon-variant-1': field.value && field.value === props.value
28
32
  });
29
33
  if (props.value === '__other__') {
@@ -38,7 +42,13 @@ var Radio = function Radio(props) {
38
42
  id: name,
39
43
  value: props.value,
40
44
  disabled: disabled,
41
- className: className
45
+ className: className,
46
+ onChange: function onChange(event) {
47
+ if (_onChange) {
48
+ _onChange(props.value);
49
+ }
50
+ field.onChange(event);
51
+ }
42
52
  })), /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement("span", null, props.otherLabel ? props.otherLabel : props.label), props.description && /*#__PURE__*/_react.default.createElement("span", null, props.description)), /*#__PURE__*/_react.default.createElement("textarea", {
43
53
  placeholder: props.otherPlaceholder,
44
54
  className: inputClasses,
@@ -55,7 +65,13 @@ var Radio = function Radio(props) {
55
65
  id: name,
56
66
  value: props.value,
57
67
  disabled: disabled,
58
- className: className
68
+ className: className,
69
+ onChange: function onChange(event) {
70
+ if (_onChange) {
71
+ _onChange(props.value);
72
+ }
73
+ field.onChange(event);
74
+ }
59
75
  })), /*#__PURE__*/_react.default.createElement("span", null, /*#__PURE__*/_react.default.createElement("span", null, props.label), props.description && /*#__PURE__*/_react.default.createElement("span", null, props.description)));
60
76
  });
61
77
  };
@@ -66,29 +82,43 @@ var RadioButtons = function RadioButtons(props) {
66
82
  placeholder = props.placeholder,
67
83
  fieldName = props.fieldName,
68
84
  validation = props.validation,
69
- touched = props.touched,
70
- error = props.error,
71
85
  type = props.type,
72
86
  options = props.options,
73
87
  _props$descriptions = props.descriptions,
74
88
  descriptions = _props$descriptions === void 0 ? {} : _props$descriptions,
75
- displayRequiredIndicator = props.displayRequiredIndicator,
76
89
  className = props.className,
77
90
  wrapperClassName = props.wrapperClassName,
78
91
  _props$disabled = props.disabled,
79
92
  disabled = _props$disabled === void 0 ? false : _props$disabled,
80
93
  otherLabel = props.otherLabel,
81
- otherPlaceholder = props.otherPlaceholder;
94
+ otherPlaceholder = props.otherPlaceholder,
95
+ onChange = props.onChange;
96
+ var _useTranslation = (0, _reactI18next.useTranslation)(),
97
+ t = _useTranslation.t;
98
+ var _useExtendedFormikCon = (0, _FormikWrapper.useExtendedFormikContext)(),
99
+ errors = _useExtendedFormikCon.errors,
100
+ touched = _useExtendedFormikCon.touched,
101
+ displayRequiredIndicator = _useExtendedFormikCon.displayRequiredIndicator;
102
+ var isTouched = touched[fieldName];
103
+ var error = errors[fieldName];
104
+ var handleValidation = function handleValidation(value) {
105
+ if (validation) {
106
+ return validation(value);
107
+ }
108
+ if (required && !value) {
109
+ return t(['webform.components.radio_buttons.required', 'webform.required', 'webform_required']);
110
+ }
111
+ };
82
112
  return /*#__PURE__*/_react.default.createElement(_GenericFormElement.default, {
83
113
  className: (0, _classnames.default)('RadioButtons', wrapperClassName),
84
114
  title: title,
85
115
  required: required,
86
116
  description: description,
87
117
  fieldName: fieldName,
88
- touched: touched,
118
+ touched: isTouched,
89
119
  error: error,
90
120
  displayRequiredIndicator: displayRequiredIndicator
91
- }, Object.keys(options).map(function (value, index) {
121
+ }, Object.keys(options).map(function (value) {
92
122
  var label = options[value];
93
123
  var description = descriptions[value] || null;
94
124
  return /*#__PURE__*/_react.default.createElement(Radio, {
@@ -102,10 +132,11 @@ var RadioButtons = function RadioButtons(props) {
102
132
  type: type || 'text',
103
133
  value: value,
104
134
  placeholder: placeholder,
105
- validate: validation,
135
+ validate: handleValidation,
106
136
  otherLabel: otherLabel,
107
137
  otherPlaceholder: otherPlaceholder,
108
- disabled: disabled
138
+ disabled: disabled,
139
+ onChange: onChange
109
140
  });
110
141
  }));
111
142
  };
@@ -3,6 +3,7 @@
3
3
  display: flex;
4
4
  flex-direction: column;
5
5
  }
6
+
6
7
  input {
7
8
  font-size: 1.8rem;
8
9
  font-weight: 500;