diff --git a/src/components/PricingView.tsx b/src/components/PricingView.tsx index af17dd9..043c4a6 100644 --- a/src/components/PricingView.tsx +++ b/src/components/PricingView.tsx @@ -55,7 +55,15 @@ export function PricingView({ data, headers, onSaveRow, onCaptureState, onEdit, const [lineMultiFilter, setLineMultiFilter] = useState([]); const [classificationFilter, setClassificationFilter] = useState([]); const [nameColFilter, setNameColFilter] = useState(''); - const [openFilter, setOpenFilter] = useState<'name' | 'line' | 'classification' | null>(null); + const [openFilter, setOpenFilter] = useState<'name' | 'line' | 'classification' | 'unitsOuter' | 'outerW' | 'outerL' | 'outerH' | 'srp' | 'container' | null>(null); + const [unitsOuterFilter, setUnitsOuterFilter] = useState([]); + const [outerWFilter, setOuterWFilter] = useState([]); + const [outerLFilter, setOuterLFilter] = useState([]); + const [outerHFilter, setOuterHFilter] = useState([]); + const [srpFilter, setSrpFilter] = useState([]); + const [containerFilter, setContainerFilter] = useState([]); + const [srpColFilter, setSrpColFilter] = useState([]); + const [containerColFilter, setContainerColFilter] = useState([]); // ── Dynamic column detection ────────────────────────────────────────────── const { uvpIdx, srpCols, containerCols } = useMemo(() => { @@ -146,6 +154,22 @@ export function PricingView({ data, headers, onSaveRow, onCaptureState, onEdit, Array.from(new Set(data.map(r => String(r[COLUMNS.CLASSIFICATION] || '')))).sort(), [data]); + const uniqueUnitsOuter = useMemo(() => + Array.from(new Set(data.map(r => String(r[COLUMNS.UNITS_OUTER] || '')))).filter(v => v).sort(), + [data]); + + const uniqueOuterW = useMemo(() => + Array.from(new Set(data.map(r => String(r[COLUMNS.OUTER_W] || '')))).filter(v => v).sort((a, b) => Number(a) - Number(b)), + [data]); + + const uniqueOuterL = useMemo(() => + Array.from(new Set(data.map(r => String(r[COLUMNS.OUTER_L] || '')))).filter(v => v).sort((a, b) => Number(a) - Number(b)), + [data]); + + const uniqueOuterH = useMemo(() => + Array.from(new Set(data.map(r => String(r[COLUMNS.OUTER_H] || '')))).filter(v => v).sort((a, b) => Number(a) - Number(b)), + [data]); + // ── Filtered rows ───────────────────────────────────────────────────────── const filteredRows = useMemo(() => { let result = analyzedRows; @@ -177,9 +201,21 @@ export function PricingView({ data, headers, onSaveRow, onCaptureState, onEdit, if (classificationFilter.length > 0) { result = result.filter(r => classificationFilter.includes(String(r.row[COLUMNS.CLASSIFICATION] || ''))); } + if (unitsOuterFilter.length > 0) { + result = result.filter(r => unitsOuterFilter.includes(String(r.row[COLUMNS.UNITS_OUTER] || ''))); + } + if (outerWFilter.length > 0) { + result = result.filter(r => outerWFilter.includes(String(r.row[COLUMNS.OUTER_W] || ''))); + } + if (outerLFilter.length > 0) { + result = result.filter(r => outerLFilter.includes(String(r.row[COLUMNS.OUTER_L] || ''))); + } + if (outerHFilter.length > 0) { + result = result.filter(r => outerHFilter.includes(String(r.row[COLUMNS.OUTER_H] || ''))); + } return result; - }, [analyzedRows, filterMode, search, nameColFilter, lineMultiFilter, classificationFilter]); + }, [analyzedRows, filterMode, search, nameColFilter, lineMultiFilter, classificationFilter, unitsOuterFilter, outerWFilter, outerLFilter, outerHFilter]); // ── Inline edit helpers ─────────────────────────────────────────────────── const startEdit = (rowIndex: number, colIndex: number, currentValue: string) => { @@ -441,23 +477,107 @@ export function PricingView({ data, headers, onSaveRow, onCaptureState, onEdit, ))} {/* Units/Outer */} - - Units/Outer + +
+ Units/Outer + +
+ {openFilter === 'unitsOuter' && ( + setUnitsOuterFilter(prev => prev.includes(val) ? prev.filter(v => v !== val) : [...prev, val])} + onSelectAll={vals => setUnitsOuterFilter(vals)} + onClear={() => { setUnitsOuterFilter([]); setOpenFilter(null); }} + onClose={() => setOpenFilter(null)} + /> + )} {/* Outer W */} - - Outer W + +
+ Outer W + +
+ {openFilter === 'outerW' && ( + setOuterWFilter(prev => prev.includes(val) ? prev.filter(v => v !== val) : [...prev, val])} + onSelectAll={vals => setOuterWFilter(vals)} + onClear={() => { setOuterWFilter([]); setOpenFilter(null); }} + onClose={() => setOpenFilter(null)} + /> + )} {/* Outer L */} - - Outer L + +
+ Outer L + +
+ {openFilter === 'outerL' && ( + setOuterLFilter(prev => prev.includes(val) ? prev.filter(v => v !== val) : [...prev, val])} + onSelectAll={vals => setOuterLFilter(vals)} + onClear={() => { setOuterLFilter([]); setOpenFilter(null); }} + onClose={() => setOpenFilter(null)} + /> + )} {/* Outer H */} - - Outer H + +
+ Outer H + +
+ {openFilter === 'outerH' && ( + setOuterHFilter(prev => prev.includes(val) ? prev.filter(v => v !== val) : [...prev, val])} + onSelectAll={vals => setOuterHFilter(vals)} + onClear={() => { setOuterHFilter([]); setOpenFilter(null); }} + onClose={() => setOpenFilter(null)} + /> + )} {/* Container columns */}