Skip to content

Commit 7ce485b

Browse files
authored
Merge pull request #118 from laravel/type-fixes
Fix Inertia types
2 parents 413c6d0 + 5b16dd0 commit 7ce485b

File tree

4 files changed

+23
-8
lines changed

4 files changed

+23
-8
lines changed

packages/react-inertia/src/index.ts

Lines changed: 2 additions & 1 deletion
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-react'
33
import { useForm as useInertiaForm } from '@inertiajs/react'
44
import { useRef } from 'react'
5+
import { FormDataConvertible } 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, FormDataConvertible>>(method: RequestMethod | (() => RequestMethod), url: string | (() => string), inputs: Data, config: ValidationConfig = {}): any => {
910
const booted = useRef<boolean>(false)
1011

1112
/**
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// This type has been duplicated from @inertiajs/core to
2+
// continue supporting Inertia 1. When we drop version 1
3+
// support we can import this directly from Inertia.
4+
export type FormDataConvertible = Array<FormDataConvertible> | {
5+
[key: string]: FormDataConvertible;
6+
} | Blob | FormDataEntryValue | Date | boolean | number | null | undefined;
7+

packages/vue-inertia/src/index.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ import { useForm as usePrecognitiveForm, client } from 'laravel-precognition-vue
33
import { useForm as useInertiaForm } from '@inertiajs/vue3'
44
import { VisitOptions } from '@inertiajs/core'
55
import { watchEffect } from 'vue'
6-
import { Form } from './types'
6+
import { Form, FormDataConvertible } from './types'
77

88
export { client }
99

10-
export const useForm = <Data extends Record<string, unknown>>(method: RequestMethod | (() => RequestMethod), url: string | (() => string), inputs: Data, config: ValidationConfig = {}): Form<Data> => {
10+
export const useForm = <Data extends Record<string, FormDataConvertible>>(method: RequestMethod | (() => RequestMethod), url: string | (() => string), inputs: Data, config: ValidationConfig = {}): Form<Data> => {
1111
/**
1212
* The Inertia form.
1313
*/
@@ -58,7 +58,7 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
5858
/**
5959
* The transform function.
6060
*/
61-
let transformer: (data: Data) => Record<string, unknown> = (data) => data
61+
let transformer: (data: Data) => Record<string, FormDataConvertible> = (data) => data
6262

6363
/**
6464
* Patch the form.
@@ -73,7 +73,7 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
7373
},
7474
valid: precognitiveForm.valid,
7575
invalid: precognitiveForm.invalid,
76-
setData(data: Record<string, unknown>) {
76+
setData(data: Record<string, FormDataConvertible>) {
7777
Object.keys(data).forEach((input) => {
7878
// @ts-expect-error
7979
form[input] = data[input]
@@ -128,7 +128,7 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
128128

129129
return form
130130
},
131-
transform(callback: (data: Data) => Record<string, unknown>) {
131+
transform(callback: (data: Data) => Record<string, FormDataConvertible>) {
132132
inertiaTransform(callback)
133133

134134
transformer = callback

packages/vue-inertia/src/types.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { VisitOptions } from '@inertiajs/core'
55

66
type RedefinedProperties = 'setErrors' | 'touch' | 'forgetError' | 'setValidationTimeout' | 'submit' | 'reset' | 'validateFiles' | 'setData' | 'validate'
77

8-
export type Form<Data extends Record<string, unknown>> = Omit<PrecognitiveForm<Data>, RedefinedProperties> & InertiaForm<Data> & {
8+
export type Form<Data extends Record<string, FormDataConvertible>> = Omit<PrecognitiveForm<Data>, RedefinedProperties> & InertiaForm<Data> & {
99
setErrors(errors: SimpleValidationErrors | ValidationErrors): Data & Form<Data>,
1010
touch(name: Array<string> | string | NamedInputEvent): Data & Form<Data>,
1111
forgetError(string: keyof Data | NamedInputEvent): Data & Form<Data>,
@@ -14,6 +14,13 @@ export type Form<Data extends Record<string, unknown>> = Omit<PrecognitiveForm<D
1414
submit(method: RequestMethod, url: string, options?: Partial<VisitOptions>): void,
1515
reset(...keys: (keyof Partial<Data>)[]): Data & Form<Data>,
1616
validateFiles(): Data & Form<Data>,
17-
setData(data: Record<string, unknown>): Data & Form<Data>,
17+
setData(data: Record<string, FormDataConvertible>): Data & Form<Data>,
1818
validate(name?: (keyof Data | NamedInputEvent) | ValidationConfig, config?: ValidationConfig): Data & Form<Data>,
1919
}
20+
21+
// This type has been duplicated from @inertiajs/core to
22+
// continue supporting Inertia 1. When we drop version 1
23+
// support we can import this directly from Inertia.
24+
export type FormDataConvertible = Array<FormDataConvertible> | {
25+
[key: string]: FormDataConvertible;
26+
} | Blob | FormDataEntryValue | Date | boolean | number | null | undefined;

0 commit comments

Comments
 (0)