@digigov/form 2.0.0-e7d30530 → 2.0.0-eaf330f5

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 (268) hide show
  1. package/Field/FieldBase/index.js +4 -3
  2. package/Field/FieldBase.js.map +2 -2
  3. package/Field/FieldBaseContainer/index.js +19 -37
  4. package/Field/FieldBaseContainer.d.ts +1 -1
  5. package/Field/FieldBaseContainer.js.map +2 -2
  6. package/Field/FieldConditional/index.js +1 -1
  7. package/Field/FieldConditional.js.map +1 -1
  8. package/Field/index.js +1 -2
  9. package/Field/index.js.map +2 -2
  10. package/Field/types.d.ts +2 -2
  11. package/Field/utils/index.js +3 -4
  12. package/Field/utils/index.js.map +2 -2
  13. package/FieldArray/FormDialog/index.js +7 -2
  14. package/FieldArray/FormDialog.d.ts +3 -2
  15. package/FieldArray/FormDialog.js.map +2 -2
  16. package/FieldArray/__stories__/Default.d.ts +1 -1
  17. package/FieldArray/__stories__/WithExactLength.d.ts +1 -1
  18. package/FieldArray/__stories__/WithModal.d.ts +1 -1
  19. package/FieldArray/index.d.ts +1 -1
  20. package/FieldArray/index.js +88 -95
  21. package/FieldArray/index.js.map +3 -3
  22. package/FormBuilder/FormBuilder.stories.d.ts +0 -2
  23. package/FormBuilder/__stories__/AutoErrorGrouping.d.ts +1 -1
  24. package/FormBuilder/__stories__/Default.d.ts +1 -1
  25. package/FormBuilder/__stories__/ErrorGrouping.d.ts +1 -1
  26. package/FormBuilder/index.d.ts +1 -1
  27. package/FormBuilder/index.js +7 -3
  28. package/FormBuilder/index.js.map +2 -2
  29. package/FormContext/index.js +2 -6
  30. package/FormContext.d.ts +0 -1
  31. package/FormContext.js.map +2 -2
  32. package/MultiplicityField/MultiplicityField.stories.d.ts +0 -2
  33. package/MultiplicityField/__stories__/Default.d.ts +1 -1
  34. package/MultiplicityField/__stories__/PreviewDisplay.d.ts +1 -1
  35. package/MultiplicityField/__stories__/WithExactLength.d.ts +1 -1
  36. package/MultiplicityField/__stories__/WithMaxLength.d.ts +1 -1
  37. package/MultiplicityField/__stories__/WithMinAndMaxLength.d.ts +1 -1
  38. package/MultiplicityField/__stories__/WithMinLength.d.ts +1 -1
  39. package/MultiplicityField/add-objects/index.js +1 -1
  40. package/MultiplicityField/add-objects.js.map +2 -2
  41. package/MultiplicityField/index.js +2 -4
  42. package/MultiplicityField/index.js.map +2 -2
  43. package/MultiplicityField/types.d.ts +0 -1
  44. package/Questions/Questions.stories.d.ts +0 -2
  45. package/Questions/__stories__/Default.d.ts +1 -1
  46. package/cjs/Field/FieldBase/index.js +4 -3
  47. package/cjs/Field/FieldBase.js.map +2 -2
  48. package/cjs/Field/FieldBaseContainer/index.js +18 -36
  49. package/cjs/Field/FieldBaseContainer.js.map +3 -3
  50. package/cjs/Field/FieldConditional/index.js +1 -1
  51. package/cjs/Field/FieldConditional.js.map +1 -1
  52. package/cjs/Field/index.js +1 -2
  53. package/cjs/Field/index.js.map +2 -2
  54. package/cjs/Field/types.js.map +1 -1
  55. package/cjs/Field/utils/index.js +3 -4
  56. package/cjs/Field/utils/index.js.map +2 -2
  57. package/cjs/FieldArray/FormDialog/index.js +7 -2
  58. package/cjs/FieldArray/FormDialog.js.map +2 -2
  59. package/cjs/FieldArray/index.js +83 -93
  60. package/cjs/FieldArray/index.js.map +3 -3
  61. package/cjs/FormBuilder/index.js +7 -3
  62. package/cjs/FormBuilder/index.js.map +2 -2
  63. package/cjs/FormContext/index.js +2 -7
  64. package/cjs/FormContext.js.map +2 -2
  65. package/cjs/MultiplicityField/add-objects/index.js +1 -1
  66. package/cjs/MultiplicityField/add-objects.js.map +2 -2
  67. package/cjs/MultiplicityField/index.js +2 -4
  68. package/cjs/MultiplicityField/index.js.map +2 -2
  69. package/cjs/MultiplicityField/types.js.map +1 -1
  70. package/cjs/inputs/Checkboxes/index.js +1 -2
  71. package/cjs/inputs/Checkboxes/index.js.map +2 -2
  72. package/cjs/inputs/DateInput/index.js +12 -27
  73. package/cjs/inputs/DateInput/index.js.map +2 -2
  74. package/cjs/inputs/DateTimeInput/index.js +34 -55
  75. package/cjs/inputs/DateTimeInput/index.js.map +2 -2
  76. package/cjs/inputs/FileInput/index.js +26 -45
  77. package/cjs/inputs/FileInput/index.js.map +2 -2
  78. package/cjs/inputs/ImageInput/index.js +10 -41
  79. package/cjs/inputs/ImageInput/index.js.map +2 -2
  80. package/cjs/inputs/Input/inputsInputScenarios/index.js +439 -0
  81. package/cjs/inputs/Input/inputsInputScenarios.js.map +7 -0
  82. package/cjs/lazy/index.js +6 -6
  83. package/cjs/lazy.js.map +2 -2
  84. package/cjs/registry/index.js +10 -8
  85. package/cjs/registry.js.map +2 -2
  86. package/cjs/validators/index.js +10 -8
  87. package/cjs/validators/index.js.map +2 -2
  88. package/cjs/validators/utils/date/index.js +3 -21
  89. package/cjs/validators/utils/date.js.map +2 -2
  90. package/cjs/validators/utils/datetime/index.js +24 -113
  91. package/cjs/validators/utils/datetime.js.map +2 -2
  92. package/index.js +1 -1
  93. package/inputs/AutoCompleteInput/AutoComplete.stories.d.ts +0 -2
  94. package/inputs/AutoCompleteInput/__stories__/Default.d.ts +1 -1
  95. package/inputs/AutoCompleteInput/__stories__/Multiple.d.ts +1 -1
  96. package/inputs/Checkboxes/Checkboxes.stories.d.ts +0 -2
  97. package/inputs/Checkboxes/__stories__/Conditional.d.ts +1 -1
  98. package/inputs/Checkboxes/__stories__/Default.d.ts +1 -1
  99. package/inputs/Checkboxes/__stories__/WithDivider.d.ts +1 -1
  100. package/inputs/Checkboxes/index.js +1 -2
  101. package/inputs/Checkboxes/index.js.map +2 -2
  102. package/inputs/DateInput/DateInput.stories.d.ts +0 -6
  103. package/inputs/DateInput/__stories__/Default.d.ts +1 -1
  104. package/inputs/DateInput/index.js +13 -28
  105. package/inputs/DateInput/index.js.map +2 -2
  106. package/inputs/DateTimeInput/DateTimeInput.stories.d.ts +3 -10
  107. package/inputs/DateTimeInput/__stories__/Default.d.ts +1 -1
  108. package/inputs/DateTimeInput/index.js +35 -56
  109. package/inputs/DateTimeInput/index.js.map +2 -2
  110. package/inputs/FileInput/FileInput.stories.d.ts +0 -2
  111. package/inputs/FileInput/__stories__/Default.d.ts +1 -1
  112. package/inputs/FileInput/index.d.ts +1 -5
  113. package/inputs/FileInput/index.js +27 -46
  114. package/inputs/FileInput/index.js.map +2 -2
  115. package/inputs/ImageInput/ImageInput.stories.d.ts +1 -4
  116. package/inputs/ImageInput/__stories__/Default.d.ts +1 -1
  117. package/inputs/ImageInput/__stories__/MaxSize.d.ts +1 -1
  118. package/inputs/ImageInput/__stories__/WithInvalidImageDimension.d.ts +1 -1
  119. package/inputs/ImageInput/index.d.ts +1 -9
  120. package/inputs/ImageInput/index.js +11 -42
  121. package/inputs/ImageInput/index.js.map +2 -2
  122. package/inputs/Input/Input.stories.d.ts +0 -3
  123. package/inputs/Input/__stories__/AFM.d.ts +1 -1
  124. package/inputs/Input/__stories__/Boolean.d.ts +1 -1
  125. package/inputs/Input/__stories__/IBAN.d.ts +1 -1
  126. package/inputs/Input/__stories__/Integer.d.ts +1 -1
  127. package/inputs/Input/__stories__/LandlineNumber.d.ts +1 -1
  128. package/inputs/Input/__stories__/MobilePhone.d.ts +1 -1
  129. package/inputs/Input/__stories__/PhoneNumber.d.ts +1 -1
  130. package/inputs/Input/__stories__/PostalCode.d.ts +1 -1
  131. package/inputs/Input/__stories__/String.d.ts +1 -1
  132. package/inputs/Input/__stories__/StringWithTrimValidation.d.ts +1 -1
  133. package/inputs/Input/__stories__/TextWithLimit.d.ts +1 -1
  134. package/inputs/Input/inputsInputScenarios/index.js +406 -0
  135. package/inputs/{ImageInput/__stories__/logo.d → Input/inputsInputScenarios}/package.json +1 -1
  136. package/inputs/Input/inputsInputScenarios.d.ts +57 -0
  137. package/inputs/Input/inputsInputScenarios.js.map +7 -0
  138. package/inputs/Label/Label.stories.d.ts +0 -2
  139. package/inputs/Label/__stories__/Default.d.ts +1 -1
  140. package/inputs/OtpInput/OtpInput.stories.d.ts +0 -2
  141. package/inputs/OtpInput/__stories__/Default.d.ts +1 -1
  142. package/inputs/Radio/Radio.stories.d.ts +0 -2
  143. package/inputs/Radio/__stories__/Conditional.d.ts +1 -1
  144. package/inputs/Radio/__stories__/Default.d.ts +1 -1
  145. package/inputs/Radio/__stories__/WithDivider.d.ts +1 -1
  146. package/inputs/Select/Select.stories.d.ts +0 -2
  147. package/inputs/Select/__stories__/Default.d.ts +1 -1
  148. package/lazy/index.js +6 -6
  149. package/package.json +8 -8
  150. package/registry/index.js +10 -8
  151. package/src/Field/FieldBase.tsx +18 -14
  152. package/src/Field/FieldBaseContainer.tsx +51 -68
  153. package/src/Field/FieldConditional.tsx +1 -1
  154. package/src/Field/index.tsx +1 -2
  155. package/src/Field/types.tsx +2 -2
  156. package/src/Field/utils/index.ts +1 -2
  157. package/src/FieldArray/FormDialog.tsx +12 -3
  158. package/src/FieldArray/__stories__/Default.tsx +1 -1
  159. package/src/FieldArray/__stories__/WithExactLength.tsx +1 -1
  160. package/src/FieldArray/__stories__/WithModal.tsx +1 -1
  161. package/src/FieldArray/index.tsx +103 -111
  162. package/src/FormBuilder/FormBuilder.stories.js +0 -3
  163. package/src/FormBuilder/__stories__/AutoErrorGrouping.tsx +1 -1
  164. package/src/FormBuilder/__stories__/Default.tsx +1 -1
  165. package/src/FormBuilder/__stories__/ErrorGrouping.tsx +1 -1
  166. package/src/FormBuilder/index.tsx +7 -3
  167. package/src/FormBuilder/scenarios.test.tsx +1 -1
  168. package/src/FormContext.tsx +1 -5
  169. package/src/MultiplicityField/MultiplicityField.stories.js +0 -3
  170. package/src/MultiplicityField/__stories__/Default.tsx +1 -1
  171. package/src/MultiplicityField/__stories__/PreviewDisplay.tsx +1 -1
  172. package/src/MultiplicityField/__stories__/WithExactLength.tsx +1 -1
  173. package/src/MultiplicityField/__stories__/WithMaxLength.tsx +1 -1
  174. package/src/MultiplicityField/__stories__/WithMinAndMaxLength.tsx +1 -1
  175. package/src/MultiplicityField/__stories__/WithMinLength.tsx +1 -1
  176. package/src/MultiplicityField/add-objects.tsx +1 -1
  177. package/src/MultiplicityField/index.tsx +1 -3
  178. package/src/MultiplicityField/types.ts +0 -1
  179. package/src/Questions/Questions.stories.js +0 -3
  180. package/src/Questions/__stories__/Default.tsx +1 -1
  181. package/src/inputs/AutoCompleteInput/AutoComplete.stories.js +0 -3
  182. package/src/inputs/AutoCompleteInput/__stories__/Default.tsx +1 -1
  183. package/src/inputs/AutoCompleteInput/__stories__/Multiple.tsx +1 -1
  184. package/src/inputs/Checkboxes/Checkboxes.stories.js +0 -3
  185. package/src/inputs/Checkboxes/__stories__/Conditional.tsx +1 -1
  186. package/src/inputs/Checkboxes/__stories__/Default.tsx +1 -1
  187. package/src/inputs/Checkboxes/__stories__/WithDivider.tsx +1 -1
  188. package/src/inputs/Checkboxes/index.tsx +5 -4
  189. package/src/inputs/DateInput/DateInput.stories.js +0 -7
  190. package/src/inputs/DateInput/__stories__/Default.tsx +1 -1
  191. package/src/inputs/DateInput/index.test.tsx +0 -16
  192. package/src/inputs/DateInput/index.tsx +13 -31
  193. package/src/inputs/DateTimeInput/DateTimeInput.stories.js +6 -12
  194. package/src/inputs/DateTimeInput/__stories__/Default.tsx +1 -1
  195. package/src/inputs/DateTimeInput/index.test.tsx +0 -16
  196. package/src/inputs/DateTimeInput/index.tsx +35 -59
  197. package/src/inputs/FileInput/FileInput.stories.js +0 -3
  198. package/src/inputs/FileInput/__stories__/Default.tsx +1 -1
  199. package/src/inputs/FileInput/index.tsx +39 -72
  200. package/src/inputs/ImageInput/ImageInput.stories.js +1 -5
  201. package/src/inputs/ImageInput/__stories__/Default.tsx +1 -1
  202. package/src/inputs/ImageInput/__stories__/MaxSize.tsx +2 -3
  203. package/src/inputs/ImageInput/__stories__/WithInvalidImageDimension.tsx +1 -1
  204. package/src/inputs/ImageInput/index.test.tsx +0 -4
  205. package/src/inputs/ImageInput/index.tsx +48 -100
  206. package/src/inputs/Input/Input.stories.js +0 -4
  207. package/src/inputs/Input/__stories__/AFM.tsx +1 -1
  208. package/src/inputs/Input/__stories__/Boolean.tsx +1 -1
  209. package/src/inputs/Input/__stories__/IBAN.tsx +1 -1
  210. package/src/inputs/Input/__stories__/Integer.tsx +1 -1
  211. package/src/inputs/Input/__stories__/LandlineNumber.tsx +1 -1
  212. package/src/inputs/Input/__stories__/MobilePhone.tsx +1 -1
  213. package/src/inputs/Input/__stories__/PhoneNumber.tsx +1 -1
  214. package/src/inputs/Input/__stories__/PostalCode.tsx +1 -1
  215. package/src/inputs/Input/__stories__/String.tsx +1 -1
  216. package/src/inputs/Input/__stories__/StringWithTrimValidation.tsx +1 -1
  217. package/src/inputs/Input/__stories__/TextWithLimit.tsx +1 -1
  218. package/src/inputs/Input/index.test.tsx +0 -8
  219. package/src/inputs/Input/inputsInputScenarios.ts +404 -0
  220. package/src/inputs/Label/Label.stories.js +0 -3
  221. package/src/inputs/Label/__stories__/Default.tsx +1 -1
  222. package/src/inputs/OtpInput/OtpInput.stories.js +0 -3
  223. package/src/inputs/OtpInput/__stories__/Default.tsx +1 -1
  224. package/src/inputs/Radio/Radio.stories.js +0 -3
  225. package/src/inputs/Radio/__stories__/Conditional.tsx +1 -1
  226. package/src/inputs/Radio/__stories__/Default.tsx +1 -1
  227. package/src/inputs/Radio/__stories__/WithDivider.tsx +1 -1
  228. package/src/inputs/Select/Select.stories.js +0 -3
  229. package/src/inputs/Select/__stories__/Default.tsx +1 -1
  230. package/src/lazy.js +6 -6
  231. package/src/registry.js +10 -8
  232. package/src/validators/index.ts +13 -13
  233. package/src/validators/utils/date.ts +4 -23
  234. package/src/validators/utils/datetime.ts +29 -116
  235. package/validators/index.js +10 -8
  236. package/validators/index.js.map +2 -2
  237. package/validators/utils/date/index.js +3 -21
  238. package/validators/utils/date.d.ts +1 -1
  239. package/validators/utils/date.js.map +2 -2
  240. package/validators/utils/datetime/index.js +24 -113
  241. package/validators/utils/datetime.d.ts +1 -1
  242. package/validators/utils/datetime.js.map +2 -2
  243. package/cjs/inputs/ImageInput/__stories__/logo.d/index.js +0 -1
  244. package/cjs/inputs/ImageInput/__stories__/logo.d.js.map +0 -7
  245. package/inputs/DateInput/__stories__/WithDefaultValue.d.ts +0 -3
  246. package/inputs/DateInput/__stories__/WithInitialValue.d.ts +0 -3
  247. package/inputs/DateInput/__stories__/WithWrongDefaultValue.d.ts +0 -3
  248. package/inputs/DateInput/__stories__/WithWrongInitialValue.d.ts +0 -3
  249. package/inputs/DateTimeInput/__stories__/WithDefaultValue.d.ts +0 -3
  250. package/inputs/DateTimeInput/__stories__/WithInitialValue.d.ts +0 -3
  251. package/inputs/DateTimeInput/__stories__/WithWrongDefaultValue.d.ts +0 -3
  252. package/inputs/DateTimeInput/__stories__/WithWrongInitialValue.d.ts +0 -3
  253. package/inputs/ImageInput/__stories__/WithInitialValues.d.ts +0 -3
  254. package/inputs/ImageInput/__stories__/logo.d/index.js +0 -1
  255. package/inputs/ImageInput/__stories__/logo.d.js.map +0 -7
  256. package/inputs/Input/__stories__/Email.d.ts +0 -3
  257. package/src/inputs/DateInput/__stories__/WithDefaultValue.tsx +0 -26
  258. package/src/inputs/DateInput/__stories__/WithInitialValue.tsx +0 -28
  259. package/src/inputs/DateInput/__stories__/WithWrongDefaultValue.tsx +0 -26
  260. package/src/inputs/DateInput/__stories__/WithWrongInitialValue.tsx +0 -28
  261. package/src/inputs/DateTimeInput/__stories__/WithDefaultValue.tsx +0 -26
  262. package/src/inputs/DateTimeInput/__stories__/WithInitialValue.tsx +0 -28
  263. package/src/inputs/DateTimeInput/__stories__/WithWrongDefaultValue.tsx +0 -26
  264. package/src/inputs/DateTimeInput/__stories__/WithWrongInitialValue.tsx +0 -28
  265. package/src/inputs/ImageInput/__stories__/WithInitialValues.tsx +0 -45
  266. package/src/inputs/ImageInput/__stories__/logo.d.ts +0 -4
  267. package/src/inputs/ImageInput/__stories__/logo.png +0 -0
  268. package/src/inputs/Input/__stories__/Email.tsx +0 -23
@@ -1,8 +1,8 @@
1
- import React, { useMemo, useEffect } from 'react';
1
+ import React, { useMemo, useState } from 'react';
2
2
  import dayjs from 'dayjs';
3
3
  import customParseFormat from 'dayjs/plugin/customParseFormat';
4
4
  import { UncontrolledFieldProps } from '@digigov/form/Field/types';
5
- import { useFormContext } from '@digigov/form/FormContext';
5
+ import { useFormContext } from '@digigov/form/FormBuilder';
6
6
  import {
7
7
  DateInputContainer,
8
8
  DateInputItem,
@@ -20,6 +20,7 @@ export interface DateInputProps extends Omit<UncontrolledFieldProps, 'extra'> {
20
20
  function useDate(name, value, form) {
21
21
  const [year, month, day] = useMemo(() => {
22
22
  if (!value || value.length === 0) {
23
+ update('');
23
24
  return ['', '', ''];
24
25
  }
25
26
  const [day, month, year] = value.split('/');
@@ -93,37 +94,23 @@ const DatePart = ({ label, ...props }) => {
93
94
 
94
95
  export const DateInput = ({ name, ...props }) => {
95
96
  const { t } = useTranslation();
96
- const form = useFormContext();
97
-
98
- useEffect(() => {
99
- const initialValue = form.getValues(name);
100
- // checks if the initial value is undefined and if the default value is valid date
101
- if (initialValue === undefined && props.defaultValue) {
102
- form.setValue(name, makeDate(props.defaultValue), {
103
- shouldValidate: false,
104
- });
105
- } else {
106
- // checks if the initial value is a valid date
107
- form.setValue(name, makeDate(initialValue), {
108
- shouldValidate: false,
109
- });
97
+ const [initial] = useState(props.value);
98
+ const value = useMemo(() => {
99
+ if (initial === props.value) {
100
+ return makeDate(props.value);
110
101
  }
111
- }, []);
102
+ return props.value;
103
+ }, [props.value, initial]);
112
104
 
113
- const value = form.getValues(name);
114
- const date = useDate(name, value, form);
105
+ const form = useFormContext();
106
+ const date = useDate(name, value || makeDate(props.defaultValue), form);
115
107
 
116
108
  return (
117
109
  <DateInputContainer>
118
110
  <DatePart
119
111
  label={t('form.label.day')}
120
112
  onChange={date.setDay}
121
- onBlur={(e) => {
122
- if (date.day && date.day.length === 1) {
123
- date.setDay(e, true);
124
- }
125
- date.trigger();
126
- }}
113
+ onBlur={date.trigger}
127
114
  value={date.day}
128
115
  width={2}
129
116
  name={`${name}-day`}
@@ -136,12 +123,7 @@ export const DateInput = ({ name, ...props }) => {
136
123
  <DatePart
137
124
  label={t('form.label.month')}
138
125
  onChange={date.setMonth}
139
- onBlur={(e) => {
140
- if (date.month && date.month.length === 1) {
141
- date.setMonth(e, true);
142
- }
143
- date.trigger();
144
- }}
126
+ onBlur={date.trigger}
145
127
  value={date.month}
146
128
  width={2}
147
129
  name={`${name}-month`}
@@ -1,14 +1,8 @@
1
- import DateTimeInput from '@digigov/form/inputs/DateTimeInput';
2
- import doc from './doc.mdx?raw';
1
+ import { Default } from './__stories__/Default';
2
+
3
3
  export default {
4
- title: 'Digigov Form/inputs/DateTimeInput',
5
- component: DateTimeInput,
6
- tags: ['autodocs'],
7
- markdown: doc,
8
- displayName: 'DateTimeInput',
4
+ title: 'Form/Inputs/DateTimeInput',
5
+ component: Default,
9
6
  };
10
- export { Default } from '@digigov/form/inputs/DateTimeInput/__stories__/Default';
11
- export { WithDefaultValue } from '@digigov/form/inputs/DateTimeInput/__stories__/WithDefaultValue';
12
- export { WithWrongDefaultValue } from '@digigov/form/inputs/DateTimeInput/__stories__/WithWrongDefaultValue';
13
- export { WithInitialValue } from '@digigov/form/inputs/DateTimeInput/__stories__/WithInitialValue';
14
- export { WithWrongInitialValue } from '@digigov/form/inputs/DateTimeInput/__stories__/WithWrongInitialValue';
7
+
8
+ export { Default };
@@ -14,7 +14,7 @@ const fields = [
14
14
  } as const,
15
15
  ];
16
16
 
17
- export const Default = (_: any) => (
17
+ export const Default = () => (
18
18
  <FormBuilder onSubmit={() => console.log('kati')}>
19
19
  {fields.map(({ key, ...field }) => {
20
20
  return <Field {...field} name={key} key={key} />;
@@ -2,10 +2,6 @@ import React from 'react';
2
2
  import { test, expect } from '@playwright/experimental-ct-react';
3
3
  import TestVariant from '@digigov/ui/utils/TestVariant'
4
4
  import { Default } from '@digigov/form/inputs/DateTimeInput/__stories__/Default';
5
- import { WithDefaultValue } from '@digigov/form/inputs/DateTimeInput/__stories__/WithDefaultValue';
6
- import { WithInitialValue } from '@digigov/form/inputs/DateTimeInput/__stories__/WithInitialValue';
7
- import { WithWrongDefaultValue } from '@digigov/form/inputs/DateTimeInput/__stories__/WithWrongDefaultValue';
8
- import { WithWrongInitialValue } from '@digigov/form/inputs/DateTimeInput/__stories__/WithWrongInitialValue';
9
5
 
10
6
  test('renders the All DateTimeInput variants', async ({ mount, page }) => {
11
7
  await mount(
@@ -14,18 +10,6 @@ test('renders the All DateTimeInput variants', async ({ mount, page }) => {
14
10
  <TestVariant title="Default">
15
11
  <Default />
16
12
  </TestVariant>
17
- <TestVariant title="WithDefaultValue">
18
- <WithDefaultValue />
19
- </TestVariant>
20
- <TestVariant title="WithInitialValue">
21
- <WithInitialValue />
22
- </TestVariant>
23
- <TestVariant title="WithWrongDefaultValue">
24
- <WithWrongDefaultValue />
25
- </TestVariant>
26
- <TestVariant title="WithWrongInitialValue">
27
- <WithWrongInitialValue />
28
- </TestVariant>
29
13
  </div>
30
14
  )
31
15
  await page.evaluate(() => document.fonts.ready);
@@ -1,8 +1,8 @@
1
- import React, { useMemo, useEffect } from 'react';
1
+ import React, { useMemo, useState } from 'react';
2
2
  import dayjs from 'dayjs';
3
3
  import customParseFormat from 'dayjs/plugin/customParseFormat';
4
4
  import { UncontrolledFieldProps } from '@digigov/form/Field/types';
5
- import { useFormContext } from '@digigov/form/FormContext';
5
+ import { useFormContext } from '@digigov/form/FormBuilder';
6
6
  import {
7
7
  DateInputContainer,
8
8
  DateInputItem,
@@ -21,6 +21,7 @@ export interface DateTimeInputProps
21
21
  function useDateTime(name, value, form) {
22
22
  const [year, month, day, hours, minutes] = useMemo(() => {
23
23
  if (!value || value.length === 0) {
24
+ update('');
24
25
  return ['', '', '', '', ''];
25
26
  }
26
27
  const [datePart, timePart] = value.split(' ');
@@ -119,112 +120,87 @@ const DateTimePart = ({ label, ...props }) => {
119
120
 
120
121
  export const DateTimeInput = ({ name, ...props }) => {
121
122
  const { t } = useTranslation();
122
- const form = useFormContext();
123
-
124
- useEffect(() => {
125
- const initialValue = form.getValues(name);
126
- // checks if the initial value is undefined and if the default value is valid date
127
- if (initialValue === undefined && props.defaultValue) {
128
- form.setValue(name, makeDateTime(props.defaultValue), {
129
- shouldValidate: false,
130
- });
131
- } else {
132
- // checks if the initial value is a valid date
133
- form.setValue(name, makeDateTime(initialValue), {
134
- shouldValidate: false,
135
- });
123
+ const [initial] = useState(props.value);
124
+ const value = useMemo(() => {
125
+ if (initial === props.value) {
126
+ return makeDateTime(props.value);
136
127
  }
137
- }, []);
128
+ return props.value;
129
+ }, [props.value, initial]);
138
130
 
139
- const value = form.getValues(name);
140
- const dateTime = useDateTime(name, value, form);
131
+ const form = useFormContext();
132
+ const datetime = useDateTime(
133
+ name,
134
+ value || makeDateTime(props.defaultValue),
135
+ form
136
+ );
141
137
 
142
138
  return (
143
139
  <DateInputContainer>
144
140
  <DateTimePart
145
141
  label={t('form.label.day')}
146
- onChange={dateTime.setDay}
147
- onBlur={(e) => {
148
- if (dateTime.day && dateTime.day.length === 1) {
149
- dateTime.setDay(e, true);
150
- }
151
- dateTime.trigger();
152
- }}
153
- value={dateTime.day}
142
+ onChange={datetime.setDay}
143
+ onBlur={datetime.trigger}
144
+ value={datetime.day}
154
145
  width={2}
155
146
  name={`${name}-day`}
156
147
  maxLength="2"
157
148
  disabled={props.disabled}
158
149
  aria-required={props['aria-required']}
159
- error={!dateTime.day ? props.error : false}
150
+ error={!datetime.day ? props.error : false}
160
151
  id={`${name}-day`}
161
152
  />
162
153
  <DateTimePart
163
154
  label={t('form.label.month')}
164
- onChange={dateTime.setMonth}
165
- onBlur={(e) => {
166
- if (dateTime.month && dateTime.month.length === 1) {
167
- dateTime.setMonth(e, true);
168
- }
169
- dateTime.trigger();
170
- }}
171
- value={dateTime.month}
155
+ onChange={datetime.setMonth}
156
+ onBlur={datetime.trigger}
157
+ value={datetime.month}
172
158
  width={2}
173
159
  name={`${name}-month`}
174
160
  id={`${name}-month`}
175
161
  maxLength="2"
176
162
  disabled={props.disabled}
177
163
  aria-required={props['aria-required']}
178
- error={!dateTime.month ? props.error : false}
164
+ error={!datetime.month ? props.error : false}
179
165
  />
180
166
  <DateTimePart
181
167
  label={t('form.label.year')}
182
- onChange={dateTime.setYear}
183
- onBlur={dateTime.trigger}
184
- value={dateTime.year}
168
+ onChange={datetime.setYear}
169
+ onBlur={datetime.trigger}
170
+ value={datetime.year}
185
171
  width={4}
186
172
  name={`${name}-year`}
187
173
  id={`${name}-year`}
188
174
  maxLength="4"
189
175
  disabled={props.disabled}
190
176
  aria-required={props['aria-required']}
191
- error={!dateTime.year ? props.error : false}
177
+ error={!datetime.year ? props.error : false}
192
178
  />
193
179
  <DateTimePart
194
180
  label={t('form.label.hours')}
195
- onChange={dateTime.setHours}
196
- onBlur={(e) => {
197
- if (dateTime.hours && dateTime.hours.length === 1) {
198
- dateTime.setHours(e, true);
199
- }
200
- dateTime.trigger();
201
- }}
202
- value={dateTime.hours}
181
+ onChange={datetime.setHours}
182
+ onBlur={datetime.trigger}
183
+ value={datetime.hours}
203
184
  width={2}
204
185
  name={`${name}-hours`}
205
186
  id={`${name}-hours`}
206
187
  maxLength="2"
207
188
  disabled={props.disabled}
208
189
  aria-required={props['aria-required']}
209
- error={!dateTime.hours ? props.error : false}
190
+ error={!datetime.hours ? props.error : false}
210
191
  />
211
192
  <DateTimePart
212
193
  label={t('form.label.minutes')}
213
- onChange={dateTime.setMinutes}
214
- onBlur={(e) => {
215
- if (dateTime.minutes && dateTime.minutes.length === 1) {
216
- dateTime.setMinutes(e, true);
217
- }
218
- dateTime.trigger();
219
- }}
220
- value={dateTime.minutes}
194
+ onChange={datetime.setMinutes}
195
+ onBlur={datetime.trigger}
196
+ value={datetime.minutes}
221
197
  width={2}
222
198
  name={`${name}-minutes`}
223
199
  id={`${name}-minutes`}
224
200
  maxLength="2"
225
201
  disabled={props.disabled}
226
202
  aria-required={props['aria-required']}
227
- error={!dateTime.minutes ? props.error : false}
203
+ error={!datetime.minutes ? props.error : false}
228
204
  />
229
205
  </DateInputContainer>
230
206
  );
@@ -1,10 +1,7 @@
1
1
  import FileInput from '@digigov/form/inputs/FileInput';
2
- import doc from './doc.mdx?raw';
3
2
  export default {
4
3
  title: 'Digigov Form/inputs/FileInput',
5
4
  component: FileInput,
6
- tags: ['autodocs'],
7
- markdown: doc,
8
5
  displayName: 'FileInput',
9
6
  };
10
7
  export { Default } from '@digigov/form/inputs/FileInput/__stories__/Default';
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import FormBuilder, { Field } from '@digigov/form';
3
3
  import { Button } from '@digigov/ui/form/Button';
4
4
 
5
- export const Default = (_: any) => (
5
+ export const Default = () => (
6
6
  <FormBuilder
7
7
  onSubmit={(data) => {
8
8
  console.log(data);
@@ -1,5 +1,4 @@
1
- import React, { ComponentRef, useCallback, useEffect, useState } from 'react';
2
- import { UseFormReturn, useWatch } from 'react-hook-form';
1
+ import React, { useEffect, useState } from 'react';
3
2
  import { UncontrolledFieldProps } from '@digigov/form/Field/types';
4
3
  import { Button, ButtonProps } from '@digigov/ui/form/Button';
5
4
  import {
@@ -11,7 +10,6 @@ import {
11
10
  import { useTranslation } from '@digigov/ui/i18n';
12
11
  import { Hint } from '@digigov/ui/typography/Hint';
13
12
  import { Paragraph } from '@digigov/ui/typography/Paragraph';
14
-
15
13
  export interface FileInputProps extends Omit<UncontrolledFieldProps, 'extra'> {
16
14
  extra?: {
17
15
  className?: string;
@@ -31,72 +29,32 @@ export interface FileInputProps extends Omit<UncontrolledFieldProps, 'extra'> {
31
29
  resetFile?: string;
32
30
  };
33
31
  };
34
- reset: (values?: FileList) => void;
35
- resetField: UseFormReturn['resetField'];
36
- onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
37
32
  }
38
33
 
39
- export const FileInput = React.forwardRef<
40
- ComponentRef<typeof FileUpload>,
41
- FileInputProps
42
- >(function FileInput(
43
- {
44
- name,
45
- disabled,
46
- resetField,
47
- extra,
48
- control,
49
- onChange,
50
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
51
- Field,
52
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
53
- reset,
54
- ...props
55
- },
56
- ref
34
+ export const FileInput: React.FC<any> = React.forwardRef(function FileInput(
35
+ { name, disabled, resetField, extra, onChange, value, ...props },
36
+ ref: any
57
37
  ) {
38
+ delete props.Field;
58
39
  const { t } = useTranslation();
59
- const value: FileList = useWatch({ control, name });
60
40
 
61
- const [filenames, setFilenames] = useState<string[] | undefined>(
62
- Object.values(value || {}).map(({ name }) => name) || []
41
+ const [files, setFiles] = useState<string[] | undefined>(
42
+ Object.values(value || {})?.map?.(({ name }) => name) || []
63
43
  );
64
-
65
44
  useEffect(() => {
66
- setFilenames(Object.values(value || {}).map(({ name }) => name));
45
+ setFiles(Object.values(value || {})?.map?.(({ name }) => name));
67
46
  }, [value]);
68
47
 
69
- const handleChange = useCallback(
70
- (event: React.ChangeEvent<HTMLInputElement>) => {
71
- event.preventDefault();
72
- const target = event.target;
73
- if (target.files && target.files.length > 0) {
74
- setFilenames(Object.values(target.files).map(({ name }) => name));
75
- }
76
- onChange(event);
77
- },
78
- [onChange]
79
- );
80
-
81
- const handleReset = useCallback(
82
- (event: React.MouseEvent<HTMLButtonElement>) => {
83
- event.preventDefault();
84
- resetField(name);
85
- setFilenames(undefined);
86
- },
87
- [name, resetField]
88
- );
89
-
90
48
  return (
91
49
  <>
92
50
  <FileUploadContainer
93
51
  variant={extra?.containerProps?.variant || 'default'}
94
- hasFiles={filenames && filenames.length > 0}
52
+ hasFiles={files && files.length > 0}
95
53
  >
96
- {filenames?.length ? (
54
+ {files?.length ? (
97
55
  <>
98
56
  <Paragraph>
99
- <b>{t('upload.file')}:</b> {`${filenames.join(', ')}`}
57
+ <b>{t('upload.file')}:</b> {`${files.join(', ')}`}
100
58
  </Paragraph>
101
59
  </>
102
60
  ) : (
@@ -110,31 +68,40 @@ export const FileInput = React.forwardRef<
110
68
  )}
111
69
  <FileUpload
112
70
  ref={ref}
113
- hasFiles={!!filenames?.length}
71
+ hasFiles={!!files?.length}
114
72
  name={name}
115
73
  variant={extra?.uploadButtonProps?.variant}
116
74
  disabled={disabled}
117
75
  id={name}
118
- onChange={handleChange}
119
- {...{ ...props, required: undefined }}
76
+ value={value?.filename}
77
+ onChange={(event) => {
78
+ if (event?.target?.files && event?.target?.files.length > 0) {
79
+ onChange(event.target.files);
80
+ }
81
+ }}
82
+ {...{
83
+ ...props,
84
+ required: undefined,
85
+ error: undefined,
86
+ }}
120
87
  >
121
- {filenames?.length
122
- ? t('upload.change_file')
123
- : t('upload.choose_file')}
88
+ {files?.length ? t('upload.change_file') : t('upload.choose_file')}
124
89
  </FileUpload>
125
- {filenames !== undefined &&
126
- filenames?.length > 0 &&
127
- !extra?.noResetButton && (
128
- <>
129
- <Button
130
- variant={extra?.resetButtonProps?.variant || 'link'}
131
- onClick={handleReset}
132
- color={extra?.resetButtonProps?.color || 'secondary'}
133
- >
134
- {t('upload.reset_file')}
135
- </Button>
136
- </>
137
- )}
90
+ {files !== undefined && files?.length > 0 && !extra?.noResetButton && (
91
+ <>
92
+ <Button
93
+ variant={extra?.resetButtonProps?.variant || 'link'}
94
+ onClick={(event) => {
95
+ event.preventDefault();
96
+ resetField(name);
97
+ setFiles(undefined);
98
+ }}
99
+ color={extra?.resetButtonProps?.color || 'secondary'}
100
+ >
101
+ {t('upload.reset_file')}
102
+ </Button>
103
+ </>
104
+ )}
138
105
  </FileUploadContainer>
139
106
  </>
140
107
  );
@@ -1,13 +1,9 @@
1
1
  import ImageInput from '@digigov/form/inputs/ImageInput';
2
- import doc from './doc.mdx?raw';
3
2
  export default {
4
3
  title: 'Digigov Form/inputs/ImageInput',
5
4
  component: ImageInput,
6
- tags: ['autodocs'],
7
- markdown: doc,
8
5
  displayName: 'ImageInput',
9
6
  };
10
7
  export { Default } from '@digigov/form/inputs/ImageInput/__stories__/Default';
11
- export { MaxSize } from '@digigov/form/inputs/ImageInput/__stories__/MaxSize';
12
8
  export { WithInvalidImageDimension } from '@digigov/form/inputs/ImageInput/__stories__/WithInvalidImageDimension';
13
- export { WithInitialValues } from '@digigov/form/inputs/ImageInput/__stories__/WithInitialValues';
9
+ export { MaxSize } from '@digigov/form/inputs/ImageInput/__stories__/MaxSize';
@@ -13,7 +13,7 @@ const FIELDS: FieldSpec[] = [
13
13
  },
14
14
  ];
15
15
 
16
- export const Default = (_: any) => (
16
+ export const Default = () => (
17
17
  <FormBuilder
18
18
  fields={FIELDS}
19
19
  onSubmit={(data) => {
@@ -9,18 +9,17 @@ const FIELDS: FieldSpec[] = [
9
9
  required: true,
10
10
  label: {
11
11
  primary: 'Ανέβασμα φωτογραφίας',
12
- secondary: 'Μέγιστο μέγεθος φωτογραφίας: 1KB.',
12
+ secondary: 'Μέγιστο μέγεθος φωτογραφίας: 10KB.',
13
13
  },
14
14
  extra: {
15
15
  limit: {
16
- // bytes
17
16
  maxSize: 1000,
18
17
  },
19
18
  },
20
19
  },
21
20
  ];
22
21
 
23
- export const MaxSize = (_: any) => (
22
+ export const MaxSize = () => (
24
23
  <FormBuilder
25
24
  fields={FIELDS}
26
25
  onSubmit={(data) => {
@@ -23,7 +23,7 @@ const FIELDS: FieldSpec[] = [
23
23
  },
24
24
  ];
25
25
 
26
- export const WithInvalidImageDimension = (_: any) => (
26
+ export const WithInvalidImageDimension = () => (
27
27
  <FormBuilder
28
28
  fields={FIELDS}
29
29
  onSubmit={(data) => {
@@ -3,7 +3,6 @@ import { test, expect } from '@playwright/experimental-ct-react';
3
3
  import TestVariant from '@digigov/ui/utils/TestVariant'
4
4
  import { Default } from '@digigov/form/inputs/ImageInput/__stories__/Default';
5
5
  import { MaxSize } from '@digigov/form/inputs/ImageInput/__stories__/MaxSize';
6
- import { WithInitialValues } from '@digigov/form/inputs/ImageInput/__stories__/WithInitialValues';
7
6
  import { WithInvalidImageDimension } from '@digigov/form/inputs/ImageInput/__stories__/WithInvalidImageDimension';
8
7
 
9
8
  test('renders the All ImageInput variants', async ({ mount, page }) => {
@@ -16,9 +15,6 @@ test('renders the All ImageInput variants', async ({ mount, page }) => {
16
15
  <TestVariant title="MaxSize">
17
16
  <MaxSize />
18
17
  </TestVariant>
19
- <TestVariant title="WithInitialValues">
20
- <WithInitialValues />
21
- </TestVariant>
22
18
  <TestVariant title="WithInvalidImageDimension">
23
19
  <WithInvalidImageDimension />
24
20
  </TestVariant>