Fix admin modals replaying old action results after create or edit
This commit is contained in:
@@ -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 = '';
|
||||
|
||||
Reference in New Issue
Block a user