import {CustomElement, defineElement, Host, prop, state} from "../../packages/csx"; import TableComponentStyle from "./table-component.scss"; let tableId = 0; @defineElement("tripto-table") export class TableComponent extends CustomElement { #columnDefinitions; @prop() set columns(value) { this.#columnDefinitions = value; } @state() data; @prop() set data(value) { this.data = value; this.rows = new Map(); } @prop() rowKey = (value,index)=>index; @prop() cellRef = ()=>null; rows = new Map(); #tableId = tableId++; render() { console.log(`Table render at for ${this.data?.length??0} rows: ${Date.now()}`); return (
{this.#columnDefinitions.map((col, idx) => (
{col.headerRender()}
))}
{this.data?.map((dataRow,index) => (
this.rows.set(this.rowKey(dataRow,index), el)}> {this.#columnDefinitions.map((col, idx) => (
this.cellRef(dataRow,idx,el)}> {col.render(dataRow)}
))}
))}
); } }