feat: add Missing Data module as new sidebar entry

Replaces the tab approach with a dedicated 'Missing Data' module in the
sidebar. The module has two sub-tabs: 'Missing Classification' and
'Missing Launch Date'. Shows SKU, Name, Classification, Launch Date and
Ready to Order columns. Includes a local Excel serial date formatter so
dates that slipped through the App.tsx pre-processing are rendered
correctly instead of showing as raw numbers.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Christian Vidal Wolf
2026-04-12 15:11:57 +02:00
co-authored by Claude Sonnet 4.6
parent fdf878a4f8
commit 7eeccdaf8c
4 changed files with 322 additions and 96 deletions
+9 -6
View File
@@ -1,27 +1,30 @@
import React from 'react';
import { FileText, Table, Box, DollarSign, Package, Clock, History } from 'lucide-react';
import { FileText, Table, Box, DollarSign, Package, Clock, History, AlertTriangle } from 'lucide-react';
import { cn } from '../lib/utils';
interface SidebarProps {
activeModule: string;
setActiveModule: (m: 'descriptions' | 'article_details' | 'matrix' | 'dimensions' | 'pricing' | 'pending_validation' | 'history') => void;
setActiveModule: (m: 'descriptions' | 'article_details' | 'matrix' | 'dimensions' | 'pricing' | 'pending_validation' | 'history' | 'missing_data') => void;
userEmail: string;
}
export function Sidebar({ activeModule, setActiveModule, userEmail }: SidebarProps) {
const isMasterUser = userEmail?.toLowerCase() === 'christian.vidal@craze-group.com';
const navItems = [
type ModuleId = 'descriptions' | 'article_details' | 'matrix' | 'dimensions' | 'pricing' | 'pending_validation' | 'history' | 'missing_data';
const navItems: { id: ModuleId; label: string; icon: React.ElementType }[] = [
{ id: 'matrix', label: 'Matrix', icon: Table },
{ id: 'descriptions', label: 'Product Descriptions', icon: FileText },
{ id: 'article_details', label: 'Article Details', icon: Package },
{ id: 'dimensions', label: 'Dimensions', icon: Box },
{ id: 'pricing', label: 'Pricing & Units', icon: DollarSign },
{ id: 'missing_data', label: 'Missing Data', icon: AlertTriangle },
...(isMasterUser ? [
{ id: 'pending_validation', label: 'Pending Validation', icon: Clock },
{ id: 'history', label: 'Change History', icon: History }
{ id: 'pending_validation' as ModuleId, label: 'Pending Validation', icon: Clock },
{ id: 'history' as ModuleId, label: 'Change History', icon: History }
] : [])
] as const;
];
return (
<aside className="w-60 bg-slate-800 border-r border-slate-700 flex flex-col shrink-0">