Skip to content

Commit e4ee9ab

Browse files
committed
chore: improve typing of useSort hook
1 parent a915048 commit e4ee9ab

File tree

2 files changed

+18
-14
lines changed

2 files changed

+18
-14
lines changed

apps/frontend/src/hooks/useSort.tsx

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,34 @@
1-
import { Link } from "@tanstack/react-router";
1+
import { Link, ValidateUseSearchResult } from "@tanstack/react-router";
22
import { SortToggle } from "../components/SortToggle";
33
import { FileRoutesById } from "../routeTree.gen";
44
import { components } from "../api.gen";
55

6-
export function useSort(route: FileRoutesById[keyof FileRoutesById]) {
7-
const s = route.useSearch();
6+
export function useSort<S extends ValidateUseSearchResult<FileRoutesById[keyof FileRoutesById]>>(search: S) {
7+
const sortBy = "sortBy" in search ? search.sortBy : undefined;
8+
const sortOrder = "sortOrder" in search ? search.sortOrder : undefined;
89

9-
const sortBy = "sortBy" in s ? s.sortBy : undefined;
10-
const sortOrder = "sortOrder" in s ? s.sortOrder : undefined;
11-
12-
const ToggleLink = ({ sortKey }: { sortKey: typeof sortBy }) => {
10+
const ToggleLink = ({
11+
sortKey,
12+
}: {
13+
sortKey: S extends {
14+
sortBy?: string;
15+
sortOrder?: string;
16+
}
17+
? S["sortBy"]
18+
: never;
19+
}) => {
1320
return (
1421
<Link
15-
from={route.fullPath}
1622
to="."
1723
search={(prev) => {
18-
const prevSearch = prev as { sortBy: typeof sortBy; sortOrder: typeof sortOrder };
19-
2024
let sortOrder: components["schemas"]["SortOrder"] | undefined;
21-
if (prevSearch.sortBy !== sortKey) {
25+
if (prev.sortBy !== sortKey) {
2226
sortOrder = "ASC";
23-
} else if (prevSearch.sortOrder === "ASC") {
27+
} else if (prev.sortOrder === "ASC") {
2428
sortOrder = "DESC";
2529
}
2630

27-
return { ...prevSearch, sortBy: sortOrder && sortKey, sortOrder };
31+
return { ...prev, sortBy: sortOrder && (sortKey as typeof sortBy), sortOrder };
2832
}}
2933
>
3034
<SortToggle sortOrder={sortBy === sortKey ? sortOrder : undefined} />

apps/frontend/src/routes/_auth/administration/participants/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ function AdministrationParticipantsIndex() {
1313
const sessionStore = useStore($session);
1414

1515
const search = Route.useSearch();
16-
const { ToggleLink } = useSort(Route);
16+
const { ToggleLink } = useSort(search);
1717

1818
const participants = useSuspenseQuery($api.queryOptions("get", "/participants", { params: { query: search } }));
1919
const deleteParticipantMutation = $api.useMutation("delete", "/participants/{id}", {

0 commit comments

Comments
 (0)