fix: remove rowStatuses prop from ProductDescriptions to fix app crash

The rowStatuses prop was merged from feature branch but is incompatible
with main. Removed it and restored original tbody structure while keeping
the Present/Missing filter fix.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
Christian Vidal Wolf
2026-04-08 19:32:28 +02:00
co-authored by Qwen-Coder
parent 0d47f5be33
commit 71a4897f28
2 changed files with 60 additions and 71 deletions
+29 -30
View File
@@ -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<any[]>(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' && (
<ProductDescriptions
data={appState.data}
onEdit={(index) => setEditingRowIndex(index)}
rowStatuses={rowStatuses}
<ProductDescriptions
data={appState.data}
onEdit={(index) => setEditingRowIndex(index)}
/>
)}
{activeModule === 'matrix' && (
@@ -409,15 +408,15 @@ export default function App() {
</main>
</div>
<UndoToast
undoState={undoHistory[0] || null}
onUndo={handleUndo}
onClose={() => setUndoHistory([])}
<UndoToast
undoState={undoHistory[0] || null}
onUndo={handleUndo}
onClose={() => setUndoHistory([])}
/>
{editingRowIndex !== null && (
<EditPanel
row={appState.data[editingRowIndex]}
<EditPanel
row={appState.data[editingRowIndex]}
rowIndex={editingRowIndex}
onSave={handleSaveRow}
onClose={() => setEditingRowIndex(null)}