38 lines
1.2 KiB
JavaScript
38 lines
1.2 KiB
JavaScript
|
import { createSelector } from 'reselect';
|
||
|
import differenceInMilliseconds from 'date-fns/difference_in_milliseconds';
|
||
|
import find from 'lodash/find';
|
||
|
import orderBy from 'lodash/orderBy';
|
||
|
import { DIRECTION } from '../actions/sorting';
|
||
|
|
||
|
const getCollections = state => state.collections;
|
||
|
const getField = state => state.sorting.field;
|
||
|
const getDirection = state => state.sorting.direction;
|
||
|
|
||
|
const getSortedCollections = createSelector(
|
||
|
getCollections,
|
||
|
getField,
|
||
|
getDirection,
|
||
|
(collections, field, direction) => {
|
||
|
if (field === 'name') {
|
||
|
if (direction === DIRECTION.DESC) {
|
||
|
return orderBy(collections, 'name', 'desc');
|
||
|
}
|
||
|
return orderBy(collections, 'name', 'asc');
|
||
|
}
|
||
|
const sortedCollections = [...collections].sort((a, b) => {
|
||
|
const result =
|
||
|
direction === DIRECTION.ASC
|
||
|
? differenceInMilliseconds(new Date(a[field]), new Date(b[field]))
|
||
|
: differenceInMilliseconds(new Date(b[field]), new Date(a[field]));
|
||
|
return result;
|
||
|
});
|
||
|
return sortedCollections;
|
||
|
}
|
||
|
);
|
||
|
|
||
|
export function getCollection(state, id) {
|
||
|
return find(getCollections(state), { id });
|
||
|
}
|
||
|
|
||
|
export default getSortedCollections;
|