From 87c610b8d7226f39d06838d241764a97beb8ddd2 Mon Sep 17 00:00:00 2001 From: Luna Date: Thu, 21 May 2026 19:46:16 +0000 Subject: [PATCH] Remove auth form reload and keep SPA navigation --- frontend/src/app.tsx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/frontend/src/app.tsx b/frontend/src/app.tsx index 099881b..90a841c 100644 --- a/frontend/src/app.tsx +++ b/frontend/src/app.tsx @@ -262,6 +262,7 @@ function SetupPage({ onDone }: { onDone: () => Promise }) { action="Create admin" onSubmit={async (fd) => { await api.request('/api/setup', { method: 'POST', body: JSON.stringify(Object.fromEntries(fd)) }); + nav('/admin'); await onDone(); }} fields={['username', 'password']} @@ -276,7 +277,6 @@ function LoginPage({ onDone }: { onDone: () => Promise }) { action="Sign in" onSubmit={async (fd) => { await api.request('/api/login', { method: 'POST', body: JSON.stringify(Object.fromEntries(fd)) }); - nav('/'); await onDone(); }} fields={['username', 'password']} @@ -295,20 +295,28 @@ function AuthCard({ fields: string[]; onSubmit: (fd: FormData) => Promise; }) { + const [submitError, setSubmitError] = useState(null); + return (
{ e.preventDefault(); - await onSubmit(new FormData(e.currentTarget)); - location.reload(); + setSubmitError(null); + try { + await onSubmit(new FormData(e.currentTarget)); + } catch (err) { + const message = err instanceof Error ? err.message : String(err); + setSubmitError(message || 'Request failed. Please try again.'); + } }} >

{title}

{fields.map((f) => ( ))} + {submitError ?

{submitError}

: null}