From a5a611477d15c8d27f67bb05811a9300ffef6cb2 Mon Sep 17 00:00:00 2001 From: Kyle Filz Date: Wed, 16 Aug 2023 08:24:25 -0500 Subject: [PATCH] Update `useForm` to accept interfaces --- packages/react/src/useForm.ts | 9 +++++---- packages/vue2/src/useForm.ts | 16 +++++++++------- packages/vue3/src/useForm.ts | 12 +++++++----- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/packages/react/src/useForm.ts b/packages/react/src/useForm.ts index 4d748478e..22af09f4a 100644 --- a/packages/react/src/useForm.ts +++ b/packages/react/src/useForm.ts @@ -6,8 +6,9 @@ import useRemember from './useRemember' type setDataByObject = (data: TForm) => void type setDataByMethod = (data: (previousData: TForm) => TForm) => void type setDataByKeyValuePair = (key: K, value: TForm[K]) => void +type FormDataType = object; -export interface InertiaFormProps> { +export interface InertiaFormProps { data: TForm isDirty: boolean errors: Partial> @@ -33,12 +34,12 @@ export interface InertiaFormProps> { delete: (url: string, options?: VisitOptions) => void cancel: () => void } -export default function useForm>(initialValues?: TForm): InertiaFormProps -export default function useForm>( +export default function useForm(initialValues?: TForm): InertiaFormProps +export default function useForm( rememberKey: string, initialValues?: TForm, ): InertiaFormProps -export default function useForm>( +export default function useForm( rememberKeyOrInitialValues?: string | TForm, maybeInitialValues?: TForm, ): InertiaFormProps { diff --git a/packages/vue2/src/useForm.ts b/packages/vue2/src/useForm.ts index 94114946e..20a2ebc25 100644 --- a/packages/vue2/src/useForm.ts +++ b/packages/vue2/src/useForm.ts @@ -3,7 +3,9 @@ import cloneDeep from 'lodash.clonedeep' import isEqual from 'lodash.isequal' import { reactive, watch } from 'vue' -interface InertiaFormProps { +type FormDataType = object; + +interface InertiaFormProps { isDirty: boolean errors: Record hasErrors: boolean @@ -29,16 +31,16 @@ interface InertiaFormProps { cancel(): void } -export type InertiaForm = TForm & InertiaFormProps +export type InertiaForm = TForm & InertiaFormProps export interface InertiaFormTrait { - form(data: TForm): InertiaForm - form(rememberKey: string, data: TForm): InertiaForm + form(data: TForm): InertiaForm + form(rememberKey: string, data: TForm): InertiaForm } -export default function useForm(data: TForm | (() => TForm)): InertiaForm -export default function useForm(rememberKey: string, data: TForm | (() => TForm)): InertiaForm -export default function useForm(...args): InertiaForm { +export default function useForm(data: TForm | (() => TForm)): InertiaForm +export default function useForm(rememberKey: string, data: TForm | (() => TForm)): InertiaForm +export default function useForm(...args): InertiaForm { const rememberKey = typeof args[0] === 'string' ? args[0] : null const data = (typeof args[0] === 'string' ? args[1] : args[0]) || {} const restored = rememberKey ? (router.restore(rememberKey) as { data: any; errors: any }) : null diff --git a/packages/vue3/src/useForm.ts b/packages/vue3/src/useForm.ts index 5db29d9fb..d617a80c7 100644 --- a/packages/vue3/src/useForm.ts +++ b/packages/vue3/src/useForm.ts @@ -3,7 +3,9 @@ import cloneDeep from 'lodash.clonedeep' import isEqual from 'lodash.isequal' import { reactive, watch } from 'vue' -interface InertiaFormProps> { +type FormDataType = object; + +interface InertiaFormProps { isDirty: boolean errors: Partial> hasErrors: boolean @@ -29,14 +31,14 @@ interface InertiaFormProps> { cancel(): void } -export type InertiaForm> = TForm & InertiaFormProps +export type InertiaForm = TForm & InertiaFormProps -export default function useForm>(data: TForm | (() => TForm)): InertiaForm -export default function useForm>( +export default function useForm(data: TForm | (() => TForm)): InertiaForm +export default function useForm( rememberKey: string, data: TForm | (() => TForm), ): InertiaForm -export default function useForm>( +export default function useForm( rememberKeyOrData: string | TForm | (() => TForm), maybeData?: TForm | (() => TForm), ): InertiaForm {