🔔 Alert..!! Get 2 Month Free Cloud Hosting With $200 Bonus From Digital Ocean ACTIVATE DEAL

Render prop component for accessible sorting in React that allows you to sort something in react (e.g. a list or some table rows).

Others React

Documentation

react-unsort

Render prop component for accessible sorting.

Build Status Coverage

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.


You May Also Like