export const makeNumericSorter = (key: string) => (a: any, b: any) => a[key] - b[key]; export const makeStringSorter = (key: string) => (a: any, b: any) => { if (a == null && b == null) return 1; if (a == null) return 1; if (b == null) return -1; let aValue = a[key]; let bValue = b[key]; for (let i = 0; i < a.length; i++) { if (isNaN(aValue.charCodeAt(i)) || (aValue.charCodeAt(i) > bValue.charCodeAt(i))) return 1; if (aValue.charCodeAt(i) > bValue.charCodeAt(i)) return -1; } return 0; }; export const makeDateSorter = (key: string) => (a: any, b: any) => { const date = new Date(a[key]); if (Number.isNaN(date.getTime())) throw new Error('Date column contains not date formatted string(s)'); return date.getTime() - new Date(b[key]).getTime(); };