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