Fix admin modals replaying old action results after create or edit

This commit is contained in:
NeilClack
2026-09-10 13:26:54 -05:00
parent f1d80279e9
commit e60d61e90a
10 changed files with 265 additions and 78 deletions
@@ -25,7 +25,17 @@
let successMessage = $state('');
let lastForm = $state<ActionResult>(null);
let closeTimer: ReturnType<typeof setTimeout> | undefined;
function clearCloseTimer() {
if (closeTimer) {
clearTimeout(closeTimer);
closeTimer = undefined;
}
}
$effect(() => {
clearCloseTimer();
if (open) {
formError = '';
fieldErrors = {};
@@ -37,11 +47,19 @@
if (!form || form === lastForm) return;
lastForm = form;
// Consume results even while closed so a stale result is never
// replayed when the modal is next opened, but only show feedback
// while this modal is actually open.
if (!open) return;
if (form.success) {
formError = '';
fieldErrors = {};
successMessage = 'Profile created';
setTimeout(() => onClose?.(), 1200);
closeTimer = setTimeout(() => {
closeTimer = undefined;
onClose?.();
}, 1200);
} else {
successMessage = '';
formError = form.error ?? '';
@@ -1,4 +1,5 @@
<script lang="ts">
import { untrack } from 'svelte';
import { enhance } from '$app/forms';
import AdminModal from '$lib/components/admin/AdminModal.svelte';
import ProfileFields from './ProfileFields.svelte';
@@ -43,7 +44,9 @@
let addrShipping = $state(false);
let lastRecordId = $state<string | null>(null);
let lastForm = $state<ActionResult>(null);
// Capture the form result as it is when this modal mounts so a stale
// result from a previous record is not replayed on open.
let lastForm = $state<ActionResult>(untrack(() => form ?? null));
function resetAddressFields() {
addrStreet = '';