import React, { useState } from "react"; import { Box, Text, useInput } from "ink"; import { theme } from "./theme.jsx"; function formatCell(v, col) { if (v == null) return "-"; if (col.formatter) return col.formatter(v); return String(v); } export function DataTable({ rows = [], schema = [], selectable = false, onSelect }) { const [selectedIdx, setSelectedIdx] = useState(0); useInput((input, key) => { if (!selectable || rows.length === 0) return; if (key.upArrow) setSelectedIdx((i) => Math.max(0, i - 1)); if (key.downArrow) setSelectedIdx((i) => Math.min(rows.length - 1, i + 1)); if (key.return && onSelect) onSelect(rows[selectedIdx]); }); if (rows.length === 0) { return No data.; } return ( {schema.map((col) => ( {col.header} ))} {rows.map((row, idx) => ( {schema.map((col) => ( {formatCell(row[col.key], col)} ))} ))} ); }