..
Viewing
App.tsx
92 lines (84 loc) • 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92 | import {
BrowserRouter as Router,
Routes,
Route,
useLocation,
} from 'react-router-dom';
import { useEffect } from 'react';
import {
Profile,
Navbar,
ThemeProvider,
Footer,
Home,
Watch,
Search,
Page404,
About,
PolicyTerms,
ShortcutsPopup,
ScrollToTop,
usePreserveScrollOnReload,
Callback,
ApolloClientProvider,
Settings,
SettingsProvider,
} from './index';
import { register } from 'swiper/element/bundle';
import { Analytics } from '@vercel/analytics/react';
import { AuthProvider } from './client/useAuth';
import ReactGA from 'react-ga4';
register();
function App() {
usePreserveScrollOnReload();
const measurementId = import.meta.env.VITE_GA_MEASUREMENT_ID;
useEffect(() => {
if (measurementId) {
ReactGA.initialize(measurementId);
}
}, [measurementId]);
return (
<ApolloClientProvider>
<Router>
<AuthProvider>
<ThemeProvider>
<SettingsProvider>
<Navbar />
<ShortcutsPopup />
<ScrollToTop />
<TrackPageViews />
<div style={{ minHeight: '35rem' }}>
<Routes>
<Route path='/' element={<Home />} />
<Route path='/home' element={<Home />} />
<Route path='/search' element={<Search />} />
<Route path='/watch/:animeId' element={<Watch />} />
<Route
path='/watch/:animeId/:animeTitle/:episodeNumber'
element={<Watch />}
/>
<Route path='/profile' element={<Profile />} />
<Route path='/profile/settings' element={<Settings />} />
<Route path='/about' element={<About />} />
<Route path='/pptos' element={<PolicyTerms />} />
<Route path='/callback' element={<Callback />} />
<Route path='*' element={<Page404 />} />
</Routes>
</div>
<Footer />
</SettingsProvider>
</ThemeProvider>
</AuthProvider>
</Router>
<Analytics />
</ApolloClientProvider>
);
}
function TrackPageViews() {
const { pathname } = useLocation();
useEffect(() => {
ReactGA.send({ hitType: 'pageview', page: pathname });
}, [pathname]);
return null;
}
export default App;
|
|