MCPcopy Index your code
hub / github.com/OpenPipe/OpenPipe / useSortOrder

Function useSortOrder

app/src/components/sorting.tsx:9–45  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

7type SortableFields = string;
8
9export const useSortOrder = <Fields extends SortableFields>() => {
10 const [rawParams, setParams] = useQueryParam("sort", DelimitedArrayParam);
11
12 const parsedParams = z.tuple([z.string(), z.enum(["asc", "desc"])]).safeParse(rawParams);
13
14 const reset = useCallback(() => setParams(undefined), [setParams]);
15
16 const params = useMemo(
17 () =>
18 parsedParams.success
19 ? { field: parsedParams.data[0] as Fields, order: parsedParams.data[1] }
20 : undefined,
21 [parsedParams],
22 );
23
24 // If it's not sorted by this, sort asc. If it's sorted asc, sort desc. If it's sorted desc, remove sorting.
25 const toggle = useCallback(
26 (newField: Fields) => {
27 if (params?.field === newField) {
28 if (params.order === "asc") {
29 setParams([newField, "desc"]);
30 } else {
31 reset();
32 }
33 } else {
34 setParams([newField, "asc"]);
35 }
36 },
37 [setParams, params, reset],
38 );
39
40 return {
41 params,
42 reset,
43 toggle,
44 };
45};
46
47export const SortArrows = <Fields extends SortableFields>(props: { field: Fields }) => {
48 const { toggle, params } = useSortOrder<Fields>();

Callers 4

useNodeEntriesFunction · 0.90
useAdminProjectsFunction · 0.90
SortArrowsFunction · 0.85
SortableHeaderFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected