envoc-form 3.3.0 → 4.0.1-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -1
- package/dist/css/envoc-form-styles.css +0 -113
- package/dist/css/envoc-form-styles.css.map +1 -1
- package/es/AddressInput/AddressInput.d.ts +15 -0
- package/es/AddressInput/AddressInput.js +21 -97
- package/es/AddressInput/UsStates.d.ts +3 -0
- package/es/AddressInput/UsStates.js +53 -152
- package/es/ConfirmBaseForm/ConfirmBaseForm.d.ts +10 -0
- package/es/ConfirmBaseForm/ConfirmBaseForm.js +35 -43
- package/es/ConfirmDeleteForm/ConfirmDeleteForm.d.ts +11 -0
- package/es/ConfirmDeleteForm/ConfirmDeleteForm.js +54 -40
- package/es/DatePickerInput/DatePickerInput.d.ts +14 -0
- package/es/DatePickerInput/DatePickerInput.js +63 -95
- package/es/Field/CustomFieldInputProps.d.ts +7 -0
- package/es/Field/CustomFieldInputProps.js +1 -0
- package/es/Field/CustomFieldMetaProps.d.ts +4 -0
- package/es/Field/CustomFieldMetaProps.js +1 -0
- package/es/Field/Field.d.ts +22 -0
- package/es/Field/Field.js +46 -0
- package/es/Field/FieldErrorScrollTarget.d.ts +2 -0
- package/es/Field/FieldErrorScrollTarget.js +11 -0
- package/es/Field/FieldNameContext.d.ts +3 -0
- package/es/Field/FieldNameContext.js +3 -0
- package/es/Field/FieldSection.d.ts +7 -0
- package/es/Field/FieldSection.js +20 -0
- package/es/Field/InjectedFieldProps.d.ts +7 -0
- package/es/Field/InjectedFieldProps.js +1 -0
- package/es/Field/useStandardField.d.ts +15 -0
- package/es/Field/useStandardField.js +93 -0
- package/es/FieldArray/FieldArray.d.ts +15 -0
- package/es/FieldArray/FieldArray.js +80 -0
- package/es/File/FileGroup.d.ts +8 -0
- package/es/File/FileGroup.js +50 -0
- package/es/File/FileList.d.ts +6 -0
- package/es/File/FileList.js +20 -0
- package/es/File/humanFileSize.d.ts +1 -0
- package/es/File/humanFileSize.js +6 -0
- package/es/Form/FocusError.d.ts +5 -0
- package/es/Form/FocusError.js +41 -53
- package/es/Form/Form.d.ts +22 -0
- package/es/Form/Form.js +111 -125
- package/es/Form/FormBasedPreventNavigation.d.ts +5 -0
- package/es/Form/FormBasedPreventNavigation.js +53 -30
- package/es/Form/ServerErrorContext.d.ts +10 -0
- package/es/Form/ServerErrorContext.js +8 -6
- package/es/FormActions.d.ts +7 -0
- package/es/FormActions.js +22 -0
- package/es/Group.d.ts +13 -0
- package/es/Group.js +22 -0
- package/es/Input/IconInputGroup.d.ts +9 -0
- package/es/Input/IconInputGroup.js +40 -0
- package/es/Input/InputGroup.d.ts +12 -0
- package/es/Input/InputGroup.js +33 -0
- package/es/Input/MoneyInputGroup.d.ts +7 -0
- package/es/Input/MoneyInputGroup.js +41 -0
- package/es/Input/NumberInputGroup.d.ts +7 -0
- package/es/Input/NumberInputGroup.js +41 -0
- package/es/Input/StringInputGroup.d.ts +7 -0
- package/es/Input/StringInputGroup.js +40 -0
- package/es/Normalization/NormalizationFunction.d.ts +4 -0
- package/es/Normalization/NormalizationFunction.js +1 -0
- package/es/Normalization/normalizers.d.ts +2 -0
- package/es/Normalization/normalizers.js +30 -0
- package/es/Select/BooleanSelectGroup.d.ts +7 -0
- package/es/Select/BooleanSelectGroup.js +27 -0
- package/es/Select/NumberSelectGroup.d.ts +8 -0
- package/es/Select/NumberSelectGroup.js +19 -0
- package/es/Select/SelectGroup.d.ts +22 -0
- package/es/Select/SelectGroup.js +59 -0
- package/es/Select/SelectGroupPropsHelper.d.ts +3 -0
- package/es/Select/SelectGroupPropsHelper.js +1 -0
- package/es/Select/StringSelectGroup.d.ts +8 -0
- package/es/Select/StringSelectGroup.js +19 -0
- package/es/StandardFormActions.d.ts +6 -0
- package/es/StandardFormActions.js +23 -24
- package/es/SubmitFormButton.d.ts +7 -0
- package/es/SubmitFormButton.js +37 -23
- package/es/Validation/ValidatedApiResult.d.ts +6 -0
- package/es/Validation/ValidatedApiResult.js +1 -0
- package/es/Validation/ValidationError.d.ts +5 -0
- package/es/Validation/ValidationError.js +1 -0
- package/es/Validation/ValidationFunction.d.ts +4 -0
- package/es/Validation/ValidationFunction.js +1 -0
- package/es/Validation/validators.d.ts +15 -0
- package/es/Validation/validators.js +73 -0
- package/es/__Tests__/FormTestBase.d.ts +27 -0
- package/es/__Tests__/FormTestBase.js +83 -12
- package/{src/__Tests__/index.js → es/__Tests__/index.d.ts} +0 -0
- package/es/__Tests__/index.js +2 -2
- package/es/index.d.ts +57 -0
- package/es/index.js +41 -25
- package/es/utils/objectContainsNonSerializableProperty.d.ts +1 -0
- package/es/utils/objectContainsNonSerializableProperty.js +14 -16
- package/es/utils/objectToFormData.d.ts +10 -0
- package/es/utils/objectToFormData.js +77 -65
- package/es/utils/typeChecks.d.ts +8 -0
- package/es/utils/typeChecks.js +18 -25
- package/lib/AddressInput/AddressInput.d.ts +15 -0
- package/lib/AddressInput/AddressInput.js +27 -123
- package/lib/AddressInput/UsStates.d.ts +3 -0
- package/lib/AddressInput/UsStates.js +55 -159
- package/lib/ConfirmBaseForm/ConfirmBaseForm.d.ts +10 -0
- package/lib/ConfirmBaseForm/ConfirmBaseForm.js +41 -57
- package/lib/ConfirmDeleteForm/ConfirmDeleteForm.d.ts +11 -0
- package/lib/ConfirmDeleteForm/ConfirmDeleteForm.js +60 -56
- package/lib/DatePickerInput/DatePickerInput.d.ts +14 -0
- package/lib/DatePickerInput/DatePickerInput.js +69 -113
- package/lib/Field/CustomFieldInputProps.d.ts +7 -0
- package/lib/Field/CustomFieldInputProps.js +2 -0
- package/lib/Field/CustomFieldMetaProps.d.ts +4 -0
- package/lib/Field/CustomFieldMetaProps.js +2 -0
- package/lib/Field/Field.d.ts +22 -0
- package/lib/Field/Field.js +51 -0
- package/lib/Field/FieldErrorScrollTarget.d.ts +2 -0
- package/lib/Field/FieldErrorScrollTarget.js +14 -0
- package/lib/Field/FieldNameContext.d.ts +3 -0
- package/lib/Field/FieldNameContext.js +9 -0
- package/lib/Field/FieldSection.d.ts +7 -0
- package/lib/Field/FieldSection.js +23 -0
- package/lib/Field/InjectedFieldProps.d.ts +7 -0
- package/lib/Field/InjectedFieldProps.js +2 -0
- package/lib/Field/useStandardField.d.ts +15 -0
- package/lib/Field/useStandardField.js +96 -0
- package/lib/FieldArray/FieldArray.d.ts +15 -0
- package/lib/FieldArray/FieldArray.js +86 -0
- package/lib/File/FileGroup.d.ts +8 -0
- package/lib/File/FileGroup.js +55 -0
- package/lib/File/FileList.d.ts +6 -0
- package/lib/File/FileList.js +23 -0
- package/lib/File/humanFileSize.d.ts +1 -0
- package/lib/File/humanFileSize.js +10 -0
- package/lib/Form/FocusError.d.ts +5 -0
- package/lib/Form/FocusError.js +47 -66
- package/lib/Form/Form.d.ts +22 -0
- package/lib/Form/Form.js +117 -153
- package/lib/Form/FormBasedPreventNavigation.d.ts +5 -0
- package/lib/Form/FormBasedPreventNavigation.js +56 -39
- package/lib/Form/ServerErrorContext.d.ts +10 -0
- package/lib/Form/ServerErrorContext.js +14 -18
- package/lib/FormActions.d.ts +7 -0
- package/lib/FormActions.js +28 -0
- package/lib/Group.d.ts +13 -0
- package/lib/Group.js +28 -0
- package/lib/Input/IconInputGroup.d.ts +9 -0
- package/lib/Input/IconInputGroup.js +45 -0
- package/lib/Input/InputGroup.d.ts +12 -0
- package/lib/Input/InputGroup.js +38 -0
- package/lib/Input/MoneyInputGroup.d.ts +7 -0
- package/lib/Input/MoneyInputGroup.js +46 -0
- package/lib/Input/NumberInputGroup.d.ts +7 -0
- package/lib/Input/NumberInputGroup.js +46 -0
- package/lib/Input/StringInputGroup.d.ts +7 -0
- package/lib/Input/StringInputGroup.js +45 -0
- package/lib/Normalization/NormalizationFunction.d.ts +4 -0
- package/lib/Normalization/NormalizationFunction.js +2 -0
- package/lib/Normalization/normalizers.d.ts +2 -0
- package/lib/Normalization/normalizers.js +35 -0
- package/lib/Select/BooleanSelectGroup.d.ts +7 -0
- package/lib/Select/BooleanSelectGroup.js +34 -0
- package/lib/Select/NumberSelectGroup.d.ts +8 -0
- package/lib/Select/NumberSelectGroup.js +27 -0
- package/lib/Select/SelectGroup.d.ts +22 -0
- package/lib/Select/SelectGroup.js +65 -0
- package/lib/Select/SelectGroupPropsHelper.d.ts +3 -0
- package/lib/Select/SelectGroupPropsHelper.js +2 -0
- package/lib/Select/StringSelectGroup.d.ts +8 -0
- package/lib/Select/StringSelectGroup.js +27 -0
- package/lib/StandardFormActions.d.ts +6 -0
- package/lib/StandardFormActions.js +29 -37
- package/lib/SubmitFormButton.d.ts +7 -0
- package/lib/SubmitFormButton.js +42 -38
- package/lib/Validation/ValidatedApiResult.d.ts +6 -0
- package/lib/Validation/ValidatedApiResult.js +2 -0
- package/lib/Validation/ValidationError.d.ts +5 -0
- package/lib/Validation/ValidationError.js +2 -0
- package/lib/Validation/ValidationFunction.d.ts +4 -0
- package/lib/Validation/ValidationFunction.js +2 -0
- package/lib/Validation/validators.d.ts +15 -0
- package/lib/Validation/validators.js +86 -0
- package/lib/__Tests__/FormTestBase.d.ts +27 -0
- package/lib/__Tests__/FormTestBase.js +86 -25
- package/lib/__Tests__/index.d.ts +2 -0
- package/lib/__Tests__/index.js +8 -15
- package/lib/index.d.ts +57 -0
- package/lib/index.js +101 -262
- package/lib/utils/objectContainsNonSerializableProperty.d.ts +1 -0
- package/lib/utils/objectContainsNonSerializableProperty.js +17 -24
- package/lib/utils/objectToFormData.d.ts +10 -0
- package/lib/utils/objectToFormData.js +79 -73
- package/lib/utils/typeChecks.d.ts +8 -0
- package/lib/utils/typeChecks.js +29 -58
- package/package.json +106 -101
- package/src/AddressInput/{AddesssInput.test.js → AddressInput.test.tsx} +7 -3
- package/src/AddressInput/AddressInput.tsx +72 -0
- package/src/AddressInput/{UsStates.js → UsStates.ts} +3 -1
- package/src/AddressInput/__snapshots__/AddressInput.test.tsx.snap +175 -0
- package/src/ConfirmBaseForm/ConfirmBaseForm.test.tsx +24 -0
- package/src/ConfirmBaseForm/ConfirmBaseForm.tsx +50 -0
- package/src/ConfirmBaseForm/__snapshots__/{ConfirmBaseForm.test.js.snap → ConfirmBaseForm.test.tsx.snap} +2 -2
- package/src/ConfirmDeleteForm/{ConfirmDeleteForm.test.js → ConfirmDeleteForm.test.tsx} +3 -3
- package/src/ConfirmDeleteForm/ConfirmDeleteForm.tsx +67 -0
- package/src/ConfirmDeleteForm/__snapshots__/{ConfirmDeleteForm.test.js.snap → ConfirmDeleteForm.test.tsx.snap} +2 -2
- package/src/DatePickerInput/DatePickerInput.test.tsx +48 -0
- package/src/DatePickerInput/DatePickerInput.tsx +85 -0
- package/src/DatePickerInput/__snapshots__/DatePickerInput.test.tsx.snap +151 -0
- package/src/Field/CustomFieldInputProps.ts +10 -0
- package/src/Field/CustomFieldMetaProps.ts +5 -0
- package/src/Field/Field.tsx +90 -0
- package/src/Field/FieldErrorScrollTarget.tsx +11 -0
- package/src/Field/FieldNameContext.ts +6 -0
- package/src/Field/FieldSection.tsx +18 -0
- package/src/Field/InjectedFieldProps.ts +8 -0
- package/src/Field/useStandardField.ts +121 -0
- package/src/FieldArray/FieldArray.tsx +133 -0
- package/src/File/FileGroup.test.tsx +35 -0
- package/src/File/FileGroup.tsx +71 -0
- package/src/File/FileList.tsx +19 -0
- package/src/File/__snapshots__/FileGroup.test.tsx.snap +32 -0
- package/src/File/humanFileSize.ts +8 -0
- package/src/Form/{FocusError.js → FocusError.tsx} +10 -6
- package/src/Form/Form.test.tsx +14 -0
- package/src/Form/{Form.js → Form.tsx} +71 -31
- package/src/Form/FormBasedPreventNavigation.tsx +74 -0
- package/src/Form/ServerErrorContext.ts +17 -0
- package/src/Form/__snapshots__/{Form.test.js.snap → Form.test.tsx.snap} +1 -1
- package/src/FormActions.tsx +34 -0
- package/src/Group.tsx +43 -0
- package/src/Input/IconInputGroup.tsx +48 -0
- package/src/Input/InputGroup.tsx +57 -0
- package/src/Input/MoneyInputGroup.tsx +44 -0
- package/src/Input/NumberInputGroup.tsx +42 -0
- package/src/Input/StringInputGroup.tsx +40 -0
- package/src/Input/__Tests__/IconInputGroup.test.tsx +35 -0
- package/src/Input/__Tests__/MoneyInputGroup.test.tsx +37 -0
- package/src/Input/__Tests__/NumberInputGroup.test.tsx +35 -0
- package/src/Input/__Tests__/StringInputGroup.test.tsx +27 -0
- package/src/Input/__Tests__/__snapshots__/IconInputGroup.test.tsx.snap +29 -0
- package/src/Input/__Tests__/__snapshots__/MoneyInputGroup.test.tsx.snap +31 -0
- package/src/Input/__Tests__/__snapshots__/NumberInputGroup.test.tsx.snap +29 -0
- package/src/Input/__Tests__/__snapshots__/StringInputGroup.test.tsx.snap +28 -0
- package/src/Normalization/NormalizationFunction.ts +4 -0
- package/src/{normalizers.js → Normalization/normalizers.ts} +5 -5
- package/src/Select/BooleanSelectGroup.tsx +27 -0
- package/src/Select/NumberSelectGroup.tsx +14 -0
- package/src/Select/SelectGroup.tsx +106 -0
- package/src/Select/SelectGroupPropsHelper.ts +4 -0
- package/src/Select/StringSelectGroup.tsx +14 -0
- package/src/Select/__tests__/BooleanSelectGroup.test.tsx +35 -0
- package/src/Select/__tests__/NumberSelectGroup.test.tsx +87 -0
- package/src/Select/__tests__/StringSelectGroup.test.tsx +89 -0
- package/src/Select/__tests__/__snapshots__/BooleanSelectGroup.test.tsx.snap +99 -0
- package/src/Select/__tests__/__snapshots__/NumberSelectGroup.test.tsx.snap +197 -0
- package/src/Select/__tests__/__snapshots__/StringSelectGroup.test.tsx.snap +197 -0
- package/src/{StandardFormActions.js → StandardFormActions.tsx} +12 -6
- package/src/SubmitFormButton.tsx +44 -0
- package/src/Validation/ValidatedApiResult.ts +8 -0
- package/src/Validation/ValidationError.ts +6 -0
- package/src/Validation/ValidationFunction.ts +4 -0
- package/src/{validators/validators.test.js → Validation/validators.test.tsx} +6 -4
- package/src/Validation/validators.ts +92 -0
- package/src/__Tests__/FormTestBase.tsx +63 -0
- package/src/__Tests__/{StandardFormActions.test.js → StandardFormActions.test.tsx} +2 -8
- package/src/__Tests__/{SubmitFormButton.test.js → SubmitFormButton.test.tsx} +2 -8
- package/src/__Tests__/__snapshots__/{StandardFormActions.test.js.snap → StandardFormActions.test.tsx.snap} +2 -2
- package/src/__Tests__/__snapshots__/{SubmitFormButton.test.js.snap → SubmitFormButton.test.tsx.snap} +1 -1
- package/src/__Tests__/index.ts +3 -0
- package/src/index.ts +114 -0
- package/src/react-app-env.d.ts +1 -0
- package/src/styles.scss +0 -7
- package/src/utils/{objectContainsNonSerializableProperty.test.js → objectContainsNonSerializableProperty.test.tsx} +0 -0
- package/src/utils/{objectContainsNonSerializableProperty.js → objectContainsNonSerializableProperty.ts} +4 -2
- package/src/utils/{objectToFormData.test.js → objectToFormData.test.tsx} +0 -0
- package/src/utils/{objectToFormData.js → objectToFormData.ts} +29 -13
- package/src/utils/typeChecks.ts +18 -0
- package/es/AddressInput/index.js +0 -3
- package/es/BoolInput/BoolInput.js +0 -10
- package/es/BoolInput/InlineBoolInput.js +0 -10
- package/es/BoolInput/boolOptions.js +0 -8
- package/es/BoolInput/index.js +0 -3
- package/es/ConfirmBaseForm/index.js +0 -2
- package/es/ConfirmDeleteForm/index.js +0 -2
- package/es/DatePickerInput/index.js +0 -2
- package/es/ErrorScrollTarget.js +0 -10
- package/es/FileInput/DefaultFileList.js +0 -36
- package/es/FileInput/DropzoneFileInput.js +0 -58
- package/es/FileInput/FileInput.js +0 -62
- package/es/FileInput/index.js +0 -4
- package/es/Form/index.js +0 -5
- package/es/FormGroup.js +0 -22
- package/es/FormGroupWrapper.js +0 -22
- package/es/FormInput/FormInput.js +0 -212
- package/es/FormInput/index.js +0 -2
- package/es/FormInputArray/FormInputArray.js +0 -225
- package/es/FormInputArray/index.js +0 -2
- package/es/FormSection.js +0 -11
- package/es/IconInput.js +0 -33
- package/es/InlineFormInput/InlineFormInput.js +0 -8
- package/es/InlineFormInput/index.js +0 -2
- package/es/MoneyFormattedInput/MoneyFormattedInput.js +0 -106
- package/es/MoneyFormattedInput/index.js +0 -2
- package/es/MoneyInput/InlineMoneyInput.js +0 -7
- package/es/MoneyInput/MoneyInput.js +0 -7
- package/es/MoneyInput/index.js +0 -3
- package/es/MoneyInput/moneyInputProps.js +0 -13
- package/es/NestedFormFieldContext.js +0 -4
- package/es/ReactSelectField/ReactSelectField.js +0 -162
- package/es/ReactSelectField/index.js +0 -2
- package/es/normalizers.js +0 -39
- package/es/selectors.js +0 -6
- package/es/useStandardFormInput.js +0 -119
- package/es/utils/index.js +0 -3
- package/es/validators/index.js +0 -2
- package/es/validators/validators.js +0 -94
- package/lib/AddressInput/index.js +0 -23
- package/lib/BoolInput/BoolInput.js +0 -23
- package/lib/BoolInput/InlineBoolInput.js +0 -23
- package/lib/BoolInput/boolOptions.js +0 -15
- package/lib/BoolInput/index.js +0 -23
- package/lib/ConfirmBaseForm/index.js +0 -13
- package/lib/ConfirmDeleteForm/index.js +0 -13
- package/lib/DatePickerInput/index.js +0 -13
- package/lib/ErrorScrollTarget.js +0 -20
- package/lib/FileInput/DefaultFileList.js +0 -47
- package/lib/FileInput/DropzoneFileInput.js +0 -75
- package/lib/FileInput/FileInput.js +0 -82
- package/lib/FileInput/index.js +0 -31
- package/lib/Form/index.js +0 -39
- package/lib/FormGroup.js +0 -33
- package/lib/FormGroupWrapper.js +0 -37
- package/lib/FormInput/FormInput.js +0 -236
- package/lib/FormInput/index.js +0 -13
- package/lib/FormInputArray/FormInputArray.js +0 -248
- package/lib/FormInputArray/index.js +0 -13
- package/lib/FormSection.js +0 -28
- package/lib/IconInput.js +0 -51
- package/lib/InlineFormInput/InlineFormInput.js +0 -20
- package/lib/InlineFormInput/index.js +0 -13
- package/lib/MoneyFormattedInput/MoneyFormattedInput.js +0 -126
- package/lib/MoneyFormattedInput/index.js +0 -15
- package/lib/MoneyInput/InlineMoneyInput.js +0 -20
- package/lib/MoneyInput/MoneyInput.js +0 -20
- package/lib/MoneyInput/index.js +0 -23
- package/lib/MoneyInput/moneyInputProps.js +0 -26
- package/lib/NestedFormFieldContext.js +0 -16
- package/lib/ReactSelectField/ReactSelectField.js +0 -187
- package/lib/ReactSelectField/index.js +0 -31
- package/lib/normalizers.js +0 -51
- package/lib/selectors.js +0 -18
- package/lib/useStandardFormInput.js +0 -135
- package/lib/utils/index.js +0 -23
- package/lib/validators/index.js +0 -17
- package/lib/validators/validators.js +0 -130
- package/src/AddressInput/AddressInput.js +0 -73
- package/src/AddressInput/__snapshots__/AddesssInput.test.js.snap +0 -207
- package/src/AddressInput/index.js +0 -3
- package/src/BoolInput/BoolInput.js +0 -7
- package/src/BoolInput/BoolInput.test.js +0 -23
- package/src/BoolInput/InlineBoolInput.js +0 -7
- package/src/BoolInput/__snapshots__/BoolInput.test.js.snap +0 -89
- package/src/BoolInput/boolOptions.js +0 -6
- package/src/BoolInput/index.js +0 -4
- package/src/ConfirmBaseForm/ConfirmBaseForm.js +0 -37
- package/src/ConfirmBaseForm/ConfirmBaseForm.test.js +0 -14
- package/src/ConfirmBaseForm/index.js +0 -2
- package/src/ConfirmDeleteForm/ConfirmDeleteForm.js +0 -39
- package/src/ConfirmDeleteForm/index.js +0 -2
- package/src/DatePickerInput/DatePickerInput.js +0 -49
- package/src/DatePickerInput/DatePickerInput.test.js +0 -74
- package/src/DatePickerInput/__snapshots__/DatePickerInput.test.js.snap +0 -134
- package/src/DatePickerInput/date-picker-input.scss +0 -42
- package/src/DatePickerInput/index.js +0 -3
- package/src/ErrorScrollTarget.js +0 -6
- package/src/FileInput/DefaultFileList.js +0 -39
- package/src/FileInput/DropzoneFileInput.js +0 -56
- package/src/FileInput/DropzoneFileInput.test.js +0 -24
- package/src/FileInput/FileInput.js +0 -77
- package/src/FileInput/FileInput.test.js +0 -24
- package/src/FileInput/__snapshots__/DropzoneFileInput.test.js.snap +0 -57
- package/src/FileInput/__snapshots__/FileInput.test.js.snap +0 -58
- package/src/FileInput/file-input.scss +0 -58
- package/src/FileInput/index.js +0 -5
- package/src/Form/Form.test.js +0 -23
- package/src/Form/FormBasedPreventNavigation.js +0 -25
- package/src/Form/ServerErrorContext.js +0 -7
- package/src/Form/index.js +0 -11
- package/src/FormGroup.js +0 -30
- package/src/FormGroupWrapper.js +0 -28
- package/src/FormInput/FormInput.js +0 -148
- package/src/FormInput/FormInput.test.js +0 -66
- package/src/FormInput/__snapshots__/FormInput.test.js.snap +0 -323
- package/src/FormInput/form-input.scss +0 -9
- package/src/FormInput/index.js +0 -2
- package/src/FormInputArray/FormInputArray.js +0 -224
- package/src/FormInputArray/FormInputArray.test.js +0 -108
- package/src/FormInputArray/__snapshots__/FormInputArray.test.js.snap +0 -52
- package/src/FormInputArray/form-input-array.scss +0 -13
- package/src/FormInputArray/index.js +0 -2
- package/src/FormSection.js +0 -13
- package/src/IconInput.js +0 -31
- package/src/InlineFormInput/InlineFormInput.js +0 -6
- package/src/InlineFormInput/InlineFormInput.test.js +0 -23
- package/src/InlineFormInput/__snapshots__/InlineFormInput.test.js.snap +0 -26
- package/src/InlineFormInput/index.js +0 -3
- package/src/InlineFormInput/inline-form-input.scss +0 -3
- package/src/MoneyFormattedInput/MoneyFormattedInput.js +0 -115
- package/src/MoneyFormattedInput/index.js +0 -3
- package/src/MoneyInput/InlineMoneyInput.js +0 -7
- package/src/MoneyInput/MoneyInput.js +0 -7
- package/src/MoneyInput/MoneyInputs.test.js +0 -43
- package/src/MoneyInput/__snapshots__/MoneyInputs.test.js.snap +0 -81
- package/src/MoneyInput/index.js +0 -4
- package/src/MoneyInput/money-input.scss +0 -3
- package/src/MoneyInput/moneyInputProps.js +0 -12
- package/src/NestedFormFieldContext.js +0 -6
- package/src/ReactSelectField/ReactSelectField.js +0 -155
- package/src/ReactSelectField/index.js +0 -6
- package/src/ReactSelectField/react-select-field.scss +0 -5
- package/src/SubmitFormButton.js +0 -28
- package/src/__Tests__/FormTestBase.js +0 -14
- package/src/__Tests__/IconInput.test.js +0 -23
- package/src/__Tests__/__snapshots__/IconInput.test.js.snap +0 -38
- package/src/index.js +0 -70
- package/src/selectors.js +0 -3
- package/src/useStandardFormInput.js +0 -118
- package/src/utils/index.js +0 -3
- package/src/utils/typeChecks.js +0 -18
- package/src/validators/index.js +0 -2
- package/src/validators/validators.js +0 -93
@@ -1,323 +0,0 @@
|
|
1
|
-
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
-
|
3
|
-
exports[`FormInput has matching checkbox snapshot 1`] = `
|
4
|
-
<DocumentFragment>
|
5
|
-
<form
|
6
|
-
action="#"
|
7
|
-
>
|
8
|
-
<div
|
9
|
-
class="custom-checkbox custom-control"
|
10
|
-
>
|
11
|
-
<input
|
12
|
-
class="custom-control-input"
|
13
|
-
id="test"
|
14
|
-
name="test"
|
15
|
-
type="checkbox"
|
16
|
-
value=""
|
17
|
-
/>
|
18
|
-
<label
|
19
|
-
class="custom-control-label"
|
20
|
-
for="test"
|
21
|
-
/>
|
22
|
-
</div>
|
23
|
-
</form>
|
24
|
-
</DocumentFragment>
|
25
|
-
`;
|
26
|
-
|
27
|
-
exports[`FormInput has matching datepicker snapshot 1`] = `
|
28
|
-
<DocumentFragment>
|
29
|
-
<form
|
30
|
-
action="#"
|
31
|
-
>
|
32
|
-
<div
|
33
|
-
class="form-group"
|
34
|
-
>
|
35
|
-
<div
|
36
|
-
id="test-error-scroll-target"
|
37
|
-
style="display: none;"
|
38
|
-
/>
|
39
|
-
<div
|
40
|
-
class="react-date-picker react-date-picker--closed react-date-picker--enabled form-control"
|
41
|
-
>
|
42
|
-
<div
|
43
|
-
class="react-date-picker__wrapper"
|
44
|
-
>
|
45
|
-
<div
|
46
|
-
class="react-date-picker__inputGroup"
|
47
|
-
>
|
48
|
-
<input
|
49
|
-
max="2021-09-23"
|
50
|
-
min="2020-09-23"
|
51
|
-
name="test"
|
52
|
-
style="visibility: hidden; position: absolute; z-index: -999;"
|
53
|
-
type="date"
|
54
|
-
value=""
|
55
|
-
/>
|
56
|
-
<input
|
57
|
-
autocomplete="off"
|
58
|
-
class="react-date-picker__inputGroup__input react-date-picker__inputGroup__month"
|
59
|
-
data-input="true"
|
60
|
-
inputmode="numeric"
|
61
|
-
max="12"
|
62
|
-
min="1"
|
63
|
-
name="month"
|
64
|
-
placeholder="--"
|
65
|
-
type="number"
|
66
|
-
value=""
|
67
|
-
/>
|
68
|
-
<span
|
69
|
-
class="react-date-picker__inputGroup__divider"
|
70
|
-
>
|
71
|
-
/
|
72
|
-
</span>
|
73
|
-
<input
|
74
|
-
autocomplete="off"
|
75
|
-
class="react-date-picker__inputGroup__input react-date-picker__inputGroup__day"
|
76
|
-
data-input="true"
|
77
|
-
inputmode="numeric"
|
78
|
-
max="31"
|
79
|
-
min="1"
|
80
|
-
name="day"
|
81
|
-
placeholder="--"
|
82
|
-
type="number"
|
83
|
-
value=""
|
84
|
-
/>
|
85
|
-
<span
|
86
|
-
class="react-date-picker__inputGroup__divider"
|
87
|
-
>
|
88
|
-
/
|
89
|
-
</span>
|
90
|
-
<input
|
91
|
-
autocomplete="off"
|
92
|
-
class="react-date-picker__inputGroup__input react-date-picker__inputGroup__year"
|
93
|
-
data-input="true"
|
94
|
-
inputmode="numeric"
|
95
|
-
max="2021"
|
96
|
-
min="2020"
|
97
|
-
name="year"
|
98
|
-
placeholder="----"
|
99
|
-
step="1"
|
100
|
-
type="number"
|
101
|
-
value=""
|
102
|
-
/>
|
103
|
-
</div>
|
104
|
-
<button
|
105
|
-
class="react-date-picker__clear-button react-date-picker__button"
|
106
|
-
type="button"
|
107
|
-
>
|
108
|
-
<svg
|
109
|
-
class="react-date-picker__clear-button__icon react-date-picker__button__icon"
|
110
|
-
height="19"
|
111
|
-
stroke="black"
|
112
|
-
stroke-width="2"
|
113
|
-
viewBox="0 0 19 19"
|
114
|
-
width="19"
|
115
|
-
xmlns="http://www.w3.org/2000/svg"
|
116
|
-
>
|
117
|
-
<line
|
118
|
-
x1="4"
|
119
|
-
x2="15"
|
120
|
-
y1="4"
|
121
|
-
y2="15"
|
122
|
-
/>
|
123
|
-
<line
|
124
|
-
x1="15"
|
125
|
-
x2="4"
|
126
|
-
y1="4"
|
127
|
-
y2="15"
|
128
|
-
/>
|
129
|
-
</svg>
|
130
|
-
</button>
|
131
|
-
<button
|
132
|
-
class="react-date-picker__calendar-button react-date-picker__button"
|
133
|
-
type="button"
|
134
|
-
>
|
135
|
-
<svg
|
136
|
-
class="react-date-picker__calendar-button__icon react-date-picker__button__icon"
|
137
|
-
height="19"
|
138
|
-
stroke="black"
|
139
|
-
stroke-width="2"
|
140
|
-
viewBox="0 0 19 19"
|
141
|
-
width="19"
|
142
|
-
xmlns="http://www.w3.org/2000/svg"
|
143
|
-
>
|
144
|
-
<rect
|
145
|
-
fill="none"
|
146
|
-
height="15"
|
147
|
-
width="15"
|
148
|
-
x="2"
|
149
|
-
y="2"
|
150
|
-
/>
|
151
|
-
<line
|
152
|
-
x1="6"
|
153
|
-
x2="6"
|
154
|
-
y1="0"
|
155
|
-
y2="4"
|
156
|
-
/>
|
157
|
-
<line
|
158
|
-
x1="13"
|
159
|
-
x2="13"
|
160
|
-
y1="0"
|
161
|
-
y2="4"
|
162
|
-
/>
|
163
|
-
</svg>
|
164
|
-
</button>
|
165
|
-
</div>
|
166
|
-
</div>
|
167
|
-
</div>
|
168
|
-
</form>
|
169
|
-
</DocumentFragment>
|
170
|
-
`;
|
171
|
-
|
172
|
-
exports[`FormInput has matching file input snapshot 1`] = `
|
173
|
-
<DocumentFragment>
|
174
|
-
<form
|
175
|
-
action="#"
|
176
|
-
>
|
177
|
-
<div
|
178
|
-
class="form-group"
|
179
|
-
>
|
180
|
-
<div
|
181
|
-
id="test-error-scroll-target"
|
182
|
-
style="display: none;"
|
183
|
-
/>
|
184
|
-
<div
|
185
|
-
class="custom-file file-input "
|
186
|
-
>
|
187
|
-
<div>
|
188
|
-
<input
|
189
|
-
class="custom-file-input"
|
190
|
-
id="test"
|
191
|
-
meta="[object Object]"
|
192
|
-
name="test"
|
193
|
-
type="file"
|
194
|
-
/>
|
195
|
-
</div>
|
196
|
-
<label
|
197
|
-
class="custom-file-label"
|
198
|
-
>
|
199
|
-
<div>
|
200
|
-
<span>
|
201
|
-
Choose A File...
|
202
|
-
</span>
|
203
|
-
</div>
|
204
|
-
</label>
|
205
|
-
</div>
|
206
|
-
<ul
|
207
|
-
class="list-group"
|
208
|
-
/>
|
209
|
-
</div>
|
210
|
-
</form>
|
211
|
-
</DocumentFragment>
|
212
|
-
`;
|
213
|
-
|
214
|
-
exports[`FormInput has matching select snapshot 1`] = `
|
215
|
-
<DocumentFragment>
|
216
|
-
<form
|
217
|
-
action="#"
|
218
|
-
>
|
219
|
-
<div
|
220
|
-
class="form-group"
|
221
|
-
>
|
222
|
-
<div
|
223
|
-
id="test-error-scroll-target"
|
224
|
-
style="display: none;"
|
225
|
-
/>
|
226
|
-
<div
|
227
|
-
class="react-select-input css-2b097c-container"
|
228
|
-
id="test"
|
229
|
-
>
|
230
|
-
<div
|
231
|
-
class=" css-150ye8w-control"
|
232
|
-
>
|
233
|
-
<div
|
234
|
-
class=" css-lbak6p-Component"
|
235
|
-
>
|
236
|
-
<div
|
237
|
-
class=" css-1vk4ta-placeholder"
|
238
|
-
>
|
239
|
-
Select...
|
240
|
-
</div>
|
241
|
-
<div
|
242
|
-
class="css-lp83hw-Component"
|
243
|
-
>
|
244
|
-
<div
|
245
|
-
class=""
|
246
|
-
style="display: inline-block;"
|
247
|
-
>
|
248
|
-
<input
|
249
|
-
aria-autocomplete="list"
|
250
|
-
autocapitalize="none"
|
251
|
-
autocomplete="off"
|
252
|
-
autocorrect="off"
|
253
|
-
id="react-select-2-input"
|
254
|
-
spellcheck="false"
|
255
|
-
style="box-sizing: content-box; width: 2px; border: 0px; opacity: 1; outline: 0; padding: 0px;"
|
256
|
-
tabindex="0"
|
257
|
-
type="text"
|
258
|
-
value=""
|
259
|
-
/>
|
260
|
-
<div
|
261
|
-
style="position: absolute; top: 0px; left: 0px; visibility: hidden; height: 0px; overflow: scroll; white-space: pre; font-family: -webkit-small-control; letter-spacing: normal; text-transform: none;"
|
262
|
-
/>
|
263
|
-
</div>
|
264
|
-
</div>
|
265
|
-
</div>
|
266
|
-
<div
|
267
|
-
class=" css-ny0e4k-Component"
|
268
|
-
>
|
269
|
-
<span
|
270
|
-
class=" css-1sl80az-indicatorSeparator"
|
271
|
-
/>
|
272
|
-
<div
|
273
|
-
aria-hidden="true"
|
274
|
-
class=" css-augegj-indicatorContainer"
|
275
|
-
>
|
276
|
-
<svg
|
277
|
-
aria-hidden="true"
|
278
|
-
class="css-7ezgaa-Component"
|
279
|
-
focusable="false"
|
280
|
-
height="20"
|
281
|
-
viewBox="0 0 20 20"
|
282
|
-
width="20"
|
283
|
-
>
|
284
|
-
<path
|
285
|
-
d="M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z"
|
286
|
-
/>
|
287
|
-
</svg>
|
288
|
-
</div>
|
289
|
-
</div>
|
290
|
-
</div>
|
291
|
-
<input
|
292
|
-
name="test"
|
293
|
-
type="hidden"
|
294
|
-
value=""
|
295
|
-
/>
|
296
|
-
</div>
|
297
|
-
</div>
|
298
|
-
</form>
|
299
|
-
</DocumentFragment>
|
300
|
-
`;
|
301
|
-
|
302
|
-
exports[`FormInput has matching textarea snapshot 1`] = `
|
303
|
-
<DocumentFragment>
|
304
|
-
<form
|
305
|
-
action="#"
|
306
|
-
>
|
307
|
-
<div
|
308
|
-
class="form-group"
|
309
|
-
>
|
310
|
-
<div
|
311
|
-
id="test-error-scroll-target"
|
312
|
-
style="display: none;"
|
313
|
-
/>
|
314
|
-
<textarea
|
315
|
-
class="form-control"
|
316
|
-
id="test"
|
317
|
-
name="test"
|
318
|
-
type="textarea"
|
319
|
-
/>
|
320
|
-
</div>
|
321
|
-
</form>
|
322
|
-
</DocumentFragment>
|
323
|
-
`;
|
package/src/FormInput/index.js
DELETED
@@ -1,224 +0,0 @@
|
|
1
|
-
import React, { useEffect, useRef, useState } from 'react';
|
2
|
-
import { v4 as uuid } from 'uuid';
|
3
|
-
import classnames from 'classnames';
|
4
|
-
import { Col, Card, Button, CardBody, Row, Alert } from 'reactstrap';
|
5
|
-
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'
|
6
|
-
import {faPlus, faTrash} from '@fortawesome/free-solid-svg-icons'
|
7
|
-
import PropTypes from 'prop-types';
|
8
|
-
import useStandardFormInput from '../useStandardFormInput';
|
9
|
-
import NestedFormFieldContext from '../NestedFormFieldContext';
|
10
|
-
import classNames from 'classnames';
|
11
|
-
|
12
|
-
export default function FormInputArray({
|
13
|
-
id,
|
14
|
-
name,
|
15
|
-
label,
|
16
|
-
newItem,
|
17
|
-
component: Component,
|
18
|
-
prepend: Prepend,
|
19
|
-
disabled,
|
20
|
-
validate,
|
21
|
-
...props
|
22
|
-
}) {
|
23
|
-
const [inputProps, meta] = useStandardFormInput({
|
24
|
-
id,
|
25
|
-
name,
|
26
|
-
validate,
|
27
|
-
disabled,
|
28
|
-
...props,
|
29
|
-
});
|
30
|
-
const inputPropsRef = useRef();
|
31
|
-
const [hasChangedLength, setHasChangedLength] = useState(false);
|
32
|
-
inputPropsRef.current = inputProps;
|
33
|
-
const values = inputProps.value || [];
|
34
|
-
const length = values.length;
|
35
|
-
|
36
|
-
useEffect(() => {
|
37
|
-
return () => {
|
38
|
-
setHasChangedLength(true);
|
39
|
-
};
|
40
|
-
}, [length, setHasChangedLength]);
|
41
|
-
|
42
|
-
useEffect(() => {
|
43
|
-
if (!hasChangedLength) {
|
44
|
-
return;
|
45
|
-
}
|
46
|
-
inputPropsRef.current.onBlur();
|
47
|
-
}, [length, hasChangedLength]);
|
48
|
-
|
49
|
-
return (
|
50
|
-
<Card className="field-array-card">
|
51
|
-
<CardActionHeader>
|
52
|
-
<CardActionHeader.Title>{label}</CardActionHeader.Title>
|
53
|
-
<CardActionHeader.Actions>
|
54
|
-
{!disabled && (
|
55
|
-
<Button
|
56
|
-
color="link"
|
57
|
-
onClick={addItem}
|
58
|
-
title="Add an additional item"
|
59
|
-
className="add-array-item">
|
60
|
-
<FontAwesomeIcon icon={faPlus} /> Add New
|
61
|
-
</Button>
|
62
|
-
)}
|
63
|
-
</CardActionHeader.Actions>
|
64
|
-
</CardActionHeader>
|
65
|
-
<CardBody>
|
66
|
-
{/* See: https://jaredpalmer.com/formik/docs/api/fieldarray#fieldarray-validation-gotchas */}
|
67
|
-
{meta.error && typeof meta.error === 'string' && (
|
68
|
-
<Row>
|
69
|
-
<Col>
|
70
|
-
<Alert className="field-array-alert" color="danger">
|
71
|
-
{meta.error}
|
72
|
-
</Alert>
|
73
|
-
</Col>
|
74
|
-
</Row>
|
75
|
-
)}
|
76
|
-
{Prepend && values.filter((x) => !x.isDeleted).length > 0 && (
|
77
|
-
<Row className={classnames('input-array-header')}>
|
78
|
-
<Prepend />
|
79
|
-
{!disabled && <div className="remove-array-item"></div>}
|
80
|
-
</Row>
|
81
|
-
)}
|
82
|
-
{values.map((value, index) => {
|
83
|
-
const itemName = `${inputProps.name}[${index}]`;
|
84
|
-
return (
|
85
|
-
<Row
|
86
|
-
key={
|
87
|
-
(value && value['form-input-array-key']) ||
|
88
|
-
(value && value['id']) ||
|
89
|
-
itemName
|
90
|
-
}
|
91
|
-
className={classnames('field-array-item', {
|
92
|
-
removed: value.isDeleted,
|
93
|
-
})}
|
94
|
-
role="listitem">
|
95
|
-
<NestedFormFieldContext.Provider value={itemName}>
|
96
|
-
<div className="component">
|
97
|
-
<Component
|
98
|
-
value={value}
|
99
|
-
name={itemName}
|
100
|
-
disabled={disabled}
|
101
|
-
{...props}
|
102
|
-
/>
|
103
|
-
</div>
|
104
|
-
</NestedFormFieldContext.Provider>
|
105
|
-
{!disabled && (
|
106
|
-
<div className="remove-array-item">
|
107
|
-
<Button
|
108
|
-
color="link"
|
109
|
-
onClick={() => removeItem(index)}
|
110
|
-
title="Remove Item">
|
111
|
-
<FontAwesomeIcon icon={faTrash} />
|
112
|
-
</Button>
|
113
|
-
</div>
|
114
|
-
)}
|
115
|
-
</Row>
|
116
|
-
);
|
117
|
-
})}
|
118
|
-
</CardBody>
|
119
|
-
</Card>
|
120
|
-
);
|
121
|
-
|
122
|
-
function addItem() {
|
123
|
-
if (disabled) {
|
124
|
-
return;
|
125
|
-
}
|
126
|
-
const item = Object.assign({}, newItem, { 'form-input-array-key': uuid() });
|
127
|
-
const mapped = [...values, item];
|
128
|
-
inputProps.onChange(mapped);
|
129
|
-
}
|
130
|
-
|
131
|
-
function removeItem(index) {
|
132
|
-
if (disabled) {
|
133
|
-
return;
|
134
|
-
}
|
135
|
-
const itemToRemove = values[index];
|
136
|
-
// assumes anything from the server has an 'id' value sent
|
137
|
-
if (!itemToRemove.id) {
|
138
|
-
inputProps.onChange(values.filter((x) => x !== itemToRemove));
|
139
|
-
return;
|
140
|
-
}
|
141
|
-
const mapped = values.map((x) =>
|
142
|
-
x !== itemToRemove ? x : Object.assign({}, x, { isDeleted: true })
|
143
|
-
);
|
144
|
-
inputProps.onChange(mapped);
|
145
|
-
}
|
146
|
-
}
|
147
|
-
|
148
|
-
FormInputArray.Header = ({ className, ...props }) => {
|
149
|
-
return (
|
150
|
-
<FormInputArray.Column
|
151
|
-
className={classnames('mb-2', className)}
|
152
|
-
{...props}
|
153
|
-
/>
|
154
|
-
);
|
155
|
-
};
|
156
|
-
|
157
|
-
FormInputArray.Column = ({ className, children, ...props }) => {
|
158
|
-
return (
|
159
|
-
<Col className={classnames('d-flex', className)} {...props}>
|
160
|
-
{children}
|
161
|
-
</Col>
|
162
|
-
);
|
163
|
-
};
|
164
|
-
|
165
|
-
FormInputArray.propTypes = {
|
166
|
-
name: PropTypes.string.isRequired,
|
167
|
-
label: PropTypes.string.isRequired,
|
168
|
-
|
169
|
-
/**
|
170
|
-
* The component to use for each element of the array
|
171
|
-
**/
|
172
|
-
component: PropTypes.func.isRequired,
|
173
|
-
|
174
|
-
disabled: PropTypes.bool,
|
175
|
-
|
176
|
-
/**
|
177
|
-
* When 'Add Item' is used this object is passed as the default (so you can, as an example, give a default)
|
178
|
-
**/
|
179
|
-
newItem: PropTypes.object,
|
180
|
-
|
181
|
-
/**
|
182
|
-
* Affixes a 'header' above all rows so you can have a grid-like display
|
183
|
-
**/
|
184
|
-
prepend: PropTypes.func,
|
185
|
-
|
186
|
-
/**
|
187
|
-
* standard validator, BUT, will be passed the whole array to validate
|
188
|
-
**/
|
189
|
-
validate: PropTypes.oneOfType([
|
190
|
-
PropTypes.arrayOf(PropTypes.func),
|
191
|
-
PropTypes.func,
|
192
|
-
]),
|
193
|
-
};
|
194
|
-
|
195
|
-
function CardActionHeader({ children, className, ...props }) {
|
196
|
-
return (
|
197
|
-
<div
|
198
|
-
className={classnames(
|
199
|
-
'card-header card-action-header d-flex align-items-baseline',
|
200
|
-
className
|
201
|
-
)}
|
202
|
-
{...props}>
|
203
|
-
{children}
|
204
|
-
</div>
|
205
|
-
);
|
206
|
-
}
|
207
|
-
|
208
|
-
CardActionHeader.Title = function Title({ children, className, ...props }) {
|
209
|
-
return (
|
210
|
-
<strong className={classnames('mr-auto', className)} {...props}>
|
211
|
-
{children}
|
212
|
-
</strong>
|
213
|
-
);
|
214
|
-
};
|
215
|
-
|
216
|
-
CardActionHeader.Actions = function Actions({ children, className, ...props }) {
|
217
|
-
return (
|
218
|
-
<div
|
219
|
-
className={classnames('card-action-header-actions', className)}
|
220
|
-
{...props}>
|
221
|
-
{children}
|
222
|
-
</div>
|
223
|
-
);
|
224
|
-
};
|
@@ -1,108 +0,0 @@
|
|
1
|
-
import React from 'react';
|
2
|
-
import { render, screen, waitFor, within } from '@testing-library/react';
|
3
|
-
import userEvent from '@testing-library/user-event';
|
4
|
-
import { FormTestBase } from '../__Tests__';
|
5
|
-
import FormInput from '../FormInput';
|
6
|
-
import FormInputArray from './FormInputArray';
|
7
|
-
|
8
|
-
describe('FormInputArray', () => {
|
9
|
-
it('renders without crashing', () => {
|
10
|
-
render(
|
11
|
-
<FormTestBase>
|
12
|
-
<FormInputArray
|
13
|
-
label="Names"
|
14
|
-
name="things"
|
15
|
-
component={FirstLastNameInput}
|
16
|
-
/>
|
17
|
-
</FormTestBase>
|
18
|
-
);
|
19
|
-
});
|
20
|
-
|
21
|
-
it('has matching snapshot', () => {
|
22
|
-
const renderResult = render(
|
23
|
-
<FormTestBase>
|
24
|
-
<FormInputArray
|
25
|
-
label="Names"
|
26
|
-
name="things"
|
27
|
-
component={FirstLastNameInput}
|
28
|
-
/>
|
29
|
-
</FormTestBase>
|
30
|
-
);
|
31
|
-
expect(renderResult.asFragment()).toMatchSnapshot();
|
32
|
-
});
|
33
|
-
|
34
|
-
it('renders a simple two input array', async () => {
|
35
|
-
render(
|
36
|
-
<FormTestBase>
|
37
|
-
<FormInputArray
|
38
|
-
label="Names"
|
39
|
-
name="things"
|
40
|
-
component={FirstLastNameInput}
|
41
|
-
/>
|
42
|
-
</FormTestBase>
|
43
|
-
);
|
44
|
-
const addButton = screen.getByText('Add New');
|
45
|
-
userEvent.click(addButton);
|
46
|
-
userEvent.click(addButton);
|
47
|
-
const firstNameElements = await screen.findAllByLabelText('First Name');
|
48
|
-
expect(firstNameElements).toHaveLength(2);
|
49
|
-
});
|
50
|
-
|
51
|
-
it('adds "removed" class to deleted items specified in initialValues', async () => {
|
52
|
-
const initialValues = {
|
53
|
-
things: [
|
54
|
-
{
|
55
|
-
id: 1,
|
56
|
-
firstName: 'John',
|
57
|
-
lastName: 'Doe',
|
58
|
-
},
|
59
|
-
],
|
60
|
-
};
|
61
|
-
|
62
|
-
render(
|
63
|
-
<FormTestBase initialValues={initialValues}>
|
64
|
-
<FormInputArray
|
65
|
-
label="Names"
|
66
|
-
name="things"
|
67
|
-
component={FirstLastNameInput}
|
68
|
-
/>
|
69
|
-
</FormTestBase>
|
70
|
-
);
|
71
|
-
|
72
|
-
const item = screen.getByRole(/listitem/i);
|
73
|
-
const deleteButton = within(item).getByTitle(/remove item/i);
|
74
|
-
expect(item).not.toHaveClass('removed');
|
75
|
-
userEvent.click(deleteButton);
|
76
|
-
expect(item).toHaveClass('removed');
|
77
|
-
});
|
78
|
-
|
79
|
-
it('removes deleted items not specified in initialValues', async () => {
|
80
|
-
render(
|
81
|
-
<FormTestBase>
|
82
|
-
<FormInputArray
|
83
|
-
label="Names"
|
84
|
-
name="things"
|
85
|
-
component={FirstLastNameInput}
|
86
|
-
/>
|
87
|
-
</FormTestBase>
|
88
|
-
);
|
89
|
-
|
90
|
-
const addButton = screen.getByText(/add new/i);
|
91
|
-
userEvent.click(addButton);
|
92
|
-
const item = screen.getByRole(/listitem/i);
|
93
|
-
const deleteButton = within(item).getByTitle(/remove item/i);
|
94
|
-
userEvent.click(deleteButton);
|
95
|
-
await waitFor(() => {
|
96
|
-
expect(screen.queryByRole(/listitem/i)).not.toBeInTheDocument();
|
97
|
-
});
|
98
|
-
});
|
99
|
-
});
|
100
|
-
|
101
|
-
function FirstLastNameInput() {
|
102
|
-
return (
|
103
|
-
<>
|
104
|
-
<FormInput label="First Name" name="firstName" type="text" />
|
105
|
-
<FormInput label="Last Name" name="lastName" type="text" />
|
106
|
-
</>
|
107
|
-
);
|
108
|
-
}
|