From 5851fdd7db3dd7c55cadd80081a4cb94ab9cc394 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Bl=C3=A4si?= Date: Fri, 25 Jul 2025 11:30:19 +0200 Subject: [PATCH 1/2] fix: reset form state after navigate to handle redirect from actions --- src/lib/client/form.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/lib/client/form.ts b/src/lib/client/form.ts index df83e020..942f75cc 100644 --- a/src/lib/client/form.ts +++ b/src/lib/client/form.ts @@ -1,7 +1,8 @@ -import { isElementInViewport, scrollToAndCenter } from './elements.js'; -import type { FormOptions } from './superForm.js'; +import { afterNavigate } from '$app/navigation'; import { onDestroy, tick } from 'svelte'; import type { Writable } from 'svelte/store'; +import { isElementInViewport, scrollToAndCenter } from './elements.js'; +import type { FormOptions } from './superForm.js'; enum FetchStatus { Idle = 0, @@ -120,6 +121,11 @@ export function Form, M>( completed({ cancelled: true }); }); + afterNavigate(() => { + ErrorTextEvents_removeErrorTextListeners(); + completed({ cancelled: false }); + }) + return { submitting() { Timers_start(); From a32810d069fb71067d6fb0da6e133e654ea8948f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Bl=C3=A4si?= Date: Fri, 25 Jul 2025 11:30:33 +0200 Subject: [PATCH 2/2] test: issue reproduction forms --- src/routes/(v2)/v2/issue-622/+layout.svelte | 19 ++++++++++ src/routes/(v2)/v2/issue-622/+page.svelte | 0 .../bad-with-workaround/+page.server.ts | 24 +++++++++++++ .../bad-with-workaround/+page.svelte | 30 ++++++++++++++++ .../(v2)/v2/issue-622/bad/+page.server.ts | 23 ++++++++++++ src/routes/(v2)/v2/issue-622/bad/+page.svelte | 35 +++++++++++++++++++ .../(v2)/v2/issue-622/good/+page.server.ts | 23 ++++++++++++ .../(v2)/v2/issue-622/good/+page.svelte | 31 ++++++++++++++++ 8 files changed, 185 insertions(+) create mode 100644 src/routes/(v2)/v2/issue-622/+layout.svelte create mode 100644 src/routes/(v2)/v2/issue-622/+page.svelte create mode 100644 src/routes/(v2)/v2/issue-622/bad-with-workaround/+page.server.ts create mode 100644 src/routes/(v2)/v2/issue-622/bad-with-workaround/+page.svelte create mode 100644 src/routes/(v2)/v2/issue-622/bad/+page.server.ts create mode 100644 src/routes/(v2)/v2/issue-622/bad/+page.svelte create mode 100644 src/routes/(v2)/v2/issue-622/good/+page.server.ts create mode 100644 src/routes/(v2)/v2/issue-622/good/+page.svelte diff --git a/src/routes/(v2)/v2/issue-622/+layout.svelte b/src/routes/(v2)/v2/issue-622/+layout.svelte new file mode 100644 index 00000000..f0358604 --- /dev/null +++ b/src/routes/(v2)/v2/issue-622/+layout.svelte @@ -0,0 +1,19 @@ + + +

Navigation

+ + +

Page id: {page.route.id}

+{@render children()} diff --git a/src/routes/(v2)/v2/issue-622/+page.svelte b/src/routes/(v2)/v2/issue-622/+page.svelte new file mode 100644 index 00000000..e69de29b diff --git a/src/routes/(v2)/v2/issue-622/bad-with-workaround/+page.server.ts b/src/routes/(v2)/v2/issue-622/bad-with-workaround/+page.server.ts new file mode 100644 index 00000000..5b4d000a --- /dev/null +++ b/src/routes/(v2)/v2/issue-622/bad-with-workaround/+page.server.ts @@ -0,0 +1,24 @@ +import { zod as zod4 } from '$lib/adapters/zod4.js'; +import { superValidate } from '$lib/index.js'; +import { redirect } from '@sveltejs/kit'; +import { z } from 'zod/v4'; + + +const delay = (ms: number) => new Promise(r => setTimeout(r, ms)) + +const formId = "test-bad-with-workaround" + +const ZodSchema = z.object({ hello: z.string() }) +const FormSchema = zod4(ZodSchema) + +export async function load() { + const form = await superValidate(FormSchema, { id: formId }) + return { form } +} + +export const actions = { + async default() { + await delay(5000) + redirect(302, "/v2/issue-622/bad-with-workaround") + } +} diff --git a/src/routes/(v2)/v2/issue-622/bad-with-workaround/+page.svelte b/src/routes/(v2)/v2/issue-622/bad-with-workaround/+page.svelte new file mode 100644 index 00000000..a083df7c --- /dev/null +++ b/src/routes/(v2)/v2/issue-622/bad-with-workaround/+page.svelte @@ -0,0 +1,30 @@ + + +
+ +
+ + diff --git a/src/routes/(v2)/v2/issue-622/bad/+page.server.ts b/src/routes/(v2)/v2/issue-622/bad/+page.server.ts new file mode 100644 index 00000000..b5633e97 --- /dev/null +++ b/src/routes/(v2)/v2/issue-622/bad/+page.server.ts @@ -0,0 +1,23 @@ +import { zod as zod4 } from '$lib/adapters/zod4.js'; +import { superValidate } from '$lib/index.js'; +import { redirect } from '@sveltejs/kit'; +import { z } from 'zod/v4'; + +const delay = (ms: number) => new Promise(r => setTimeout(r, ms)) + +const formId = "test-bad" + +const ZodSchema = z.object({ hello: z.string() }) +const FormSchema = zod4(ZodSchema) + +export async function load() { + const form = await superValidate(FormSchema, { id: formId }) + return { form } +} + +export const actions = { + async default() { + await delay(5000) + redirect(302, "/v2/issue-622/bad") + } +} diff --git a/src/routes/(v2)/v2/issue-622/bad/+page.svelte b/src/routes/(v2)/v2/issue-622/bad/+page.svelte new file mode 100644 index 00000000..63c84ae8 --- /dev/null +++ b/src/routes/(v2)/v2/issue-622/bad/+page.svelte @@ -0,0 +1,35 @@ + + +
+ +
+ + diff --git a/src/routes/(v2)/v2/issue-622/good/+page.server.ts b/src/routes/(v2)/v2/issue-622/good/+page.server.ts new file mode 100644 index 00000000..390d37f5 --- /dev/null +++ b/src/routes/(v2)/v2/issue-622/good/+page.server.ts @@ -0,0 +1,23 @@ +import { zod as zod4 } from '$lib/adapters/zod4.js'; +import { superValidate } from '$lib/index.js'; +import { z } from 'zod/v4'; + +const delay = (ms: number) => new Promise(r => setTimeout(r, ms)) + +const formId = "test-good" + +const ZodSchema = z.object({ hello: z.string() }) +const FormSchema = zod4(ZodSchema) + +export async function load() { + const form = await superValidate(FormSchema, { id: formId }) + return { form } +} + +export const actions = { + async default() { + await delay(5000) + const form = await superValidate(FormSchema, { id: formId }) + return { form } + } +} diff --git a/src/routes/(v2)/v2/issue-622/good/+page.svelte b/src/routes/(v2)/v2/issue-622/good/+page.svelte new file mode 100644 index 00000000..0527a087 --- /dev/null +++ b/src/routes/(v2)/v2/issue-622/good/+page.svelte @@ -0,0 +1,31 @@ + + +
+ +
+ +