import { FC, useState, useEffect } from "react"; import { Box, Checkbox, CheckboxGroup, VStack, HStack, Text, Button, Accordion, AccordionItem, AccordionButton, AccordionPanel, AccordionIcon, Badge } from "@chakra-ui/react"; export type SheetColumnInfo = { sheetName: string; columns: string[]; }; export type ColumnSelection = { sheetName: string; columnIndices: number[]; }; type Props = { sheetColumns: SheetColumnInfo[]; onChange: (selections: ColumnSelection[]) => void; }; const ColumnSelector: FC = ({ sheetColumns, onChange }) => { const [selections, setSelections] = useState>>(() => { const init: Record> = {}; sheetColumns.forEach(s => { init[s.sheetName] = new Set(s.columns.map((_, i) => i)); }); return init; }); useEffect(() => { const result: ColumnSelection[] = sheetColumns.map(s => ({ sheetName: s.sheetName, columnIndices: Array.from(selections[s.sheetName] ?? []) })); onChange(result); }, [selections, sheetColumns, onChange]); const toggleColumn = (sheetName: string, colIdx: number) => { setSelections(prev => { const set = new Set(prev[sheetName] ?? []); if (set.has(colIdx)) set.delete(colIdx); else set.add(colIdx); return { ...prev, [sheetName]: set }; }); }; const selectAll = (sheetName: string, cols: string[]) => { setSelections(prev => ({ ...prev, [sheetName]: new Set(cols.map((_, i) => i)) })); }; const selectNone = (sheetName: string) => { setSelections(prev => ({ ...prev, [sheetName]: new Set() })); }; return ( Select Columns to Translate i)}> {sheetColumns.map(sheet => ( {sheet.sheetName} {selections[sheet.sheetName]?.size ?? 0}/{sheet.columns.length} {sheet.columns.map((col, idx) => ( toggleColumn(sheet.sheetName, idx)} colorScheme="lingva" > {col} ))} ))} ); }; export default ColumnSelector;