erp-platform/ui/src/utils/sortBy.ts
Sedat ÖZTÜRK e1a9562b22 init project
2025-05-06 09:45:49 +03:00

28 lines
801 B
TypeScript

type Primitive = string | number | boolean
export type Primer = (value: Primitive) => Primitive
const sortBy = <T extends Record<string, Primitive>>(
field: keyof T,
reverse: boolean,
primer?: (value: Primitive) => Primitive
) => {
const key = primer
? function (x: T) {
return primer(x[field])
}
: function (x: T) {
return x[field]
}
const isReverse = !reverse ? 1 : -1
return function (a: T, b: T) {
const valueA = key(a)
const valueB = key(b)
if (typeof valueA === 'string' && typeof valueB === 'string') {
return isReverse * valueA.localeCompare(valueB)
}
return isReverse * (valueA > valueB ? 1 : valueB > valueA ? -1 : 0)
}
}
export default sortBy