export const createStringSorter =
<Obj extends Record<string, unknown>>(key?: keyof Obj, ascending = true) =>
(left: Obj | string, right: Obj | string): number => {
typeof left === 'string' ? left : (left[key as keyof Obj] as string)
typeof right === 'string' ? right : (right[key as keyof Obj] as string)
return leftStr.localeCompare(rightStr) * (ascending ? 1 : -1)
export const createNumberSorter =
<Obj extends Record<string, unknown>>(key?: keyof Obj, ascending = true) =>
(left: Obj | number, right: Obj | number): number => {
typeof left === 'number' ? left : (left[key as keyof Obj] as number)
typeof right === 'number' ? right : (right[key as keyof Obj] as number)
if (Number.isNaN(leftNum)) return 1
if (Number.isNaN(rightNum)) return -1
return (leftNum - rightNum) * (ascending ? 1 : -1)
export const createDateSorter =
<Obj extends Record<string, unknown>>(key?: keyof Obj, ascending = true) =>
(left: Obj | Date, right: Obj | Date): number => {
left instanceof Date ? left : (left[key as keyof Obj] as Date)
right instanceof Date ? right : (right[key as keyof Obj] as Date)
if (Number.isNaN(leftDate.getTime())) return 1
if (Number.isNaN(rightDate.getTime())) return -1
return (leftDate.getTime() - rightDate.getTime()) * (ascending ? 1 : -1)