diff --git a/src/AppRouter.tsx b/src/AppRouter.tsx index 5671705..bd664f6 100644 --- a/src/AppRouter.tsx +++ b/src/AppRouter.tsx @@ -2,6 +2,7 @@ import { Routes, Route, useParams, useLocation, useNavigate } from 'react-router import { motion, AnimatePresence } from 'motion/react'; // Import all your pages +import { ProtectedRoute } from './components/ProtectedRoute'; import { MelbournePage } from './pages/MelbournePage'; import { PassesPage } from './pages/PassesPage'; import { AttractionsPage } from './pages/AttractionsPage'; @@ -178,31 +179,43 @@ export function AppRouter({ {/* User Routes */} - + + + } /> - + + + } /> - + {/* Itinerary Routes */} - + + + + } /> - + + + } /> - + + + + } /> @@ -276,12 +289,17 @@ export function AppRouter({ - + + + + } /> - + + + } /> } /> - + - - + + + + } /> @@ -305,26 +325,32 @@ export function AppRouter({ - + + + + } /> - + + + + } /> diff --git a/src/components/LoginModal.tsx b/src/components/LoginModal.tsx index 32ca669..9abd21b 100644 --- a/src/components/LoginModal.tsx +++ b/src/components/LoginModal.tsx @@ -1,3 +1,4 @@ +// LoginModal.tsx import { useState, useEffect } from 'react'; import { motion, AnimatePresence } from 'motion/react'; import { X } from 'lucide-react'; diff --git a/src/components/ProtectedRoute.tsx b/src/components/ProtectedRoute.tsx new file mode 100644 index 0000000..dc9cb39 --- /dev/null +++ b/src/components/ProtectedRoute.tsx @@ -0,0 +1,29 @@ +// ProtectedRoute.tsx +import { useState } from 'react'; +import { useAuth } from '../context/AuthContext'; +import { LoginModal } from './LoginModal'; +import { useNavigate } from 'react-router-dom'; + +interface ProtectedRouteProps { + children: React.ReactNode; +} + +export function ProtectedRoute({ children }: ProtectedRouteProps) { + const { user } = useAuth(); + const navigate = useNavigate(); + const [isLoginOpen, setIsLoginOpen] = useState(!user); + + if (!user) { + return ( + { + setIsLoginOpen(false); + navigate(-1); + }} + /> + ); + } + + return <>{children}; +} \ No newline at end of file diff --git a/src/components/RegisterPage.tsx b/src/components/RegisterPage.tsx index 89adc60..31ae9c2 100644 --- a/src/components/RegisterPage.tsx +++ b/src/components/RegisterPage.tsx @@ -1,3 +1,4 @@ +//RegisterPage.tsx import { useState } from 'react'; import { Button } from './ui/button'; import { Input } from './ui/input'; @@ -8,9 +9,10 @@ import Navbar from './Navbar'; import { Footer } from './Footer'; import { useNavigate } from 'react-router-dom'; import { Label } from './ui/label'; +import { useEffect } from 'react'; export default function RegisterPage() { - const { login } = useAuth(); + const { login, user } = useAuth(); const email = localStorage.getItem("userEmail") const [formData, setFormData] = useState({ firstName: '', @@ -31,6 +33,13 @@ export default function RegisterPage() { const navigate = useNavigate() + useEffect(() => { + const pendingEmail = localStorage.getItem("userEmail"); + if (user || !pendingEmail) { + navigate("/"); + } + }, [user]); + const [register, { isLoading: isRegistering }] = useRegisterMutation(); const handleInputChange = (field: string, value: string) => { diff --git a/src/context/AuthContext.tsx b/src/context/AuthContext.tsx index b3cdda3..2fb643b 100644 --- a/src/context/AuthContext.tsx +++ b/src/context/AuthContext.tsx @@ -1,3 +1,4 @@ +// AuthContext.tsx import React, { createContext, useContext, useEffect, useState } from 'react' import { useNavigate } from 'react-router-dom';