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);
}