このコミットが含まれているのは:
+54
-33
@@ -5,7 +5,8 @@ import { createBrowserRouter,
|
||||
Route,
|
||||
RouterProvider,
|
||||
Routes,
|
||||
useLocation } from 'react-router-dom'
|
||||
useLocation,
|
||||
useParams } from 'react-router-dom'
|
||||
|
||||
import DevModeWatermark from '@/components/DevModeWatermark'
|
||||
import RouteBlockerOverlay from '@/components/RouteBlockerOverlay'
|
||||
@@ -13,6 +14,8 @@ import TopNav from '@/components/TopNav'
|
||||
import DialogueProvider from '@/components/dialogues/DialogueProvider'
|
||||
import { Toaster } from '@/components/ui/toaster'
|
||||
import { apiPost, isApiError } from '@/lib/api'
|
||||
import { isLocaleCode, legacyLocalePath, switchLocalePath } from '@/lib/locales'
|
||||
import { useLocale } from '@/lib/useLocale'
|
||||
import { applyClientAnimationMode,
|
||||
applyClientAppearance,
|
||||
fetchUserThemeSlots,
|
||||
@@ -73,41 +76,41 @@ const RouteTransitionWrapper = ({ animationMode, user, setUser }: {
|
||||
|
||||
const routes = (
|
||||
<Routes location={location}>
|
||||
<Route path="/" element={<Navigate to="/posts" replace/>}/>
|
||||
<Route path="/posts" element={<PostListPage/>}/>
|
||||
<Route path="/posts/new" element={<PostNewPage user={user}/>}/>
|
||||
<Route path="/posts/search" element={<PostSearchPage/>}/>
|
||||
<Route path="/posts/:id" element={<PostDetailRoute user={user}/>}/>
|
||||
<Route path="/posts/changes" element={<PostHistoryPage/>}/>
|
||||
<Route path="/tags" element={<TagListPage/>}/>
|
||||
<Route path="/tags/:id" element={<TagDetailPage/>}/>
|
||||
<Route path="/tags/:id/deerjikists" element={<DeerjikistDetailPage/>}/>
|
||||
<Route path="/tags/nico" element={<NicoTagListPage user={user}/>}/>
|
||||
<Route path="/nico/tags" element={<NicoTagListPage user={user}/>}/>
|
||||
<Route path="/tags/changes" element={<TagHistoryPage/>}/>
|
||||
<Route path="/theatres/:id" element={<TheatreDetailPage user={user}/>}/>
|
||||
<Route path="/materials" element={<MaterialBasePage/>}>
|
||||
<Route path="" element={<LocaleRedirect to="/posts"/>}/>
|
||||
<Route path="posts" element={<PostListPage/>}/>
|
||||
<Route path="posts/new" element={<PostNewPage user={user}/>}/>
|
||||
<Route path="posts/search" element={<PostSearchPage/>}/>
|
||||
<Route path="posts/:id" element={<PostDetailRoute user={user}/>}/>
|
||||
<Route path="posts/changes" element={<PostHistoryPage/>}/>
|
||||
<Route path="tags" element={<TagListPage/>}/>
|
||||
<Route path="tags/:id" element={<TagDetailPage/>}/>
|
||||
<Route path="tags/:id/deerjikists" element={<DeerjikistDetailPage/>}/>
|
||||
<Route path="tags/nico" element={<NicoTagListPage user={user}/>}/>
|
||||
<Route path="nico/tags" element={<NicoTagListPage user={user}/>}/>
|
||||
<Route path="tags/changes" element={<TagHistoryPage/>}/>
|
||||
<Route path="theatres/:id" element={<TheatreDetailPage user={user}/>}/>
|
||||
<Route path="materials" element={<MaterialBasePage/>}>
|
||||
<Route index element={<MaterialListPage/>}/>
|
||||
<Route path="changes" element={<MaterialHistoryPage/>}/>
|
||||
<Route path="new" element={<MaterialNewPage/>}/>
|
||||
<Route path="suppressions" element={<MaterialSyncSuppressionsPage/>}/>
|
||||
<Route path=":id" element ={<MaterialDetailPage/>}/>
|
||||
</Route>
|
||||
<Route path="/wiki" element={<WikiSearchPage/>}/>
|
||||
<Route path="/wiki/:title" element={<WikiDetailPage/>}/>
|
||||
<Route path="/wiki/new" element={<WikiNewPage user={user}/>}/>
|
||||
<Route path="/wiki/:id/edit" element={<WikiEditPage user={user}/>}/>
|
||||
<Route path="/wiki/:id/diff" element={<WikiDiffPage/>}/>
|
||||
<Route path="/wiki/changes" element={<WikiHistoryPage/>}/>
|
||||
<Route path="/help" element={<HelpListPage/>}/>
|
||||
<Route path="/help/changes" element={<HelpChangesPage/>}/>
|
||||
<Route path="/help/:identifier/diff" element={<HelpDiffPage/>}/>
|
||||
<Route path="/help/:identifier" element={<HelpDetailPage/>}/>
|
||||
<Route path="/users/settings" element={<SettingPage user={user} setUser={setUser}/>}/>
|
||||
<Route path="/settings" element={<Navigate to="/users/settings" replace/>}/>
|
||||
<Route path="/tos" element={<TOSPage/>}/>
|
||||
<Route path="/gekanator" element={<GekanatorPage user={user}/>}/>
|
||||
<Route path="/more" element={<MorePage/>}/>
|
||||
<Route path="wiki" element={<WikiSearchPage/>}/>
|
||||
<Route path="wiki/:title" element={<WikiDetailPage/>}/>
|
||||
<Route path="wiki/new" element={<WikiNewPage user={user}/>}/>
|
||||
<Route path="wiki/:id/edit" element={<WikiEditPage user={user}/>}/>
|
||||
<Route path="wiki/:id/diff" element={<WikiDiffPage/>}/>
|
||||
<Route path="wiki/changes" element={<WikiHistoryPage/>}/>
|
||||
<Route path="help" element={<HelpListPage/>}/>
|
||||
<Route path="help/changes" element={<HelpChangesPage/>}/>
|
||||
<Route path="help/:identifier/diff" element={<HelpDiffPage/>}/>
|
||||
<Route path="help/:identifier" element={<HelpDetailPage/>}/>
|
||||
<Route path="users/settings" element={<SettingPage user={user} setUser={setUser}/>}/>
|
||||
<Route path="settings" element={<LocaleRedirect to="/users/settings"/>}/>
|
||||
<Route path="tos" element={<TOSPage/>}/>
|
||||
<Route path="gekanator" element={<GekanatorPage user={user}/>}/>
|
||||
<Route path="more" element={<MorePage/>}/>
|
||||
<Route path="*" element={<NotFound/>}/>
|
||||
</Routes>)
|
||||
|
||||
@@ -259,9 +262,27 @@ const RoutedApp: FC = () => {
|
||||
}
|
||||
|
||||
|
||||
const router = createBrowserRouter ([{
|
||||
path: '*',
|
||||
element: <RoutedApp/> }])
|
||||
const LocaleRoute: FC = () => {
|
||||
const { locale } = useParams ()
|
||||
const location = useLocation ()
|
||||
if (isLocaleCode (locale))
|
||||
return <RoutedApp/>
|
||||
|
||||
const redirect = legacyLocalePath (location)
|
||||
return redirect == null ? <NotFound/> : <Navigate to={redirect} replace/>
|
||||
}
|
||||
|
||||
|
||||
const LocaleRedirect = ({ to }: { to: string }) => {
|
||||
const locale = useLocale ()
|
||||
const location = useLocation ()
|
||||
return <Navigate to={switchLocalePath ({ ...location, pathname: to }, locale)} replace/>
|
||||
}
|
||||
|
||||
|
||||
const router = createBrowserRouter ([
|
||||
{ path: '/:locale/*', element: <LocaleRoute/> },
|
||||
{ path: '*', element: <LocaleRoute/> }])
|
||||
|
||||
|
||||
const App: FC = () => (
|
||||
|
||||
新しいイシューから参照
ユーザーをブロックする