このコミットが含まれているのは:
2026-10-17 16:47:08 +09:00
コミット b945ceef60
91個のファイルの変更、4652行の追加、822行の削除
+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 = () => (