Initial commit: Gravl MVP med onboarding
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
import React from 'react'
|
||||
import ReactDOM from 'react-dom/client'
|
||||
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'
|
||||
import { AuthProvider, useAuth } from './context/AuthContext'
|
||||
import App from './App.jsx'
|
||||
import RegisterPage from './pages/RegisterPage'
|
||||
import LoginPage from './pages/LoginPage'
|
||||
import OnboardingWizard from './pages/OnboardingWizard'
|
||||
import './index.css'
|
||||
|
||||
function ProtectedRoute({ children, requireOnboarding = true }) {
|
||||
const { user, loading } = useAuth();
|
||||
if (loading) return <div className="app loading"><div className="spinner"></div></div>;
|
||||
if (!user) return <Navigate to="/login" />;
|
||||
if (requireOnboarding && !user.onboarding_complete) return <Navigate to="/onboarding" />;
|
||||
return children;
|
||||
}
|
||||
|
||||
function AuthRoute({ children }) {
|
||||
const { user, loading } = useAuth();
|
||||
if (loading) return <div className="app loading"><div className="spinner"></div></div>;
|
||||
if (user?.onboarding_complete) return <Navigate to="/" />;
|
||||
if (user) return <Navigate to="/onboarding" />;
|
||||
return children;
|
||||
}
|
||||
|
||||
ReactDOM.createRoot(document.getElementById('root')).render(
|
||||
<React.StrictMode>
|
||||
<BrowserRouter>
|
||||
<AuthProvider>
|
||||
<Routes>
|
||||
<Route path="/register" element={<AuthRoute><RegisterPage /></AuthRoute>} />
|
||||
<Route path="/login" element={<AuthRoute><LoginPage /></AuthRoute>} />
|
||||
<Route path="/onboarding" element={<ProtectedRoute requireOnboarding={false}><OnboardingWizard /></ProtectedRoute>} />
|
||||
<Route path="/*" element={<ProtectedRoute><App /></ProtectedRoute>} />
|
||||
</Routes>
|
||||
</AuthProvider>
|
||||
</BrowserRouter>
|
||||
</React.StrictMode>,
|
||||
)
|
||||
Reference in New Issue
Block a user