/** Function that sorts the table * * @param {List} rows List of rows to be sorted * @param {Array} sortingCriteria List of sorting criteria each containing a "sortBy" column and "isAscending" boolean * * @public */ import { KettalColumnSort, KettalQTableColumn } from '../../../types/KTable' import dateTimeParser from './dateTimeParser' import getColumnType from './getColumnType' // I can't remember why I created "comparison" variable function sortRows ( rows: any[], sortingCriteria: KettalColumnSort[], columns: KettalQTableColumn[] ) { return rows.sort((a, b) => { for (const { column: sortBy, isAscending } of sortingCriteria) { const x = isAscending ? b : a const y = isAscending ? a : b const column = columns.find(c => c.name === sortBy) const columnType = getColumnType(columns, sortBy) let comparison = 0 if (columnType === 'number' || columnType === 'decimal') { comparison = parseFloat(x[sortBy]) - parseFloat(y[sortBy]) } else if (columnType === 'date') { // Create date from dd/mm/yyyy format const xDateSplit = x[sortBy].split('/') const yDateSplit = y[sortBy].split('/') const xDate = new Date(xDateSplit[2], xDateSplit[1] - 1, xDateSplit[0]).getTime() const yDate = new Date(yDateSplit[2], yDateSplit[1] - 1, yDateSplit[0]).getTime() comparison = xDate - yDate } else if (columnType === 'dateTime') { // Create date from column.dateTimeFormat const dateTimeX = dateTimeParser((column as KettalQTableColumn).dateTimeFormat as string , x[sortBy]) const dateTimeY = dateTimeParser((column as KettalQTableColumn).dateTimeFormat as string, y[sortBy]) comparison = dateTimeX.getTime() - dateTimeY.getTime() } else { comparison = x[sortBy] > y[sortBy] ? 1 : x[sortBy] < y[sortBy] ? -1 : 0 } if (comparison !== 0) { return comparison } } return 0 }) } export default sortRows