/ client / src / utils / sorting.ts
sorting.ts
 1  import { CrudSort } from "@refinedev/core";
 2  import { SortOrder } from "antd/es/table/interface";
 3  
 4  interface TypedCrudSort<Obj> {
 5    field: keyof Obj;
 6    order: "asc" | "desc";
 7  }
 8  
 9  /**
10   * Returns the sort order for a given field based on the provided sorters.
11   * @param sorters An array of `CrudSort` objects that define the sorting criteria.
12   * @param field The field to get the sort order for.
13   * @returns The sort order for the given field, or undefined if the field is not being sorted.
14   */
15  export function getSortOrderForField<Obj, Field extends keyof Obj>(
16    sorters: TypedCrudSort<Obj>[],
17    field: Field,
18  ): SortOrder | undefined {
19    const sorter = sorters.find((s) => s.field === field);
20    if (sorter) {
21      return sorter.order === "asc" ? "ascend" : "descend";
22    }
23    return undefined;
24  }
25  
26  export function typeSorters<Obj>(sorters: CrudSort[]): TypedCrudSort<Obj>[] {
27    return sorters as TypedCrudSort<Obj>[]; // <-- Unsafe cast
28  }