wip scores, components

This commit is contained in:
Vinzenz Schroeter 2024-04-13 23:07:08 +02:00
parent 64a61ef2b3
commit b604c01e22
20 changed files with 250 additions and 115 deletions

View file

@ -0,0 +1,7 @@
.Button {
border: solid 1px green;
border-radius: 12px;
color: green;
background: transparent;
}

View file

@ -0,0 +1,15 @@
import './Button.css';
import {MouseEventHandler} from "react";
export default function Button({text, onClick, className}: {
text: string,
onClick?: MouseEventHandler<HTMLButtonElement>,
className?: string
}) {
return <button
className={'Button ' + (className ?? '')}
onClick={onClick}
>
{text}
</button>
}

View file

@ -0,0 +1,7 @@
.Column {
display: flex;
flex-direction: column;
flex: auto;
max-height: 100%;
align-items: stretch;
}

View file

@ -0,0 +1,13 @@
import {ReactNode} from "react";
import './Column.css'
export default function Column({children, className}: {
children: ReactNode,
className?: string
}) {
return <div className={'Column ' + (className ?? '')}>
{children}
</div>
}

View file

@ -0,0 +1,3 @@
.DataTable {
flex-grow: 1;
}

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

View file

@ -0,0 +1,7 @@
.Row {
display: flex;
flex-direction: row;
flex: auto;
max-width: 100%;
align-items: stretch;
}

View file

@ -0,0 +1,9 @@
import {ReactNode} from "react";
import './Row.css';
export default function Row({children, className}: { children: ReactNode, className?: string }) {
return <div className={'Row ' + (className ?? '')}>
{children}
</div>
}