Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions frontend/src/App.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,16 @@ import Layout from './components/Layout';
import ProtectedRoute from './components/ProtectedRoute';
import SetupProtectedRoute from './components/SetupProtectedRoute';
import RecurringTransactions from './pages/RecurringTransactions';
import { PublicRoute } from './components/gaurds';

function App() {
return (
<>
<Routes>
{/* Public Routes */}
<Route path="/" element={<WelcomePage />} />
<Route path="/login" element={<LoginPage />} />
<Route path="/register" element={<RegisterPage />} />
<Route path="/login" element={<PublicRoute><LoginPage /></PublicRoute>} />
<Route path="/register" element={<PublicRoute><RegisterPage /></PublicRoute>} />
<Route path="/contact" element={<ContactUs />} />
{/* Protected Routes */}
<Route
Expand All @@ -42,7 +43,7 @@ function App() {
</SetupProtectedRoute>
}
>
<Route path="/dashboard" element={<DashboardPage />} />
<Route path="/dashboard" element={<ProtectedRoute><DashboardPage /></ProtectedRoute>} />
<Route path="/transactions" element={<TransactionsPage />} />
<Route path="/receipts" element={<ReceiptsPage />} />
<Route path="/settings" element={<SettingsPage />} />
Expand Down
24 changes: 24 additions & 0 deletions frontend/src/components/PublicRoute.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import React from 'react';
import { Navigate } from 'react-router-dom';
import useAuth from '../hooks/useAuth';
import Spinner from './Spinner';

const PublicRoute = ({ children }) => {
const { user, loading } = useAuth();

if (loading) {
return (
<div className="flex justify-center items-center min-h-screen">
<Spinner />
</div>
);
}

if (user) {
return <Navigate to="/dashboard" replace />;
}

return children;
};

export default PublicRoute;