Skip to main content

sorting

Sorting constants, type guards, and date comparator functions for building consistent, type-safe sort controls.

import {	sortingModes,	sortingDirections,	timeSortingDirections,	alphanumericSortingDirections,	isSortingMode,	isSortingDirection,	isTimeSortingDirection,	isAlphanumericSortingDirection,	$sortingMode,	$sortingDirection,	$timeSortingDirection,	$alphanumericSortingDirection,	timeSortingByDirection,	compareDatesNewestToOldest,	compareDatesOldestToNewest,} from "@ngrok/mantle/utils"; import type {	SortingMode,	SortingDirection,	TimeSortingDirection,	AlphanumericSortingDirection,} from "@ngrok/mantle/utils";

Types

TypeValues
SortingMode"alphanumeric" | "time"
SortingDirection"asc" | "desc"
AlphanumericSortingDirection"asc" | "desc"
TimeSortingDirection"newest-to-oldest" | "oldest-to-newest"

Constants

sortingModes

sortingModes; // readonly ["alphanumeric", "time"]

sortingDirections

sortingDirections; // readonly ["asc", "desc"]

alphanumericSortingDirections

alphanumericSortingDirections; // readonly ["asc", "desc"]

timeSortingDirections

timeSortingDirections; // readonly ["newest-to-oldest", "oldest-to-newest"]

timeSortingByDirection

Maps a SortingDirection to its equivalent TimeSortingDirection.

timeSortingByDirection;// { asc: "oldest-to-newest", desc: "newest-to-oldest" } timeSortingByDirection["asc"]; // "oldest-to-newest"timeSortingByDirection["desc"]; // "newest-to-oldest"

Type guards

isSortingMode(value)

isSortingMode("alphanumeric"); // trueisSortingMode("time"); // trueisSortingMode("foo"); // false

isSortingDirection(value)

isSortingDirection("asc"); // trueisSortingDirection("desc"); // trueisSortingDirection("foo"); // false

isAlphanumericSortingDirection(value)

isAlphanumericSortingDirection("asc"); // trueisAlphanumericSortingDirection("desc"); // trueisAlphanumericSortingDirection("foo"); // false

isTimeSortingDirection(value)

isTimeSortingDirection("newest-to-oldest"); // trueisTimeSortingDirection("oldest-to-newest"); // trueisTimeSortingDirection("asc"); // falseisTimeSortingDirection("foo"); // false

Runtime value helpers ($ prefix)

The $-prefixed helpers are identity functions that return a runtime value with the correct inferred type. Useful for deriving typed values from string literals without a as const cast.

$sortingMode(value)

$sortingMode("alphanumeric"); // "alphanumeric" (typed as SortingMode)$sortingMode("time"); // "time"

$sortingDirection(value)

$sortingDirection("asc"); // "asc" (typed as SortingDirection)$sortingDirection("desc"); // "desc"

$alphanumericSortingDirection(value)

$alphanumericSortingDirection("asc"); // "asc" (typed as AlphanumericSortingDirection)$alphanumericSortingDirection("desc"); // "desc"

$timeSortingDirection(value)

Accepts either a TimeSortingDirection or a SortingDirection. When given a SortingDirection, it converts it via timeSortingByDirection.

$timeSortingDirection("asc"); // "oldest-to-newest"$timeSortingDirection("desc"); // "newest-to-oldest"$timeSortingDirection("oldest-to-newest"); // "oldest-to-newest"$timeSortingDirection("newest-to-oldest"); // "newest-to-oldest"

Date comparators

compareDatesNewestToOldest(a, b)

Compares two Date values for descending (newest-first) sort order. Pass directly to Array.prototype.sort.

import { compareDatesNewestToOldest } from "@ngrok/mantle/utils"; const dates = [new Date("2023-01-01"), new Date("2024-06-15"), new Date("2022-12-31")];dates.toSorted(compareDatesNewestToOldest);// → [2024-06-15, 2023-01-01, 2022-12-31]

compareDatesOldestToNewest(a, b)

Compares two Date values for ascending (oldest-first) sort order.

import { compareDatesOldestToNewest } from "@ngrok/mantle/utils"; const dates = [new Date("2023-01-01"), new Date("2024-06-15"), new Date("2022-12-31")];dates.toSorted(compareDatesOldestToNewest);// → [2022-12-31, 2023-01-01, 2024-06-15]