import { useState } from 'react'; import { columnTypeLabels, zhCN } from '../../i18n/zh-CN'; import type { TableMeta } from '../../types'; import { Modal } from '../common/Modal'; import styles from './grid.module.css'; // 插入行对话框:按列类型校验并暂存待提交变更。 export function RowDialog({ table, onClose, onInsert }: { table: TableMeta; onClose: () => void; onInsert: (values: Record) => void }) { const [draft, setDraft] = useState>(() => Object.fromEntries(table.columns.map((column) => [column.name, column.type === 'bool' ? 'false' : '']))); const [error, setError] = useState(''); const submit = () => { const values: Record = {}; for (const column of table.columns) { const value = draft[column.name]; if (column.type === 'int' && (!/^-?\d+$/.test(value) || !Number.isSafeInteger(Number(value)))) return setError(zhCN.invalidInteger(column.name)); if (column.type === 'date' && !/^\d{4}-\d{2}-\d{2}$/.test(value)) return setError(zhCN.chooseDate(column.name)); values[column.name] = column.type === 'int' ? Number(value) : column.type === 'bool' ? value === 'true' : value; } onInsert(values); }; return }>

{zhCN.insertRowHint}

{table.columns.map((column) => )}
{error &&

{error}

}
; }