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;
}
}