diff --git a/src/App.tsx b/src/App.tsx index 1928d34..1414d57 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -81,22 +81,22 @@ export default function App() { const articleNo = String(row[articleNoIdx]); const synced = syncedData[articleNo]; const finalRow = synced ? synced.data : row; - + // Sync status_check if (synced && synced.status === 'pending') { setRowStatuses(prev => ({ ...prev, [articleNo]: 'pending' })); } - + // Format numeric/price fields to 2 decimal places return finalRow.map((val, idx) => { if (val === undefined || val === null || val === '') return val; const header = (rawHeaders[idx] || '').toLowerCase(); - + // Skip Article No, Barcodes, and other code-like fields // But allow if it's a weight/measure column (e.g. Article NW (kg)) - if ((header.includes('id') || header.includes('no') || header.includes('code') || - header.includes('art.') || header.includes('barcode') || header.includes('article')) && - !(header.includes('nw') || header.includes('gw') || header.includes('weight') || header.includes('kg'))) { + if ((header.includes('id') || header.includes('no') || header.includes('code') || + header.includes('art.') || header.includes('barcode') || header.includes('article')) && + !(header.includes('nw') || header.includes('gw') || header.includes('weight') || header.includes('kg'))) { return val; } @@ -106,7 +106,7 @@ export default function App() { if (typeof val === 'number') { return Number(val.toFixed(2)); } - + if (typeof val === 'string') { const normalized = val.trim().replace(',', '.'); const num = parseFloat(normalized); @@ -156,18 +156,18 @@ export default function App() { const wsname = wb.SheetNames[0]; const ws = wb.Sheets[wsname]; const data = XLSX.utils.sheet_to_json(ws, { header: 1 }); - + if (data.length > 0) { const rawHeaders = data[0]; const rawRows = data.slice(1); - + const processedRows = rawRows.map(row => { return row.map((val, idx) => { if (val === undefined || val === null || val === '') return val; const header = (rawHeaders[idx] || '').toLowerCase(); - - if (header.includes('id') || header.includes('no') || header.includes('code') || - header.includes('art.') || header.includes('barcode') || header.includes('article')) { + + if (header.includes('id') || header.includes('no') || header.includes('code') || + header.includes('art.') || header.includes('barcode') || header.includes('article')) { // But allow if it's a weight/measure column (e.g. Article NW (kg)) if (!(header.includes('nw') || header.includes('gw') || header.includes('weight') || header.includes('kg'))) { return val; @@ -190,7 +190,7 @@ export default function App() { if (typeof val === 'number') { return Number(val.toFixed(2)); } - + if (typeof val === 'string') { const normalized = val.trim().replace(',', '.'); const num = parseFloat(normalized); @@ -217,15 +217,15 @@ export default function App() { const handleExport = () => { if (appState.data.length === 0) return; - + const wsData = [appState.headers, ...appState.data]; const ws = XLSX.utils.aoa_to_sheet(wsData); const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, ws, 'Products'); - + const dateStr = new Date().toISOString().split('T')[0]; XLSX.writeFile(wb, `CRAZE_Products_Updated_${dateStr}.xlsx`); - + // 3. Post-export: Reset pending statuses in Supabase console.log('Resetting pending statuses in Supabase...'); resetAllPendingRows().then(success => { @@ -254,12 +254,12 @@ export default function App() { // 2. Persist to Supabase const articleNo = String(updatedRow[COLUMNS.ARTICLE_NO]); console.log(`Saving article ${articleNo} to Supabase...`); - + // Update local status to pending setRowStatuses(prev => ({ ...prev, [articleNo]: 'pending' })); - + const success = await saveRowToSupabase(articleNo, updatedRow); - + if (success) { console.log(`Successfully saved ${articleNo}`); setAppState(prev => ({ ...prev, hasUnsavedChanges: false })); @@ -283,7 +283,7 @@ export default function App() { const handleUndo = () => { if (undoHistory.length === 0) return; - + const [lastAction, ...remainingHistory] = undoHistory; setAppState(prev => ({ ...prev, @@ -366,10 +366,9 @@ export default function App() { ) : ( <> {activeModule === 'descriptions' && ( - setEditingRowIndex(index)} - rowStatuses={rowStatuses} + setEditingRowIndex(index)} /> )} {activeModule === 'matrix' && ( @@ -409,15 +408,15 @@ export default function App() { - setUndoHistory([])} + setUndoHistory([])} /> {editingRowIndex !== null && ( - setEditingRowIndex(null)} diff --git a/src/components/ProductDescriptions.tsx b/src/components/ProductDescriptions.tsx index 80ea9cd..114d222 100644 --- a/src/components/ProductDescriptions.tsx +++ b/src/components/ProductDescriptions.tsx @@ -304,47 +304,37 @@ export function ProductDescriptions({ data, onEdit }: ProductDescriptionsProps) - {paginatedData.map(({ row, index }) => { - const isPending = rowStatuses[String(row[COLUMNS.ARTICLE_NO])] === 'pending'; - return ( - - {row[COLUMNS.ARTICLE_NO]} - {row[COLUMNS.ARTICLE_NAME]} - {row[COLUMNS.LINE]} - {row[COLUMNS.LICENSE] || '—'} - - - {row[COLUMNS.CLASSIFICATION] || '—'} - - - - - - - - - - - ); - })} + {paginatedData.map(({ row, index }) => ( + + {row[COLUMNS.ARTICLE_NO]} + {row[COLUMNS.ARTICLE_NAME]} + {row[COLUMNS.LINE]} + {row[COLUMNS.LICENSE] || '—'} + + + {row[COLUMNS.CLASSIFICATION] || '—'} + + + + + + + + + + + ))} {paginatedData.length === 0 && (