@digigov/form 2.0.0-555d1027 → 2.0.0-5e7a6790
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/Field/ErrorGroup.d.ts +3 -3
- package/Field/ErrorGroup.js.map +1 -1
- package/Field/FieldBase/index.js +0 -1
- package/Field/FieldBase.d.ts +1 -1
- package/Field/FieldBase.js.map +2 -2
- package/Field/FieldBaseContainer/index.js +36 -34
- package/Field/FieldBaseContainer.d.ts +2 -2
- package/Field/FieldBaseContainer.js.map +2 -2
- package/Field/FieldConditional.d.ts +1 -1
- package/Field/FieldConditional.js.map +1 -1
- package/Field/index.d.ts +1 -1
- package/Field/index.js +15 -25
- package/Field/index.js.map +2 -2
- package/Field/types.d.ts +11 -10
- package/Field/utils/evaluateFieldWithConditions.d.ts +2 -2
- package/Field/utils/evaluateFieldWithConditions.js.map +2 -2
- package/Field/utils/resolveField/index.js +35 -0
- package/Field/utils/{calculateField → resolveField}/package.json +1 -1
- package/Field/utils/resolveField.d.ts +3 -0
- package/Field/utils/resolveField.js.map +7 -0
- package/Field/utils/useField/index.js +4 -2
- package/Field/utils/useField.d.ts +1 -1
- package/Field/utils/useField.js.map +2 -2
- package/FieldArray/BaseFieldArray/index.js +76 -0
- package/{inputs/inputsScenarios → FieldArray/BaseFieldArray}/package.json +1 -1
- package/FieldArray/BaseFieldArray.d.ts +5 -0
- package/FieldArray/BaseFieldArray.js.map +7 -0
- package/FieldArray/FormDialog/ArrayDisplay/ArrayDisplay.stories.d.ts +10 -0
- package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay/index.js +97 -0
- package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay/package.json +6 -0
- package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.d.ts +22 -0
- package/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.js.map +7 -0
- package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader/index.js +11 -0
- package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader/package.json +6 -0
- package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.d.ts +5 -0
- package/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.js.map +7 -0
- package/FieldArray/FormDialog/ArrayDisplay/__stories__/Default.d.ts +2 -0
- package/FieldArray/FormDialog/ArrayDisplay/__stories__/ReadOnly.d.ts +2 -0
- package/FieldArray/FormDialog/ArrayDisplay/__stories__/Sortable.d.ts +2 -0
- package/FieldArray/FormDialog/ArrayDisplay/index.d.ts +14 -0
- package/FieldArray/FormDialog/ArrayDisplay/index.js +51 -0
- package/FieldArray/FormDialog/ArrayDisplay/index.js.map +7 -0
- package/FieldArray/FormDialog/ArrayDisplay/package.json +6 -0
- package/FieldArray/FormDialog/ArrayEditModal/index.js +149 -0
- package/FieldArray/FormDialog/ArrayEditModal/package.json +6 -0
- package/FieldArray/FormDialog/ArrayEditModal.d.ts +26 -0
- package/FieldArray/FormDialog/ArrayEditModal.js.map +7 -0
- package/FieldArray/FormDialog/index.d.ts +19 -0
- package/FieldArray/FormDialog/index.js +139 -348
- package/FieldArray/FormDialog/index.js.map +7 -0
- package/FieldArray/index.d.ts +4 -2
- package/FieldArray/index.js +28 -54
- package/FieldArray/index.js.map +2 -2
- package/FieldObject/index.d.ts +4 -4
- package/FieldObject/index.js +5 -12
- package/FieldObject/index.js.map +2 -2
- package/Fieldset/FieldsetWithContext.js.map +1 -1
- package/Fieldset/index.d.ts +1 -1
- package/Fieldset/index.js.map +1 -1
- package/Fieldset/types.d.ts +2 -2
- package/FormBuilder/index.d.ts +1 -1
- package/FormBuilder/index.js +155 -130
- package/FormBuilder/index.js.map +2 -2
- package/FormContext.d.ts +2 -2
- package/FormContext.js.map +2 -2
- package/MultiplicityField/add-objects/index.js +10 -19
- package/MultiplicityField/add-objects.d.ts +1 -1
- package/MultiplicityField/add-objects.js.map +2 -2
- package/MultiplicityField/index.d.ts +2 -2
- package/MultiplicityField/index.js.map +2 -2
- package/MultiplicityField/types.d.ts +2 -2
- package/Questions/Questions.d.ts +1 -1
- package/Questions/Questions.js.map +1 -1
- package/Questions/QuestionsContext.d.ts +1 -1
- package/Questions/QuestionsContext.js.map +1 -1
- package/Questions/Step/Step.d.ts +1 -1
- package/Questions/Step/Step.js.map +1 -1
- package/Questions/Step/StepArrayReview.d.ts +1 -1
- package/Questions/Step/StepArrayReview.js.map +1 -1
- package/Questions/Step/StepContext.d.ts +1 -1
- package/Questions/Step/StepContext.js.map +1 -1
- package/Questions/Step/StepDescription.d.ts +1 -1
- package/Questions/Step/StepDescription.js.map +2 -2
- package/Questions/Step/StepForm.d.ts +2 -2
- package/Questions/Step/StepForm.js.map +1 -1
- package/Questions/Step/StepQuote.d.ts +1 -1
- package/Questions/Step/StepQuote.js.map +2 -2
- package/Questions/Step/StepTitle.d.ts +1 -1
- package/Questions/Step/StepTitle.js.map +2 -2
- package/Questions/Step/getAddMoreFields.d.ts +2 -2
- package/Questions/Step/getAddMoreFields.js.map +1 -1
- package/Questions/Step/types.d.ts +1 -1
- package/Questions/getNextStep.d.ts +1 -1
- package/Questions/getNextStep.js.map +1 -1
- package/Questions/types.d.ts +1 -1
- package/cjs/Field/ErrorGroup.js.map +1 -1
- package/cjs/Field/FieldBase/index.js +0 -1
- package/cjs/Field/FieldBase.js.map +2 -2
- package/cjs/Field/FieldBaseContainer/index.js +36 -34
- package/cjs/Field/FieldBaseContainer.js.map +2 -2
- package/cjs/Field/FieldConditional.js.map +1 -1
- package/cjs/Field/index.js +15 -22
- package/cjs/Field/index.js.map +2 -2
- package/cjs/Field/types.js.map +1 -1
- package/cjs/Field/utils/evaluateFieldWithConditions.js.map +2 -2
- package/cjs/Field/utils/resolveField/index.js +55 -0
- package/cjs/Field/utils/resolveField.js.map +7 -0
- package/cjs/Field/utils/useField/index.js +4 -2
- package/cjs/Field/utils/useField.js.map +2 -2
- package/cjs/FieldArray/BaseFieldArray/index.js +109 -0
- package/cjs/FieldArray/BaseFieldArray.js.map +7 -0
- package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay/index.js +130 -0
- package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.js.map +7 -0
- package/cjs/{locales/el → FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader}/index.js +16 -7
- package/cjs/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.js.map +7 -0
- package/cjs/FieldArray/FormDialog/ArrayDisplay/index.js +84 -0
- package/cjs/FieldArray/FormDialog/ArrayDisplay/index.js.map +7 -0
- package/cjs/FieldArray/FormDialog/ArrayEditModal/index.js +177 -0
- package/cjs/FieldArray/FormDialog/ArrayEditModal.js.map +7 -0
- package/cjs/FieldArray/FormDialog/index.js +130 -331
- package/cjs/FieldArray/FormDialog/index.js.map +7 -0
- package/cjs/FieldArray/index.js +27 -53
- package/cjs/FieldArray/index.js.map +3 -3
- package/cjs/FieldObject/index.js +5 -9
- package/cjs/FieldObject/index.js.map +2 -2
- package/cjs/Fieldset/FieldsetWithContext.js.map +1 -1
- package/cjs/Fieldset/index.js.map +1 -1
- package/cjs/Fieldset/types.js.map +1 -1
- package/cjs/FormBuilder/index.js +156 -131
- package/cjs/FormBuilder/index.js.map +3 -3
- package/cjs/FormContext.js.map +2 -2
- package/cjs/MultiplicityField/add-objects/index.js +9 -13
- package/cjs/MultiplicityField/add-objects.js.map +2 -2
- package/cjs/MultiplicityField/index.js.map +2 -2
- package/cjs/MultiplicityField/types.js.map +1 -1
- package/cjs/Questions/Questions.js.map +1 -1
- package/cjs/Questions/QuestionsContext.js.map +1 -1
- package/cjs/Questions/Step/Step.js.map +1 -1
- package/cjs/Questions/Step/StepArrayReview.js.map +1 -1
- package/cjs/Questions/Step/StepContext.js.map +1 -1
- package/cjs/Questions/Step/StepDescription.js.map +2 -2
- package/cjs/Questions/Step/StepForm.js.map +1 -1
- package/cjs/Questions/Step/StepQuote.js.map +2 -2
- package/cjs/Questions/Step/StepTitle.js.map +2 -2
- package/cjs/Questions/Step/getAddMoreFields.js.map +1 -1
- package/cjs/Questions/Step/types.js.map +1 -1
- package/cjs/Questions/getNextStep.js.map +1 -1
- package/cjs/Questions/types.js.map +1 -1
- package/cjs/hooks/useFieldFocusManager/index.js +135 -0
- package/cjs/hooks/useFieldFocusManager.js.map +7 -0
- package/cjs/hooks/utils/index.js +98 -0
- package/cjs/hooks/utils.js.map +7 -0
- package/cjs/inputs/AutoCompleteInput/index.js.map +2 -2
- package/cjs/inputs/Checkboxes/index.js +67 -63
- package/cjs/inputs/Checkboxes/index.js.map +2 -2
- package/cjs/inputs/DateInput/index.js +10 -5
- package/cjs/inputs/DateInput/index.js.map +2 -2
- package/cjs/inputs/DateTimeInput/index.js +10 -5
- package/cjs/inputs/DateTimeInput/index.js.map +2 -2
- package/cjs/inputs/FileInput/index.js.map +2 -2
- package/cjs/inputs/ImageInput/index.js.map +1 -1
- package/cjs/inputs/Input/index.js +54 -56
- package/cjs/inputs/Input/index.js.map +2 -2
- package/cjs/inputs/Label/index.js.map +1 -1
- package/cjs/inputs/OtpInput/index.js +36 -31
- package/cjs/inputs/OtpInput/index.js.map +2 -2
- package/cjs/inputs/Radio/index.js +5 -4
- package/cjs/inputs/Radio/index.js.map +3 -3
- package/cjs/inputs/Select/index.js.map +1 -1
- package/cjs/{Field/utils → inputs/registry}/index.js +4 -4
- package/cjs/inputs/registry.js.map +7 -0
- package/cjs/{lazy/index.js → lazy.js} +10 -9
- package/cjs/lazy.js.map +2 -2
- package/cjs/{registry/index.js → registry.js} +23 -13
- package/cjs/registry.js.map +2 -2
- package/cjs/types.js.map +1 -1
- package/cjs/utils.js.map +2 -2
- package/cjs/validators/index.js.map +2 -2
- package/cjs/validators/types.js.map +1 -1
- package/cjs/validators/utils/date/index.js +6 -1
- package/cjs/validators/utils/date.js.map +2 -2
- package/cjs/validators/utils/datetime/index.js +6 -1
- package/cjs/validators/utils/datetime.js.map +2 -2
- package/cjs/validators/utils/file.js.map +1 -1
- package/cjs/validators/utils/iban.js.map +1 -1
- package/cjs/validators/utils/image.js.map +1 -1
- package/cjs/validators/utils/index.js.map +1 -1
- package/cjs/validators/utils/int.js.map +1 -1
- package/cjs/validators/utils/number.js.map +1 -1
- package/cjs/validators/utils/otp.js.map +1 -1
- package/cjs/validators/utils/phone.js.map +1 -1
- package/cjs/validators/utils/postal_code.js.map +1 -1
- package/cjs/validators/utils/text_limit.js.map +1 -1
- package/hooks/useFieldFocusManager/index.js +116 -0
- package/hooks/useFieldFocusManager/package.json +6 -0
- package/hooks/useFieldFocusManager.d.ts +25 -0
- package/hooks/useFieldFocusManager.js.map +7 -0
- package/hooks/utils/index.js +73 -0
- package/{Field → hooks}/utils/package.json +1 -1
- package/hooks/utils.d.ts +18 -0
- package/hooks/utils.js.map +7 -0
- package/index.js +1 -1
- package/inputs/AutoCompleteInput/index.d.ts +3 -3
- package/inputs/AutoCompleteInput/index.js +1 -3
- package/inputs/AutoCompleteInput/index.js.map +2 -2
- package/inputs/Checkboxes/index.d.ts +3 -3
- package/inputs/Checkboxes/index.js +67 -63
- package/inputs/Checkboxes/index.js.map +2 -2
- package/inputs/DateInput/index.d.ts +2 -5
- package/inputs/DateInput/index.js +10 -5
- package/inputs/DateInput/index.js.map +2 -2
- package/inputs/DateTimeInput/index.d.ts +2 -5
- package/inputs/DateTimeInput/index.js +10 -5
- package/inputs/DateTimeInput/index.js.map +2 -2
- package/inputs/FileInput/index.d.ts +4 -4
- package/inputs/FileInput/index.js +1 -4
- package/inputs/FileInput/index.js.map +2 -2
- package/inputs/ImageInput/index.d.ts +2 -2
- package/inputs/ImageInput/index.js.map +1 -1
- package/inputs/Input/index.d.ts +2 -2
- package/inputs/Input/index.js +54 -56
- package/inputs/Input/index.js.map +2 -2
- package/inputs/Label/index.d.ts +1 -1
- package/inputs/Label/index.js.map +1 -1
- package/inputs/OtpInput/index.d.ts +1 -5
- package/inputs/OtpInput/index.js +36 -31
- package/inputs/OtpInput/index.js.map +2 -2
- package/inputs/Radio/index.d.ts +4 -4
- package/inputs/Radio/index.js +5 -4
- package/inputs/Radio/index.js.map +3 -3
- package/inputs/Select/index.d.ts +2 -2
- package/inputs/Select/index.js.map +1 -1
- package/{Field/utils → inputs/registry}/index.js +1 -1
- package/{locales/el → inputs/registry}/package.json +1 -1
- package/{Field/utils/index.d.ts → inputs/registry.d.ts} +2 -1
- package/inputs/registry.js.map +7 -0
- package/lazy/index.js +10 -9
- package/package.json +4 -4
- package/registry/index.js +23 -13
- package/src/Field/ErrorGroup.tsx +3 -3
- package/src/Field/FieldBase.tsx +1 -2
- package/src/Field/FieldBaseContainer.tsx +68 -58
- package/src/Field/FieldConditional.tsx +1 -1
- package/src/Field/index.tsx +15 -33
- package/src/Field/types.tsx +11 -12
- package/src/Field/utils/evaluateFieldWithConditions.ts +5 -2
- package/src/Field/utils/resolveField.ts +58 -0
- package/src/Field/utils/useField.ts +3 -1
- package/src/FieldArray/BaseFieldArray.tsx +97 -0
- package/src/FieldArray/FormDialog/ArrayDisplay/ArrayDisplay.stories.js +11 -0
- package/src/FieldArray/FormDialog/ArrayDisplay/ArrayItemDisplay.tsx +165 -0
- package/src/FieldArray/FormDialog/ArrayDisplay/ArrayItemHeader.tsx +15 -0
- package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/Default.tsx +93 -0
- package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/ReadOnly.tsx +79 -0
- package/src/FieldArray/FormDialog/ArrayDisplay/__stories__/Sortable.tsx +93 -0
- package/src/FieldArray/FormDialog/ArrayDisplay/index.tsx +75 -0
- package/src/FieldArray/FormDialog/ArrayEditModal.tsx +233 -0
- package/src/FieldArray/FormDialog/index.tsx +247 -0
- package/src/FieldArray/__tests__/fieldset-multiplicity.spec.tsx +271 -0
- package/src/FieldArray/__tests__/multiplicity-attachment.spec.tsx +280 -0
- package/src/FieldArray/__tests__/multiplicity-required.spec.tsx +131 -0
- package/src/FieldArray/__tests__/nested-fieldset-multiplicity.spec.tsx +627 -0
- package/src/FieldArray/__tests__/preference-multiple-choice.spec.tsx +222 -0
- package/src/FieldArray/index.spec.tsx +355 -0
- package/src/FieldArray/index.tsx +34 -61
- package/src/FieldObject/index.tsx +9 -17
- package/src/Fieldset/FieldsetWithContext.tsx +1 -1
- package/src/Fieldset/index.tsx +1 -1
- package/src/Fieldset/types.tsx +2 -2
- package/src/FormBuilder/index.tsx +188 -142
- package/src/FormBuilder/scenarios.test.tsx +759 -1
- package/src/FormContext.tsx +3 -2
- package/src/MultiplicityField/add-objects.tsx +12 -21
- package/src/MultiplicityField/index.tsx +3 -2
- package/src/MultiplicityField/types.ts +5 -2
- package/src/Questions/Questions.tsx +2 -2
- package/src/Questions/QuestionsContext.tsx +1 -1
- package/src/Questions/Step/Step.tsx +1 -1
- package/src/Questions/Step/StepArrayReview.tsx +2 -2
- package/src/Questions/Step/StepContext.tsx +1 -1
- package/src/Questions/Step/StepDescription.tsx +2 -1
- package/src/Questions/Step/StepForm.tsx +2 -2
- package/src/Questions/Step/StepQuote.tsx +2 -1
- package/src/Questions/Step/StepTitle.tsx +2 -1
- package/src/Questions/Step/getAddMoreFields.tsx +2 -2
- package/src/Questions/Step/types.tsx +1 -1
- package/src/Questions/getNextStep.tsx +1 -1
- package/src/Questions/types.tsx +1 -1
- package/src/hooks/__tests__/useFieldFocusManager.spec.tsx +1079 -0
- package/src/hooks/__tests__/utils.spec.ts +568 -0
- package/src/hooks/useFieldFocusManager.ts +162 -0
- package/src/hooks/utils.ts +122 -0
- package/src/inputs/AutoCompleteInput/index.tsx +4 -6
- package/src/inputs/Checkboxes/index.tsx +95 -87
- package/src/inputs/DateInput/index.tsx +19 -6
- package/src/inputs/DateTimeInput/index.tsx +19 -6
- package/src/inputs/FileInput/index.tsx +9 -7
- package/src/inputs/ImageInput/index.tsx +2 -2
- package/src/inputs/Input/index.tsx +72 -71
- package/src/inputs/Label/index.tsx +1 -1
- package/src/inputs/OtpInput/index.tsx +43 -34
- package/src/inputs/Radio/index.tsx +29 -21
- package/src/inputs/Select/index.tsx +2 -2
- package/src/{Field/utils/index.ts → inputs/registry.ts} +3 -1
- package/src/lazy.js +10 -9
- package/src/registry.js +23 -13
- package/src/types.tsx +12 -5
- package/src/utils.ts +3 -2
- package/src/validators/index.ts +10 -9
- package/src/validators/types.ts +1 -1
- package/src/validators/utils/date.ts +8 -3
- package/src/validators/utils/datetime.ts +8 -3
- package/src/validators/utils/file.ts +2 -2
- package/src/validators/utils/iban.ts +2 -2
- package/src/validators/utils/image.ts +2 -2
- package/src/validators/utils/index.ts +2 -2
- package/src/validators/utils/int.ts +1 -1
- package/src/validators/utils/number.ts +1 -1
- package/src/validators/utils/otp.ts +2 -2
- package/src/validators/utils/phone.ts +2 -2
- package/src/validators/utils/postal_code.ts +2 -2
- package/src/validators/utils/text_limit.ts +2 -2
- package/types.d.ts +8 -4
- package/types.js.map +1 -1
- package/utils.d.ts +1 -1
- package/utils.js.map +2 -2
- package/validators/index.d.ts +5 -5
- package/validators/index.js.map +2 -2
- package/validators/types.d.ts +1 -1
- package/validators/utils/date/index.js +6 -1
- package/validators/utils/date.d.ts +2 -2
- package/validators/utils/date.js.map +2 -2
- package/validators/utils/datetime/index.js +6 -1
- package/validators/utils/datetime.d.ts +2 -2
- package/validators/utils/datetime.js.map +2 -2
- package/validators/utils/file.d.ts +2 -2
- package/validators/utils/file.js.map +1 -1
- package/validators/utils/iban.d.ts +2 -2
- package/validators/utils/iban.js.map +1 -1
- package/validators/utils/image.d.ts +2 -2
- package/validators/utils/image.js.map +1 -1
- package/validators/utils/index.d.ts +2 -2
- package/validators/utils/index.js.map +1 -1
- package/validators/utils/int.d.ts +1 -1
- package/validators/utils/int.js.map +1 -1
- package/validators/utils/number.d.ts +1 -1
- package/validators/utils/number.js.map +1 -1
- package/validators/utils/otp.d.ts +2 -2
- package/validators/utils/otp.js.map +1 -1
- package/validators/utils/phone.d.ts +2 -2
- package/validators/utils/phone.js.map +1 -1
- package/validators/utils/postal_code.d.ts +2 -2
- package/validators/utils/postal_code.js.map +1 -1
- package/validators/utils/text_limit.d.ts +2 -2
- package/validators/utils/text_limit.js.map +1 -1
- package/Field/utils/calculateField/index.js +0 -27
- package/Field/utils/calculateField.d.ts +0 -2
- package/Field/utils/calculateField.js.map +0 -7
- package/Field/utils/index.js.map +0 -7
- package/FieldArray/FormDialog.d.ts +0 -67
- package/FieldArray/FormDialog.js.map +0 -7
- package/FormBuilder/index.test.d.ts +0 -1
- package/FormBuilder/interaction.test.d.ts +0 -1
- package/FormBuilder/scenarios.test.d.ts +0 -88
- package/MultiplicityField/index.test.d.ts +0 -1
- package/Questions/index.spec.d.ts +0 -1
- package/Questions/index.test.d.ts +0 -1
- package/cjs/Field/utils/calculateField/index.js +0 -50
- package/cjs/Field/utils/calculateField.js.map +0 -7
- package/cjs/Field/utils/index.js.map +0 -7
- package/cjs/FieldArray/FormDialog.js.map +0 -7
- package/cjs/inputs/inputsScenarios/index.js +0 -533
- package/cjs/inputs/inputsScenarios.js.map +0 -7
- package/cjs/locales/el.js.map +0 -7
- package/inputs/AutoCompleteInput/index.test.d.ts +0 -1
- package/inputs/Checkboxes/index.test.d.ts +0 -1
- package/inputs/DateInput/index.test.d.ts +0 -1
- package/inputs/DateTimeInput/index.test.d.ts +0 -1
- package/inputs/FileInput/index.test.d.ts +0 -1
- package/inputs/ImageInput/index.test.d.ts +0 -1
- package/inputs/Input/index.test.d.ts +0 -1
- package/inputs/Label/index.test.d.ts +0 -1
- package/inputs/OtpInput/index.test.d.ts +0 -1
- package/inputs/Radio/index.test.d.ts +0 -1
- package/inputs/Select/index.test.d.ts +0 -1
- package/inputs/inputsScenarios/index.js +0 -499
- package/inputs/inputsScenarios.d.ts +0 -296
- package/inputs/inputsScenarios.js.map +0 -7
- package/locales/el/index.js +0 -6
- package/locales/el.d.ts +0 -2
- package/locales/el.js.map +0 -7
- package/src/Field/utils/calculateField.ts +0 -49
- package/src/FieldArray/FormDialog.tsx +0 -568
- package/src/inputs/inputsScenarios.ts +0 -496
- package/src/locales/el.ts +0 -3
- /package/{FieldArray/index.test.d.ts → hooks/__tests__/utils.spec.d.ts} +0 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
2
|
+
import type { Control, FieldValues, Ref, UseFormReturn } from 'react-hook-form';
|
|
3
|
+
import {
|
|
4
|
+
extractFieldEntries,
|
|
5
|
+
mapElementsToFields,
|
|
6
|
+
sortElementsByPosition,
|
|
7
|
+
} from '@digigov/form/hooks/utils';
|
|
8
|
+
|
|
9
|
+
export interface UseFieldFocusManagerProps<T extends FieldValues> {
|
|
10
|
+
enabled?: boolean;
|
|
11
|
+
control: Control<T>;
|
|
12
|
+
subscribe: UseFormReturn['subscribe'];
|
|
13
|
+
setFocus: UseFormReturn['setFocus'];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Custom hook to manage focus on form fields.
|
|
18
|
+
*
|
|
19
|
+
* It collects all focusable elements from the form fields and sorts them according to their position in the DOM.
|
|
20
|
+
*/
|
|
21
|
+
export function useFieldFocusManager<T extends FieldValues>({
|
|
22
|
+
enabled = true,
|
|
23
|
+
control,
|
|
24
|
+
subscribe,
|
|
25
|
+
setFocus,
|
|
26
|
+
}: UseFieldFocusManagerProps<T>) {
|
|
27
|
+
/** Array to hold any external focusable elements registered by the user */
|
|
28
|
+
const customFocusableElements = useRef(new Map<string, HTMLElement>());
|
|
29
|
+
/** Map to hold focusable elements by field name */
|
|
30
|
+
const focusableElements = useRef(new Map<string, Ref>());
|
|
31
|
+
|
|
32
|
+
// When disabled, clear custom focusable elements and focusable elements map
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
if (!enabled) {
|
|
35
|
+
customFocusableElements.current.clear();
|
|
36
|
+
focusableElements.current.clear();
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
}, [enabled]);
|
|
40
|
+
|
|
41
|
+
const updateFocusableElements = useCallback(() => {
|
|
42
|
+
// Clear existing focusable elements
|
|
43
|
+
focusableElements.current.clear();
|
|
44
|
+
// Extract from form fields
|
|
45
|
+
const formElements = extractFieldEntries(control._fields);
|
|
46
|
+
// Extract from custom elements (convert to FieldRefs format first)
|
|
47
|
+
const customFieldRefs = mapElementsToFields(
|
|
48
|
+
customFocusableElements.current
|
|
49
|
+
);
|
|
50
|
+
const customElements = extractFieldEntries(customFieldRefs);
|
|
51
|
+
|
|
52
|
+
// Combine both maps
|
|
53
|
+
const combinedElements = new Map(formElements);
|
|
54
|
+
customElements.forEach((element, fieldName) => {
|
|
55
|
+
combinedElements.set(fieldName, element);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// Sort once by DOM position
|
|
59
|
+
focusableElements.current = sortElementsByPosition(combinedElements);
|
|
60
|
+
}, [control._fields]);
|
|
61
|
+
|
|
62
|
+
// Register / unregister custom focusable elements
|
|
63
|
+
const registerCustomFocusableElement = useCallback(
|
|
64
|
+
(fieldName: string, element: HTMLElement) => {
|
|
65
|
+
if (fieldName && element) {
|
|
66
|
+
customFocusableElements.current.set(fieldName, element);
|
|
67
|
+
updateFocusableElements();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return function unregister() {
|
|
71
|
+
customFocusableElements.current.delete(fieldName);
|
|
72
|
+
updateFocusableElements();
|
|
73
|
+
};
|
|
74
|
+
},
|
|
75
|
+
[updateFocusableElements]
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
// Collect focusable elements when fields change
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
if (!enabled || !subscribe) return;
|
|
81
|
+
const callback = subscribe({
|
|
82
|
+
formState: {
|
|
83
|
+
errors: true,
|
|
84
|
+
// Subscribe to any form state change that might indicate field structure changes
|
|
85
|
+
},
|
|
86
|
+
callback: () => {
|
|
87
|
+
// Defer to next tick to ensure DOM is updated
|
|
88
|
+
setTimeout(updateFocusableElements, 0);
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// Initial update
|
|
93
|
+
updateFocusableElements();
|
|
94
|
+
|
|
95
|
+
return () => callback();
|
|
96
|
+
}, [enabled, updateFocusableElements, subscribe]);
|
|
97
|
+
|
|
98
|
+
// Subscribe to errors and focus the first field (according to the DOM) with an error
|
|
99
|
+
const focusOnError = useCallback(
|
|
100
|
+
(errors: Record<string, any>) => {
|
|
101
|
+
if (!enabled) return;
|
|
102
|
+
if (!errors || Object.keys(errors).length === 0) return;
|
|
103
|
+
for (const [fieldName, element] of Array.from(
|
|
104
|
+
focusableElements.current
|
|
105
|
+
)) {
|
|
106
|
+
if (hasFieldError(errors, fieldName)) {
|
|
107
|
+
if (element && typeof element.focus === 'function') {
|
|
108
|
+
element.focus(); // Focus the element directly
|
|
109
|
+
return;
|
|
110
|
+
} else if (element && element.name) {
|
|
111
|
+
setFocus(fieldName); // Field is registered with react-hook-form
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
[enabled, setFocus]
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
return {
|
|
121
|
+
/**
|
|
122
|
+
* Registers a custom focusable element with the given field name.
|
|
123
|
+
*
|
|
124
|
+
* Returns a callback function to unregister the element by field name.
|
|
125
|
+
*
|
|
126
|
+
* @param fieldName - The name of the field to associate with the element.
|
|
127
|
+
* @param element - The HTML element to register as focusable.
|
|
128
|
+
*/
|
|
129
|
+
registerCustomFocusableElement,
|
|
130
|
+
focusOnError,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Helper function to check for nested field errors
|
|
135
|
+
function hasFieldError(
|
|
136
|
+
errors: Record<string, any>,
|
|
137
|
+
fieldName: string
|
|
138
|
+
): boolean {
|
|
139
|
+
if (!errors || typeof errors !== 'object') return false;
|
|
140
|
+
|
|
141
|
+
// Handle direct field names first
|
|
142
|
+
if (errors[fieldName]) {
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Split the field name and traverse the error object
|
|
147
|
+
const keys = fieldName.split(/[.[\]]+/).filter(Boolean);
|
|
148
|
+
let current = errors;
|
|
149
|
+
|
|
150
|
+
for (const key of keys) {
|
|
151
|
+
if (current && typeof current === 'object') {
|
|
152
|
+
current = current[key];
|
|
153
|
+
} else {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// Check if we found a truthy error value
|
|
159
|
+
return !!current;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export default useFieldFocusManager;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import type { Field, FieldRefs, Ref } from 'react-hook-form';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Recursively extracts field entries from nested form field structure.
|
|
5
|
+
* Handles both regular nested objects and array-like structures.
|
|
6
|
+
*/
|
|
7
|
+
export function extractFieldEntries(
|
|
8
|
+
fields: FieldRefs,
|
|
9
|
+
prefix = ''
|
|
10
|
+
): Map<string, Ref> {
|
|
11
|
+
const elementMap = new Map<string, Ref>();
|
|
12
|
+
|
|
13
|
+
const fieldEntries = Object.entries(fields);
|
|
14
|
+
if (fieldEntries.length === 0) return elementMap;
|
|
15
|
+
|
|
16
|
+
Object.entries(fields).forEach(([fieldName, field]) => {
|
|
17
|
+
if (!field) return;
|
|
18
|
+
const fullFieldName = prefix ? `${prefix}.${fieldName}` : fieldName;
|
|
19
|
+
|
|
20
|
+
// Handle direct field with ref
|
|
21
|
+
if (isField(field)) {
|
|
22
|
+
const element = field._f.ref;
|
|
23
|
+
if (element) {
|
|
24
|
+
elementMap.set(fullFieldName, element);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Handle array fields (numeric keys indicate array indices)
|
|
29
|
+
else if (isFieldRefs(field)) {
|
|
30
|
+
// Check if any keys are numeric (indicating an array structure)
|
|
31
|
+
// Filter out non-numeric keys like '_f' which contains field metadata
|
|
32
|
+
const keys = Object.keys(field);
|
|
33
|
+
const numericKeys = keys.filter((key) => /^\d+$/.test(key));
|
|
34
|
+
const hasNumericKeys = numericKeys.length > 0;
|
|
35
|
+
|
|
36
|
+
if (hasNumericKeys) {
|
|
37
|
+
// Process only the numeric array indices, ignore metadata keys like '_f'
|
|
38
|
+
numericKeys.forEach((index) => {
|
|
39
|
+
const arrayItem = field[index];
|
|
40
|
+
if (arrayItem && isFieldRefs(arrayItem)) {
|
|
41
|
+
const nestedEntries = extractFieldEntries(
|
|
42
|
+
arrayItem,
|
|
43
|
+
`${fullFieldName}.${index}`
|
|
44
|
+
);
|
|
45
|
+
// Merge nested entries into main map
|
|
46
|
+
nestedEntries.forEach((element, fieldName) => {
|
|
47
|
+
elementMap.set(fieldName, element);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
} else {
|
|
52
|
+
// Handle regular nested objects
|
|
53
|
+
const nestedEntries = extractFieldEntries(field, fullFieldName);
|
|
54
|
+
// Merge nested entries into main map
|
|
55
|
+
nestedEntries.forEach((element, fieldName) => {
|
|
56
|
+
elementMap.set(fieldName, element);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
return elementMap;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Type guard to check if a ref is a Field object */
|
|
66
|
+
const isField = (fieldRef: FieldRefs[keyof FieldRefs]): fieldRef is Field =>
|
|
67
|
+
Boolean(
|
|
68
|
+
fieldRef &&
|
|
69
|
+
typeof fieldRef === 'object' &&
|
|
70
|
+
'_f' in fieldRef &&
|
|
71
|
+
fieldRef._f &&
|
|
72
|
+
'ref' in fieldRef._f
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
/** Type guard to check if a ref is a FieldRefs object (nested fields) */
|
|
76
|
+
const isFieldRefs = (
|
|
77
|
+
fieldRef: FieldRefs[keyof FieldRefs]
|
|
78
|
+
): fieldRef is FieldRefs =>
|
|
79
|
+
Boolean(fieldRef && typeof fieldRef === 'object' && !isField(fieldRef));
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Sorts a map of HTML elements by their position in the DOM.
|
|
83
|
+
* Elements appearing earlier in the document order come first.
|
|
84
|
+
*/
|
|
85
|
+
export function sortElementsByPosition(
|
|
86
|
+
elements: Map<string, Ref>
|
|
87
|
+
): Map<string, Ref> {
|
|
88
|
+
const sortedEntries = Array.from(elements.entries()).sort(([, a], [, b]) => {
|
|
89
|
+
if (isActualHTMLElement(a) && isActualHTMLElement(b)) {
|
|
90
|
+
const aPosition = a.compareDocumentPosition(b);
|
|
91
|
+
if (aPosition & Node.DOCUMENT_POSITION_FOLLOWING) return -1;
|
|
92
|
+
if (aPosition & Node.DOCUMENT_POSITION_PRECEDING) return 1;
|
|
93
|
+
}
|
|
94
|
+
return 0; // keep original order
|
|
95
|
+
});
|
|
96
|
+
return new Map(sortedEntries);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** Type guard to check if a ref is an actual HTML element */
|
|
100
|
+
const isActualHTMLElement = (ref: Ref): ref is Ref & HTMLElement =>
|
|
101
|
+
ref instanceof HTMLElement && typeof ref.focus === 'function';
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Maps a collection of HTML elements to a FieldRefs structure.
|
|
105
|
+
*
|
|
106
|
+
* It's not a direct conversion, but rather a way to create a simple FieldRefs
|
|
107
|
+
* structure that can be used with React Hook Form.
|
|
108
|
+
*/
|
|
109
|
+
export function mapElementsToFields(
|
|
110
|
+
elements: Map<string, HTMLElement>
|
|
111
|
+
): Record<string, Field> {
|
|
112
|
+
const fields = {};
|
|
113
|
+
elements.forEach((element, fieldName) => {
|
|
114
|
+
fields[fieldName] = {
|
|
115
|
+
_f: {
|
|
116
|
+
ref: element,
|
|
117
|
+
name: fieldName,
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
});
|
|
121
|
+
return fields;
|
|
122
|
+
}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import React, { useCallback } from 'react';
|
|
2
|
-
import { ControlledFieldProps } from '@digigov/form/Field/types';
|
|
3
|
-
import { FieldOptionProps } from '@digigov/form/inputs/Label';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
AutoCompleteProps as UIAutoCompleteProps,
|
|
7
|
-
} from '@digigov/ui/form/AutoComplete';
|
|
2
|
+
import type { ControlledFieldProps } from '@digigov/form/Field/types';
|
|
3
|
+
import type { FieldOptionProps } from '@digigov/form/inputs/Label';
|
|
4
|
+
import type { AutoCompleteProps as UIAutoCompleteProps } from '@digigov/ui/form/AutoComplete';
|
|
5
|
+
import { AutoComplete } from '@digigov/ui/form/AutoComplete';
|
|
8
6
|
import { Hint } from '@digigov/ui/typography/Hint';
|
|
9
7
|
import { Base } from '@digigov/ui/utils/Base';
|
|
10
8
|
export interface AutoCompleteInputExtra
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useState } from 'react';
|
|
2
|
-
import { ControlledFieldProps } from '@digigov/form/Field/types';
|
|
3
|
-
import { FieldOptionProps } from '@digigov/form/inputs/Label';
|
|
2
|
+
import type { ControlledFieldProps } from '@digigov/form/Field/types';
|
|
3
|
+
import type { FieldOptionProps } from '@digigov/form/inputs/Label';
|
|
4
4
|
import {
|
|
5
5
|
Checkbox,
|
|
6
6
|
CheckboxItem,
|
|
@@ -19,92 +19,100 @@ export interface CheckboxesProps
|
|
|
19
19
|
fieldComponent: React.FC<Omit<ControlledFieldProps, 'value' | 'onChange'>>;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export const Checkboxes
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
newValue =
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
22
|
+
export const Checkboxes = React.forwardRef<HTMLInputElement, CheckboxesProps>(
|
|
23
|
+
(
|
|
24
|
+
{
|
|
25
|
+
name,
|
|
26
|
+
onChange,
|
|
27
|
+
value,
|
|
28
|
+
extra: { options, className },
|
|
29
|
+
disabled,
|
|
30
|
+
Field,
|
|
31
|
+
...props
|
|
32
|
+
},
|
|
33
|
+
ref
|
|
34
|
+
) => {
|
|
35
|
+
if (!value) value = [];
|
|
36
|
+
const handleChange =
|
|
37
|
+
(optionValue, idx, show) =>
|
|
38
|
+
(evt): void => {
|
|
39
|
+
let newValue: any = [];
|
|
40
|
+
if (evt.currentTarget.checked) {
|
|
41
|
+
newValue = value.concat([optionValue]);
|
|
42
|
+
} else {
|
|
43
|
+
newValue = value.filter((val) => val !== optionValue);
|
|
44
|
+
}
|
|
45
|
+
if (show && show.length > 0) {
|
|
46
|
+
setChecked((items) =>
|
|
47
|
+
items.map((item, index) => (index === idx ? !item : item))
|
|
48
|
+
);
|
|
49
|
+
}
|
|
46
50
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
...
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
51
|
+
// reset value to undefined instead of an empty array
|
|
52
|
+
// so the error state mechanism can throw validation errors
|
|
53
|
+
if (newValue.length === 0) newValue = undefined;
|
|
54
|
+
onChange(newValue);
|
|
55
|
+
};
|
|
56
|
+
const { t } = useTranslation();
|
|
57
|
+
const [checked, setChecked] = useState(
|
|
58
|
+
Array<boolean>(options.length).fill(false)
|
|
59
|
+
);
|
|
60
|
+
return (
|
|
61
|
+
<Checkbox className={className}>
|
|
62
|
+
{options.map(
|
|
63
|
+
(
|
|
64
|
+
{
|
|
65
|
+
label,
|
|
66
|
+
value: v,
|
|
67
|
+
show,
|
|
68
|
+
disabled: optionDisabled,
|
|
69
|
+
selected,
|
|
70
|
+
...option
|
|
71
|
+
},
|
|
72
|
+
index
|
|
73
|
+
) => (
|
|
74
|
+
<React.Fragment key={index}>
|
|
75
|
+
<CheckboxItem
|
|
76
|
+
ref={index === 0 ? ref : undefined}
|
|
77
|
+
key={`${name}.${index}`}
|
|
78
|
+
name={`${name}.${v}`}
|
|
79
|
+
id={`${name}.${v}`}
|
|
80
|
+
value={v}
|
|
81
|
+
disabled={disabled || optionDisabled}
|
|
82
|
+
checked={value?.includes(v)}
|
|
83
|
+
onChange={handleChange(v, index, show)}
|
|
84
|
+
{...option}
|
|
85
|
+
{...{
|
|
86
|
+
...props,
|
|
87
|
+
reset: undefined,
|
|
88
|
+
defaultValue: undefined,
|
|
89
|
+
error: undefined,
|
|
90
|
+
onBlur: undefined,
|
|
91
|
+
required: undefined,
|
|
92
|
+
'aria-describedby': undefined,
|
|
93
|
+
type: 'checkbox',
|
|
94
|
+
}}
|
|
95
|
+
>
|
|
96
|
+
{(label && label.primary && t(label.primary)) || value}
|
|
97
|
+
{label && label.secondary && <Hint>{t(label.secondary)}</Hint>}
|
|
98
|
+
</CheckboxItem>
|
|
94
99
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
100
|
+
{!!checked[index] && show && Field && (
|
|
101
|
+
<CheckboxConditional>
|
|
102
|
+
{show.map((fieldName) => (
|
|
103
|
+
<Field name={fieldName} key={fieldName} />
|
|
104
|
+
))}
|
|
105
|
+
</CheckboxConditional>
|
|
106
|
+
)}
|
|
107
|
+
{selected && selected()}
|
|
108
|
+
</React.Fragment>
|
|
109
|
+
)
|
|
110
|
+
)}
|
|
111
|
+
</Checkbox>
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
Checkboxes.displayName = 'Checkboxes';
|
|
109
117
|
|
|
110
118
|
export default Checkboxes;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useMemo, useEffect } from 'react';
|
|
2
2
|
import dayjs from 'dayjs';
|
|
3
3
|
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
4
|
-
import { UncontrolledFieldProps } from '@digigov/form/Field/types';
|
|
4
|
+
import type { UncontrolledFieldProps } from '@digigov/form/Field/types';
|
|
5
5
|
import { useFormContext } from '@digigov/form/FormContext';
|
|
6
6
|
import {
|
|
7
7
|
DateInputContainer,
|
|
@@ -87,11 +87,21 @@ const makeDate = (val) => {
|
|
|
87
87
|
return '';
|
|
88
88
|
};
|
|
89
89
|
|
|
90
|
-
const DatePart =
|
|
91
|
-
|
|
92
|
-
|
|
90
|
+
const DatePart = React.forwardRef<HTMLInputElement, Record<string, any>>(
|
|
91
|
+
({ label, ...props }, ref) => {
|
|
92
|
+
return (
|
|
93
|
+
<DateInputItem {...props} ref={ref}>
|
|
94
|
+
{label}
|
|
95
|
+
</DateInputItem>
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
);
|
|
99
|
+
DatePart.displayName = 'DatePart';
|
|
93
100
|
|
|
94
|
-
export const DateInput =
|
|
101
|
+
export const DateInput = React.forwardRef<
|
|
102
|
+
HTMLInputElement,
|
|
103
|
+
Record<string, any>
|
|
104
|
+
>(({ name, ...props }, ref) => {
|
|
95
105
|
const { t } = useTranslation();
|
|
96
106
|
const form = useFormContext();
|
|
97
107
|
|
|
@@ -116,6 +126,7 @@ export const DateInput = ({ name, ...props }) => {
|
|
|
116
126
|
return (
|
|
117
127
|
<DateInputContainer>
|
|
118
128
|
<DatePart
|
|
129
|
+
ref={ref}
|
|
119
130
|
label={t('form.label.day')}
|
|
120
131
|
onChange={date.setDay}
|
|
121
132
|
onBlur={(e) => {
|
|
@@ -166,6 +177,8 @@ export const DateInput = ({ name, ...props }) => {
|
|
|
166
177
|
/>
|
|
167
178
|
</DateInputContainer>
|
|
168
179
|
);
|
|
169
|
-
};
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
DateInput.displayName = 'DateInput';
|
|
170
183
|
|
|
171
184
|
export default DateInput;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useMemo, useEffect } from 'react';
|
|
2
2
|
import dayjs from 'dayjs';
|
|
3
3
|
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
4
|
-
import { UncontrolledFieldProps } from '@digigov/form/Field/types';
|
|
4
|
+
import type { UncontrolledFieldProps } from '@digigov/form/Field/types';
|
|
5
5
|
import { useFormContext } from '@digigov/form/FormContext';
|
|
6
6
|
import {
|
|
7
7
|
DateInputContainer,
|
|
@@ -113,11 +113,21 @@ const makeDateTime = (val) => {
|
|
|
113
113
|
return '';
|
|
114
114
|
};
|
|
115
115
|
|
|
116
|
-
const DateTimePart =
|
|
117
|
-
|
|
118
|
-
|
|
116
|
+
const DateTimePart = React.forwardRef<HTMLInputElement, Record<string, any>>(
|
|
117
|
+
({ label, ...props }, ref) => {
|
|
118
|
+
return (
|
|
119
|
+
<DateInputItem {...props} ref={ref}>
|
|
120
|
+
{label}
|
|
121
|
+
</DateInputItem>
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
);
|
|
125
|
+
DateTimePart.displayName = 'DateTimePart';
|
|
119
126
|
|
|
120
|
-
export const DateTimeInput =
|
|
127
|
+
export const DateTimeInput = React.forwardRef<
|
|
128
|
+
HTMLInputElement,
|
|
129
|
+
Record<string, any>
|
|
130
|
+
>(({ name, ...props }, ref) => {
|
|
121
131
|
const { t } = useTranslation();
|
|
122
132
|
const form = useFormContext();
|
|
123
133
|
|
|
@@ -142,6 +152,7 @@ export const DateTimeInput = ({ name, ...props }) => {
|
|
|
142
152
|
return (
|
|
143
153
|
<DateInputContainer>
|
|
144
154
|
<DateTimePart
|
|
155
|
+
ref={ref}
|
|
145
156
|
label={t('form.label.day')}
|
|
146
157
|
onChange={dateTime.setDay}
|
|
147
158
|
onBlur={(e) => {
|
|
@@ -228,6 +239,8 @@ export const DateTimeInput = ({ name, ...props }) => {
|
|
|
228
239
|
/>
|
|
229
240
|
</DateInputContainer>
|
|
230
241
|
);
|
|
231
|
-
};
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
DateTimeInput.displayName = 'DateTimeInput';
|
|
232
245
|
|
|
233
246
|
export default DateTimeInput;
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import type { ComponentRef } from 'react';
|
|
2
|
+
import React, { useCallback, useEffect, useState } from 'react';
|
|
3
|
+
import type { UseFormReturn } from 'react-hook-form';
|
|
4
|
+
import { useWatch } from 'react-hook-form';
|
|
5
|
+
import type { UncontrolledFieldProps } from '@digigov/form/Field/types';
|
|
6
|
+
import type { ButtonProps } from '@digigov/ui/form/Button';
|
|
7
|
+
import { Button } from '@digigov/ui/form/Button';
|
|
8
|
+
import type {
|
|
8
9
|
FileUploadContainerProps,
|
|
9
10
|
FileUploadProps,
|
|
10
11
|
} from '@digigov/ui/form/FileUpload';
|
|
12
|
+
import { FileUpload, FileUploadContainer } from '@digigov/ui/form/FileUpload';
|
|
11
13
|
import { useTranslation } from '@digigov/ui/i18n';
|
|
12
14
|
import { Hint } from '@digigov/ui/typography/Hint';
|
|
13
15
|
import { Paragraph } from '@digigov/ui/typography/Paragraph';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useRef, useState, useEffect, useCallback } from 'react';
|
|
2
|
-
import { UseFormReturn } from 'react-hook-form';
|
|
3
|
-
import { UncontrolledFieldProps } from '@digigov/form/Field/types';
|
|
2
|
+
import type { UseFormReturn } from 'react-hook-form';
|
|
3
|
+
import type { UncontrolledFieldProps } from '@digigov/form/Field/types';
|
|
4
4
|
import { Button, ButtonGroup } from '@digigov/ui/form/Button';
|
|
5
5
|
import { FileUpload, FileUploadContainer } from '@digigov/ui/form/FileUpload';
|
|
6
6
|
import { useTranslation } from '@digigov/ui/i18n';
|