import { BrowserRouter, Routes, Route, Navigate, useLocation } from 'react-router-dom'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { useState, useEffect } from 'react'; import './styles/globals.css'; import { authService } from './services/authService'; import { AudioProvider, useAudio } from './context/AudioContext'; import Login from './pages/Login'; import Dashboard from './pages/Dashboard'; import Trending from './pages/Trending'; import AddPodcast from './pages/AddPodcast'; import Library from './pages/Library'; import Navigation from './components/Navigation'; import AudioPlayer from './components/AudioPlayer'; const queryClient = new QueryClient({ defaultOptions: { queries: { staleTime: 1000 * 60 * 5, // 5 minutes gcTime: 1000 * 60 * 30, // 30 minutes (formerly cacheTime) }, }, }); // App Content Wrapper to access AudioContext function AppContent() { const { currentEpisode, closePlayer } = useAudio(); const location = useLocation(); const isDashboard = location.pathname === '/dashboard' || location.pathname === '/'; const [user, setUser] = useState(null); useEffect(() => { const { accessToken } = authService.getTokens(); if (!accessToken) return; authService.getMe().then(r => setUser(r.user)).catch(() => {}); }, [currentEpisode]); return ( <> } /> } /> } /> } /> } /> } /> } /> {currentEpisode && !isDashboard && ( )} ); } // Protected Route Component function ProtectedRoute({ children }: { children: React.ReactNode }) { const { accessToken } = authService.getTokens(); if (!accessToken) { return ; } return (
{children}
); } export default function App() { return ( ); }