Fix admin modals getting stuck after a successful submit
This commit is contained in:
@@ -35,8 +35,8 @@
|
|||||||
let replaceError = $state('');
|
let replaceError = $state('');
|
||||||
let replaceSuccess = $state('');
|
let replaceSuccess = $state('');
|
||||||
|
|
||||||
let lastCreateForm = $state<ActionResult>(null);
|
let lastCreateForm = $state.raw<ActionResult>(null);
|
||||||
let lastReplaceForm = $state<ActionResult>(null);
|
let lastReplaceForm = $state.raw<ActionResult>(null);
|
||||||
|
|
||||||
let createTimer: ReturnType<typeof setTimeout> | undefined;
|
let createTimer: ReturnType<typeof setTimeout> | undefined;
|
||||||
let replaceTimer: ReturnType<typeof setTimeout> | undefined;
|
let replaceTimer: ReturnType<typeof setTimeout> | undefined;
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
let formError = $state('');
|
let formError = $state('');
|
||||||
let fieldErrors = $state<Record<string, string>>({});
|
let fieldErrors = $state<Record<string, string>>({});
|
||||||
let successMessage = $state('');
|
let successMessage = $state('');
|
||||||
let lastForm = $state<ActionResult>(null);
|
let lastForm = $state.raw<ActionResult>(null);
|
||||||
|
|
||||||
let closeTimer: ReturnType<typeof setTimeout> | undefined;
|
let closeTimer: ReturnType<typeof setTimeout> | undefined;
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
let formError = $state('');
|
let formError = $state('');
|
||||||
let fieldErrors = $state<Record<string, string>>({});
|
let fieldErrors = $state<Record<string, string>>({});
|
||||||
let successMessage = $state('');
|
let successMessage = $state('');
|
||||||
let lastForm = $state<ActionResult>(null);
|
let lastForm = $state.raw<ActionResult>(null);
|
||||||
|
|
||||||
let closeTimer: ReturnType<typeof setTimeout> | undefined;
|
let closeTimer: ReturnType<typeof setTimeout> | undefined;
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
let formError = $state('');
|
let formError = $state('');
|
||||||
let fieldErrors = $state<Record<string, string>>({});
|
let fieldErrors = $state<Record<string, string>>({});
|
||||||
let successMessage = $state('');
|
let successMessage = $state('');
|
||||||
let lastForm = $state<ActionResult>(null);
|
let lastForm = $state.raw<ActionResult>(null);
|
||||||
|
|
||||||
let element = $state<HTMLElement>();
|
let element = $state<HTMLElement>();
|
||||||
let editor: Editor | null = null;
|
let editor: Editor | null = null;
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
let formError = $state('');
|
let formError = $state('');
|
||||||
let fieldErrors = $state<Record<string, string>>({});
|
let fieldErrors = $state<Record<string, string>>({});
|
||||||
let successMessage = $state('');
|
let successMessage = $state('');
|
||||||
let lastForm = $state<ActionResult>(null);
|
let lastForm = $state.raw<ActionResult>(null);
|
||||||
|
|
||||||
let closeTimer: ReturnType<typeof setTimeout> | undefined;
|
let closeTimer: ReturnType<typeof setTimeout> | undefined;
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
let lastRecordId = $state<string | null>(null);
|
let lastRecordId = $state<string | null>(null);
|
||||||
// Capture the form result as it is when this modal mounts so a stale
|
// Capture the form result as it is when this modal mounts so a stale
|
||||||
// result from a previous record is not replayed on open.
|
// result from a previous record is not replayed on open.
|
||||||
let lastForm = $state<ActionResult>(untrack(() => form ?? null));
|
let lastForm = $state.raw<ActionResult>(untrack(() => form ?? null));
|
||||||
|
|
||||||
function resetAddressFields() {
|
function resetAddressFields() {
|
||||||
addrStreet = '';
|
addrStreet = '';
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
let formError = $state('');
|
let formError = $state('');
|
||||||
let fieldErrors = $state<Record<string, string>>({});
|
let fieldErrors = $state<Record<string, string>>({});
|
||||||
let successMessage = $state('');
|
let successMessage = $state('');
|
||||||
let lastForm = $state<ActionResult>(null);
|
let lastForm = $state.raw<ActionResult>(null);
|
||||||
|
|
||||||
let closeTimer: ReturnType<typeof setTimeout> | undefined;
|
let closeTimer: ReturnType<typeof setTimeout> | undefined;
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
let formError = $state('');
|
let formError = $state('');
|
||||||
let fieldErrors = $state<Record<string, string>>({});
|
let fieldErrors = $state<Record<string, string>>({});
|
||||||
let successMessage = $state('');
|
let successMessage = $state('');
|
||||||
let lastForm = $state<ActionResult>(null);
|
let lastForm = $state.raw<ActionResult>(null);
|
||||||
|
|
||||||
let closeTimer: ReturnType<typeof setTimeout> | undefined;
|
let closeTimer: ReturnType<typeof setTimeout> | undefined;
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
let formError = $state('');
|
let formError = $state('');
|
||||||
let fieldErrors = $state<Record<string, string>>({});
|
let fieldErrors = $state<Record<string, string>>({});
|
||||||
let successMessage = $state('');
|
let successMessage = $state('');
|
||||||
let lastForm = $state<ActionResult>(null);
|
let lastForm = $state.raw<ActionResult>(null);
|
||||||
|
|
||||||
let closeTimer: ReturnType<typeof setTimeout> | undefined;
|
let closeTimer: ReturnType<typeof setTimeout> | undefined;
|
||||||
|
|
||||||
|
|||||||
@@ -61,4 +61,25 @@ describe('users admin page', () => {
|
|||||||
await expect.element(page.getByRole('button', { name: 'Save User' })).toBeInTheDocument();
|
await expect.element(page.getByRole('button', { name: 'Save User' })).toBeInTheDocument();
|
||||||
expect(page.getByText('User updated').elements()).toHaveLength(0);
|
expect(page.getByText('User updated').elements()).toHaveLength(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('closes the create modal after a successful submit', async () => {
|
||||||
|
const result = render(Page, {
|
||||||
|
params: {},
|
||||||
|
data: makeData(),
|
||||||
|
form: null
|
||||||
|
});
|
||||||
|
|
||||||
|
await clickButton('New User');
|
||||||
|
await expect.element(page.getByRole('button', { name: 'Create User' })).toBeInTheDocument();
|
||||||
|
|
||||||
|
await result.rerender({ form: { success: true, action: 'upsert' } });
|
||||||
|
|
||||||
|
await expect.element(page.getByText('User created')).toBeInTheDocument();
|
||||||
|
await vi.waitFor(
|
||||||
|
() => {
|
||||||
|
expect(page.getByRole('button', { name: 'Create User' }).elements()).toHaveLength(0);
|
||||||
|
},
|
||||||
|
{ timeout: 3000 }
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user