fix: restore internal control columns and protect them from Dropbox sync overrides

This commit is contained in:
Christian Vidal Wolf
2026-04-23 18:36:35 +02:00
parent 5112a27cda
commit e0508d50d6
3 changed files with 11 additions and 14 deletions
+2 -2
View File
@@ -45,10 +45,10 @@ export default async function handler(req, res) {
.from('products')
.select('product_id, status');
// Protect products with status 'edited' or 'pending'
// Protect ALL products that are not 'excel' status (i.e. they have manual edits or special status)
const manuallyEditedIds = new Set(
(existingProducts || [])
.filter(p => p.status === 'edited' || p.status === 'pending')
.filter(p => p.status && p.status !== 'excel')
.map(p => p.product_id)
);
+7 -4
View File
@@ -191,9 +191,10 @@ const articleNoIdx = resolvedCols.ARTICLE_NO;
let finalRow = [...row];
// Merge logic: Prioritize internal control columns and active session edits
if (synced && (synced.status === 'edited' || synced.status === 'pending' || synced.status === 'synced')) {
if (synced && synced.data) {
// 1. ALWAYS restore Internal Control Columns (indices >= 100)
// These are the "TYPE", "Item to Logistic", "Checking", etc.
// These are the "TYPE", "Item to Logistic", "Checking", etc.
// We use hardcoded indices from COLUMNS to ensure they stay at the end.
Object.values(COLUMNS).forEach(idx => {
if (idx >= 100 && synced.data[idx] !== undefined && synced.data[idx] !== null) {
finalRow[idx] = synced.data[idx];
@@ -210,8 +211,10 @@ const articleNoIdx = resolvedCols.ARTICLE_NO;
});
}
// Update row status in UI
setRowStatuses(prev => ({ ...prev, [articleNo]: synced.status }));
// Update row status in UI if it's not the default 'excel'
if (synced.status && synced.status !== 'excel') {
setRowStatuses(prev => ({ ...prev, [articleNo]: synced.status! }));
}
}
return finalRow.map((val: any, idx: number) => {
+2 -8
View File
@@ -74,14 +74,8 @@ export const COLUMN_PATTERNS: Record<keyof typeof COLUMNS, string[]> = {
OUTER_W: ['outer', 'w'],
OUTER_L: ['outer', 'l'],
OUTER_H: ['outer', 'h'],
// Virtual/Extra columns stay hardcoded or managed elsewhere
VERIFIED_DIMS: ['verified'],
VALIDATED_CHECK: ['validated'],
VALIDATED_NOTE: ['note'],
PRODUCT_TYPE: ['type'],
ITEM_TO_LOGISTIC: ['item', 'to', 'logistic'],
ANNA_CHECK: ['anna', 'check'],
ANNA_NOTE: ['anna', 'note']
// Virtual/Extra columns stay hardcoded and are NOT auto-detected from headers
// to prevent internal data from being shifted or overwritten by Excel column shifts.
};
export function resolveColumnIndices(headers: string[]): typeof COLUMNS {