-
-
Notifications
You must be signed in to change notification settings - Fork 42
Expand file tree
/
Copy pathsortComparers.index.ts
More file actions
37 lines (33 loc) · 1.52 KB
/
sortComparers.index.ts
File metadata and controls
37 lines (33 loc) · 1.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import type { ISortComparers, SortComparer } from '../interfaces/sorter.interface.js';
import { getAllDateFieldTypes } from '../services/utilities.js';
import { booleanSortComparer } from './booleanSortComparer.js';
import { getAssociatedDateSortComparer } from './dateUtilities.js';
import { numericSortComparer } from './numericSortComparer.js';
import { objectStringSortComparer } from './objectStringSortComparer.js';
import { stringSortComparer } from './stringSortComparer.js';
// export the Sort Utilities so they could be used by others
export * from './sortUtilities.js';
/**
* Builds a map of all available SortComparers, including date comparers.
* @returns {ISortComparers} All sort comparers, keyed by type.
*/
function buildAllSortComparers(): ISortComparers {
const comparers: Record<string, SortComparer> = {
boolean: booleanSortComparer,
numeric: numericSortComparer,
objectString: objectStringSortComparer,
string: stringSortComparer,
};
// Dynamically add date comparers based on available FieldTypes, doing it this way to keep smaller bundle size
getAllDateFieldTypes().forEach((dateType) => {
comparers[dateType] = getAssociatedDateSortComparer(dateType);
});
return comparers as unknown as ISortComparers;
}
/**
* All available SortComparers, including static and dynamically added date comparers.
*
* - Static: boolean, numeric, objectString, string
* - Dynamic: all date field types (see {@link getAllDateFieldTypes})
*/
export const SortComparers: ISortComparers = buildAllSortComparers();