Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 | 3x 1x 3x 3x 3x 1x 2x 3x 3x | import { Sort } from "./sort";
import { SortDirectionCycler } from "./_types";
/**
* Creates a {@link Function} that toggles properties of a {@link Sort}.
*
* @example
* ```ts
* const mySort = sort([['a', 'asc'], ['b', 'asc']]);
* const toggleDirection = toggle(defaultSortDirectionCycler);
* const toggleDirection('a')(mySort);
* console.log(mySort); // Map([['b', 'asc'], ['a', 'desc']])
* ```
*
* @todo
* Figure out if appending is the preferred action for multi sort
*
* @param sortDirectionCycler - the {@link SortDirectionCycler} to use
* @returns the toggle {@link Function}
*/
export const toggle =
(sortDirectionCycler: SortDirectionCycler) =>
<T extends string>(property: T, clear?: boolean) =>
(sort: Sort<T>, direction = sortDirectionCycler(sort.get(property))) => {
if (clear) {
sort.clear();
} else {
sort.delete(property);
}
if (direction) {
sort.set(property, direction);
}
};
|