import '@material/mwc-linear-progress'; import '@material/mwc-list/mwc-list-item'; import '@material/mwc-select'; import { type Children, type Vnode } from 'mithril'; import Component from '../Component.jsx'; import Mdi from '../Mdi.jsx'; import TableColumn from './TableColumn.jsx'; import TableFooter from './TableFooter.jsx'; import TableRow from './TableRow.jsx'; export default class DataTable extends Component { view(vnode) { return
{this.attrs.has('checkable') && } {this.tableColumns(vnode.children)} {this.tableRows(vnode.children)} {this.tableFooter(vnode.children)}
{this.attrs.has('paginated') &&
{__('Righe per pagina')}
{/* TODO: Rendere dinamico (permetti a chi chiama il componente di scegliere i valori da visualizzare */} 10 25 50 75 100
{__('1-:chunk di :total', {chunk: 10, total: 100})}
}
; } tableColumns(children: Array) { return this.filterElements(children.flat(), TableColumn); } tableRows(children: Array) { let rows = this.filterElements(children.flat(), TableRow); if (this.attrs.has('checkable')) { rows = rows.map((row: Vnode) => ( {row.children} )); } return rows; } tableFooter(children: Array) { return this.filterElements(children.flat(), TableFooter); } filterElements(elements: Array, tag: Component | string): Array { const filtered = []; for (const element: Vnode of elements) { if (element.tag === tag) { filtered.push(element); } } return filtered; } }