import React, { useState, useEffect } from 'react'; import Navbar from './components/Navbar'; import Footer from './components/Footer'; import Home from './pages/Home'; import Book from './pages/Book'; import Retreat from './pages/Retreat'; import Blog from './pages/Blog'; import Contact from './pages/Contact'; import BlogPost from './pages/BlogPost'; import Login from './pages/Login'; import Register from './pages/Register'; import RegisterSuccess from './pages/RegisterSuccess'; import Dashboard from './pages/Dashboard'; import { Page, BlogPost as BlogPostType } from './types'; import { supabase } from './supabaseClient'; import { Session } from '@supabase/supabase-js'; const App: React.FC = () => { const [currentPage, setCurrentPage] = useState(Page.HOME); const [selectedPost, setSelectedPost] = useState(null); const [session, setSession] = useState(null); useEffect(() => { supabase.auth.getSession().then(({ data: { session } }) => { setSession(session); }); const { data: { subscription }, } = supabase.auth.onAuthStateChange((_event, session) => { setSession(session); if (session) { // Optional: Redirect to dashboard on login if desired, but might be annoying if just refreshing // if (currentPage === Page.LOGIN) setCurrentPage(Page.DASHBOARD); } else { if (currentPage === Page.DASHBOARD) setCurrentPage(Page.LOGIN); } }); return () => subscription.unsubscribe(); }, [currentPage]); const handlePageChange = (page: Page) => { if (page === Page.DASHBOARD && !session) { setCurrentPage(Page.LOGIN); return; } window.scrollTo({ top: 0, behavior: 'smooth' }); setCurrentPage(page); }; const renderPage = () => { switch (currentPage) { case Page.HOME: return ; case Page.BOOK: return ; case Page.RETREAT: return ; case Page.BLOG: return ; case Page.CONTACT: return ; case Page.BLOG_POST: return ; case Page.LOGIN: return ; case Page.REGISTER: return ; case Page.REGISTER_SUCCESS: return ; case Page.DASHBOARD: return session ? : ; default: return ; } }; return (
{renderPage()}
); }; export default App;