1.0.1 • Published 6 years ago
react-remote-sortable-columns v1.0.1
React Remote Sortable Columns
Sort table data using remote api by click and toggle the table columns.
Install via NPM
npm install --save react-remote-sortable-columns
Install via Yarn
yarn add react-remote-sortable-columns
Components Usage
The package will provide 2 components TR
and TH
:
TR
Table Row Component Props
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 |
TH
Table Header Component Props
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.
Example
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>
)
}
}
TODO:
- allow to customize the internal class names
- write test
Contributing
- 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
License
The gem is available as open source under the terms of the MIT License.