From 674ee5a888903c5b0c489a17f48fb65aa5a75780 Mon Sep 17 00:00:00 2001 From: parafeu Date: Tue, 4 Feb 2025 17:40:18 +0100 Subject: [PATCH 1/2] Allow getter as inputs for vue --- packages/vue/src/index.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 From 588c631868dc2b4ea344970d7ca6a3eaadc82e73 Mon Sep 17 00:00:00 2001 From: parafeu Date: Tue, 4 Feb 2025 17:49:23 +0100 Subject: [PATCH 2/2] Allow getter as inputs for vue-inertia --- packages/vue-inertia/src/index.ts | 2 +- packages/vue-inertia/tests/index.test.ts | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/packages/vue-inertia/src/index.ts b/packages/vue-inertia/src/index.ts index 5403bee..214388b 100644 --- a/packages/vue-inertia/src/index.ts +++ b/packages/vue-inertia/src/index.ts @@ -7,7 +7,7 @@ import { Form } 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