Skip to content

Commit ba0163c

Browse files
[0.5.x] Type vue-inertia (#88)
* Add return type for useForm in laravel-precognition-vue-inertia * formatting * Update Vue types * Extract type Co-authored-by: Nolan <824015+ncphillips@users.noreply.github.com> --------- Co-authored-by: Tim MacDonald <hello@timacdonald.me>
1 parent 1364e9a commit ba0163c

File tree

3 files changed

+29
-3
lines changed

3 files changed

+29
-3
lines changed

packages/vue-inertia/src/index.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ import { Config, NamedInputEvent, RequestMethod, SimpleValidationErrors, toSimpl
22
import { useForm as usePrecognitiveForm, client } from 'laravel-precognition-vue'
33
import { useForm as useInertiaForm } from '@inertiajs/vue3'
44
import { watchEffect } from 'vue'
5+
import { Form } from './types'
56

67
export { client }
78

8-
export const useForm = <Data extends Record<string, unknown>>(method: RequestMethod|(() => RequestMethod), url: string|(() => string), inputs: Data, config: ValidationConfig = {}): any => {
9+
export const useForm = <Data extends Record<string, unknown>>(method: RequestMethod|(() => RequestMethod), url: string|(() => string), inputs: Data, config: ValidationConfig = {}): Form<Data> => {
910
/**
1011
* The Inertia form.
1112
*/
@@ -61,7 +62,7 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
6162
/**
6263
* Patch the form.
6364
*/
64-
const form = Object.assign(inertiaForm, {
65+
const form: Form<Data> = Object.assign(inertiaForm, {
6566
validating: precognitiveForm.validating,
6667
touched: precognitiveForm.touched,
6768
touch(name: Array<string>|string|NamedInputEvent) {
@@ -71,6 +72,14 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
7172
},
7273
valid: precognitiveForm.valid,
7374
invalid: precognitiveForm.invalid,
75+
setData(data: Record<string, unknown>) {
76+
Object.keys(data).forEach(input => {
77+
// @ts-expect-error
78+
form[input] = data[input]
79+
})
80+
81+
return form
82+
},
7483
clearErrors(...names: string[]) {
7584
inertiaClearErrors(...names)
7685

packages/vue-inertia/src/types.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { Config, NamedInputEvent, RequestMethod, SimpleValidationErrors, ValidationConfig, ValidationErrors } from 'laravel-precognition'
2+
import { Form as PrecognitiveForm } from 'laravel-precognition-vue/dist/types'
3+
import { InertiaForm } from '@inertiajs/vue3'
4+
5+
type RedefinedProperties = 'setErrors'|'touch'|'forgetError'|'setValidationTimeout'|'submit'|'reset'|'validateFiles'|'setData'|'validate'
6+
7+
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>,
10+
forgetError(string: keyof Data|NamedInputEvent): Data&Form<Data>,
11+
setValidationTimeout(duration: number): Data&Form<Data>,
12+
submit(submitMethod: RequestMethod|Config, submitUrl?: string, submitOptions?: any): void,
13+
reset(...keys: (keyof Partial<Data>)[]): Data&Form<Data>,
14+
validateFiles(): Data&Form<Data>,
15+
setData(data: Record<string, unknown>): Data&Form<Data>,
16+
validate(name?: (keyof Data|NamedInputEvent)|ValidationConfig, config?: ValidationConfig): Data&Form<Data>,
17+
}

packages/vue/src/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ export interface Form<Data extends Record<string, unknown>> {
1717
setValidationTimeout(duration: number): Data&Form<Data>,
1818
submit(config?: Config): Promise<unknown>,
1919
reset(...keys: (keyof Partial<Data>)[]): Data&Form<Data>,
20-
validateFiles(): Form<Data>,
20+
validateFiles(): Data&Form<Data>,
2121
validator(): Validator,
2222
}

0 commit comments

Comments
 (0)