|
1 |
| -import { Link } from "@tanstack/react-router"; |
| 1 | +import { Link, ValidateUseSearchResult } from "@tanstack/react-router"; |
2 | 2 | import { SortToggle } from "../components/SortToggle";
|
3 | 3 | import { FileRoutesById } from "../routeTree.gen";
|
4 | 4 | import { components } from "../api.gen";
|
5 | 5 |
|
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; |
8 | 9 |
|
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 | + }) => { |
13 | 20 | return (
|
14 | 21 | <Link
|
15 |
| - from={route.fullPath} |
16 | 22 | to="."
|
17 | 23 | search={(prev) => {
|
18 |
| - const prevSearch = prev as { sortBy: typeof sortBy; sortOrder: typeof sortOrder }; |
19 |
| - |
20 | 24 | let sortOrder: components["schemas"]["SortOrder"] | undefined;
|
21 |
| - if (prevSearch.sortBy !== sortKey) { |
| 25 | + if (prev.sortBy !== sortKey) { |
22 | 26 | sortOrder = "ASC";
|
23 |
| - } else if (prevSearch.sortOrder === "ASC") { |
| 27 | + } else if (prev.sortOrder === "ASC") { |
24 | 28 | sortOrder = "DESC";
|
25 | 29 | }
|
26 | 30 |
|
27 |
| - return { ...prevSearch, sortBy: sortOrder && sortKey, sortOrder }; |
| 31 | + return { ...prev, sortBy: sortOrder && (sortKey as typeof sortBy), sortOrder }; |
28 | 32 | }}
|
29 | 33 | >
|
30 | 34 | <SortToggle sortOrder={sortBy === sortKey ? sortOrder : undefined} />
|
|
0 commit comments