import React from 'react' import styled from 'styled-components' import { useTable, useColumnOrder } from 'react-table' import makeData from './makeData' const Styles = styled.div` padding: 1rem; table { border-spacing: 0; border: 1px solid black; tr { :last-child { td { border-bottom: 0; } } } th, td { margin: 0; padding: 0.5rem; border-bottom: 1px solid black; border-right: 1px solid black; background: white; :last-child { border-right: 0; } } } ` function shuffle(arr) { arr = [...arr] const shuffled = [] while (arr.length) { const rand = Math.floor(Math.random() * arr.length) shuffled.push(arr.splice(rand, 1)[0]) } return shuffled } function Table({ columns, data }) { const { getTableProps, getTableBodyProps, headerGroups, rows, visibleColumns, prepareRow, setColumnOrder, state, } = useTable( { columns, data, }, useColumnOrder ) const randomizeColumns = () => { setColumnOrder(shuffle(visibleColumns.map(d => d.id))) } return ( <>
| {column.render('Header')} | ))}
|---|
| {cell.render('Cell')} | })}
{JSON.stringify(state, null, 2)}
>
)
}
function App() {
const columns = React.useMemo(
() => [
{
Header: 'Name',
columns: [
{
Header: 'First Name',
accessor: 'firstName',
},
{
Header: 'Last Name',
accessor: 'lastName',
},
],
},
{
Header: 'Info',
columns: [
{
Header: 'Age',
accessor: 'age',
},
{
Header: 'Visits',
accessor: 'visits',
},
{
Header: 'Status',
accessor: 'status',
},
{
Header: 'Profile Progress',
accessor: 'progress',
},
],
},
],
[]
)
const data = React.useMemo(() => makeData(10), [])
return (