import { Component, ComponentDoneResponse, ComponentParams, Package } from "qcobjects"; type GridTableColum = { name:string; label: string; value: (row:any) => string; } type GridComponentParams = ComponentParams & { columns:string; rows:string; gridColumns?:Array; } class GridTableComponent extends Component { name= "grid-table"; shadowed= true; tplsource= "inline"; template = `
$renderGridColumns() $renderGridRows()
`; gridColumns?:Array; __instanceID!: number; constructor(o:GridComponentParams){ super(o); this.gridColumns = o.gridColumns; if (typeof this.body !== "undefined"){ const renderGridColumns = function (component:GridTableComponent){ const valueField = component.body.getAttribute("value-field") || "result"; const dataValue = component.data[valueField] as Array; return (dataValue.length>0)?(Object.keys(component.buildRowObject(dataValue[0])) .filter(c=>component.hasColumn(c)) .map (k=>`${component.getColumnLabel(k)}`).join("")):(""); }; const renderGridRows = function (component:GridTableComponent){ const valueField = component.body.getAttribute("value-field") || "result"; const dataValue = component.data[valueField] as Array; return (dataValue.length>0)? (dataValue .map(r=>`${Object.values(component.buildRowObject(r)) .map(c=>`${c}`).join("")}`).join("")):(""); }; this.processorHandler.setProcessor(renderGridColumns); this.processorHandler.setProcessor(renderGridRows); } this.appendLoading(); } hasColumn (k:string){ let _ret_ = false; if (typeof this.gridColumns !== "undefined" && this.gridColumns.length>0){ const c:GridTableColum | undefined = this.gridColumns.filter((column:GridTableColum) => { return column.name === k; }).pop(); if (typeof c !== "undefined"){ _ret_ = true; } } else { _ret_ = true; } return _ret_; } getColumnLabel (k:string){ let _ret_:string | undefined = k; if (typeof this.gridColumns !== "undefined" && this.gridColumns.length>0){ const c:GridTableColum | undefined = this.gridColumns.filter((column:GridTableColum)=> { return column.name === k; }).pop() as GridTableColum | undefined; _ret_ = c?.label || k; } return _ret_; } buildRowObject (row:any) { let _ret_ = row; if (typeof this.gridColumns !== "undefined" && this.gridColumns.length>0){ _ret_ = {}; this.gridColumns.map((column:GridTableColum) => { _ret_[column.name] = column.value(row); return column; }); } return _ret_; } done (standardResponse:ComponentDoneResponse):Promise{ const _ret_ = super.done(standardResponse); this.removeLoading(); return _ret_; } appendLoading () { this.body.innerHTML += `

Please wait while loading...

`; } removeLoading () { this.body.querySelector(`div[id=component_${this.__instanceID}_loading]`)?.remove(); } } Package("com.qcobjects.sdk.components", [ GridTableComponent ]); export { GridTableColum, GridComponentParams, GridTableComponent };