|
1 |
| -import { FormikContextType } from "formik/dist/types" |
| 1 | +import { FormikContextType, getIn } from "formik" |
| 2 | +import { ChangeEvent, ChangeEventHandler, FocusEventHandler } from "react" |
2 | 3 |
|
3 | 4 | export * from "./FormCloseButton"
|
4 | 5 | export * from "./FormSection"
|
5 | 6 | export * from "./FormDropdownField"
|
6 | 7 | export * from "./FormTextField"
|
7 | 8 | export * from "./FormTitle"
|
8 | 9 |
|
9 |
| -export function getFormHelpers<T>(form: FormikContextType<T>, name: keyof T) { |
10 |
| - const touched = form.touched[name] |
11 |
| - const errors = form.errors[name] |
12 |
| - return { |
13 |
| - ...form.getFieldProps(name), |
14 |
| - id: name, |
15 |
| - error: touched && Boolean(errors), |
16 |
| - helperText: touched && errors |
17 |
| - } |
| 10 | +interface FormHelpers { |
| 11 | + name: string |
| 12 | + onBlur: FocusEventHandler |
| 13 | + onChange: ChangeEventHandler |
| 14 | + id: string |
| 15 | + value?: string | number |
| 16 | + error: boolean |
| 17 | + helperText?: string |
| 18 | +} |
| 19 | + |
| 20 | +export function getFormHelpers<T>(form: FormikContextType<T>, name: string): FormHelpers { |
| 21 | + // getIn is a util function from Formik that gets at any depth of nesting, and is necessary for the types to work |
| 22 | + const touched = getIn(form.touched, name) |
| 23 | + const errors = getIn(form.errors, name) |
| 24 | + return { |
| 25 | + ...form.getFieldProps(name), |
| 26 | + id: name, |
| 27 | + error: touched && Boolean(errors), |
| 28 | + helperText: touched && errors, |
18 | 29 | }
|
| 30 | +} |
19 | 31 |
|
20 |
| -export function onChangeTrimmed<T>(form: FormikContextType<T>) { |
21 |
| - return (event: React.ChangeEvent<HTMLInputElement>) => { |
22 |
| - event.target.value = event?.target?.value?.trim() |
| 32 | +export function onChangeTrimmed<T>(form: FormikContextType<T>): (event: ChangeEvent<HTMLInputElement>) => void { |
| 33 | + return (event: ChangeEvent<HTMLInputElement>): void => { |
| 34 | + event.target.value = event.target.value.trim() |
23 | 35 | form.handleChange(event)
|
24 | 36 | }
|
25 | 37 | }
|
0 commit comments