react-unsort
Render prop component for accessible sorting.
The problem
You want to sort something in react (e.g. a list or some table rows), and have
full control over styling.
This solution
This follows the patterns in downshift to
expose an API that renders nothing and simply encapsulates the logic of a
sorting component. Note that it doesn't do any actual sorting, only setup aria, keyboard handling and handle sort directons for you.
Installation
npm install react-unsort
This package also depends on react. Please make sure you have that installed
as well.
Usage
Todo: fill out this with props and stuff
<Unsort
{...props}
render={({ getSortProps, sortKey, sortDirection }) => {
return (
<table>
<thead>
<tr>
<th {...getSortProps("name")}>
Name <span>{sortKey === "name" && sortDirection}</span>
</th>
<th {...getSortProps("age")}>
Age <span>{sortKey === "age" && sortDirection}</span>
</th>
<th>Country (not sortable)</th>
</tr>
</thead>
<tbody>
{rows.map(row => {
return (
<tr key={row.id}>
<td>{row.name}</td>
<td>{row.age}</td>
<td>{row.country}</td>
</tr>
);
})}
</tbody>
</table>
);
}}
/>
Props
render:(RenderProps) => React.Node
This is where you render whatever you want to based on the state of react-unsort.
Gets the following props:
getSortProps: (key: string) => SortProps
sortKey: ?string
sortDirection: ?SortDirection
onSort:({ sortKey: ?string, sortDirection: "asc" | "desc" | null }) => void
Called when the element with getSortProps
applied is clicked or enter key is pressed.
Motivation
There are other, more advanced solutions to this
problem, but I found them way to bloated and hard to style, especially using
styled-components.
Credits
Thanks to Kent C. Dodds for his work on
Downshift, which greatly inspired this lib.