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] break case 'name': default: mapFn = a => [a.name || "", a] sortFn = stringSort[direction] break } return { mapFn, sortFn } }