@tanstack/lit-table
Version:
Headless UI for building powerful tables & datagrids for Lit.
52 lines (51 loc) • 1.9 kB
JavaScript
//#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 };