Мне удалось настроить сортировку таблицы по каждому из ее столбцов, нажав кнопку рядом с заголовком столбца.
Однако я ожидал, что он будет отсортировать его в обратном порядке по алфавиту при втором щелчке по нему и вернется в исходное состояние при третьем щелчке.
В настоящее время он работает только при первом щелчке - он сортирует его в алфавитном порядке - но после этого он ничего не делает, независимо от того, сколько раз он был нажат.
import { Table } from 'semantic-ui-react';
export default class GenericTable extends React.PureComponent {
constructor(props) {
super(props);
this.state = {
currentSort: 'default',
rows: this.props.rows, // the original rows are saved in state
};
}
onSortChange = index => {
let nextSort;
const newRows = this.props.rows.sort(function(a, b) {
if (a.cells[index] < b.cells[index]) {
nextSort = 'up';
return -1;
}
if (a.cells[index] > b.cells[index]) {
nextSort = 'default';
return 1;
}
nextSort = 'down';
return 0;
});
this.setState({ rows: newRows, currentSort: nextSort });
};
render() {
const { currentSort } = this.state; // added state
const sortTypes = { // added constant
up: {
class: 'sort-up',
fn: (a, b) => a.name - b.name,
},
down: {
class: 'sort-down',
fn: (a, b) => b.name - a.name,
},
default: {
class: 'sort',
fn: (a, b) => a,
},
};
const { headers, rows, idList } = this.props;
return (
<Table>
<Table.Header>
<Table.Row>
{headers.map(header => (
<Table.HeaderCell key={headers.indexOf(header)}>
{header}
// added button
<button onClick={() => this.onSortChange(index)} type="button">
<i className={`fas fa-${sortTypes[currentSort].class}`} />
</button>
</Table.HeaderCell>
)}
</Table.Row>
</Table.Header>
<Table.Body>
// added below
{rows.map((row, rowIndex) => (
<Table.Row key={idList && idList[rowIndex]}>
<Table.Cell>
...
</Table.Cell>
</Table.Row>
)}
</Table.Body>
</Table>
);
}
}
Я предполагаю, что что-то не так в onSortChange
, но не знаю что.