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
@@ -28,15 +28,21 @@
let successMessage = $state('');
let lastForm = $state<ActionResult>(null);
$effect(() => {
const rec = editingRecord ?? {};
name = String(rec.name ?? '');
if (!editingRecord) {
formError = '';
fieldErrors = {};
successMessage = '';
let closeTimer: ReturnType<typeof setTimeout> | undefined;
function clearCloseTimer() {
if (closeTimer) {
clearTimeout(closeTimer);
closeTimer = undefined;
}
});
}
function resetModalState() {
clearCloseTimer();
formError = '';
fieldErrors = {};
successMessage = '';
}
$effect(() => {
if (!form || form === lastForm) return;
@@ -46,9 +52,10 @@
formError = '';
fieldErrors = {};
successMessage = editingRecord ? 'Role updated' : 'Role created';
setTimeout(() => {
closeTimer = setTimeout(() => {
modalOpen = false;
successMessage = '';
closeTimer = undefined;
}, 1200);
} else {
successMessage = '';
@@ -58,18 +65,23 @@
});
function openCreate() {
resetModalState();
editingRecord = null;
lastForm = null;
name = '';
lastForm = form;
modalOpen = true;
}
function openEdit(record: Record<string, unknown>) {
resetModalState();
editingRecord = record;
lastForm = null;
name = String(record.name ?? '');
lastForm = form;
modalOpen = true;
}
function closeModal() {
clearCloseTimer();
modalOpen = false;
editingRecord = null;
}