Migrated backoffice, hackathon, dimentorin, gacha, qrcampaign, and infra from custom react-router file-based routing to TanStack Router file-based routing following the tanstack-frontend-best-practice convention. Key changes per app: - New routes/ directory with __root.tsx, _public.tsx, _authenticated.tsx - Auth guards via beforeLoad (replaces old middleware.ts) - createFileRoute pattern for all page components - TanStackRouterVite plugin in vite.config for auto route generation - _components/_hooks folders colocated with routes (ignored by router) - routeTree.gen.ts auto-generated on dev/build Convention: - _public/* routes redirect to dashboard if authenticated - _authenticated/* routes redirect to /auth/login if not authenticated - $param for dynamic segments (was [param] in old convention) - _layout suffix for pathless layout routes Removed: - Old src/app/ directories from all apps - Old src/middleware.ts files - Custom convertPagesToRoute utility (no longer needed) - react-router dependency usage (kept in package.json for shared libs) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
25 lines
545 B
TypeScript
25 lines
545 B
TypeScript
import { useForm } from 'react-hook-form';
|
|
import {
|
|
authLoginSchema,
|
|
TLoginRequest,
|
|
usePostLogin,
|
|
} from '@imphnen-frontend-service/service';
|
|
import { zodResolver } from '@hookform/resolvers/zod';
|
|
|
|
export const useLogin = () => {
|
|
const form = useForm<TLoginRequest>({
|
|
resolver: zodResolver(authLoginSchema),
|
|
mode: 'all',
|
|
});
|
|
|
|
const loginMutation = usePostLogin();
|
|
|
|
const onSubmit = form.handleSubmit((data) => loginMutation.mutate(data));
|
|
|
|
return {
|
|
form,
|
|
onSubmit,
|
|
isLoading: loginMutation.isPending,
|
|
};
|
|
};
|