gitscope
← marzneshin / Diff · d459492 → d459492
Changes d459492..d459492
Patch commit
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 (
- <main >
+ <main>
<Routes>
<Route
path="/login"
@@ -45,6 +47,7 @@ function App() {
<Footer />
</GridItem>
</Grid>
+ {!isLoggedIn && <Navigate to="/login" />}
</main>
);
}
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<AdminStateType>((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 {