envoc-form 3.3.0 → 4.0.1-2
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/DatePicker/DateOnlyDatePickerGroup.d.ts +10 -0
- package/es/DatePicker/DateOnlyDatePickerGroup.js +23 -0
- package/es/DatePicker/DatePickerGroup.d.ts +8 -0
- package/es/DatePicker/DatePickerGroup.js +60 -0
- package/es/DatePicker/DatePickerHelper.d.ts +3 -0
- package/es/DatePicker/DatePickerHelper.js +1 -0
- package/es/DatePicker/StringDatePickerGroup.d.ts +5 -0
- package/es/DatePicker/StringDatePickerGroup.js +19 -0
- 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/StandAloneInput.d.ts +9 -0
- package/es/Field/StandAloneInput.js +49 -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/TextArea/TextAreaGroup.d.ts +8 -0
- package/es/TextArea/TextAreaGroup.js +33 -0
- 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 +71 -0
- package/es/index.js +47 -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/DatePicker/DateOnlyDatePickerGroup.d.ts +10 -0
- package/lib/DatePicker/DateOnlyDatePickerGroup.js +29 -0
- package/lib/DatePicker/DatePickerGroup.d.ts +8 -0
- package/lib/DatePicker/DatePickerGroup.js +66 -0
- package/lib/DatePicker/DatePickerHelper.d.ts +3 -0
- package/lib/DatePicker/DatePickerHelper.js +2 -0
- package/lib/DatePicker/StringDatePickerGroup.d.ts +5 -0
- package/lib/DatePicker/StringDatePickerGroup.js +25 -0
- 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/StandAloneInput.d.ts +9 -0
- package/lib/Field/StandAloneInput.js +75 -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/TextArea/TextAreaGroup.d.ts +8 -0
- package/lib/TextArea/TextAreaGroup.js +38 -0
- 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 +71 -0
- package/lib/index.js +112 -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 +179 -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/DatePicker/DateOnlyDatePickerGroup.tsx +24 -0
- package/src/DatePicker/DatePicker.test.tsx +48 -0
- package/src/DatePicker/DatePickerGroup.tsx +75 -0
- package/src/DatePicker/DatePickerHelper.ts +4 -0
- package/src/DatePicker/StringDatePickerGroup.tsx +14 -0
- package/src/DatePicker/__snapshots__/DatePicker.test.tsx.snap +151 -0
- package/src/Field/CustomFieldInputProps.ts +10 -0
- package/src/Field/CustomFieldMetaProps.ts +5 -0
- package/src/Field/Field.tsx +93 -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/StandAloneInput.tsx +51 -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 +33 -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 +48 -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 +30 -0
- package/src/Input/__Tests__/__snapshots__/MoneyInputGroup.test.tsx.snap +32 -0
- package/src/Input/__Tests__/__snapshots__/NumberInputGroup.test.tsx.snap +30 -0
- package/src/Input/__Tests__/__snapshots__/StringInputGroup.test.tsx.snap +29 -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/TextArea/TextAreaGroup.tsx +55 -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 +149 -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/DatePickerInput.js +0 -95
- 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/DatePickerInput.js +0 -113
- 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
@@ -0,0 +1,74 @@
|
|
1
|
+
import type { History, Blocker, Transition } from 'history';
|
2
|
+
import { ContextType, useContext, useEffect } from 'react';
|
3
|
+
// see: https://gist.github.com/rmorse/426ffcc579922a82749934826fa9f743
|
4
|
+
import {
|
5
|
+
Navigator as BaseNavigator,
|
6
|
+
UNSAFE_NavigationContext as NavigationContext,
|
7
|
+
} from 'react-router-dom';
|
8
|
+
import { useFormikContext } from 'formik';
|
9
|
+
|
10
|
+
interface Navigator extends BaseNavigator {
|
11
|
+
block: History['block'];
|
12
|
+
}
|
13
|
+
// see: https://github.com/remix-run/react-router/issues/8139#issuecomment-1023105785
|
14
|
+
type NavigationContextWithBlock = ContextType<typeof NavigationContext> & {
|
15
|
+
navigator: Navigator;
|
16
|
+
};
|
17
|
+
|
18
|
+
export interface FormBasedPreventNavigationProps {
|
19
|
+
ignoreLostChanges?: boolean;
|
20
|
+
promptMessage?: string;
|
21
|
+
}
|
22
|
+
export default function FormBasedPreventNavigation({
|
23
|
+
ignoreLostChanges,
|
24
|
+
promptMessage = 'Changes you made may not be saved.',
|
25
|
+
}: FormBasedPreventNavigationProps) {
|
26
|
+
const { dirty, isSubmitting } = useFormikContext();
|
27
|
+
const preventNavigate = !ignoreLostChanges && dirty && !isSubmitting;
|
28
|
+
|
29
|
+
const { navigator } = useContext(
|
30
|
+
NavigationContext
|
31
|
+
) as NavigationContextWithBlock;
|
32
|
+
|
33
|
+
useEffect(() => {
|
34
|
+
if (!preventNavigate) {
|
35
|
+
return;
|
36
|
+
}
|
37
|
+
|
38
|
+
// TODO: https://reactrouter.com/docs/en/v6/upgrading/v5#prompt-is-not-currently-supported
|
39
|
+
// this is a workaround until we get native support for prompt on navigate
|
40
|
+
|
41
|
+
const blocker: Blocker = (tx) => {
|
42
|
+
if (window.confirm(promptMessage)) {
|
43
|
+
tx.retry();
|
44
|
+
}
|
45
|
+
};
|
46
|
+
const unblock = navigator.block((tx: Transition) => {
|
47
|
+
const autoUnblockingTx = {
|
48
|
+
...tx,
|
49
|
+
retry() {
|
50
|
+
// Automatically unblock the transition so it can play all the way
|
51
|
+
// through before retrying it. TODO: Figure out how to re-enable
|
52
|
+
// this block if the transition is cancelled for some reason.
|
53
|
+
unblock();
|
54
|
+
tx.retry();
|
55
|
+
},
|
56
|
+
};
|
57
|
+
|
58
|
+
blocker(autoUnblockingTx);
|
59
|
+
});
|
60
|
+
|
61
|
+
window.addEventListener('beforeunload', beforeUnload);
|
62
|
+
return () => {
|
63
|
+
unblock();
|
64
|
+
window.removeEventListener('beforeunload', beforeUnload);
|
65
|
+
};
|
66
|
+
|
67
|
+
function beforeUnload(e: BeforeUnloadEvent) {
|
68
|
+
e.preventDefault();
|
69
|
+
e.returnValue = promptMessage;
|
70
|
+
}
|
71
|
+
}, [preventNavigate, promptMessage, navigator]);
|
72
|
+
|
73
|
+
return null;
|
74
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
|
3
|
+
export interface ServerErrors {
|
4
|
+
[path: string]: string;
|
5
|
+
}
|
6
|
+
export interface ServerErrorContextProps {
|
7
|
+
errors: ServerErrors;
|
8
|
+
getError: (path: string) => string | undefined;
|
9
|
+
setError: (path: string, errorMessage: string | undefined) => void;
|
10
|
+
}
|
11
|
+
export const ServerErrorContext = React.createContext<ServerErrorContextProps>({
|
12
|
+
errors: {},
|
13
|
+
getError: (path: string) => {
|
14
|
+
return undefined;
|
15
|
+
},
|
16
|
+
setError: (path: string, errorMessage: string | undefined) => {},
|
17
|
+
});
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import { useFormikContext } from 'formik';
|
2
|
+
import SubmitFormButton from './SubmitFormButton';
|
3
|
+
|
4
|
+
export interface FormActionsProps {
|
5
|
+
allowPristineSubmit?: boolean;
|
6
|
+
handleCancel?: () => void;
|
7
|
+
disabled?: boolean;
|
8
|
+
}
|
9
|
+
export default function FormActions({
|
10
|
+
allowPristineSubmit,
|
11
|
+
handleCancel,
|
12
|
+
disabled,
|
13
|
+
}: FormActionsProps) {
|
14
|
+
const { isSubmitting } = useFormikContext();
|
15
|
+
return (
|
16
|
+
<>
|
17
|
+
<SubmitFormButton
|
18
|
+
className="form-actions"
|
19
|
+
allowPristineSubmit={allowPristineSubmit}
|
20
|
+
disabled={disabled}
|
21
|
+
/>
|
22
|
+
<button
|
23
|
+
type="button"
|
24
|
+
className="form-actions cancel-form-button"
|
25
|
+
disabled={isSubmitting || disabled}
|
26
|
+
onClick={handleCancel || goBack}>
|
27
|
+
Cancel
|
28
|
+
</button>
|
29
|
+
</>
|
30
|
+
);
|
31
|
+
function goBack() {
|
32
|
+
window.history.back();
|
33
|
+
}
|
34
|
+
}
|
package/src/Group.tsx
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
import classNames from 'classnames';
|
2
|
+
import FieldErrorScrollTarget from './Field/FieldErrorScrollTarget';
|
3
|
+
import { InjectedFieldProps } from './Field/InjectedFieldProps';
|
4
|
+
|
5
|
+
export interface GroupProps extends InjectedFieldProps<any> {
|
6
|
+
className?: string;
|
7
|
+
|
8
|
+
children: React.ReactNode;
|
9
|
+
|
10
|
+
/** simple text label before the input */
|
11
|
+
label?: string;
|
12
|
+
|
13
|
+
/** simple helper text after the input*/
|
14
|
+
helpText?: string | React.ReactNode;
|
15
|
+
|
16
|
+
disabled?: boolean;
|
17
|
+
}
|
18
|
+
|
19
|
+
/** contains standard field bits like a label, helper text, error scroll target, validation message container, etc */
|
20
|
+
export default function Group({
|
21
|
+
className,
|
22
|
+
children,
|
23
|
+
label,
|
24
|
+
helpText,
|
25
|
+
meta,
|
26
|
+
input,
|
27
|
+
disabled,
|
28
|
+
}: GroupProps) {
|
29
|
+
return (
|
30
|
+
<div
|
31
|
+
className={classNames(className, 'group', {
|
32
|
+
'is-invalid': meta.error,
|
33
|
+
disabled: disabled,
|
34
|
+
})}>
|
35
|
+
<FieldErrorScrollTarget />
|
36
|
+
{meta.warning && <div className="warning">{meta.warning}</div>}
|
37
|
+
<label htmlFor={input.id}>{label}</label>
|
38
|
+
{children}
|
39
|
+
{meta.error && <div className="error">{meta.error}</div>}
|
40
|
+
{helpText && <div className="help">{helpText}</div>}
|
41
|
+
</div>
|
42
|
+
);
|
43
|
+
}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
import React, { LegacyRef } from 'react';
|
2
|
+
import classNames from 'classnames';
|
3
|
+
import InputGroupWithRef, { InputGroupProps } from './InputGroup';
|
4
|
+
import useStandardFormInput from '../Field/useStandardField';
|
5
|
+
|
6
|
+
// TODO: make className tailwind-able instead of css. make it typeof string ????
|
7
|
+
// or should we just give a div a className and let each project decide? (this seems to be the patern)
|
8
|
+
export interface IconInputGroupProps
|
9
|
+
extends Omit<
|
10
|
+
InputGroupProps<string | undefined>,
|
11
|
+
'onChange' | 'type' | 'value'
|
12
|
+
> {
|
13
|
+
type?: 'color' | 'email' | 'search' | 'tel' | 'text' | 'url';
|
14
|
+
icon: React.ReactNode;
|
15
|
+
helpText?: string;
|
16
|
+
}
|
17
|
+
|
18
|
+
function IconInputGroup(
|
19
|
+
{ icon, className, ...rest }: IconInputGroupProps,
|
20
|
+
ref: LegacyRef<HTMLInputElement>
|
21
|
+
) {
|
22
|
+
const { input } = rest;
|
23
|
+
|
24
|
+
return (
|
25
|
+
<>
|
26
|
+
<InputGroupWithRef
|
27
|
+
icon={icon}
|
28
|
+
ref={ref}
|
29
|
+
className={classNames(className, 'icon-input-group')}
|
30
|
+
value={input.value || ''}
|
31
|
+
onChange={(e) => {
|
32
|
+
if (!e.target.value) {
|
33
|
+
input.onChange(undefined);
|
34
|
+
} else {
|
35
|
+
input.onChange(e.target.value);
|
36
|
+
}
|
37
|
+
}}
|
38
|
+
{...rest}
|
39
|
+
/>
|
40
|
+
</>
|
41
|
+
);
|
42
|
+
}
|
43
|
+
|
44
|
+
const IconInputGroupWithRef = React.forwardRef(
|
45
|
+
IconInputGroup
|
46
|
+
) as React.ComponentType<IconInputGroupProps>;
|
47
|
+
|
48
|
+
export default IconInputGroupWithRef;
|
@@ -0,0 +1,57 @@
|
|
1
|
+
import React, { ChangeEventHandler, LegacyRef } from 'react';
|
2
|
+
import classNames from 'classnames';
|
3
|
+
import { InjectedFieldProps } from '../Field/InjectedFieldProps';
|
4
|
+
import Group, { GroupProps } from '../Group';
|
5
|
+
|
6
|
+
export interface InputGroupProps<TValue>
|
7
|
+
extends InjectedFieldProps<TValue>,
|
8
|
+
Omit<
|
9
|
+
React.HTMLProps<HTMLInputElement>,
|
10
|
+
keyof InjectedFieldProps<any> | 'children' | 'className' | 'label'
|
11
|
+
>,
|
12
|
+
Omit<GroupProps, keyof InjectedFieldProps<any> | 'children'> {
|
13
|
+
onChange: ChangeEventHandler<HTMLInputElement>;
|
14
|
+
value: string | number;
|
15
|
+
icon?: React.ReactNode;
|
16
|
+
}
|
17
|
+
|
18
|
+
/** generic controlled <input/> wrapped by a Group */
|
19
|
+
function InputGroup<TValue>(
|
20
|
+
{
|
21
|
+
input,
|
22
|
+
meta,
|
23
|
+
label,
|
24
|
+
helpText,
|
25
|
+
className,
|
26
|
+
disabled,
|
27
|
+
onChange,
|
28
|
+
value,
|
29
|
+
icon,
|
30
|
+
...rest
|
31
|
+
}: InputGroupProps<TValue>,
|
32
|
+
ref: LegacyRef<HTMLInputElement>
|
33
|
+
) {
|
34
|
+
return (
|
35
|
+
<Group
|
36
|
+
input={input}
|
37
|
+
meta={meta}
|
38
|
+
disabled={disabled}
|
39
|
+
label={label}
|
40
|
+
helpText={helpText}
|
41
|
+
className={classNames(className, 'input-group')}>
|
42
|
+
{icon}
|
43
|
+
<input
|
44
|
+
{...input}
|
45
|
+
{...rest}
|
46
|
+
value={value}
|
47
|
+
onChange={onChange}
|
48
|
+
ref={ref}
|
49
|
+
className={classNames(className, 'input-group')}
|
50
|
+
/>
|
51
|
+
</Group>
|
52
|
+
);
|
53
|
+
}
|
54
|
+
|
55
|
+
const InputGroupWithRef = React.forwardRef(InputGroup) as typeof InputGroup;
|
56
|
+
|
57
|
+
export default InputGroupWithRef;
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import React, { LegacyRef } from 'react';
|
2
|
+
import classNames from 'classnames';
|
3
|
+
import InputGroup, { InputGroupProps } from './InputGroup';
|
4
|
+
|
5
|
+
export interface MoneyInputGroupProps
|
6
|
+
extends Omit<
|
7
|
+
InputGroupProps<number | undefined>,
|
8
|
+
'onChange' | 'type' | 'value'
|
9
|
+
> {
|
10
|
+
parseFunc?: typeof parseInt | typeof parseFloat;
|
11
|
+
}
|
12
|
+
|
13
|
+
function MoneyInputGroup(
|
14
|
+
{ parseFunc, className, ...rest }: MoneyInputGroupProps,
|
15
|
+
ref: LegacyRef<HTMLInputElement>
|
16
|
+
) {
|
17
|
+
const effectiveParse = parseFunc ?? parseFloat;
|
18
|
+
const { input } = rest;
|
19
|
+
|
20
|
+
return (
|
21
|
+
<InputGroup
|
22
|
+
ref={ref}
|
23
|
+
step={0.01}
|
24
|
+
min={0}
|
25
|
+
{...rest}
|
26
|
+
type="number"
|
27
|
+
className={classNames(className, 'money-group')}
|
28
|
+
value={input.value || ''}
|
29
|
+
onChange={(e) => {
|
30
|
+
if (!e.target.value) {
|
31
|
+
input.onChange(undefined);
|
32
|
+
} else {
|
33
|
+
input.onChange(effectiveParse(e.target.value));
|
34
|
+
}
|
35
|
+
}}
|
36
|
+
/>
|
37
|
+
);
|
38
|
+
}
|
39
|
+
|
40
|
+
const MoneyInputGroupWithRef = React.forwardRef(
|
41
|
+
MoneyInputGroup
|
42
|
+
) as React.FunctionComponent<MoneyInputGroupProps>;
|
43
|
+
|
44
|
+
export default MoneyInputGroupWithRef;
|
@@ -0,0 +1,42 @@
|
|
1
|
+
import React, { LegacyRef } from 'react';
|
2
|
+
import classNames from 'classnames';
|
3
|
+
import InputGroup, { InputGroupProps } from './InputGroup';
|
4
|
+
|
5
|
+
export interface NumberInputGroupProps
|
6
|
+
extends Omit<
|
7
|
+
InputGroupProps<number | undefined>,
|
8
|
+
'onChange' | 'type' | 'value'
|
9
|
+
> {
|
10
|
+
parseFunc?: typeof parseInt | typeof parseFloat;
|
11
|
+
}
|
12
|
+
|
13
|
+
function NumberInputGroup(
|
14
|
+
{ parseFunc, className, ...rest }: NumberInputGroupProps,
|
15
|
+
ref: LegacyRef<HTMLInputElement>
|
16
|
+
) {
|
17
|
+
const effectiveParse = parseFunc ?? parseFloat;
|
18
|
+
const { input } = rest;
|
19
|
+
|
20
|
+
return (
|
21
|
+
<InputGroup
|
22
|
+
ref={ref}
|
23
|
+
{...rest}
|
24
|
+
type="number"
|
25
|
+
className={classNames(className, 'number-group')}
|
26
|
+
value={input.value || ''}
|
27
|
+
onChange={(e) => {
|
28
|
+
if (!e.target.value) {
|
29
|
+
input.onChange(undefined);
|
30
|
+
} else {
|
31
|
+
input.onChange(effectiveParse(e.target.value));
|
32
|
+
}
|
33
|
+
}}
|
34
|
+
/>
|
35
|
+
);
|
36
|
+
}
|
37
|
+
|
38
|
+
const NumberInputGroupWithRef = React.forwardRef(
|
39
|
+
NumberInputGroup
|
40
|
+
) as React.ComponentType<NumberInputGroupProps>;
|
41
|
+
|
42
|
+
export default NumberInputGroupWithRef;
|
@@ -0,0 +1,48 @@
|
|
1
|
+
import React, { LegacyRef } from 'react';
|
2
|
+
import classNames from 'classnames';
|
3
|
+
import InputGroup, { InputGroupProps } from './InputGroup';
|
4
|
+
|
5
|
+
export interface StringInputGroupProps
|
6
|
+
extends Omit<
|
7
|
+
InputGroupProps<string | undefined>,
|
8
|
+
'onChange' | 'type' | 'value'
|
9
|
+
> {
|
10
|
+
type?:
|
11
|
+
| 'color'
|
12
|
+
| 'email'
|
13
|
+
| 'search'
|
14
|
+
| 'tel'
|
15
|
+
| 'text'
|
16
|
+
| 'url'
|
17
|
+
| 'password'
|
18
|
+
| 'textarea';
|
19
|
+
}
|
20
|
+
|
21
|
+
function StringInputGroup(
|
22
|
+
{ className, ...rest }: StringInputGroupProps,
|
23
|
+
ref: LegacyRef<HTMLInputElement>
|
24
|
+
) {
|
25
|
+
const { input } = rest;
|
26
|
+
|
27
|
+
return (
|
28
|
+
<InputGroup
|
29
|
+
ref={ref}
|
30
|
+
{...rest}
|
31
|
+
className={classNames(className, 'string-group')}
|
32
|
+
value={input.value || ''}
|
33
|
+
onChange={(e) => {
|
34
|
+
if (!e.target.value) {
|
35
|
+
input.onChange(undefined);
|
36
|
+
} else {
|
37
|
+
input.onChange(e.target.value);
|
38
|
+
}
|
39
|
+
}}
|
40
|
+
/>
|
41
|
+
);
|
42
|
+
}
|
43
|
+
|
44
|
+
const StringInputGroupWithRef = React.forwardRef(
|
45
|
+
StringInputGroup
|
46
|
+
) as React.ComponentType<StringInputGroupProps>;
|
47
|
+
|
48
|
+
export default StringInputGroupWithRef;
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { render } from '@testing-library/react';
|
3
|
+
import FormTestBase from '../../__Tests__/FormTestBase';
|
4
|
+
import IconInputGroup from '../IconInputGroup';
|
5
|
+
|
6
|
+
describe('IconInputGroup', () => {
|
7
|
+
it('renders without crashing', () => {
|
8
|
+
render(
|
9
|
+
<FormTestBase>
|
10
|
+
{({ Field }) => (
|
11
|
+
<Field
|
12
|
+
name="nameWithIcon"
|
13
|
+
Component={IconInputGroup}
|
14
|
+
icon={<span>Pretend this is an icon</span>}
|
15
|
+
/>
|
16
|
+
)}
|
17
|
+
</FormTestBase>
|
18
|
+
);
|
19
|
+
});
|
20
|
+
|
21
|
+
it('has matching snapshot', () => {
|
22
|
+
const renderResult = render(
|
23
|
+
<FormTestBase>
|
24
|
+
{({ Field }) => (
|
25
|
+
<Field
|
26
|
+
name="nameWithIcon"
|
27
|
+
Component={IconInputGroup}
|
28
|
+
icon={<span>Pretend this is an icon</span>}
|
29
|
+
/>
|
30
|
+
)}
|
31
|
+
</FormTestBase>
|
32
|
+
);
|
33
|
+
expect(renderResult.asFragment()).toMatchSnapshot();
|
34
|
+
});
|
35
|
+
});
|
@@ -0,0 +1,37 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { render } from '@testing-library/react';
|
3
|
+
import FormTestBase from '../../__Tests__/FormTestBase';
|
4
|
+
import MoneyInputGroup from '../MoneyInputGroup';
|
5
|
+
|
6
|
+
describe('MoneyInputGroup', () => {
|
7
|
+
it('renders without crashing', () => {
|
8
|
+
render(
|
9
|
+
<FormTestBase>
|
10
|
+
{({ Field }) => (
|
11
|
+
<Field
|
12
|
+
name="yearlySalaryUSD"
|
13
|
+
Component={MoneyInputGroup}
|
14
|
+
label="Salary"
|
15
|
+
className="something-here"
|
16
|
+
/>
|
17
|
+
)}
|
18
|
+
</FormTestBase>
|
19
|
+
);
|
20
|
+
});
|
21
|
+
|
22
|
+
it('has matching snapshot', () => {
|
23
|
+
const renderResult = render(
|
24
|
+
<FormTestBase>
|
25
|
+
{({ Field }) => (
|
26
|
+
<Field
|
27
|
+
name="yearlySalaryUSD"
|
28
|
+
Component={MoneyInputGroup}
|
29
|
+
label="Salary"
|
30
|
+
className="something-here"
|
31
|
+
/>
|
32
|
+
)}
|
33
|
+
</FormTestBase>
|
34
|
+
);
|
35
|
+
expect(renderResult.asFragment()).toMatchSnapshot();
|
36
|
+
});
|
37
|
+
});
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { render } from '@testing-library/react';
|
3
|
+
import FormTestBase from '../../__Tests__/FormTestBase';
|
4
|
+
import NumberInputGroup from '../NumberInputGroup';
|
5
|
+
|
6
|
+
describe('NumberInputGroup', () => {
|
7
|
+
it('renders without crashing', () => {
|
8
|
+
render(
|
9
|
+
<FormTestBase>
|
10
|
+
{({ Field }) => (
|
11
|
+
<Field
|
12
|
+
name="numberOfArms"
|
13
|
+
Component={NumberInputGroup}
|
14
|
+
label="Arm Count"
|
15
|
+
/>
|
16
|
+
)}
|
17
|
+
</FormTestBase>
|
18
|
+
);
|
19
|
+
});
|
20
|
+
|
21
|
+
it('has matching snapshot', () => {
|
22
|
+
const renderResult = render(
|
23
|
+
<FormTestBase>
|
24
|
+
{({ Field }) => (
|
25
|
+
<Field
|
26
|
+
name="numberOfArms"
|
27
|
+
Component={NumberInputGroup}
|
28
|
+
label="Arm Count"
|
29
|
+
/>
|
30
|
+
)}
|
31
|
+
</FormTestBase>
|
32
|
+
);
|
33
|
+
expect(renderResult.asFragment()).toMatchSnapshot();
|
34
|
+
});
|
35
|
+
});
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { render } from '@testing-library/react';
|
3
|
+
import FormTestBase from '../../__Tests__/FormTestBase';
|
4
|
+
import StringInputGroup from '../StringInputGroup';
|
5
|
+
|
6
|
+
describe('StringInputGroup', () => {
|
7
|
+
it('renders without crashing', () => {
|
8
|
+
render(
|
9
|
+
<FormTestBase>
|
10
|
+
{({ Field }) => (
|
11
|
+
<Field name="name" Component={StringInputGroup} label="Name" />
|
12
|
+
)}
|
13
|
+
</FormTestBase>
|
14
|
+
);
|
15
|
+
});
|
16
|
+
|
17
|
+
it('has matching snapshot', () => {
|
18
|
+
const renderResult = render(
|
19
|
+
<FormTestBase>
|
20
|
+
{({ Field }) => (
|
21
|
+
<Field name="name" Component={StringInputGroup} label="Name" />
|
22
|
+
)}
|
23
|
+
</FormTestBase>
|
24
|
+
);
|
25
|
+
expect(renderResult.asFragment()).toMatchSnapshot();
|
26
|
+
});
|
27
|
+
});
|
@@ -0,0 +1,30 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`IconInputGroup has matching snapshot 1`] = `
|
4
|
+
<DocumentFragment>
|
5
|
+
<form
|
6
|
+
action="#"
|
7
|
+
>
|
8
|
+
<div
|
9
|
+
class="icon-input-group input-group group"
|
10
|
+
>
|
11
|
+
<div
|
12
|
+
id="namewithicon-error-scroll-target"
|
13
|
+
style="display: none;"
|
14
|
+
/>
|
15
|
+
<label
|
16
|
+
for="nameWithIcon"
|
17
|
+
/>
|
18
|
+
<span>
|
19
|
+
Pretend this is an icon
|
20
|
+
</span>
|
21
|
+
<input
|
22
|
+
class="icon-input-group input-group"
|
23
|
+
id="nameWithIcon"
|
24
|
+
name="nameWithIcon"
|
25
|
+
value=""
|
26
|
+
/>
|
27
|
+
</div>
|
28
|
+
</form>
|
29
|
+
</DocumentFragment>
|
30
|
+
`;
|
@@ -0,0 +1,32 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`MoneyInputGroup has matching snapshot 1`] = `
|
4
|
+
<DocumentFragment>
|
5
|
+
<form
|
6
|
+
action="#"
|
7
|
+
>
|
8
|
+
<div
|
9
|
+
class="something-here money-group input-group group"
|
10
|
+
>
|
11
|
+
<div
|
12
|
+
id="yearlysalaryusd-error-scroll-target"
|
13
|
+
style="display: none;"
|
14
|
+
/>
|
15
|
+
<label
|
16
|
+
for="yearlySalaryUSD"
|
17
|
+
>
|
18
|
+
Salary
|
19
|
+
</label>
|
20
|
+
<input
|
21
|
+
class="something-here money-group input-group"
|
22
|
+
id="yearlySalaryUSD"
|
23
|
+
min="0"
|
24
|
+
name="yearlySalaryUSD"
|
25
|
+
step="0.01"
|
26
|
+
type="number"
|
27
|
+
value=""
|
28
|
+
/>
|
29
|
+
</div>
|
30
|
+
</form>
|
31
|
+
</DocumentFragment>
|
32
|
+
`;
|
@@ -0,0 +1,30 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`NumberInputGroup has matching snapshot 1`] = `
|
4
|
+
<DocumentFragment>
|
5
|
+
<form
|
6
|
+
action="#"
|
7
|
+
>
|
8
|
+
<div
|
9
|
+
class="number-group input-group group"
|
10
|
+
>
|
11
|
+
<div
|
12
|
+
id="numberofarms-error-scroll-target"
|
13
|
+
style="display: none;"
|
14
|
+
/>
|
15
|
+
<label
|
16
|
+
for="numberOfArms"
|
17
|
+
>
|
18
|
+
Arm Count
|
19
|
+
</label>
|
20
|
+
<input
|
21
|
+
class="number-group input-group"
|
22
|
+
id="numberOfArms"
|
23
|
+
name="numberOfArms"
|
24
|
+
type="number"
|
25
|
+
value=""
|
26
|
+
/>
|
27
|
+
</div>
|
28
|
+
</form>
|
29
|
+
</DocumentFragment>
|
30
|
+
`;
|
@@ -0,0 +1,29 @@
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
+
|
3
|
+
exports[`StringInputGroup has matching snapshot 1`] = `
|
4
|
+
<DocumentFragment>
|
5
|
+
<form
|
6
|
+
action="#"
|
7
|
+
>
|
8
|
+
<div
|
9
|
+
class="string-group input-group group"
|
10
|
+
>
|
11
|
+
<div
|
12
|
+
id="name-error-scroll-target"
|
13
|
+
style="display: none;"
|
14
|
+
/>
|
15
|
+
<label
|
16
|
+
for="name"
|
17
|
+
>
|
18
|
+
Name
|
19
|
+
</label>
|
20
|
+
<input
|
21
|
+
class="string-group input-group"
|
22
|
+
id="name"
|
23
|
+
name="name"
|
24
|
+
value=""
|
25
|
+
/>
|
26
|
+
</div>
|
27
|
+
</form>
|
28
|
+
</DocumentFragment>
|
29
|
+
`;
|