source: frontend/src/App.tsx@ 947fcaa

main
Last change on this file since 947fcaa was 947fcaa, checked in by Filip Gavrilovski <filipgavrilovski28@…>, 5 months ago

add cursor pointer to buttons

  • Property mode set to 100644
File size: 3.1 KB
Line 
1import { useEffect, useState } from "react";
2import {
3 createBrowserRouter,
4 Outlet,
5 RouterProvider,
6 useLocation,
7} from "react-router-dom";
8import { ToastContainer } from "react-toastify";
9import "react-toastify/dist/ReactToastify.css";
10import LoadingSpinner from "./components/LoadingSpinner";
11import MiniPlayer from "./components/MiniPlayer";
12import Sidebar from "./components/Sidebar";
13import { useAuth } from "./context/authContext";
14import { usePlayer } from "./context/playerContext";
15// import AllUsers from "./pages/AllUsers";
16import LandingPage from "./pages/LandingPage";
17import Login from "./pages/Login";
18import MusicalCollection from "./pages/MusicalCollection";
19import MySongs from "./pages/MySongs";
20import Nav from "./pages/Nav";
21import PublishSong from "./pages/PublishSong";
22import Register from "./pages/Register";
23import SongDetail from "./pages/SongDetail";
24import UserDetail from "./pages/UserDetail";
25
26const MainLayout = () => {
27 const { user } = useAuth();
28 const { currentSong } = usePlayer();
29 const location = useLocation();
30 // show sidebar only if user is logged in and is on the landing page
31 const isLandingPage = location.pathname === "/";
32 const [isSidebarOpen, setIsSidebarOpen] = useState(
33 !!user && isLandingPage && !user?.isArtist && !user?.isAdmin,
34 );
35
36 // Open sidebar when user logs in and navigates to landing page
37 useEffect(() => {
38 if (user && isLandingPage && !user.isArtist && !user.isAdmin) {
39 setIsSidebarOpen(true);
40 }
41 }, [user, isLandingPage]);
42
43 return (
44 <div className="flex flex-col min-h-screen bg-[#121212]">
45 <Nav
46 isSidebarOpen={isSidebarOpen}
47 onToggleSidebar={() => setIsSidebarOpen(!isSidebarOpen)}
48 />
49 <Sidebar isOpen={isSidebarOpen} onClose={() => setIsSidebarOpen(false)} />
50 <ToastContainer
51 position="top-right"
52 autoClose={2000}
53 hideProgressBar={false}
54 newestOnTop={false}
55 closeOnClick
56 rtl={false}
57 pauseOnFocusLoss
58 draggable
59 pauseOnHover
60 theme="light"
61 />
62 <main
63 className={`grow transition-all duration-300 pt-20 ${
64 isSidebarOpen ? "ml-64" : "ml-0"
65 } ${currentSong ? "pb-20" : ""}`}
66 >
67 <Outlet />
68 </main>
69 <MiniPlayer />
70 </div>
71 );
72};
73
74const Layout = () => {
75 const { isAuthLoading } = useAuth();
76
77 if (isAuthLoading) {
78 return <LoadingSpinner />;
79 }
80
81 return <MainLayout />;
82};
83
84const router = createBrowserRouter([
85 {
86 path: "",
87 element: <Layout />,
88 children: [
89 {
90 path: "/",
91 element: <LandingPage />,
92 },
93 {
94 path: "/login",
95 element: <Login />,
96 },
97 // {
98 // path: "/users",
99 // element: <AllUsers />,
100 // },
101 {
102 path: "/users/:username",
103 element: <UserDetail />,
104 },
105 {
106 path: "/register",
107 element: <Register />,
108 },
109 {
110 path: "/my-songs",
111 element: <MySongs />,
112 },
113 {
114 path: "/publish",
115 element: <PublishSong />,
116 },
117 {
118 path: "/songs/:id",
119 element: <SongDetail />,
120 },
121 {
122 path: "/collection/:type/:id",
123 element: <MusicalCollection />,
124 },
125 {
126 path: "/me",
127 element: <UserDetail />,
128 },
129 ],
130 },
131]);
132
133function App() {
134 return <RouterProvider router={router} />;
135}
136
137export default App;
Note: See TracBrowser for help on using the repository browser.