From 6a5e6d2bfb538e9be5e55601150b08f1f073e144 Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 7 Mar 2025 22:23:42 -0500 Subject: [PATCH] Style tweaks, fix section hiding in map columns step --- .../MatchColumnsStep/MatchColumnsStep.tsx | 86 ++++++++---------- .../components/ColumnGrid.tsx | 88 ------------------- .../components/UserTableColumn.tsx | 74 ---------------- .../SelectHeaderStep/SelectHeaderStep.tsx | 2 +- .../components/SelectHeaderTable.tsx | 2 +- .../components/ValidationContainer.tsx | 6 +- 6 files changed, 43 insertions(+), 215 deletions(-) delete mode 100644 inventory/src/lib/react-spreadsheet-import/src/steps/MatchColumnsStep/components/ColumnGrid.tsx delete mode 100644 inventory/src/lib/react-spreadsheet-import/src/steps/MatchColumnsStep/components/UserTableColumn.tsx diff --git a/inventory/src/lib/react-spreadsheet-import/src/steps/MatchColumnsStep/MatchColumnsStep.tsx b/inventory/src/lib/react-spreadsheet-import/src/steps/MatchColumnsStep/MatchColumnsStep.tsx index f0d13d6..8252bf3 100644 --- a/inventory/src/lib/react-spreadsheet-import/src/steps/MatchColumnsStep/MatchColumnsStep.tsx +++ b/inventory/src/lib/react-spreadsheet-import/src/steps/MatchColumnsStep/MatchColumnsStep.tsx @@ -143,7 +143,10 @@ const ColumnActions = memo(({ className="h-7 px-2" > {isExpanded ? - "Hide values" : + <> + + Hide values + : <> Map values @@ -630,27 +633,21 @@ export const MatchColumnsStep = React.memo(({ ) const [globalSelections, setGlobalSelections] = useState(initialGlobalSelections || {}) const [showAllColumns, setShowAllColumns] = useState(true) - const [expandedValueMappings, setExpandedValueMappings] = useState([]) + const [expandedValues, setExpandedValues] = useState([]) + const [userCollapsedColumns, setUserCollapsedColumns] = useState([]) - // Use debounce for expensive operations - const [expandedValues, setExpandedValues] = useState([]); - - useEffect(() => { - const timeoutId = setTimeout(() => { - setExpandedValueMappings(expandedValues); - }, 50); - - return () => clearTimeout(timeoutId); - }, [expandedValues]); - - // Toggle with immediate visual feedback but debounced actual state change + // Toggle with immediate visual feedback const toggleValueMappingOptimized = useCallback((columnIndex: number) => { - setExpandedValues(prev => - prev.includes(columnIndex) - ? prev.filter(idx => idx !== columnIndex) - : [...prev, columnIndex] - ); - }, []); + if (expandedValues.includes(columnIndex)) { + // User is collapsing this column - add to userCollapsedColumns + setUserCollapsedColumns(prev => [...prev, columnIndex]); + setExpandedValues(prev => prev.filter(idx => idx !== columnIndex)); + } else { + // User is expanding this column - remove from userCollapsedColumns + setUserCollapsedColumns(prev => prev.filter(idx => idx !== columnIndex)); + setExpandedValues(prev => [...prev, columnIndex]); + } + }, [expandedValues]); // Check if column is expandable (has value mappings) const isExpandable = useCallback((column: Column) => { @@ -798,9 +795,6 @@ export const MatchColumnsStep = React.memo(({ const stableMappedProductLines = useMemo(() => mappedProductLines || [], [mappedProductLines]); const stableMappedSublines = useMemo(() => mappedSublines || [], [mappedSublines]); - // Type guard for suppliers and companies - - // Check if a field is covered by global selections const isFieldCoveredByGlobalSelections = useCallback((key: string) => { return (key === 'supplier' && !!globalSelections.supplier) || @@ -1268,15 +1262,18 @@ export const MatchColumnsStep = React.memo(({ // Automatically expand columns with unmapped values - use layoutEffect to avoid flashing useLayoutEffect(() => { - // Only add new columns that need to be expanded without removing existing ones - const columnsToExpand = columnsWithUnmappedValues - .filter(column => !expandedValueMappings.includes(column.index)) - .map(column => column.index); + // Track the current unmapped column indexes + const currentUnmappedIndexes = columnsWithUnmappedValues.map(col => col.index); - if (columnsToExpand.length > 0) { - setExpandedValueMappings(prev => [...prev, ...columnsToExpand]); + // Find columns that are newly unmapped (weren't in expandedValues or userCollapsedColumns) + const newlyUnmappedColumns = currentUnmappedIndexes.filter(index => + !expandedValues.includes(index) && !userCollapsedColumns.includes(index) + ); + + if (newlyUnmappedColumns.length > 0) { + setExpandedValues(prev => [...prev, ...newlyUnmappedColumns]); } - }, [columnsWithUnmappedValues, expandedValueMappings]); + }, [columnsWithUnmappedValues, expandedValues, userCollapsedColumns]); // Create a stable mapping of column index to change handlers const columnChangeHandlers = useMemo(() => { @@ -1351,7 +1348,7 @@ export const MatchColumnsStep = React.memo(({ - Imported Spreadsheet Column + Imported Column Sample Data Map To Field @@ -1361,7 +1358,7 @@ export const MatchColumnsStep = React.memo(({ {/* Always show columns with unmapped values */} {columnsWithUnmappedValues.map((column) => { - const isExpanded = expandedValueMappings.includes(column.index); + const isExpanded = expandedValues.includes(column.index); return ( @@ -1381,7 +1378,7 @@ export const MatchColumnsStep = React.memo(({ column={column} onIgnore={onIgnore} toggleValueMapping={toggleValueMappingOptimized} - isExpanded={expandedValueMappings.includes(column.index)} + isExpanded={isExpanded} canExpandValues={isExpandable(column)} /> @@ -1401,7 +1398,7 @@ export const MatchColumnsStep = React.memo(({ {/* Always show unmapped columns */} {unmatchedColumns.map((column) => ( - + {column.header} {renderSamplePreview(column.index)} @@ -1417,7 +1414,7 @@ export const MatchColumnsStep = React.memo(({ column={column} onIgnore={onIgnore} toggleValueMapping={toggleValueMappingOptimized} - isExpanded={expandedValueMappings.includes(column.index)} + isExpanded={expandedValues.includes(column.index)} canExpandValues={isExpandable(column)} /> @@ -1426,12 +1423,12 @@ export const MatchColumnsStep = React.memo(({ {/* Show matched columns if showAllColumns is true */} {showAllColumns && matchedColumns.map((column) => { - const isExpanded = expandedValueMappings.includes(column.index); + const isExpanded = expandedValues.includes(column.index); const canExpandValues = isExpandable(column); return ( - + {column.header} {renderSamplePreview(column.index)} @@ -1447,7 +1444,7 @@ export const MatchColumnsStep = React.memo(({ column={column} onIgnore={onIgnore} toggleValueMapping={toggleValueMappingOptimized} - isExpanded={expandedValueMappings.includes(column.index)} + isExpanded={isExpanded} canExpandValues={canExpandValues} /> @@ -1467,7 +1464,7 @@ export const MatchColumnsStep = React.memo(({ {/* Show ignored columns if showAllColumns is true */} {showAllColumns && ignoredColumns.map((column) => ( - + {column.header} {renderSamplePreview(column.index)} @@ -1476,7 +1473,7 @@ export const MatchColumnsStep = React.memo(({ - Ignored + Ignored -
- {header} -
- - - ) - } - - return ( - - -

- {header} -

- -
- - {entries.map((entry, i) => ( -

- {entry} -

- ))} -
-
- ) -} diff --git a/inventory/src/lib/react-spreadsheet-import/src/steps/SelectHeaderStep/SelectHeaderStep.tsx b/inventory/src/lib/react-spreadsheet-import/src/steps/SelectHeaderStep/SelectHeaderStep.tsx index a5e6daa..dfce26b 100644 --- a/inventory/src/lib/react-spreadsheet-import/src/steps/SelectHeaderStep/SelectHeaderStep.tsx +++ b/inventory/src/lib/react-spreadsheet-import/src/steps/SelectHeaderStep/SelectHeaderStep.tsx @@ -159,7 +159,7 @@ export const SelectHeaderStep = ({ data, onContinue, onBack }: SelectHeaderProps