From db91aeb842b510e2b8a5c6a3d8643d303954d796 Mon Sep 17 00:00:00 2001 From: Christian Vidal Wolf Date: Fri, 10 Apr 2026 12:06:16 +0200 Subject: [PATCH] Improve Supabase error reporting for diagnostic purposes --- src/App.tsx | 10 +++++----- src/lib/supabase.ts | 32 ++++++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index a8e44bd..5bc76f9 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -327,10 +327,10 @@ export default function App() { try { for (const [articleNo, { newData, originalData, articleName }] of entries) { console.log('[handleSaveAll] Saving article:', articleNo); - const success = await saveRowToSupabase(articleNo, newData, token); - console.log('[handleSaveAll] Save result for', articleNo, ':', success); + const result = await saveRowToSupabase(articleNo, newData, token); + console.log('[handleSaveAll] Save result for', articleNo, ':', result); - if (success) { + if (result.success) { // Also save to history await saveHistoryEntry(articleNo, articleName, originalData, newData, session?.user?.email || 'unknown', token); @@ -342,14 +342,14 @@ export default function App() { }); } else { setRowStatuses(prev => ({ ...prev, [articleNo]: 'error' })); - failedArticles.push(articleNo); + failedArticles.push(`${articleNo} [${result.error || 'Unknown error'}]`); } } console.log('[handleSaveAll] Finished loop. Failed:', failedArticles.length); if (failedArticles.length > 0) { - alert(`Failed to save ${failedArticles.length} items: ${failedArticles.join(', ')}. Please try again.`); + alert(`Failed to save items:\n\n${failedArticles.join('\n')}\n\nPlease try again.`); } else { setAppState(prev => ({ ...prev, hasUnsavedChanges: false })); } diff --git a/src/lib/supabase.ts b/src/lib/supabase.ts index 82c0339..3e5363b 100644 --- a/src/lib/supabase.ts +++ b/src/lib/supabase.ts @@ -33,7 +33,7 @@ export async function getAllSyncedRows(token?: string): Promise { +export async function saveRowToSupabase(articleNo: string, rowData: ExcelRow, token?: string): Promise<{ success: boolean; error?: string }> { try { const response = await fetch( `${SUPABASE_URL}/rest/v1/products`, @@ -54,10 +54,18 @@ export async function saveRowToSupabase(articleNo: string, rowData: ExcelRow, to } ); - return response.ok || response.status === 201; - } catch (error) { + if (!response.ok) { + const err = await response.json().catch(() => ({})); + return { + success: false, + error: `${response.status} ${response.statusText}: ${err.message || err.error_description || 'Unknown error'}` + }; + } + + return { success: true }; + } catch (error: any) { console.error('Error saving to Supabase:', error); - return false; + return { success: false, error: error.message || 'Network error' }; } } @@ -78,7 +86,7 @@ export async function saveHistoryEntry( newData: ExcelRow, changedBy: string, token?: string -): Promise { +): Promise<{ success: boolean; error?: string }> { try { const response = await fetch( `${SUPABASE_URL}/rest/v1/products_history`, @@ -101,10 +109,18 @@ export async function saveHistoryEntry( } ); - return response.ok; - } catch (error) { + if (!response.ok) { + const err = await response.json().catch(() => ({})); + return { + success: false, + error: `History ${response.status}: ${err.message || 'Unknown error'}` + }; + } + + return { success: true }; + } catch (error: any) { console.error('Error saving history to Supabase:', error); - return false; + return { success: false, error: error.message || 'Network error' }; } }