Write on the margins of the internet. Powered by the AT Protocol. margin.at
extension web atproto comments
at main 257 lines 6.1 kB view raw
1import React from "react"; 2import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom"; 3import { initAuth, $user } from "./store/auth"; 4import { loadPreferences } from "./store/preferences"; 5import { useStore } from "@nanostores/react"; 6 7import AppLayout from "./layouts/AppLayout"; 8import Feed from "./views/core/Feed"; 9import Login from "./views/auth/Login"; 10import Notifications from "./views/core/Notifications"; 11import Collections from "./views/collections/Collections"; 12import Settings from "./views/core/Settings"; 13import NewAnnotationPage from "./views/core/New"; 14import MasonryFeed from "./components/feed/MasonryFeed"; 15import { 16 ProfileWrapper, 17 SelfProfileWrapper, 18 CollectionDetailWrapper, 19 AnnotationDetailWrapper, 20 UserUrlWrapper, 21 UrlWrapper, 22} from "./routes/wrappers"; 23import About from "./views/About"; 24import AdminModeration from "./views/core/AdminModeration"; 25import Search from "./views/core/Search"; 26import Discover from "./views/core/Discover"; 27 28function RootRoute() { 29 const user = useStore($user); 30 31 if (user) { 32 return <Navigate to="/home" replace />; 33 } 34 35 return <About />; 36} 37 38export default function App() { 39 React.useEffect(() => { 40 initAuth(); 41 loadPreferences(); 42 }, []); 43 44 return ( 45 <BrowserRouter> 46 <Routes> 47 <Route path="/" element={<RootRoute />} /> 48 <Route path="/login" element={<Login />} /> 49 <Route path="/about" element={<About />} /> 50 <Route path="/auth/*" element={<div>Redirecting...</div>} /> 51 52 <Route 53 path="/home" 54 element={ 55 <AppLayout> 56 <Feed initialType="all" /> 57 </AppLayout> 58 } 59 /> 60 <Route path="/my-feed" element={<Navigate to="/home" replace />} /> 61 62 <Route 63 path="/search" 64 element={ 65 <AppLayout> 66 <Search /> 67 </AppLayout> 68 } 69 /> 70 71 <Route 72 path="/discover" 73 element={ 74 <AppLayout> 75 <Discover /> 76 </AppLayout> 77 } 78 /> 79 80 <Route 81 path="/annotations" 82 element={ 83 <AppLayout> 84 <MasonryFeed 85 motivation="commenting" 86 emptyMessage="You haven't annotated anything yet." 87 showTabs={true} 88 title="Annotations" 89 /> 90 </AppLayout> 91 } 92 /> 93 <Route 94 path="/bookmarks" 95 element={ 96 <AppLayout> 97 <MasonryFeed 98 motivation="bookmarking" 99 emptyMessage="You haven't bookmarked anything yet." 100 showTabs={true} 101 title="Bookmarks" 102 /> 103 </AppLayout> 104 } 105 /> 106 <Route 107 path="/highlights" 108 element={ 109 <AppLayout> 110 <MasonryFeed 111 motivation="highlighting" 112 emptyMessage="You haven't highlighted anything yet." 113 showTabs={true} 114 title="Highlights" 115 /> 116 </AppLayout> 117 } 118 /> 119 120 <Route 121 path="/collections" 122 element={ 123 <AppLayout> 124 <Collections /> 125 </AppLayout> 126 } 127 /> 128 <Route 129 path="/:handle/collection/:rkey" 130 element={ 131 <AppLayout> 132 <CollectionDetailWrapper /> 133 </AppLayout> 134 } 135 /> 136 <Route 137 path="/collections/:rkey" 138 element={ 139 <AppLayout> 140 <CollectionDetailWrapper /> 141 </AppLayout> 142 } 143 /> 144 145 <Route 146 path="/profile/:did" 147 element={ 148 <AppLayout> 149 <ProfileWrapper /> 150 </AppLayout> 151 } 152 /> 153 <Route 154 path="/profile" 155 element={ 156 <AppLayout> 157 <SelfProfileWrapper /> 158 </AppLayout> 159 } 160 /> 161 162 <Route 163 path="/new" 164 element={ 165 <AppLayout> 166 <NewAnnotationPage /> 167 </AppLayout> 168 } 169 /> 170 <Route 171 path="/at/:did/:rkey" 172 element={ 173 <AppLayout> 174 <AnnotationDetailWrapper /> 175 </AppLayout> 176 } 177 /> 178 <Route 179 path="/annotation/:uri" 180 element={ 181 <AppLayout> 182 <AnnotationDetailWrapper /> 183 </AppLayout> 184 } 185 /> 186 <Route 187 path="/:handle/annotation/:rkey" 188 element={ 189 <AppLayout> 190 <AnnotationDetailWrapper /> 191 </AppLayout> 192 } 193 /> 194 <Route 195 path="/:handle/highlight/:rkey" 196 element={ 197 <AppLayout> 198 <AnnotationDetailWrapper /> 199 </AppLayout> 200 } 201 /> 202 <Route 203 path="/:handle/bookmark/:rkey" 204 element={ 205 <AppLayout> 206 <AnnotationDetailWrapper /> 207 </AppLayout> 208 } 209 /> 210 <Route 211 path="/:handle/url/*" 212 element={ 213 <AppLayout> 214 <UserUrlWrapper /> 215 </AppLayout> 216 } 217 /> 218 <Route 219 path="/url/*" 220 element={ 221 <AppLayout> 222 <UrlWrapper /> 223 </AppLayout> 224 } 225 /> 226 227 <Route 228 path="/admin/moderation" 229 element={ 230 <AppLayout> 231 <AdminModeration /> 232 </AppLayout> 233 } 234 /> 235 236 <Route 237 path="/settings" 238 element={ 239 <AppLayout> 240 <Settings /> 241 </AppLayout> 242 } 243 /> 244 <Route 245 path="/notifications" 246 element={ 247 <AppLayout> 248 <Notifications /> 249 </AppLayout> 250 } 251 /> 252 253 <Route path="*" element={<Navigate to="/home" replace />} /> 254 </Routes> 255 </BrowserRouter> 256 ); 257}