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 | 50x 50x 50x 228x 102x 102x 102x 462x 462x 33x 126x 7x 33x | 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; } |