import { ChangeEvent, useState } from "react" import { Alignment, generate, TableColumn, TableColumns } from "./TableMethodGenerator" interface TableColumnProps { value: TableColumn onChange: { (e: TableColumn): void } } function TableDefinitionRow(props: TableColumnProps) { let [, setName] = useState(props.value.name) const onChangeName = (e: ChangeEvent) => { props.value.name = e.target.value setName(props.value.name) props.onChange(props.value) } let [, setField] = useState(props.value.field) const onChangeField = (e: ChangeEvent) => { props.value.field = e.target.value setField(props.value.field) props.onChange(props.value) } let [, setWidth] = useState(props.value.width) const onChangeWidth = (e: ChangeEvent) => { props.value.width = parseFloat(e.target.value) setWidth(props.value.width) props.onChange(props.value) } let [, setAlignment] = useState(props.value.alignment) const onChangeAlignment = (e: ChangeEvent) => { props.value.alignment = e.target.value as Alignment setAlignment(props.value.alignment) props.onChange(props.value) } return (
  • ) } interface TableDefinitionProps { value: TableColumns onChange?: { (e: TableColumns): void } } function TableDefinitionForm(props: TableDefinitionProps) { let [currentName, setCurrentName] = useState("") let [columns, setColumns] = useState(props.value) const addRow = () => { if (currentName.length > 0) { columns.push({ name: currentName }) setCurrentName("") if (props.onChange !== undefined) { props.onChange(columns) } } } const updateRow = (i: number, column: TableColumn) => { if (column.name === "") { columns.splice(i, 1) setColumns([...columns]) } else { columns[i] = column setColumns([...columns]) } if (props.onChange !== undefined) { props.onChange(columns) } } const onClickCopy = () => { navigator.clipboard.writeText(generate(columns)) } return (
    e.preventDefault()}> setCurrentName(e.target.value)} onKeyPress={(e) => e.key === "Enter" && addRow()} />
      {columns.map((item, i) => updateRow(i, e)}/> )}
    ) } export default TableDefinitionForm