Search-Typing issue
Hey
.
I love tanstack router. Does somebody know why following works:
but following not:
The only difference is that in first version I use zod to validate the search, and in the second I do it myself.
I love tanstack router. Does somebody know why following works:
import { createFileRoute } from "@tanstack/react-router";
import { z } from "zod";
import { Login } from "shared-features/login";
export const Route = createFileRoute("/login")({
validateSearch: z.object({
redirect: z.string().catch("/app"),
}),
component: LoginComponent,
});
function LoginComponent() {
const navigate = Route.useNavigate();
const redirect = Route.useSearch({ select: (search) => search.redirect });
const handleRedirect = () => {
navigate({
to: redirect,
replace: true,
});
};
return (
<Login title="Hello" onLogin={handleRedirect}/>
);
}import { createFileRoute } from "@tanstack/react-router";
import { z } from "zod";
import { Login } from "shared-features/login";
export const Route = createFileRoute("/login")({
validateSearch: z.object({
redirect: z.string().catch("/app"),
}),
component: LoginComponent,
});
function LoginComponent() {
const navigate = Route.useNavigate();
const redirect = Route.useSearch({ select: (search) => search.redirect });
const handleRedirect = () => {
navigate({
to: redirect,
replace: true,
});
};
return (
<Login title="Hello" onLogin={handleRedirect}/>
);
}but following not:
import { createFileRoute } from "@tanstack/react-router";
import { Login } from "shared-features/login";
type LoginSearch = {
redirect: string;
};
export const Route = createFileRoute("/login")({
validateSearch: (search): LoginSearch => {
return {
redirect: (search.redirect as string) || "/app",
};
},
component: LoginComponent,
});
function LoginComponent() {
const navigate = Route.useNavigate();
const redirect = Route.useSearch({ select: (search) => search.redirect });
const handleRedirect = () => {
navigate({
to: redirect,
replace: true,
});
};
return (
<Login title="Hello" onLogin={handleRedirect}/>
);
}import { createFileRoute } from "@tanstack/react-router";
import { Login } from "shared-features/login";
type LoginSearch = {
redirect: string;
};
export const Route = createFileRoute("/login")({
validateSearch: (search): LoginSearch => {
return {
redirect: (search.redirect as string) || "/app",
};
},
component: LoginComponent,
});
function LoginComponent() {
const navigate = Route.useNavigate();
const redirect = Route.useSearch({ select: (search) => search.redirect });
const handleRedirect = () => {
navigate({
to: redirect,
replace: true,
});
};
return (
<Login title="Hello" onLogin={handleRedirect}/>
);
}The only difference is that in first version I use zod to validate the search, and in the second I do it myself.