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
32
33
34
35
36
37
38
39
|
export const numericSort = {
asc: (a,b) => a[0] - b[0],
desc: (a,b) => b[0] - a[0],
}
export const stringSort = {
asc: (a,b) => a[0].localeCompare(b[0]),
desc: (a,b) => b[0].localeCompare(a[0]),
}
export const orderByFn = (s='name asc') => {
const [field='name', direction='asc'] = s.split(' ')
let mapFn, sortFn
switch (field) {
case 'epoch':
mapFn = a => [parseInt(a.epoch || a.epochs) || 0, a]
sortFn = numericSort[direction]
break
case 'size':
mapFn = a => [parseInt(a.size) || 0, a]
sortFn = numericSort[direction]
break
case 'date':
mapFn = a => [+new Date(a.date || a.created_at), a]
sortFn = numericSort[direction]
break
case 'updated_at':
mapFn = a => [+new Date(a.updated_at), a]
sortFn = numericSort[direction]
break
case 'priority':
mapFn = a => [parseInt(a.priority) || parseInt(a.id) || 1000, a]
sortFn = numericSort[direction]
case 'name':
default:
mapFn = a => [a.name || "", a]
sortFn = stringSort[direction]
break
}
return { mapFn, sortFn }
}
|