Sort table data using remote api by click and toggle the table columns.
npm install --save react-remote-sortable-columns
yarn add react-remote-sortable-columns
The package will provide 2 components TR
and TH
:
Prop | type | default | description |
---|---|---|---|
sortKey |
string | Null |
The current sort column name/key |
sortDir |
string | Null |
The current sort direction |
onChange |
function | Null |
Function will called on column clicked and will pass the column identifier and direction |
ascClass |
string | fa fa-sort-asc |
Css class on ASC sorting |
descClass |
string | fa fa-sort-desc |
Css class on Desc sorting |
children |
components | Header row columns using <TH ...></TH> component |
Prop | Type | Description |
---|---|---|
column |
string | Column identifier |
children |
components | Column text |
Other props will be passed to the th
component such as className
, colSpan
...etc.
import React, {Component} from 'react'
import {TR, TH} from 'react-remote-sortable-columns'
class Index extends Component {
constructor(props) {
super(props)
this.state = {
params: {
sort: 'id',
direction: 'asc'
}
}
}
// fetch data for the first time
componentDidMount() {
this.props.dispatch(fetchRecords(this.state.params))
}
// fetch only when params get updated
componentDidUpdate(prevProps, prevState) {
if (this.state.params !== prevState.params) {
this.props.dispatch(fetchRecords(this.state.params))
}
}
// update params state when sortable column is clicked
handleSortChange(sort, direction) {
this.setState({params: {
...this.state.params,
key,
direction
}})
}
render() {
const {sort, direction} = this.state.params
return (
<table className="table table-hover table-bordered">
<thead>
// Here is the TR and TH components
<TR sortKey={sort} sortDir={direction} onChange={this.handleSortChange.bind(this)}>
<TH column="id">ID</TH>
<TH column="name" className="w-50" colSpan={2}>Employee Name</TH>
<TH column="role">Role</TH>
<TH column="status">Status</TH>
<TH>Actions</TH>
</TR>
</thead>
<tbody>
<tr>
....
</tr>
</tbody>
</table>
)
}
}
- allow to customize the internal class names
- write test
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request
The gem is available as open source under the terms of the MIT License.