Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | 87x 87x 87x 497x 180x 180x 180x 1032x 1032x 65x 234x 13x 65x | import { useTable, useSortBy } from "react-table";
import { Table, Button } from "react-bootstrap";
export default function OurTable({ columns, data, testid = "testid" }) {
const { getTableProps, getTableBodyProps, headerGroups, rows, prepareRow } =
useTable({ columns, data }, useSortBy);
return (
<Table {...getTableProps()} striped bordered hover>
<thead>
{headerGroups.map((headerGroup, i) => (
<tr
{...headerGroup.getHeaderGroupProps()}
data-testid={`${testid}-header-group-${i}`}
// Stryker disable next-line StringLiteral : React key property not exposed in dom
key={`${testid}-header-group-${i}`}
>
{headerGroup.headers.map((column) => (
<th
{...column.getHeaderProps(column.getSortByToggleProps())}
data-testid={`${testid}-header-${column.id}`}
// Stryker disable next-line StringLiteral : React key property not exposed in dom
key={`${testid}-header-${column.id}`}
>
{column.render("Header")}
<span data-testid={`${testid}-header-${column.id}-sort-carets`}>
{column.isSorted ? (column.isSortedDesc ? " 🔽" : " 🔼") : ""}
</span>
</th>
))}
</tr>
))}
</thead>
<tbody {...getTableBodyProps()}>
{rows.map((row) => {
prepareRow(row);
const rowTestId = `${testid}-row-${row.index}`;
return (
<tr
{...row.getRowProps()}
data-testid={rowTestId}
// Stryker disable next-line StringLiteral : React key property not exposed in dom
key={rowTestId}
>
{row.cells.map((cell, _index) => {
const testId = `${testid}-cell-row-${cell.row.index}-col-${cell.column.id}`;
return (
<td
{...cell.getCellProps()}
data-testid={testId}
// Stryker disable next-line StringLiteral : React key property not exposed in dom
key={testId}
>
{cell.render("Cell")}
</td>
);
})}
</tr>
);
})}
</tbody>
</Table>
);
}
// The callback function for ButtonColumn should have the form
// (cell) => { doSomethingWith(cell); }
// The fields in cell are:
// ["column","row","value","getCellProps","render"]
// Documented here: https://react-table.tanstack.com/docs/api/useTable#cell-properties
// Typically, you want cell.row.values, which is where you can get the individual
// fields of the object representing the row in the table.
// Example:
// const deleteCallback = (cell) =>
// toast(`Delete Callback called on id: ${cell.row.values.id} name: ${cell.row.values.name}`);
// Add it to table like this:
// const columns = [
// {
// Header: 'id',
// accessor: 'id', // accessor is the "key" in the data
// },
// {
// Header: 'Name',
// accessor: 'name',
// },
// ButtonColumn("Edit", "primary", editCallback),
// ButtonColumn("Delete", "danger", deleteCallback)
// ];
export function ButtonColumn(label, variant, callback, testid) {
const column = {
Header: label,
id: label,
Cell: ({ cell }) => (
<Button
variant={variant}
onClick={() => callback(cell)}
data-testid={`${testid}-cell-row-${cell.row.index}-col-${cell.column.id}-button`}
>
{label}
</Button>
),
};
return column;
}
|