diff --git a/src/App.jsx b/src/App.jsx
index 52130b2..06fcc66 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -1,25 +1,33 @@
-import React from "react";
+import React, { useState, useEffect } from "react";
import { Routes, Route, Navigate } from "react-router-dom";
import Login from "./pages/Login";
import Register from "./pages/Register";
import Dashboard from "./pages/Dashboard";
import Layout from "./components/Layout";
+import ProtectedRoute from "./components/ProtectedRoute";
const App = () => {
- const token = localStorage.getItem("token");
+ const [token, setToken] = useState(null);
+
+ useEffect(() => {
+ const storedToken = localStorage.getItem("token");
+ setToken(storedToken);
+ }, []);
return (
-
-
- } />
- } />
- : }
- />
- } />
-
-
+
+ } />
+ } />
+
+
+
+ }
+ />
+ } />
+
);
};
diff --git a/src/components/Layout.jsx b/src/components/Layout.jsx
index dd6c017..3533e53 100644
--- a/src/components/Layout.jsx
+++ b/src/components/Layout.jsx
@@ -1,15 +1,9 @@
-import React, { useEffect, useState } from "react";
+import React from "react";
import { useNavigate } from "react-router-dom";
-const Layout = ({ children }) => {
- const [token, setToken] = useState(null);
+const Layout = ({ children, token, setToken }) => {
const navigate = useNavigate();
- useEffect(() => {
- const t = localStorage.getItem("token");
- setToken(t);
- }, []);
-
const handleLogout = () => {
localStorage.removeItem("token");
setToken(null);
diff --git a/src/components/PageWrapper.jsx b/src/components/PageWrapper.jsx
new file mode 100644
index 0000000..3470843
--- /dev/null
+++ b/src/components/PageWrapper.jsx
@@ -0,0 +1,21 @@
+import React from "react";
+
+const PageWrapper = ({ children, center = false }) => (
+
+ {children}
+
+);
+
+export default PageWrapper;
diff --git a/src/components/ProtectedRoute.jsx b/src/components/ProtectedRoute.jsx
new file mode 100644
index 0000000..811ec45
--- /dev/null
+++ b/src/components/ProtectedRoute.jsx
@@ -0,0 +1,54 @@
+import React from "react";
+import { Navigate, useNavigate } from "react-router-dom";
+import PageWrapper from "./PageWrapper";
+
+const ProtectedRoute = ({ children }) => {
+ const token = localStorage.getItem("token");
+ const navigate = useNavigate();
+
+ const handleLogout = () => {
+ localStorage.removeItem("token");
+ navigate("/login");
+ };
+
+ if (!token) {
+ return ;
+ }
+
+ return (
+
+
+
+ {children}
+
+
+ );
+};
+
+export default ProtectedRoute;
diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx
index d509167..f6cbf6f 100644
--- a/src/pages/Login.jsx
+++ b/src/pages/Login.jsx
@@ -2,6 +2,7 @@ import React, { useState } from "react";
import { useNavigate } from "react-router-dom";
import config from "../config";
import { useAuth } from "../AuthContext";
+import PageWrapper from "../components/PageWrapper";
const styles = {
form: {
@@ -81,7 +82,7 @@ const Login = () => {
}
const data = await res.json();
- login(data.token);
+ login(data.token);
navigate("/dashboard");
} catch (err) {
console.error("Login error:", err);
@@ -90,39 +91,41 @@ const Login = () => {
};
return (
-
+
+
+
);
};