feat: add authorization

This commit is contained in:
2026-08-13 15:03:59 +03:00
parent 1e13adabd3
commit 3448fea140
28 changed files with 4504 additions and 3707 deletions
+46 -5
View File
@@ -1,5 +1,5 @@
import { Navigate, Route, Routes } from "react-router";
import { Navigate, Route, Routes, useLocation } from "react-router";
import { useAuth } from "../../features/auth";
import { AccountPage } from "../../pages/account";
import { AccountsPage } from "../../pages/accounts";
import { LoginPage } from "../../pages/login";
@@ -8,13 +8,54 @@ import { RegisterPage } from "../../pages/register";
import { SettingsPage } from "../../pages/settings";
import { AppShell } from "../../shared/ui/AppShell";
function Protected({ children }: { children: React.ReactNode }) {
const { user, ready } = useAuth();
const location = useLocation();
if (!ready) return null;
return user ? (
children
) : (
<Navigate
to="/login"
state={{ returnTo: `${location.pathname}${location.search}` }}
replace
/>
);
}
function Public({ children }: { children: React.ReactNode }) {
const { user, ready } = useAuth();
if (!ready) return null;
return user ? <Navigate to="/accounts" replace /> : children;
}
export function AppRoutes() {
return (
<Routes>
<Route path="/" element={<Navigate to="/accounts" replace />} />
<Route path="/login" element={<LoginPage />} />
<Route path="/register" element={<RegisterPage />} />
<Route element={<AppShell />}>
<Route
path="/login"
element={
<Public>
<LoginPage />
</Public>
}
/>
<Route
path="/register"
element={
<Public>
<RegisterPage />
</Public>
}
/>
<Route
element={
<Protected>
<AppShell />
</Protected>
}
>
<Route path="/accounts" element={<AccountsPage />} />
<Route path="/accounts/:accountId" element={<AccountPage />} />
<Route path="/settings" element={<SettingsPage />} />