import { useEffect, useState } from "react"; import { createBrowserRouter, Outlet, RouterProvider, useLocation, } from "react-router-dom"; import { ToastContainer } from "react-toastify"; import "react-toastify/dist/ReactToastify.css"; import LoadingSpinner from "./components/LoadingSpinner"; import MiniPlayer from "./components/MiniPlayer"; import Sidebar from "./components/Sidebar"; import { useAuth } from "./context/authContext"; import { usePlayer } from "./context/playerContext"; import AllUsers from "./pages/AllUsers"; import LandingPage from "./pages/LandingPage"; import Login from "./pages/Login"; import MusicalCollection from "./pages/MusicalCollection"; import MySongs from "./pages/MySongs"; import Nav from "./pages/Nav"; import PublishSong from "./pages/PublishSong"; import Register from "./pages/Register"; import SongDetail from "./pages/SongDetail"; import UserDetail from "./pages/UserDetail"; const MainLayout = () => { const { user } = useAuth(); const { currentSong } = usePlayer(); const location = useLocation(); // show sidebar only if user is logged in and is on the landing page const isLandingPage = location.pathname === "/"; const [isSidebarOpen, setIsSidebarOpen] = useState( !!user && isLandingPage && !user?.isArtist && !user?.isAdmin, ); // Open sidebar when user logs in and navigates to landing page useEffect(() => { if (user && isLandingPage && !user.isArtist && !user.isAdmin) { setIsSidebarOpen(true); } }, [user, isLandingPage]); return (
); }; const Layout = () => { const { isAuthLoading } = useAuth(); if (isAuthLoading) { return ; } return ; }; const router = createBrowserRouter([ { path: "", element: , children: [ { path: "/", element: , }, { path: "/login", element: , }, { path: "/users", element: , }, { path: "/users/:username", element: , }, { path: "/register", element: , }, { path: "/my-songs", element: , }, { path: "/publish", element: , }, { path: "/songs/:id", element: , }, { path: "/collection/:type/:id", element: , }, { path: "/me", element: , }, ], }, ]); function App() { return ; } export default App;