Skip to content

Commit

Permalink
Merge pull request #118 from laravel/type-fixes
Browse files Browse the repository at this point in the history
Fix Inertia types
  • Loading branch information
timacdonald authored Feb 11, 2025
2 parents 413c6d0 + 5b16dd0 commit 7ce485b
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 8 deletions.
3 changes: 2 additions & 1 deletion packages/react-inertia/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ import { Config, NamedInputEvent, RequestMethod, SimpleValidationErrors, toSimpl
import { useForm as usePrecognitiveForm, client } from 'laravel-precognition-react'
import { useForm as useInertiaForm } from '@inertiajs/react'
import { useRef } from 'react'
import { FormDataConvertible } from './types'

export { client }

export const useForm = <Data extends Record<string, unknown>>(method: RequestMethod | (() => RequestMethod), url: string | (() => string), inputs: Data, config: ValidationConfig = {}): any => {
export const useForm = <Data extends Record<string, FormDataConvertible>>(method: RequestMethod | (() => RequestMethod), url: string | (() => string), inputs: Data, config: ValidationConfig = {}): any => {
const booted = useRef<boolean>(false)

/**
Expand Down
7 changes: 7 additions & 0 deletions packages/react-inertia/src/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// This type has been duplicated from @inertiajs/core to
// continue supporting Inertia 1. When we drop version 1
// support we can import this directly from Inertia.
export type FormDataConvertible = Array<FormDataConvertible> | {
[key: string]: FormDataConvertible;
} | Blob | FormDataEntryValue | Date | boolean | number | null | undefined;

10 changes: 5 additions & 5 deletions packages/vue-inertia/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ import { useForm as usePrecognitiveForm, client } from 'laravel-precognition-vue
import { useForm as useInertiaForm } from '@inertiajs/vue3'
import { VisitOptions } from '@inertiajs/core'
import { watchEffect } from 'vue'
import { Form } from './types'
import { Form, FormDataConvertible } from './types'

export { client }

export const useForm = <Data extends Record<string, unknown>>(method: RequestMethod | (() => RequestMethod), url: string | (() => string), inputs: Data, config: ValidationConfig = {}): Form<Data> => {
export const useForm = <Data extends Record<string, FormDataConvertible>>(method: RequestMethod | (() => RequestMethod), url: string | (() => string), inputs: Data, config: ValidationConfig = {}): Form<Data> => {
/**
* The Inertia form.
*/
Expand Down Expand Up @@ -58,7 +58,7 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
/**
* The transform function.
*/
let transformer: (data: Data) => Record<string, unknown> = (data) => data
let transformer: (data: Data) => Record<string, FormDataConvertible> = (data) => data

/**
* Patch the form.
Expand All @@ -73,7 +73,7 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet
},
valid: precognitiveForm.valid,
invalid: precognitiveForm.invalid,
setData(data: Record<string, unknown>) {
setData(data: Record<string, FormDataConvertible>) {
Object.keys(data).forEach((input) => {
// @ts-expect-error
form[input] = data[input]
Expand Down Expand Up @@ -128,7 +128,7 @@ export const useForm = <Data extends Record<string, unknown>>(method: RequestMet

return form
},
transform(callback: (data: Data) => Record<string, unknown>) {
transform(callback: (data: Data) => Record<string, FormDataConvertible>) {
inertiaTransform(callback)

transformer = callback
Expand Down
11 changes: 9 additions & 2 deletions packages/vue-inertia/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { VisitOptions } from '@inertiajs/core'

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

export type Form<Data extends Record<string, unknown>> = Omit<PrecognitiveForm<Data>, RedefinedProperties> & InertiaForm<Data> & {
export type Form<Data extends Record<string, FormDataConvertible>> = Omit<PrecognitiveForm<Data>, RedefinedProperties> & InertiaForm<Data> & {
setErrors(errors: SimpleValidationErrors | ValidationErrors): Data & Form<Data>,
touch(name: Array<string> | string | NamedInputEvent): Data & Form<Data>,
forgetError(string: keyof Data | NamedInputEvent): Data & Form<Data>,
Expand All @@ -14,6 +14,13 @@ export type Form<Data extends Record<string, unknown>> = Omit<PrecognitiveForm<D
submit(method: RequestMethod, url: string, options?: Partial<VisitOptions>): void,
reset(...keys: (keyof Partial<Data>)[]): Data & Form<Data>,
validateFiles(): Data & Form<Data>,
setData(data: Record<string, unknown>): Data & Form<Data>,
setData(data: Record<string, FormDataConvertible>): Data & Form<Data>,
validate(name?: (keyof Data | NamedInputEvent) | ValidationConfig, config?: ValidationConfig): Data & Form<Data>,
}

// This type has been duplicated from @inertiajs/core to
// continue supporting Inertia 1. When we drop version 1
// support we can import this directly from Inertia.
export type FormDataConvertible = Array<FormDataConvertible> | {
[key: string]: FormDataConvertible;
} | Blob | FormDataEntryValue | Date | boolean | number | null | undefined;

0 comments on commit 7ce485b

Please sign in to comment.