@digigov/form 0.10.8 → 0.10.10

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 (138) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/Form.stories.playwright.json +0 -72
  3. package/FormBuilder/FormBuilder.mdx +1 -1
  4. package/MultiplicityField/__stories__/PreviewDisplay.js +6 -6
  5. package/Questions/__stories__/Default.js +2 -2
  6. package/Questions/index.mdx +1 -1
  7. package/es/Form.stories.playwright.json +0 -72
  8. package/es/FormBuilder/FormBuilder.mdx +1 -1
  9. package/es/MultiplicityField/__stories__/PreviewDisplay.js +6 -6
  10. package/es/Questions/__stories__/Default.js +1 -1
  11. package/es/Questions/index.mdx +1 -1
  12. package/esm/Form.stories.playwright.json +0 -72
  13. package/esm/FormBuilder/FormBuilder.mdx +1 -1
  14. package/esm/MultiplicityField/__stories__/PreviewDisplay.js +6 -6
  15. package/esm/Questions/__stories__/Default.js +1 -1
  16. package/esm/Questions/index.mdx +1 -1
  17. package/esm/index.js +1 -1
  18. package/package.json +4 -4
  19. package/src/Field/FieldBase.tsx +99 -0
  20. package/src/Field/FieldBaseContainer.tsx +57 -0
  21. package/src/Field/FieldConditional.tsx +75 -0
  22. package/src/Field/index.mdx +6 -0
  23. package/src/Field/index.tsx +92 -0
  24. package/src/Field/types.tsx +102 -0
  25. package/src/Field/utils.ts +164 -0
  26. package/src/FieldArray/FieldArray.stories.js +8 -0
  27. package/src/FieldArray/FieldArray.stories.playwright.json +353 -0
  28. package/src/FieldArray/__stories__/Default.tsx +95 -0
  29. package/src/FieldArray/__stories__/WithExactLength.tsx +95 -0
  30. package/src/FieldArray/index.tsx +83 -0
  31. package/src/FieldObject/index.tsx +92 -0
  32. package/src/Fieldset/FieldsetWithContext.tsx +41 -0
  33. package/src/Fieldset/index.tsx +40 -0
  34. package/src/Fieldset/types.tsx +6 -0
  35. package/src/Form.stories.js +5 -0
  36. package/src/Form.stories.playwright.json +71 -0
  37. package/src/FormBuilder/FormBuilder.mdx +271 -0
  38. package/src/FormBuilder/FormBuilder.stories.js +7 -0
  39. package/src/FormBuilder/FormBuilder.stories.playwright.json +52 -0
  40. package/src/FormBuilder/FormBuilder.tsx +165 -0
  41. package/src/FormBuilder/__stories__/Default.tsx +23 -0
  42. package/src/FormBuilder/index.tsx +3 -0
  43. package/src/FormContext.tsx +8 -0
  44. package/src/MultiplicityField/MultiplicityField.mdx +580 -0
  45. package/src/MultiplicityField/MultiplicityField.stories.js +12 -0
  46. package/src/MultiplicityField/MultiplicityField.stories.playwright.json +1370 -0
  47. package/src/MultiplicityField/__stories__/Default.tsx +100 -0
  48. package/src/MultiplicityField/__stories__/PreviewDisplay.tsx +160 -0
  49. package/src/MultiplicityField/__stories__/WithExactLength.tsx +99 -0
  50. package/src/MultiplicityField/__stories__/WithMaxLength.tsx +102 -0
  51. package/src/MultiplicityField/__stories__/WithMinAndMaxLength.tsx +103 -0
  52. package/src/MultiplicityField/__stories__/WithMinLength.tsx +102 -0
  53. package/src/MultiplicityField/add-objects.tsx +186 -0
  54. package/src/MultiplicityField/index.tsx +166 -0
  55. package/src/Questions/Questions.stories.js +7 -0
  56. package/src/Questions/Questions.tsx +74 -0
  57. package/src/Questions/QuestionsContext.tsx +9 -0
  58. package/src/Questions/Step/ReviewStep.tsx +63 -0
  59. package/src/Questions/Step/Step.tsx +67 -0
  60. package/src/Questions/Step/StepArrayReview.tsx +68 -0
  61. package/src/Questions/Step/StepContext.tsx +21 -0
  62. package/src/Questions/Step/StepDescription.tsx +33 -0
  63. package/src/Questions/Step/StepForm.tsx +60 -0
  64. package/src/Questions/Step/StepQuote.tsx +8 -0
  65. package/src/Questions/Step/StepTitle.tsx +60 -0
  66. package/src/Questions/Step/getAddMoreFields.tsx +28 -0
  67. package/src/Questions/Step/index.ts +13 -0
  68. package/src/Questions/Step/types.tsx +32 -0
  69. package/src/Questions/__snapshots__/index.spec.tsx.snap +887 -0
  70. package/src/Questions/__stories__/Default.tsx +130 -0
  71. package/src/Questions/getNextStep.tsx +24 -0
  72. package/src/Questions/index.mdx +418 -0
  73. package/src/Questions/index.spec.tsx +72 -0
  74. package/src/Questions/index.tsx +5 -0
  75. package/src/Questions/types.tsx +25 -0
  76. package/src/__stories__/AutoCompleteField.tsx +45 -0
  77. package/src/__stories__/IntField.tsx +38 -0
  78. package/src/create-simple-form.mdx +518 -0
  79. package/src/index.mdx +44 -0
  80. package/src/index.ts +3 -0
  81. package/src/inputs/AutoComplete/index.tsx +85 -0
  82. package/src/inputs/Checkboxes/Checkboxes.stories.js +7 -0
  83. package/src/inputs/Checkboxes/Checkboxes.stories.playwright.json +69 -0
  84. package/src/inputs/Checkboxes/__stories__/Default.tsx +39 -0
  85. package/src/inputs/Checkboxes/index.mdx +0 -0
  86. package/src/inputs/Checkboxes/index.tsx +77 -0
  87. package/src/inputs/DateInput/DateInput.stories.js +7 -0
  88. package/src/inputs/DateInput/DateInput.stories.playwright.json +72 -0
  89. package/src/inputs/DateInput/__stories__/Default.tsx +41 -0
  90. package/src/inputs/DateInput/index.tsx +130 -0
  91. package/src/inputs/FileInput/FileInput.stories.js +7 -0
  92. package/src/inputs/FileInput/FileInput.stories.playwright.json +75 -0
  93. package/src/inputs/FileInput/__stories__/Default.tsx +23 -0
  94. package/src/inputs/FileInput/index.tsx +76 -0
  95. package/src/inputs/Input/Input.stories.js +14 -0
  96. package/src/inputs/Input/Input.stories.playwright.json +376 -0
  97. package/src/inputs/Input/__stories__/AFM.tsx +24 -0
  98. package/src/inputs/Input/__stories__/Boolean.tsx +26 -0
  99. package/src/inputs/Input/__stories__/Default.tsx +25 -0
  100. package/src/inputs/Input/__stories__/IBAN.tsx +26 -0
  101. package/src/inputs/Input/__stories__/Integer.tsx +25 -0
  102. package/src/inputs/Input/__stories__/MobilePhone.tsx +24 -0
  103. package/src/inputs/Input/__stories__/PhoneNumber.tsx +24 -0
  104. package/src/inputs/Input/__stories__/PostalCode.tsx +25 -0
  105. package/src/inputs/Input/index.mdx +8 -0
  106. package/src/inputs/Input/index.tsx +62 -0
  107. package/src/inputs/Label/Label.stories.js +7 -0
  108. package/src/inputs/Label/Label.stories.playwright.json +40 -0
  109. package/src/inputs/Label/__stories__/Default.tsx +28 -0
  110. package/src/inputs/Label/index.mdx +0 -0
  111. package/src/inputs/Label/index.tsx +44 -0
  112. package/src/inputs/Radio/Radio.stories.js +7 -0
  113. package/src/inputs/Radio/Radio.stories.playwright.json +57 -0
  114. package/src/inputs/Radio/__stories__/Default.tsx +42 -0
  115. package/src/inputs/Radio/index.mdx +0 -0
  116. package/src/inputs/Radio/index.tsx +57 -0
  117. package/src/inputs/Select/Select.stories.js +7 -0
  118. package/src/inputs/Select/Select.stories.playwright.json +22 -0
  119. package/src/inputs/Select/__stories__/Default.tsx +47 -0
  120. package/src/inputs/Select/index.tsx +37 -0
  121. package/src/inputs/index.ts +7 -0
  122. package/src/installation.mdx +72 -0
  123. package/src/internal.ts +34 -0
  124. package/src/registry.js +134 -0
  125. package/src/types.tsx +110 -0
  126. package/src/utils.ts +78 -0
  127. package/src/validators/index.ts +203 -0
  128. package/src/validators/types.ts +2 -0
  129. package/src/validators/utils/afm.ts +37 -0
  130. package/src/validators/utils/file.ts +25 -0
  131. package/src/validators/utils/iban.ts +119 -0
  132. package/src/validators/utils/index.ts +94 -0
  133. package/src/validators/utils/int.ts +22 -0
  134. package/src/validators/utils/number.ts +18 -0
  135. package/src/validators/utils/phone.ts +120 -0
  136. package/src/validators/utils/postal_code.ts +33 -0
  137. package/src/validators/utils/uuid4.ts +21 -0
  138. package/src/validators/validators.spec.ts +122 -0
@@ -0,0 +1,165 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import React, { useCallback, useRef } from 'react';
3
+ import { useForm } from 'react-hook-form';
4
+ import { yupResolver } from '@digigov/form/utils';
5
+ import { useValidationSchema } from '@digigov/form/validators';
6
+ import Fieldset from '@digigov/form/Fieldset';
7
+ import Field from '@digigov/form/Field';
8
+ import { FormBaseProps, FormData, FormBuilderProps } from '@digigov/form/types';
9
+ import { FormContext } from '@digigov/form/FormContext';
10
+ import { Form } from '@digigov/react-core/Form';
11
+
12
+ export const FormBase = React.forwardRef(function FormBase(
13
+ {
14
+ onSubmit,
15
+ children,
16
+ registerField,
17
+ fieldsMap,
18
+ fieldsetsMap,
19
+ resolver,
20
+ mode,
21
+ initial,
22
+ reValidateMode,
23
+ shouldFocusError,
24
+ criteriaMode,
25
+ componentRegistry,
26
+ grid,
27
+ ...props
28
+ }: FormBaseProps,
29
+ ref: React.Ref<HTMLFormElement>
30
+ ) {
31
+ const form = useForm({
32
+ resolver,
33
+ mode,
34
+ defaultValues: initial,
35
+ reValidateMode,
36
+ shouldFocusError,
37
+ criteriaMode,
38
+ });
39
+
40
+ const handleSubmit = useCallback(
41
+ (data: FormData): void => {
42
+ onSubmit && onSubmit(data);
43
+ },
44
+ [onSubmit]
45
+ );
46
+
47
+ const ctx = {
48
+ fieldsMap,
49
+ fieldsetsMap,
50
+ control: form.control,
51
+ register: form.register,
52
+ watch: form.watch,
53
+ registerField: registerField,
54
+ errors: form.formState.errors,
55
+ formState: form.formState,
56
+ reset: form.reset,
57
+ trigger: form.trigger,
58
+ getFieldState: form.getFieldState,
59
+ setValue: form.setValue,
60
+ clearErrors: form.clearErrors,
61
+ getValues: form.getValues,
62
+ unregister: form.unregister,
63
+ componentRegistry,
64
+ };
65
+ return (
66
+ <FormContext.Provider value={ctx}>
67
+ <Form
68
+ grid={grid}
69
+ onSubmit={form.handleSubmit(handleSubmit)}
70
+ ref={ref}
71
+ {...props}
72
+ >
73
+ {children}
74
+ </Form>
75
+ </FormContext.Provider>
76
+ );
77
+ });
78
+
79
+ export const FormBuilder = React.forwardRef(function FormBuilder(
80
+ {
81
+ fields = [],
82
+ fieldsets,
83
+ initial = {},
84
+ onSubmit,
85
+ children,
86
+ reValidateMode = 'onSubmit',
87
+ mode = 'onSubmit',
88
+ shouldFocusError = true,
89
+ criteriaMode = 'all',
90
+ auto = false,
91
+ validatorRegistry,
92
+ componentRegistry,
93
+ grid = false,
94
+ ...props
95
+ }: FormBuilderProps,
96
+ ref: React.Ref<HTMLFormElement>
97
+ ): React.ReactElement {
98
+ const fieldsState = useRef(fields);
99
+ const setFieldsState = useCallback((newFields) => {
100
+ fieldsState.current = newFields;
101
+ }, []);
102
+ const schema = useValidationSchema(fieldsState, validatorRegistry);
103
+ const registerField = useCallback((field) => {
104
+ const fieldIndex = fieldsState.current.findIndex(
105
+ (f) => f.key === field.key
106
+ );
107
+ if (fieldIndex > -1) {
108
+ fieldsState.current[fieldIndex] = field;
109
+ } else {
110
+ fieldsState.current.push(field);
111
+ }
112
+ setFieldsState(fieldsState.current);
113
+ }, []);
114
+ let resolver;
115
+ let fieldsMap;
116
+ let fieldsetsMap;
117
+ let fieldChildren;
118
+ if (schema) {
119
+ resolver = yupResolver(schema);
120
+ fieldsMap = fields
121
+ ? fields.reduce((map, field) => ({ ...map, [field.key]: field }), {})
122
+ : {};
123
+ fieldsetsMap =
124
+ fieldsets &&
125
+ fieldsets.reduce(
126
+ (map, fieldset) => ({ ...map, [fieldset.key]: fieldset }),
127
+ {}
128
+ );
129
+
130
+ if (auto) {
131
+ if (fieldsets) {
132
+ fieldChildren = fieldsets.map((fieldset) => (
133
+ <Fieldset key={fieldset.key} />
134
+ ));
135
+ } else if (fields) {
136
+ fieldChildren = fields.map((field) => (
137
+ <Field key={field.key} name={field.key} />
138
+ ));
139
+ }
140
+ }
141
+ }
142
+ return (
143
+ <FormBase
144
+ resolver={resolver}
145
+ fieldsetsMap={fieldsetsMap}
146
+ fieldsMap={fieldsMap}
147
+ registerField={registerField}
148
+ initial={initial}
149
+ reValidateMode={reValidateMode}
150
+ mode={mode}
151
+ shouldFocusError={shouldFocusError}
152
+ criteriaMode={criteriaMode}
153
+ onSubmit={onSubmit}
154
+ componentRegistry={componentRegistry}
155
+ ref={ref}
156
+ grid={grid}
157
+ {...props}
158
+ >
159
+ {fieldChildren}
160
+ {children}
161
+ </FormBase>
162
+ );
163
+ });
164
+
165
+ export default FormBuilder;
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import FormBuilder, { Field } from '@digigov/form';
3
+ import { Button } from '@digigov/ui/core';
4
+
5
+ export const Default = () => (
6
+ <FormBuilder
7
+ onSubmit={(data) => {
8
+ debugger;
9
+ console.log(data);
10
+ }}
11
+ >
12
+ <Field
13
+ key="business-title"
14
+ name="business-title"
15
+ type="string"
16
+ label={{ primary: 'Όνομα επιχείρησης' }}
17
+ required
18
+ />
19
+ <Button type="submit">Συνέχεια</Button>
20
+ </FormBuilder>
21
+ );
22
+
23
+ export default Default;
@@ -0,0 +1,3 @@
1
+ import { FormBuilder } from '@digigov/form/FormBuilder/FormBuilder';
2
+
3
+ export default FormBuilder;
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { createContext } from 'react';
3
+ import { FormContextProps } from '@digigov/form/types';
4
+
5
+ export const FormContext: React.Context<FormContextProps> = createContext({
6
+ fieldsMap: {},
7
+ fieldsetsMap: {},
8
+ } as FormContextProps);