From 528fe7c0244b1e4332812726550ff0cbd53bc9a9 Mon Sep 17 00:00:00 2001 From: Matt Date: Tue, 18 Feb 2025 16:47:55 -0500 Subject: [PATCH] Shadcn conversion, select header --- .../SelectHeaderStep/SelectHeaderStep.tsx | 52 +++++--- .../components/SelectHeaderTable.tsx | 113 ++++++++++++------ .../steps/ValidationStep/ValidationStep.tsx | 5 +- 3 files changed, 114 insertions(+), 56 deletions(-) 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 c13673b..804610b 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 @@ -1,10 +1,8 @@ import { useCallback, useState } from "react" -import { Heading, ModalBody, useStyleConfig, Box } from "@chakra-ui/react" import { SelectHeaderTable } from "./components/SelectHeaderTable" -import { ContinueButton } from "../../components/ContinueButton" import { useRsi } from "../../hooks/useRsi" -import type { themeOverrides } from "../../theme" import type { RawData } from "../../types" +import { Button } from "@/components/ui/button" type SelectHeaderProps = { data: RawData[] @@ -13,9 +11,6 @@ type SelectHeaderProps = { } export const SelectHeaderStep = ({ data, onContinue, onBack }: SelectHeaderProps) => { - const styles = useStyleConfig( - "SelectHeaderStep", - ) as (typeof themeOverrides)["components"]["SelectHeaderStep"]["baseStyle"] const { translations } = useRsi() const [selectedRows, setSelectedRows] = useState>(new Set([0])) const [isLoading, setIsLoading] = useState(false) @@ -30,18 +25,37 @@ export const SelectHeaderStep = ({ data, onContinue, onBack }: SelectHeaderProps }, [onContinue, data, selectedRows]) return ( - <> - - {translations.selectHeaderStep.title} - - - - +
+
+
+
+

+ {translations.selectHeaderStep.title} +

+
+ +
+
+
+
+ {onBack && ( + + )} + +
+
+
) } diff --git a/inventory/src/lib/react-spreadsheet-import/src/steps/SelectHeaderStep/components/SelectHeaderTable.tsx b/inventory/src/lib/react-spreadsheet-import/src/steps/SelectHeaderStep/components/SelectHeaderTable.tsx index 6ee5d27..7283331 100644 --- a/inventory/src/lib/react-spreadsheet-import/src/steps/SelectHeaderStep/components/SelectHeaderTable.tsx +++ b/inventory/src/lib/react-spreadsheet-import/src/steps/SelectHeaderStep/components/SelectHeaderTable.tsx @@ -1,7 +1,15 @@ import { useMemo } from "react" -import { Table as DataTable, type Column } from "../../../components/Table" -import { generateSelectionColumns } from "./columns" import type { RawData } from "../../../types" +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table" +import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group" +import { Label } from "@/components/ui/label" import { cn } from "@/lib/utils" interface Props { @@ -10,51 +18,88 @@ interface Props { setSelectedRows: (rows: ReadonlySet) => void } -type TableRow = string[]; - export const SelectHeaderTable = ({ data, selectedRows, setSelectedRows }: Props) => { - const columns = useMemo(() => generateSelectionColumns(data), [data]) + const columns = useMemo(() => { + const longestRowLength = data.reduce((acc, curr) => (acc > curr.length ? acc : curr.length), 0) + return Array.from(Array(longestRowLength), (_, index) => ({ + key: index.toString(), + name: `Column ${index + 1}`, + })) + }, [data]) if (!data || data.length === 0) { return (

No data available to select headers from.

- ); + ) } + const selectedRowIndex = Array.from(selectedRows)[0] + const gridTemplateColumns = `60px repeat(${columns.length}, minmax(150px, 300px))` + return ( -
+

Select the row that contains your column headers

-
- - rows={data as TableRow[]} - columns={columns as Column[]} - selectedRows={selectedRows} - rowKeyGetter={(row: TableRow) => data.indexOf(row)} - onSelectedRowsChange={(newRows: Set) => { - console.log('Row selection changed:', newRows); - // allow selecting only one row - newRows.forEach((value: number) => { - if (!selectedRows.has(value)) { - setSelectedRows(new Set([value])) - return - } - }) - }} - onRowClick={(row: TableRow) => { - console.log('Row clicked:', row); - setSelectedRows(new Set([data.indexOf(row)])) - }} - className="rdg-static" - rowHeight={45} - headerRowHeight={45} - style={{ height: '100%' }} - /> +
+ + + + +
Select
+
+ {columns.map((column) => ( + +
+ {column.name} +
+
+ ))} +
+
+ + setSelectedRows(new Set([parseInt(value)]))} + > + {data.map((row, rowIndex) => ( + + +
+ + +
+
+ {columns.map((column, colIndex) => ( + +
+ {row[colIndex] || ""} +
+
+ ))} +
+ ))} +
+
+
) diff --git a/inventory/src/lib/react-spreadsheet-import/src/steps/ValidationStep/ValidationStep.tsx b/inventory/src/lib/react-spreadsheet-import/src/steps/ValidationStep/ValidationStep.tsx index d20153f..a6b5fb8 100644 --- a/inventory/src/lib/react-spreadsheet-import/src/steps/ValidationStep/ValidationStep.tsx +++ b/inventory/src/lib/react-spreadsheet-import/src/steps/ValidationStep/ValidationStep.tsx @@ -17,7 +17,6 @@ import { getCoreRowModel, type ColumnDef, flexRender, - type Row, type RowSelectionState, } from "@tanstack/react-table" import { Checkbox } from "@/components/ui/checkbox" @@ -255,7 +254,7 @@ export const ValidationStep = ({ initialData, file, onBack }: } return ( -
+
@@ -355,7 +354,7 @@ export const ValidationStep = ({ initialData, file, onBack }:
-
+
{onBack && (