Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 108c77e

Browse files
committed
Lint, type fixes
1 parent e1e12d8 commit 108c77e

File tree

2 files changed

+32
-20
lines changed

2 files changed

+32
-20
lines changed

site/src/components/Form/index.test.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { FormikContextType } from 'formik/dist/types'
2-
import { getFormHelpers, onChangeTrimmed } from './index'
1+
import { FormikContextType } from "formik/dist/types"
2+
import { getFormHelpers, onChangeTrimmed } from "./index"
33

44
interface TestType {
55
untouchedGoodField: string
@@ -10,12 +10,12 @@ interface TestType {
1010

1111
const mockHandleChange = jest.fn()
1212

13-
const form = {
13+
const form = {
1414
errors: {
1515
untouchedGoodField: undefined,
1616
untouchedBadField: "oops!",
1717
touchedGoodField: undefined,
18-
touchedBadField: 'oops!',
18+
touchedBadField: "oops!",
1919
},
2020
touched: {
2121
untouchedGoodField: false,
@@ -30,9 +30,9 @@ const form = {
3030
name,
3131
onBlur: jest.fn(),
3232
onChange: jest.fn(),
33-
value: ''
33+
value: "",
3434
}
35-
}
35+
},
3636
} as unknown as FormikContextType<TestType>
3737

3838
describe("form util functions", () => {
@@ -66,7 +66,7 @@ describe("form util functions", () => {
6666

6767
describe("onChangeTrimmed", () => {
6868
it("calls handleChange with trimmed value", () => {
69-
const event = { target: { value: " hello "}} as React.ChangeEvent<HTMLInputElement>
69+
const event = { target: { value: " hello " } } as React.ChangeEvent<HTMLInputElement>
7070
onChangeTrimmed<TestType>(form)(event)
7171
expect(mockHandleChange).toHaveBeenCalledWith({ target: { value: "hello" } })
7272
})

site/src/components/Form/index.ts

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,37 @@
1-
import { FormikContextType } from "formik/dist/types"
1+
import { FormikContextType, getIn } from "formik"
2+
import { ChangeEvent, ChangeEventHandler, FocusEventHandler } from "react"
23

34
export * from "./FormCloseButton"
45
export * from "./FormSection"
56
export * from "./FormDropdownField"
67
export * from "./FormTextField"
78
export * from "./FormTitle"
89

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,
1829
}
30+
}
1931

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()
2335
form.handleChange(event)
2436
}
2537
}

0 commit comments

Comments
 (0)