File tree Expand file tree Collapse file tree 1 file changed +23
-13
lines changed Expand file tree Collapse file tree 1 file changed +23
-13
lines changed Original file line number Diff line number Diff line change @@ -22,21 +22,31 @@ export function sort(
22
22
sort . channel = sort . channel . substring ( 1 ) ;
23
23
sort . order = 'descending' ;
24
24
}
25
+ // if sort is a function that does not take exactly one argument, we treat it
26
+ // as comparator function, as you would pass to array.sort
27
+ const isComparator = typeof channels . sort === 'function' && channels . sort . length !== 1 ;
28
+
25
29
// sort data
26
30
return {
27
- data : data
28
- . map ( ( d ) => ( {
29
- ...d ,
30
- [ SORT_KEY ] : resolveChannel ( 'sort' , d , { ...channels , sort } )
31
- } ) )
32
- . toSorted (
33
- ( a , b ) =>
34
- ( a [ SORT_KEY ] > b [ SORT_KEY ] ? 1 : a [ SORT_KEY ] < b [ SORT_KEY ] ? - 1 : 0 ) *
35
- ( options . reverse || ( isDataRecord ( sort ) && sort ?. order === 'descending' )
36
- ? - 1
37
- : 1 )
38
- )
39
- . map ( ( { [ SORT_KEY ] : a , ...rest } ) => rest ) ,
31
+ data : isComparator
32
+ ? data . toSorted ( channels . sort as ( a : DataRecord , b : DataRecord ) => number )
33
+ : data
34
+ . map ( ( d ) => ( {
35
+ ...d ,
36
+ [ SORT_KEY ] : resolveChannel ( 'sort' , d , { ...channels , sort } ) as
37
+ | number
38
+ | Date
39
+ | string
40
+ } ) )
41
+ . toSorted (
42
+ ( a , b ) =>
43
+ ( a [ SORT_KEY ] > b [ SORT_KEY ] ? 1 : a [ SORT_KEY ] < b [ SORT_KEY ] ? - 1 : 0 ) *
44
+ ( options . reverse ||
45
+ ( isDataRecord ( sort ) && sort ?. order === 'descending' )
46
+ ? - 1
47
+ : 1 )
48
+ )
49
+ . map ( ( { [ SORT_KEY ] : a , ...rest } ) => rest ) ,
40
50
41
51
...channels ,
42
52
[ IS_SORTED ] : sort ,
You can’t perform that action at this time.
0 commit comments