wip scores, components
This commit is contained in:
parent
64a61ef2b3
commit
b604c01e22
1 changed files with 250 additions and 115 deletions
52
tank-frontend/src/components/DataTable.tsx
Normal file
52
tank-frontend/src/components/DataTable.tsx
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
import {ReactNode} from "react";
|
||||
import './DataTable.css';
|
||||
|
||||
export type DataTableColumnDefinition<T> = {
|
||||
field: string,
|
||||
label?: string,
|
||||
visualize?: (value: T) => ReactNode
|
||||
};
|
||||
|
||||
function TableHead({columns}: { columns: DataTableColumnDefinition<any>[] }) {
|
||||
return <thead className='DataTableHead'>
|
||||
<tr>
|
||||
{
|
||||
columns.map(column =>
|
||||
<th key={column.field}>
|
||||
{column.label ?? column.field}
|
||||
</th>)
|
||||
}
|
||||
</tr>
|
||||
</thead>;
|
||||
}
|
||||
|
||||
function DataTableRow({rowData, columns}: {
|
||||
rowData: any,
|
||||
columns: DataTableColumnDefinition<any>[]
|
||||
}) {
|
||||
return <tr>
|
||||
{
|
||||
columns.map(column => {
|
||||
return <td key={column.field}>
|
||||
{
|
||||
column.visualize
|
||||
? column.visualize(rowData)
|
||||
: rowData[column.field]
|
||||
}
|
||||
</td>;
|
||||
})
|
||||
}
|
||||
</tr>;
|
||||
}
|
||||
|
||||
export default function DataTable<T>({data, columns}: {
|
||||
data: T[],
|
||||
columns: DataTableColumnDefinition<any>[]
|
||||
}) {
|
||||
return <table className='DataTable'>
|
||||
<TableHead columns={columns}/>
|
||||
<tbody>
|
||||
{data.map((element, index) => <DataTableRow key={index} rowData={element} columns={columns}/>)}
|
||||
</tbody>
|
||||
</table>
|
||||
}
|
||||
Reference in a new issue