Skip to content

Commit 58da181

Browse files
committed
refactor(errors): use keys with dots
1 parent f994516 commit 58da181

File tree

4 files changed

+43
-37
lines changed

4 files changed

+43
-37
lines changed

packages/react/src/useForm.ts

+13-9
Original file line numberDiff line numberDiff line change
@@ -218,10 +218,12 @@ export default function useForm<TForm extends FormDataType>(
218218
const setError = useCallback(
219219
(fieldOrFields: FormDataKeys<TForm> | Record<FormDataKeys<TForm>, string>, maybeValue?: string) => {
220220
setErrors((errors) => {
221-
const newErrors =
222-
typeof fieldOrFields === 'string'
223-
? set(cloneDeep(errors), fieldOrFields, maybeValue)
224-
: Object.assign(cloneDeep(errors), fieldOrFields)
221+
const newErrors = {
222+
...errors,
223+
...(typeof fieldOrFields === 'string'
224+
? { [fieldOrFields]: maybeValue }
225+
: (fieldOrFields as Record<FormDataKeys<TForm>, string>)),
226+
}
225227
setHasErrors(Object.keys(newErrors).length > 0)
226228
return newErrors
227229
})
@@ -232,11 +234,13 @@ export default function useForm<TForm extends FormDataType>(
232234
const clearErrors = useCallback(
233235
(...fields) => {
234236
setErrors((errors) => {
235-
const newErrors = (Object.keys(errors) as Array<FormDataKeys<TForm>>).reduce((carry, field) => {
236-
return fields.length > 0 && !fields.includes(field)
237-
? set(carry, field, get(errors, field))
238-
: (carry as Record<FormDataKeys<TForm>, string>)
239-
}, {})
237+
const newErrors = (Object.keys(errors) as Array<FormDataKeys<TForm>>).reduce(
238+
(carry, field) => ({
239+
...carry,
240+
...(fields.length > 0 && !fields.includes(field) ? { [field]: errors[field] } : {}),
241+
}),
242+
{},
243+
)
240244
setHasErrors(Object.keys(newErrors).length > 0)
241245
return newErrors
242246
})

packages/svelte/src/useForm.ts

+11-9
Original file line numberDiff line numberDiff line change
@@ -120,21 +120,23 @@ export default function useForm<TForm extends FormDataType>(
120120
return this
121121
},
122122
setError(fieldOrFields: FormDataKeys<TForm> | Errors, maybeValue?: string) {
123-
this.setStore(
124-
'errors',
125-
typeof fieldOrFields === 'string'
126-
? set(this.errors, fieldOrFields, maybeValue)
127-
: { ...this.errors, ...fieldOrFields },
128-
)
123+
this.setStore('errors', {
124+
...this.errors,
125+
...((typeof fieldOrFields === 'string' ? { [fieldOrFields]: maybeValue } : fieldOrFields) as Errors),
126+
})
129127

130128
return this
131129
},
132130
clearErrors(...fields) {
133131
this.setStore(
134132
'errors',
135-
(Object.keys(this.errors) as FormDataKeys<TForm>[]).reduce((carry, field) => {
136-
return fields.length > 0 && !fields.includes(field) ? set(carry, field, get(this.errors, field)) : carry
137-
}, {}) as Errors,
133+
(Object.keys(this.errors) as FormDataKeys<TForm>[]).reduce(
134+
(carry, field) => ({
135+
...carry,
136+
...(fields.length > 0 && !fields.includes(field) ? { [field]: this.errors[field] } : {}),
137+
}),
138+
{},
139+
) as Errors,
138140
)
139141
return this
140142
},
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
<script>
2-
import { router } from '@inertiajs/svelte'
3-
import { onMount } from 'svelte'
2+
import { router } from '@inertiajs/svelte'
3+
import { onMount } from 'svelte'
44
5-
export let name = undefined;
6-
7-
onMount(() => {
8-
router.reload({only: ['name']})
9-
})
5+
export let name = undefined
106
7+
onMount(() => {
8+
router.reload({ only: ['name'] })
9+
})
1110
</script>
1211

13-
1412
<div>Name is {name}</div>

packages/vue3/src/useForm.ts

+13-11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { FormDataConvertible, FormDataKeys, Method, Progress, router, VisitOptions } from '@inertiajs/core'
2-
import { cloneDeep, get, has, isEqual, set } from 'lodash'
2+
import { cloneDeep, get, isEqual, set } from 'lodash'
33
import { reactive, watch } from 'vue'
44

55
type FormDataType = Record<string, FormDataConvertible>
@@ -95,29 +95,31 @@ export default function useForm<TForm extends FormDataType>(
9595
defaults = clonedData
9696
Object.assign(this, resolvedData)
9797
} else {
98-
;(fields as Array<FormDataKeys<TForm>>)
99-
.filter((key) => has(clonedData, key))
98+
Object.keys(resolvedData)
99+
.filter((key) => fields.includes(key))
100100
.forEach((key) => {
101-
set(defaults, key, get(clonedData, key))
102-
set(this, key, get(resolvedData, key))
101+
defaults[key] = clonedData[key]
102+
this[key] = resolvedData[key]
103103
})
104104
}
105105

106106
return this
107107
},
108108
setError(fieldOrFields: FormDataKeys<TForm> | Record<FormDataKeys<TForm>, string>, maybeValue?: string) {
109-
typeof fieldOrFields === 'string'
110-
? set(this.errors, fieldOrFields, maybeValue)
111-
: Object.assign(this.errors, fieldOrFields)
109+
Object.assign(this.errors, typeof fieldOrFields === 'string' ? { [fieldOrFields]: maybeValue } : fieldOrFields)
112110

113111
this.hasErrors = Object.keys(this.errors).length > 0
114112

115113
return this
116114
},
117115
clearErrors(...fields) {
118-
this.errors = Object.keys(this.errors).reduce((carry, field) => {
119-
return fields.length > 0 && !fields.includes(field) ? set(carry, field, get(this.errors, field)) : carry
120-
}, {})
116+
this.errors = Object.keys(this.errors).reduce(
117+
(carry, field) => ({
118+
...carry,
119+
...(fields.length > 0 && !fields.includes(field) ? { [field]: this.errors[field] } : {}),
120+
}),
121+
{},
122+
)
121123

122124
this.hasErrors = Object.keys(this.errors).length > 0
123125

0 commit comments

Comments
 (0)