Skip to content

Commit 53950c0

Browse files
[0.6.x] Typescript return type for React Inertia useForm() (#110)
* Added types.ts for react-inertia. * Update useForm return type. * Restore client export * wip * wip * wip --------- Co-authored-by: Tim MacDonald <[email protected]>
1 parent da4893e commit 53950c0

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

packages/react-inertia/src/index.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
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-react'
33
import { useForm as useInertiaForm } from '@inertiajs/react'
4+
import { VisitOptions } from '@inertiajs/core'
45
import { useRef } from 'react'
5-
import { FormDataConvertible } from './types'
6+
import { Form, FormDataConvertible } from './types'
67

78
export { client }
89

9-
export const useForm = <Data extends Record<string, FormDataConvertible>>(method: RequestMethod | (() => RequestMethod), url: string | (() => string), inputs: Data, config: ValidationConfig = {}): any => {
10+
export const useForm = <Data extends Record<string, FormDataConvertible>>(method: RequestMethod | (() => RequestMethod), url: string | (() => string), inputs: Data, config: ValidationConfig = {}): Form<Data> => {
1011
const booted = useRef<boolean>(false)
1112

1213
/**
@@ -160,7 +161,7 @@ export const useForm = <Data extends Record<string, FormDataConvertible>>(method
160161

161162
return form
162163
},
163-
submit(submitMethod: RequestMethod | Config = {}, submitUrl?: string, submitOptions?: any): void {
164+
submit(submitMethod: RequestMethod | Partial<VisitOptions> = {}, submitUrl?: string, submitOptions?: Partial<VisitOptions>): void {
164165
if (typeof submitMethod !== 'string') {
165166
submitOptions = submitMethod
166167
submitUrl = resolveUrl(url)

packages/react-inertia/src/types.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
1+
import { NamedInputEvent, RequestMethod, SimpleValidationErrors, ValidationConfig, ValidationErrors } from 'laravel-precognition'
2+
import { Form as PrecognitiveForm } from 'laravel-precognition-react/dist/types'
3+
import { InertiaFormProps } from '@inertiajs/react'
4+
import { VisitOptions } from '@inertiajs/core'
5+
6+
type RedefinedProperties = 'setErrors' | 'touch' | 'forgetError' | 'setValidationTimeout' | 'submit' | 'reset' | 'validateFiles' | 'setData' | 'validate'
7+
8+
export type Form<Data extends Record<string, FormDataConvertible>> = Omit<PrecognitiveForm<Data>, RedefinedProperties> & InertiaFormProps<Data> & {
9+
setErrors(errors: SimpleValidationErrors | ValidationErrors): Form<Data>,
10+
touch(name: Array<string> | string | NamedInputEvent): Form<Data>,
11+
forgetError(string: keyof Data | NamedInputEvent): Form<Data>,
12+
setValidationTimeout(duration: number): Form<Data>,
13+
submit(config?: Partial<VisitOptions>): void,
14+
submit(method: RequestMethod, url: string, options?: Omit<VisitOptions, 'data'>): void,
15+
reset(...keys: (keyof Partial<Data>)[]): void,
16+
validateFiles(): Form<Data>,
17+
setData(data: Record<string, FormDataConvertible>): Form<Data>,
18+
validate(name?: (keyof Data | NamedInputEvent) | ValidationConfig, config?: ValidationConfig): Form<Data>,
19+
}
20+
121
// This type has been duplicated from @inertiajs/core to
222
// continue supporting Inertia 1. When we drop version 1
323
// support we can import this directly from Inertia.

0 commit comments

Comments
 (0)