|
1 | 1 | import { Toaster } from "@/components/ui/toaster"; |
2 | 2 | import { Toaster as Sonner } from "@/components/ui/sonner"; |
3 | 3 | import { TooltipProvider } from "@/components/ui/tooltip"; |
4 | | -import { BrowserRouter, Routes, Route } from "react-router-dom"; |
| 4 | +import { BrowserRouter } from "react-router-dom"; |
5 | 5 | import { CookieConsentBanner } from "@/components/legal/CookieConsentBanner"; |
6 | 6 | import { AppFooter } from "@/components/legal/AppFooter"; |
7 | | -import { FestivalEditionProvider } from "@/contexts/FestivalEditionContext"; |
8 | | - |
9 | | -// Public pages |
10 | | -import FestivalSelection from "./pages/FestivalSelection"; |
11 | | -import EditionSelection from "./pages/EditionSelection"; |
12 | | -import EditionView from "./pages/EditionView"; |
13 | | -import Groups from "./pages/Groups"; |
14 | | -import GroupDetail from "./pages/GroupDetail"; |
15 | | -import Schedule from "./pages/Schedule"; |
16 | | -import { SetDetails } from "./pages/SetDetails"; |
17 | | - |
18 | | -// Admin pages |
19 | | -import AdminLayout from "./pages/AdminLayout"; |
20 | | -import AdminDashboard from "./pages/admin/AdminDashboard"; |
21 | | -import AdminAnalytics from "./pages/admin/AdminAnalytics"; |
22 | | -import AdminRoles from "./pages/admin/AdminRoles"; |
23 | | -import AdminFestivals from "./pages/admin/AdminFestivals"; |
24 | | -import FestivalDetail from "./pages/admin/FestivalDetail"; |
25 | | -import FestivalEdition from "./pages/admin/FestivalEdition"; |
26 | | -import FestivalStages from "./pages/admin/FestivalStages"; |
27 | | -import FestivalSets from "./pages/admin/FestivalSets"; |
28 | | - |
29 | | -// Legal pages |
30 | | -import PrivacyPolicy from "./pages/PrivacyPolicy"; |
31 | | -import TermsOfService from "./pages/TermsOfService"; |
32 | | -import CookiePolicy from "./pages/CookiePolicy"; |
33 | | -import NotFound from "./pages/NotFound"; |
34 | | - |
35 | | -const App = () => ( |
36 | | - <TooltipProvider> |
37 | | - <Toaster /> |
38 | | - <Sonner /> |
39 | | - <CookieConsentBanner /> |
40 | | - <BrowserRouter> |
41 | | - <div className="min-h-screen flex flex-col"> |
42 | | - <div className="flex-1"> |
43 | | - <Routes> |
44 | | - {/* Festival/Edition Selection Routes */} |
45 | | - <Route path="/" element={<FestivalSelection />} /> |
46 | | - <Route |
47 | | - path="/festivals/:festivalSlug" |
48 | | - element={ |
49 | | - <FestivalEditionProvider> |
50 | | - <EditionSelection /> |
51 | | - </FestivalEditionProvider> |
52 | | - } |
53 | | - /> |
54 | | - <Route |
55 | | - path="/festivals/:festivalSlug/editions/:editionSlug" |
56 | | - element={ |
57 | | - <FestivalEditionProvider> |
58 | | - <EditionView /> |
59 | | - </FestivalEditionProvider> |
60 | | - } |
61 | | - /> |
62 | | - <Route |
63 | | - path="/festivals/:festivalSlug/editions/:editionSlug/sets/:setId" |
64 | | - element={ |
65 | | - <FestivalEditionProvider> |
66 | | - <SetDetails /> |
67 | | - </FestivalEditionProvider> |
68 | | - } |
69 | | - /> |
70 | | - <Route |
71 | | - path="/festivals/:festivalSlug/editions/:editionSlug/schedule" |
72 | | - element={ |
73 | | - <FestivalEditionProvider> |
74 | | - <Schedule /> |
75 | | - </FestivalEditionProvider> |
76 | | - } |
77 | | - /> |
78 | | - |
79 | | - {/* Global routes (not scoped to festival/edition) */} |
80 | | - <Route path="/groups" element={<Groups />} /> |
81 | | - <Route path="/groups/:groupId" element={<GroupDetail />} /> |
82 | | - |
83 | | - {/* Admin routes (unchanged) */} |
84 | | - <Route path="/admin" element={<AdminLayout />}> |
85 | | - <Route index element={<AdminDashboard />} /> |
86 | | - <Route path="artists" element={<AdminDashboard />} /> |
87 | | - <Route path="analytics" element={<AdminAnalytics />} /> |
88 | | - <Route path="admins" element={<AdminRoles />} /> |
89 | | - <Route path="festivals" element={<AdminFestivals />}> |
90 | | - <Route path=":festivalId" element={<FestivalDetail />}> |
91 | | - <Route |
92 | | - path="editions/:editionId" |
93 | | - element={<FestivalEdition />} |
94 | | - > |
95 | | - <Route index element={<FestivalStages />} /> |
96 | | - <Route path="stages" element={<FestivalStages />} /> |
97 | | - <Route path="sets" element={<FestivalSets />} /> |
98 | | - </Route> |
99 | | - </Route> |
100 | | - </Route> |
101 | | - </Route> |
102 | | - |
103 | | - {/* Legal pages */} |
104 | | - <Route path="/privacy" element={<PrivacyPolicy />} /> |
105 | | - <Route path="/terms" element={<TermsOfService />} /> |
106 | | - <Route path="/cookies" element={<CookiePolicy />} /> |
107 | | - |
108 | | - {/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */} |
109 | | - <Route path="*" element={<NotFound />} /> |
110 | | - </Routes> |
| 7 | +import { getSubdomainInfo } from "@/lib/subdomain"; |
| 8 | + |
| 9 | +import { MainDomainRoutes } from "./components/MainDomainRoutes"; |
| 10 | +import { SubdomainRoutes } from "./components/SubdomainRoutes"; |
| 11 | +import { useState } from "react"; |
| 12 | + |
| 13 | +const App = () => { |
| 14 | + const [subdomainInfo] = useState(() => getSubdomainInfo()); |
| 15 | + |
| 16 | + return ( |
| 17 | + <TooltipProvider> |
| 18 | + <Toaster /> |
| 19 | + <Sonner /> |
| 20 | + <CookieConsentBanner /> |
| 21 | + <BrowserRouter> |
| 22 | + <div className="min-h-screen flex flex-col"> |
| 23 | + <div className="flex-1"> |
| 24 | + {subdomainInfo.isSubdomain && subdomainInfo.festivalSlug ? ( |
| 25 | + // Subdomain routing: boom-festival.getupline.com |
| 26 | + <SubdomainRoutes festivalSlug={subdomainInfo.festivalSlug} /> |
| 27 | + ) : ( |
| 28 | + // Main domain routing: getupline.com |
| 29 | + <MainDomainRoutes /> |
| 30 | + )} |
| 31 | + </div> |
| 32 | + <AppFooter /> |
111 | 33 | </div> |
112 | | - <AppFooter /> |
113 | | - </div> |
114 | | - </BrowserRouter> |
115 | | - </TooltipProvider> |
116 | | -); |
| 34 | + </BrowserRouter> |
| 35 | + </TooltipProvider> |
| 36 | + ); |
| 37 | +}; |
117 | 38 |
|
118 | 39 | export default App; |
0 commit comments