feat(udt-001): frontend auth UI (Zustand store, TanStack Query, LoginPage, router)

This commit is contained in:
2026-04-13 21:36:32 -03:00
parent 5f6ebccb54
commit a692576bc3
13 changed files with 420 additions and 0 deletions

50
src/web/src/router.tsx Normal file
View File

@@ -0,0 +1,50 @@
import { Navigate, Route, Routes } from 'react-router-dom'
import { useAuthStore } from './stores/authStore'
import { LoginPage } from './features/auth/pages/LoginPage'
import { HomePage } from './pages/HomePage'
import { PublicLayout } from './layouts/PublicLayout'
import { ProtectedLayout } from './layouts/ProtectedLayout'
function ProtectedRoute({ children }: { children: React.ReactNode }) {
const user = useAuthStore((s) => s.user)
if (!user) {
return <Navigate to="/login" replace />
}
return <>{children}</>
}
function PublicRoute({ children }: { children: React.ReactNode }) {
const user = useAuthStore((s) => s.user)
if (user) {
return <Navigate to="/" replace />
}
return <>{children}</>
}
export function AppRoutes() {
return (
<Routes>
<Route
path="/login"
element={
<PublicRoute>
<PublicLayout>
<LoginPage />
</PublicLayout>
</PublicRoute>
}
/>
<Route
path="/"
element={
<ProtectedRoute>
<ProtectedLayout>
<HomePage />
</ProtectedLayout>
</ProtectedRoute>
}
/>
<Route path="*" element={<Navigate to="/" replace />} />
</Routes>
)
}