From 3c821b83a0f7d87c4a0d0c413f0f8fa46dc5984a Mon Sep 17 00:00:00 2001 From: Christian Vidal Wolf Date: Fri, 10 Apr 2026 12:09:49 +0200 Subject: [PATCH] Gracefully handle JWT expired and warn user to re-login --- src/App.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 5bc76f9..80b1348 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -322,7 +322,7 @@ export default function App() { setIsSavingAll(true); let failedArticles: string[] = []; - const token = session?.access_token; + let jwtExpired = false; try { for (const [articleNo, { newData, originalData, articleName }] of entries) { @@ -343,12 +343,17 @@ export default function App() { } else { setRowStatuses(prev => ({ ...prev, [articleNo]: 'error' })); failedArticles.push(`${articleNo} [${result.error || 'Unknown error'}]`); + if (result.error?.includes('401') || result.error?.includes('JWT expired')) { + jwtExpired = true; + } } } console.log('[handleSaveAll] Finished loop. Failed:', failedArticles.length); - if (failedArticles.length > 0) { + if (jwtExpired) { + alert("Tu sesión ha caducado (JWT expired). Por favor, haz clic en el botón de Cerrar Sesión (Sign out) arriba a la derecha y vuelve a iniciar sesión para guardar tus cambios."); + } else if (failedArticles.length > 0) { alert(`Failed to save items:\n\n${failedArticles.join('\n')}\n\nPlease try again.`); } else { setAppState(prev => ({ ...prev, hasUnsavedChanges: false }));