| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- /* eslint-disable import/prefer-default-export */
- import moment from 'moment';
- import { isEmpty } from '../../../helpers/mixed';
- import { DO_NOT_SWAP, FIRST_BEFORE_SECOND, FIRST_AFTER_SECOND } from '../sortService';
- /**
- * Date sorting compare function factory. Method get as parameters `sortOrder` and `columnMeta` and return compare function.
- *
- * @param {String} sortOrder Sort order (`asc` for ascending, `desc` for descending).
- * @param {Object} columnMeta Column meta object.
- * @param {Object} columnPluginSettings Plugin settings for the column.
- * @returns {Function} The compare function.
- */
- export function compareFunctionFactory(sortOrder, columnMeta, columnPluginSettings) {
- return function(value, nextValue) {
- const { sortEmptyCells } = columnPluginSettings;
- if (value === nextValue) {
- return DO_NOT_SWAP;
- }
- if (isEmpty(value)) {
- if (isEmpty(nextValue)) {
- return DO_NOT_SWAP;
- }
- // Just fist value is empty and `sortEmptyCells` option was set
- if (sortEmptyCells) {
- return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;
- }
- return FIRST_AFTER_SECOND;
- }
- if (isEmpty(nextValue)) {
- // Just second value is empty and `sortEmptyCells` option was set
- if (sortEmptyCells) {
- return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;
- }
- return FIRST_BEFORE_SECOND;
- }
- const dateFormat = columnMeta.dateFormat;
- const firstDate = moment(value, dateFormat);
- const nextDate = moment(nextValue, dateFormat);
- if (!firstDate.isValid()) {
- return FIRST_AFTER_SECOND;
- }
- if (!nextDate.isValid()) {
- return FIRST_BEFORE_SECOND;
- }
- if (nextDate.isAfter(firstDate)) {
- return sortOrder === 'asc' ? FIRST_BEFORE_SECOND : FIRST_AFTER_SECOND;
- }
- if (nextDate.isBefore(firstDate)) {
- return sortOrder === 'asc' ? FIRST_AFTER_SECOND : FIRST_BEFORE_SECOND;
- }
- return DO_NOT_SWAP;
- };
- }
- export const COLUMN_DATA_TYPE = 'date';
|