import ClearIcon from "@mui/icons-material/Clear"; import { IconButton, InputBase, Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from "@mui/material"; export interface KeyValuePair { key: string; value: string; } export interface KeyValuePairTableProps { items: KeyValuePair[]; onChange?: (key: string, value: string, index: number) => void; onDelete?: (index: number) => void; } export function KeyValuePairTable({ items, onChange, onDelete }: KeyValuePairTableProps): JSX.Element { const inputSx = { fontSize: "0.875rem", "&.MuiInputBase-root input": { p: 0, }, }; return ( Key Value {onDelete && } {items.map(({ key, value }, idx) => ( {!onChange && {key}} {onChange && ( { onChange && onChange(e.target.value, value, idx); }} sx={inputSx} /> )} {!onChange && value} {onChange && ( { onChange && onChange(key, e.target.value, idx); }} sx={inputSx} /> )} {onDelete && (
{ onDelete && onDelete(idx); }} sx={{ visibility: onDelete === undefined || items.length === idx + 1 ? "hidden" : "inherit", }} >
)}
))}
); } export function sortKeyValuePairs(items: KeyValuePair[]): KeyValuePair[] { const sorted = [...items]; sorted.sort((a, b) => { if (a.key < b.key) { return -1; } if (a.key > b.key) { return 1; } return 0; }); return sorted; } export default KeyValuePairTable;