+ {/* Log options for debugging */}
+ {(() => { console.log(`ValidationCell: fieldKey=${fieldKey}, options=`, options); return null; })()}
({
// Only fetch if we have a valid company ID
if (!companyId) return;
+ console.log(`Fetching product lines for row ${rowIndex}, company ${companyId}`);
+
// Set loading state for this row
setIsLoadingLines(prev => ({ ...prev, [rowIndex]: true }));
@@ -129,6 +131,7 @@ const ValidationContainer = ({
}
const productLines = await response.json();
+ console.log(`Received product lines for row ${rowIndex}:`, productLines);
// Store the product lines for this specific row
setRowProductLines(prev => ({ ...prev, [rowIndex]: productLines }));
@@ -148,6 +151,8 @@ const ValidationContainer = ({
// Only fetch if we have a valid line ID
if (!lineId) return;
+ console.log(`Fetching sublines for row ${rowIndex}, line ${lineId}`);
+
// Set loading state for this row
setIsLoadingSublines(prev => ({ ...prev, [rowIndex]: true }));
@@ -158,6 +163,7 @@ const ValidationContainer = ({
}
const sublines = await response.json();
+ console.log(`Received sublines for row ${rowIndex}:`, sublines);
// Store the sublines for this specific row
setRowSublines(prev => ({ ...prev, [rowIndex]: sublines }));
@@ -365,6 +371,7 @@ const ValidationContainer = ({
// Enhanced updateRow function - memoized
const enhancedUpdateRow = useCallback(async (rowIndex: number, fieldKey: T, value: any) => {
// Process value before updating data
+ console.log(`enhancedUpdateRow called: rowIndex=${rowIndex}, fieldKey=${fieldKey}, value=`, value);
let processedValue = value;
// Strip dollar signs from price fields
@@ -921,9 +928,13 @@ const ValidationContainer = ({
itemNumbers={itemNumbersMap}
isLoadingTemplates={isLoadingTemplates}
copyDown={handleCopyDown}
+ rowProductLines={rowProductLines}
+ rowSublines={rowSublines}
+ isLoadingLines={isLoadingLines}
+ isLoadingSublines={isLoadingSublines}
/>
);
- }), [validatingUpcRows, itemNumbers, isLoadingTemplates, handleCopyDown, validatingCells]);
+ }), [validatingUpcRows, itemNumbers, isLoadingTemplates, handleCopyDown, validatingCells, rowProductLines, rowSublines, isLoadingLines, isLoadingSublines]);
// Memoize the rendered validation table
const renderValidationTable = useMemo(() => (
@@ -945,6 +956,10 @@ const ValidationContainer = ({
isLoadingTemplates={isLoadingTemplates}
copyDown={handleCopyDown}
upcValidationResults={new Map()}
+ rowProductLines={rowProductLines}
+ rowSublines={rowSublines}
+ isLoadingLines={isLoadingLines}
+ isLoadingSublines={isLoadingSublines}
/>
), [
EnhancedValidationTable,
@@ -961,7 +976,11 @@ const ValidationContainer = ({
applyTemplate,
getTemplateDisplayText,
isLoadingTemplates,
- handleCopyDown
+ handleCopyDown,
+ rowProductLines,
+ rowSublines,
+ isLoadingLines,
+ isLoadingSublines
]);
// Add scroll container ref at the container level
diff --git a/inventory/src/lib/react-spreadsheet-import/src/steps/ValidationStepNew/components/ValidationTable.tsx b/inventory/src/lib/react-spreadsheet-import/src/steps/ValidationStepNew/components/ValidationTable.tsx
index 3c1a4dd..2bc3331 100644
--- a/inventory/src/lib/react-spreadsheet-import/src/steps/ValidationStepNew/components/ValidationTable.tsx
+++ b/inventory/src/lib/react-spreadsheet-import/src/steps/ValidationStepNew/components/ValidationTable.tsx
@@ -166,10 +166,18 @@ const ValidationTable = ({
validatingCells,
itemNumbers,
isLoadingTemplates = false,
- copyDown
+ copyDown,
+ rowProductLines = {},
+ rowSublines = {},
+ isLoadingLines = {},
+ isLoadingSublines = {}
}: ValidationTableProps) => {
const { translations } = useRsi();
+ // Debug logs
+ console.log('ValidationTable rowProductLines:', rowProductLines);
+ console.log('ValidationTable rowSublines:', rowSublines);
+
// Add state for copy down selection mode
const [isInCopyDownMode, setIsInCopyDownMode] = useState(false);
const [sourceRowIndex, setSourceRowIndex] = useState(null);
@@ -285,7 +293,7 @@ const ValidationTable = ({
const cache = new Map();
fields.forEach((field) => {
- if (field.disabled) return;
+ // Don't skip disabled fields
if (field.fieldType.type === 'select' || field.fieldType.type === 'multi-select') {
const fieldKey = String(field.key);
@@ -308,7 +316,7 @@ const ValidationTable = ({
// Memoize field columns with stable handlers
const fieldColumns = useMemo(() => fields.map((field): ColumnDef, any> | null => {
- if (field.disabled) return null;
+ // Don't filter out disabled fields, just pass the disabled state to the cell component
const fieldWidth = field.width || (
field.fieldType.type === "checkbox" ? 80 :
@@ -327,25 +335,51 @@ const ValidationTable = ({
accessorKey: fieldKey,
header: field.label || fieldKey,
size: fieldWidth,
- cell: ({ row }) => (
- }
- value={row.original[field.key as keyof typeof row.original]}
- onChange={(value) => handleFieldUpdate(row.index, field.key as T, value)}
- errors={validationErrors.get(row.index)?.[fieldKey] || []}
- isValidating={validatingCells.has(`${row.index}-${field.key}`)}
- fieldKey={fieldKey}
- options={fieldOptions}
- itemNumber={itemNumbers.get(row.index)}
- width={fieldWidth}
- rowIndex={row.index}
- copyDown={(endRowIndex?: number) => handleCopyDown(row.index, field.key as string, endRowIndex)}
- totalRows={data.length}
- />
- )
+ cell: ({ row }) => {
+ // Get row-specific options for line and subline fields
+ let options = fieldOptions;
+ const rowId = row.original.__index;
+
+ if (fieldKey === 'line' && rowId && rowProductLines[rowId]) {
+ options = rowProductLines[rowId];
+ console.log(`Setting line options for row ${rowId}:`, options);
+ } else if (fieldKey === 'subline' && rowId && rowSublines[rowId]) {
+ options = rowSublines[rowId];
+ console.log(`Setting subline options for row ${rowId}:`, options);
+ }
+
+ // Determine if this cell is in loading state
+ let isLoading = validatingCells.has(`${row.index}-${field.key}`);
+
+ // Add loading state for line/subline fields
+ if (fieldKey === 'line' && rowId && isLoadingLines[rowId]) {
+ isLoading = true;
+ console.log(`Line field for row ${rowId} is loading`);
+ } else if (fieldKey === 'subline' && rowId && isLoadingSublines[rowId]) {
+ isLoading = true;
+ console.log(`Subline field for row ${rowId} is loading`);
+ }
+
+ return (
+ }
+ value={row.original[field.key as keyof typeof row.original]}
+ onChange={(value) => handleFieldUpdate(row.index, field.key as T, value)}
+ errors={validationErrors.get(row.index)?.[fieldKey] || []}
+ isValidating={isLoading}
+ fieldKey={fieldKey}
+ options={options}
+ itemNumber={itemNumbers.get(row.index)}
+ width={fieldWidth}
+ rowIndex={row.index}
+ copyDown={(endRowIndex?: number) => handleCopyDown(row.index, field.key as string, endRowIndex)}
+ totalRows={data.length}
+ />
+ );
+ }
};
}).filter((col): col is ColumnDef, any> => col !== null),
- [fields, validationErrors, validatingCells, itemNumbers, handleFieldUpdate, handleCopyDown, optionsCache, data.length]);
+ [fields, validationErrors, validatingCells, itemNumbers, handleFieldUpdate, handleCopyDown, optionsCache, data.length, rowProductLines, rowSublines, isLoadingLines, isLoadingSublines]);
// Combine columns
const columns = useMemo(() => [selectionColumn, templateColumn, ...fieldColumns], [selectionColumn, templateColumn, fieldColumns]);
diff --git a/inventory/src/lib/react-spreadsheet-import/src/steps/ValidationStepNew/components/cells/SelectCell.tsx b/inventory/src/lib/react-spreadsheet-import/src/steps/ValidationStepNew/components/cells/SelectCell.tsx
index 41b2095..b386145 100644
--- a/inventory/src/lib/react-spreadsheet-import/src/steps/ValidationStepNew/components/cells/SelectCell.tsx
+++ b/inventory/src/lib/react-spreadsheet-import/src/steps/ValidationStepNew/components/cells/SelectCell.tsx
@@ -51,6 +51,8 @@ const SelectCell = ({
// Add state for hover
const [isHovered, setIsHovered] = useState(false);
+ console.log(`SelectCell: field.key=${field.key}, disabled=${disabled}, options=`, options);
+
// Helper function to check if a class is present in the className string
const hasClass = (cls: string): boolean => {
const classNames = className.split(' ');
@@ -66,6 +68,7 @@ const SelectCell = ({
// Memoize options processing to avoid recalculation on every render
const selectOptions = useMemo(() => {
+ console.log(`Processing options for ${field.key}:`, options);
// Fast path check - if we have raw options, just use those
if (options && options.length > 0) {
// Check if options already have the correct structure to avoid mapping
@@ -146,31 +149,95 @@ const SelectCell = ({
if (disabled) {
const displayText = displayValue;
+ // For debugging, let's render the Popover component even if disabled
+ // This will help us determine if the issue is with the disabled state
return (
- setIsHovered(true)}
- onMouseLeave={() => setIsHovered(false)}
+
{
+ setOpen(isOpen);
+ if (isOpen && onStartEdit) onStartEdit();
+ }}
>
- {displayText || ""}
-
+
+
+
+
+
+
+
+ No options found.
+
+ {selectOptions.map((option) => (
+ handleSelect(value)}
+ className="flex w-full"
+ >
+
+ {option.label}
+
+ ))}
+
+
+
+
+
);
}