/
transform.js
31 lines (29 loc) · 1.1 KB
/
transform.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const filterRowByColumns = (row, columns) =>
columns.every(column => String(row[column.name]).toLowerCase().indexOf(column.filter) !== -1);
const sortRowsByColumns = (a, b, column) => {
if (a[column.name] === b[column.name]) {
return 0;
}
if (column.sort === 'asc') {
return a[column.name] < b[column.name] ? -1 : 1;
}
return a[column.name] > b[column.name] ? -1 : 1;
};
export default (state, data) => {
const filteredColumns = state.columns.filter(column => column.filter);
const sortedColumn = state.columns.find(column => column.sort === 'asc' || column.sort === 'desc');
const filtered
= filteredColumns.length
? data.filter(datum => filterRowByColumns(datum, filteredColumns))
: data;
const sorted
= sortedColumn
? filtered.slice().sort((a, b) => sortRowsByColumns(a, b, sortedColumn))
: filtered;
const pager = state.gridState && state.gridState.pager;
const sliced
= pager
? sorted.slice(pager.page * pager.size, pager.page * pager.size + pager.size)
: sorted;
return sliced;
};