import { AnimatePresence, LayoutGroup, motion } from 'framer-motion' import { useEffect, useState } from 'react' import { BrowserRouter, Navigate, Route, Routes, useLocation } from 'react-router-dom' import RouteBlockerOverlay from '@/components/RouteBlockerOverlay' import TopNav from '@/components/TopNav' import { Toaster } from '@/components/ui/toaster' import { apiPost, isApiError } from '@/lib/api' import MaterialBasePage from '@/pages/materials/MaterialBasePage' import MaterialDetailPage from '@/pages/materials/MaterialDetailPage' import MaterialListPage from '@/pages/materials/MaterialListPage' import MaterialNewPage from '@/pages/materials/MaterialNewPage' // import MaterialSearchPage from '@/pages/materials/MaterialSearchPage' import MorePage from '@/pages/MorePage' import NicoTagListPage from '@/pages/tags/NicoTagListPage' import NotFound from '@/pages/NotFound' import TOSPage from '@/pages/TOSPage.mdx' import PostDetailPage from '@/pages/posts/PostDetailPage' import PostHistoryPage from '@/pages/posts/PostHistoryPage' import PostListPage from '@/pages/posts/PostListPage' import PostNewPage from '@/pages/posts/PostNewPage' import PostSearchPage from '@/pages/posts/PostSearchPage' import ServiceUnavailable from '@/pages/ServiceUnavailable' import SettingPage from '@/pages/users/SettingPage' import TagListPage from '@/pages/tags/TagListPage' import TheatreDetailPage from '@/pages/theatres/TheatreDetailPage' import WikiDetailPage from '@/pages/wiki/WikiDetailPage' import WikiDiffPage from '@/pages/wiki/WikiDiffPage' import WikiEditPage from '@/pages/wiki/WikiEditPage' import WikiHistoryPage from '@/pages/wiki/WikiHistoryPage' import WikiNewPage from '@/pages/wiki/WikiNewPage' import WikiSearchPage from '@/pages/wiki/WikiSearchPage' import type { Dispatch, FC, SetStateAction } from 'react' import type { User } from '@/types' const RouteTransitionWrapper = ({ user, setUser }: { user: User | null setUser: Dispatch> }) => { const location = useLocation () return ( }/> }/> }/> }/> }/> }/> }/> }/> }/> }> }/> }/> }/> {/* }/> */} }/> }/> }/> }/> }/> }/> }/> }/> }/> }/> }/> ) } const PostDetailRoute = ({ user }: { user: User | null }) => { const location = useLocation () const key = location.pathname return } export default (() => { const [user, setUser] = useState (null) const [status, setStatus] = useState (200) useEffect (() => { const createUser = async () => { const data = await apiPost<{ code: string; user: User }> ('/users') if (data.code) { localStorage.setItem ('user_code', data.code) setUser (data.user) } } const code = localStorage.getItem ('user_code') if (code) { void (async () => { try { const data = await apiPost<{ valid: boolean; user: User }> ('/users/verify', { code }) if (data.valid) setUser (data.user) else await createUser () } catch (err) { if (isApiError (err)) setStatus (err.response?.status ?? 200) } }) () } else createUser () }, []) switch (status) { case 503: return } return ( <> ) }) satisfies FC