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 | 140x 140x 140x 1296x 234x 234x 2124x 205x 336x 9x 205x | import React from "react";
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 => (
<tr {...headerGroup.getHeaderGroupProps()}>
{headerGroup.headers.map(column => (
<th
{...column.getHeaderProps(column.getSortByToggleProps())}
data-testid={`${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)
return (
<tr {...row.getRowProps()}>
{row.cells.map((cell, _index) => {
return (
<td
{...cell.getCellProps()}
data-testid={`${testid}-cell-row-${cell.row.index}-col-${cell.column.id}`}
>
{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;
} |