import type { ReactNode } from "react"; import type { BrowserRow, CellValue } from "@/lib/browser-row"; /** * Generic cell renderers. Callers replace any key or cell kind. * OnCo's table cells for molecules, flags, and domain icons are not included. */ export type CellRenderer = (cell: CellValue, row: BrowserRow) => ReactNode; export function renderGenericCell(cell: CellValue): ReactNode { if (cell.kind === "text") return cell.text; if (cell.kind === "link") { return {cell.label}; } return ( {cell.values.map((value) => ( {value} ))} ); } export const genericCellRenderers: Record = { text: (cell) => renderGenericCell(cell), link: (cell) => renderGenericCell(cell), chips: (cell) => renderGenericCell(cell), }; export function renderCell( key: string, row: BrowserRow, registry: Record = genericCellRenderers, ): ReactNode { const cell = row.cols[key]; if (!cell) return null; const render = registry[key] ?? registry[cell.kind] ?? renderGenericCell; return render(cell, row); }