diff --git a/packages/vue-inertia/src/index.ts b/packages/vue-inertia/src/index.ts index 0568eaa..2e22392 100644 --- a/packages/vue-inertia/src/index.ts +++ b/packages/vue-inertia/src/index.ts @@ -7,7 +7,7 @@ import { Form, FormDataConvertible } from './types' export { client } -export const useForm = >(method: RequestMethod | (() => RequestMethod), url: string | (() => string), inputs: Data, config: ValidationConfig = {}): Form => { +export const useForm = >(method: RequestMethod | (() => RequestMethod), url: string | (() => string), inputs: Data | (() => Data), config: ValidationConfig = {}): Form => { /** * The Inertia form. */ diff --git a/packages/vue-inertia/tests/index.test.ts b/packages/vue-inertia/tests/index.test.ts index 2ee5a76..a79ce72 100644 --- a/packages/vue-inertia/tests/index.test.ts +++ b/packages/vue-inertia/tests/index.test.ts @@ -111,3 +111,22 @@ it('can set individual errors', function () { expect(form.errors.name).toBe('The name is required.') }) + +it('allows getter as data inputs', function () { + let dynamicEmail = 'taylor@laravel.com' + + function getData() { + return { + email: dynamicEmail, + } + } + + const form = useForm('post', '/register', getData) + + expect(form.email).toBe('taylor@laravel.com') + + dynamicEmail = 'tim@laravel.com' + form.reset() + + expect(form.email).toBe('tim@laravel.com') +}) \ No newline at end of file diff --git a/packages/vue/src/index.ts b/packages/vue/src/index.ts index b953bde..887aec0 100644 --- a/packages/vue/src/index.ts +++ b/packages/vue/src/index.ts @@ -5,11 +5,11 @@ import { cloneDeep, get, set } from 'lodash-es' export { client } -export const useForm = >(method: RequestMethod | (() => RequestMethod), url: string | (() => string), inputs: Data, config: ValidationConfig = {}): Data & Form => { +export const useForm = >(method: RequestMethod | (() => RequestMethod), url: string | (() => string), inputs: Data | (() => Data), config: ValidationConfig = {}): Data & Form => { /** * The original data. */ - const originalData = cloneDeep(inputs) + const originalData = typeof inputs === 'function' ? cloneDeep(inputs()) : cloneDeep(inputs) /** * The original input names. @@ -143,7 +143,7 @@ export const useForm = >(method: RequestMet return form }, reset(...names) { - const original = cloneDeep(originalData) + const original = typeof inputs === 'function' ? cloneDeep(inputs()) : cloneDeep(originalData) if (names.length === 0) { // @ts-expect-error