import { html, type TemplateResult } from "lit"; import { ifDefined } from "lit/directives/if-defined.js"; import "@/components/ui/table"; const columns = { name: { title: "Name", }, email: { title: "Email", }, role: { title: "Role", }, remove: { title: html`Remove`, renderItem: () => html``, }, } satisfies RenderProps["columns"]; const rows: { data: Omit, "remove"> }[] = [ { data: { name: "Alice", email: "alice@example.com", role: 40, }, }, { data: { name: "Bob", email: "bob@example.com", role: 20 }, }, ] satisfies RenderProps["rows"]; export interface RenderProps { columns: Record< string, { title: string | TemplateResult; classes?: string; renderItem?: (data: Record) => TemplateResult; } >; rows: { data: Record; classes?: string; }[]; } export const defaultArgs = { columns, rows } satisfies RenderProps; export const renderTable = ({ columns: headers, rows: items }: RenderProps) => { return html` ${Object.values(headers).map( ({ title, classes }) => html` ${title} `, )} ${items.map( ({ classes, data }) => html` ${Object.entries(headers).map( ([key, { renderItem }]) => html` ${renderItem ? renderItem(data) : data[key]} `, )} `, )} `; };