diff --git a/src/components/Table/sorting.js b/src/components/Table/sorting.js new file mode 100644 index 00000000..15efdaaf --- /dev/null +++ b/src/components/Table/sorting.js @@ -0,0 +1,30 @@ +// @flow +const desc = (a, b, orderBy) => { + if (b[orderBy] < a[orderBy]) { + return -1 + } + if (b[orderBy] > a[orderBy]) { + return 1 + } + return 0 +} + +export const stableSort = (array: any, cmp: any) => { + const stabilizedThis = array.map((el, index) => [el, index]) + + stabilizedThis.sort((a, b) => { + const order = cmp(a[0], b[0]) + if (order !== 0) { + return order + } + + return a[1] - b[1] + }) + + return stabilizedThis.map(el => el[0]) +} + +export type Order = 'asc' | 'desc' + +export const getSorting = (order: Order, orderBy: string) => + (order === 'desc' ? (a: any, b: any) => desc(a, b, orderBy) : (a: any, b: any) => -desc(a, b, orderBy))