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]}
`,
)}
`,
)}
`;
};