react-data-table
Version:
A very simple DataTable component for React that takes data via ajax (made for Laravel paginate).
55 lines (51 loc) • 1.29 kB
JavaScript
import React from 'react';
var styles = {
th: {
position: 'relative',
cursor:'pointer'
},
sortIcon: {
position: 'absolute',
right: '11px',
top: '11px'
}
};
export default class Head extends React.Component {
constructor(props){
super(props);
this.state = {
sortedAsc: null,
column: null
};
}
toggleSorting(column){
var newState ={};
if(this.state.column !== column.name){
newState.sortedAsc = true;
newState.column = column.name;
}else{
newState.column = this.state.column;
newState.sortedAsc = this.state.sortedAsc ? false : true;
}
this.setState(newState);
this.props.onSort(newState.column,newState.sortedAsc ? 'asc' : 'desc');
}
render(){
return <thead>
<tr>
{this.props.columns.map((column,i) => {
if(column.renderer || !column.sorting){
return <th key={i}>{column.label || column.name}</th>;
}
return <th
key={i}
onClick={this.toggleSorting.bind(this,column)}
style={styles.th}>
<span>{column.label || column.name}</span>
<span style={styles.sortIcon} className={(column.name==this.state.column)? (this.state.sortedAsc ? 'fa fa-sort-asc' : 'fa fa-sort-desc') : 'fa fa-sort'}></span>
</th>;
})}
</tr>
</thead>;
}
}