diff --git a/app/dashboard/src/App.tsx b/app/dashboard/src/App.tsx index a87886d..9f42eb4 100644 --- a/app/dashboard/src/App.tsx +++ b/app/dashboard/src/App.tsx @@ -6,12 +6,14 @@ import { Sidebar } from 'components/Sidebar'; import Login from 'pages/Login'; import 'react-datepicker/dist/react-datepicker.css'; import 'react-loading-skeleton/dist/skeleton.css'; -import { Route, Routes } from 'react-router-dom'; +import { Navigate, Route, Routes } from 'react-router-dom'; import { fetchAdminLoader } from 'components/modules/Router'; +import { useAdmin } from 'contexts/AdminContext'; function App() { + const { isLoggedIn } = useAdmin(); return ( -
+
+ {!isLoggedIn && }
); } diff --git a/app/dashboard/src/contexts/AdminContext.tsx b/app/dashboard/src/contexts/AdminContext.tsx new file mode 100644 index 0000000..2494d8a --- /dev/null +++ b/app/dashboard/src/contexts/AdminContext.tsx @@ -0,0 +1,27 @@ +import { create } from 'zustand'; +import { subscribeWithSelector } from 'zustand/middleware'; + +type AdminStateType = { + isLoggedIn: boolean, + getAuthToken: () => string | null; + setAuthToken: (token: string) => void; + removeAuthToken: () => void; +} + +export const useAdmin = create( + subscribeWithSelector((set,) => ({ + isLoggedIn: false, + getAuthToken: () => { + return localStorage.getItem('token'); + }, + setAuthToken: (token: string) => { + localStorage.setItem('token', token); + set({ isLoggedIn: true }); + }, + + removeAuthToken: () => { + localStorage.removeItem('token'); + set({ isLoggedIn: false }); + }, + })) +) diff --git a/app/dashboard/src/pages/Login.tsx b/app/dashboard/src/pages/Login.tsx index 11aff16..a9c99fb 100644 --- a/app/dashboard/src/pages/Login.tsx +++ b/app/dashboard/src/pages/Login.tsx @@ -19,10 +19,10 @@ import { z } from 'zod'; import { Footer } from 'components/Footer'; import { Input } from 'components/Input'; import { fetch } from 'service/http'; -import { removeAuthToken, setAuthToken } from 'utils/authStorage'; import { ReactComponent as Logo } from 'assets/logo.svg'; import { useTranslation } from 'react-i18next'; import { Language } from 'components/Language'; +import { useAdmin } from 'contexts/AdminContext'; const schema = z.object({ username: z.string().min(1, 'login.fieldRequired'), @@ -49,6 +49,7 @@ export const Login: FC = () => { const [error, setError] = useState(''); const [loading, setLoading] = useState(false); const navigate = useNavigate(); + const { setAuthToken, removeAuthToken } = useAdmin(); const { t } = useTranslation(); let location = useLocation(); const {