UNPKG

@tanstack/lit-table

Version:

Headless UI for building powerful tables & datagrids for Lit.

52 lines (51 loc) 1.9 kB
//#region src/flexRender.ts /** * Renders a Lit table template value with the provided context props. * * Use this lower-level helper for custom header, cell, or footer renderers when * you already have the render function and context. `FlexRender` is the * convenience wrapper for table cell/header/footer objects. * * @example * ```ts * flexRender(cell.column.columnDef.cell, cell.getContext()) * ``` */ function flexRender(Comp, props) { if (Comp === null || Comp === void 0) return null; if (typeof Comp === "function") return Comp(props); return Comp; } /** * Simplified component wrapper of `flexRender`. Use this utility function to render headers, cells, or footers with custom markup. * Only one prop (`cell`, `header`, or `footer`) may be passed. * @example * ```ts * ${FlexRender({ cell })} * ${FlexRender({ header })} * ${FlexRender({ footer: header })} * ``` * * This replaces calling `flexRender` directly like this: * ```ts * flexRender(cell.column.columnDef.cell, cell.getContext()) * flexRender(header.column.columnDef.header, header.getContext()) * flexRender(footer.column.columnDef.footer, footer.getContext()) * ``` */ function FlexRender(props) { if ("cell" in props && props.cell) { const cell = props.cell; const columnDef = cell.column.columnDef; const groupingCell = cell; const groupingColumnDef = columnDef; if (groupingCell.getIsAggregated?.()) return flexRender(groupingColumnDef.aggregatedCell ?? columnDef.cell, cell.getContext()); if (groupingCell.getIsPlaceholder?.()) return null; return flexRender(columnDef.cell, cell.getContext()); } if ("header" in props && props.header) return flexRender(props.header.column.columnDef.header, props.header.getContext()); if ("footer" in props && props.footer) return flexRender(props.footer.column.columnDef.footer, props.footer.getContext()); return null; } //#endregion export { FlexRender, flexRender };