Skip to content

Commit 9f9329d

Browse files
authored
Further improve Vue types (#91)
1 parent ba0163c commit 9f9329d

File tree

2 files changed

+32
-27
lines changed

2 files changed

+32
-27
lines changed

packages/vue-inertia/src/index.ts

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import { Config, NamedInputEvent, RequestMethod, SimpleValidationErrors, toSimpleValidationErrors, ValidationConfig, ValidationErrors, resolveUrl, resolveMethod } from 'laravel-precognition'
1+
import { NamedInputEvent, RequestMethod, SimpleValidationErrors, toSimpleValidationErrors, ValidationConfig, ValidationErrors, resolveUrl, resolveMethod } from 'laravel-precognition'
22
import { useForm as usePrecognitiveForm, client } from 'laravel-precognition-vue'
33
import { useForm as useInertiaForm } from '@inertiajs/vue3'
4+
import { VisitOptions } from '@inertiajs/core'
45
import { watchEffect } from 'vue'
56
import { Form } from './types'
67

@@ -107,12 +108,22 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
107108

108109
return form
109110
},
110-
setError(key: any, value?: any) {
111+
setError(key: (keyof Data)|Record<keyof Data, string>, value?: string) {
112+
let errors: SimpleValidationErrors
113+
114+
if (typeof key !== 'object') {
115+
if (typeof value === 'undefined') {
116+
throw new Error('The `value` is required.')
117+
}
118+
119+
errors = { key: value }
120+
} else {
121+
errors = key
122+
}
123+
111124
form.setErrors({
112125
...inertiaForm.errors,
113-
...typeof value === 'undefined'
114-
? key
115-
: { [key]: value },
126+
...errors,
116127
})
117128

118129
return form
@@ -155,28 +166,20 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
155166

156167
return form
157168
},
158-
submit(submitMethod: RequestMethod|Config = {}, submitUrl?: string, submitOptions?: any): void {
159-
const isPatchedCall = typeof submitMethod !== 'string'
160-
161-
submitOptions = isPatchedCall
162-
? submitMethod
163-
: submitOptions
164-
165-
submitUrl = isPatchedCall
166-
? resolveUrl(url)
167-
: submitUrl!
168-
169-
submitMethod = isPatchedCall
170-
? resolveMethod(method)
171-
: submitMethod as RequestMethod
169+
submit(submitMethod: RequestMethod|Partial<VisitOptions> = {}, submitUrl?: string, submitOptions?: Partial<VisitOptions>): void {
170+
if (typeof submitMethod !== 'string') {
171+
submitOptions = submitMethod
172+
submitUrl = resolveUrl(url)
173+
submitMethod = resolveMethod(method)
174+
}
172175

173-
inertiaSubmit(submitMethod, submitUrl, {
176+
inertiaSubmit(submitMethod, submitUrl!, {
174177
...submitOptions,
175-
onError: (errors: SimpleValidationErrors): any => {
178+
onError: (errors: SimpleValidationErrors): void => {
176179
precognitiveForm.validator().setErrors(errors)
177180

178-
if (submitOptions.onError) {
179-
return submitOptions.onError(errors)
181+
if (submitOptions!.onError) {
182+
return submitOptions!.onError(errors)
180183
}
181184
},
182185
})

packages/vue-inertia/src/types.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
1-
import { Config, NamedInputEvent, RequestMethod, SimpleValidationErrors, ValidationConfig, ValidationErrors } from 'laravel-precognition'
1+
import { NamedInputEvent, RequestMethod, SimpleValidationErrors, ValidationConfig, ValidationErrors } from 'laravel-precognition'
22
import { Form as PrecognitiveForm } from 'laravel-precognition-vue/dist/types'
33
import { InertiaForm } from '@inertiajs/vue3'
4+
import { VisitOptions } from '@inertiajs/core'
45

56
type RedefinedProperties = 'setErrors'|'touch'|'forgetError'|'setValidationTimeout'|'submit'|'reset'|'validateFiles'|'setData'|'validate'
67

78
export type Form<Data extends Record<string, unknown>> = Omit<PrecognitiveForm<Data>, RedefinedProperties> & InertiaForm<Data> & {
8-
setErrors(errors: SimpleValidationErrors|ValidationErrors): Form<Data>,
9-
touch(name: Array<string>|string|NamedInputEvent): Form<Data>,
9+
setErrors(errors: SimpleValidationErrors|ValidationErrors): Data&Form<Data>,
10+
touch(name: Array<string>|string|NamedInputEvent): Data&Form<Data>,
1011
forgetError(string: keyof Data|NamedInputEvent): Data&Form<Data>,
1112
setValidationTimeout(duration: number): Data&Form<Data>,
12-
submit(submitMethod: RequestMethod|Config, submitUrl?: string, submitOptions?: any): void,
13+
submit(config?: Partial<VisitOptions>): void,
14+
submit(method: RequestMethod, url: string, options?: Partial<VisitOptions>): void,
1315
reset(...keys: (keyof Partial<Data>)[]): Data&Form<Data>,
1416
validateFiles(): Data&Form<Data>,
1517
setData(data: Record<string, unknown>): Data&Form<Data>,

0 commit comments

Comments
 (0)