import { AnimatePresence, LayoutGroup } 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 NicoTagListPage from '@/pages/tags/NicoTagListPage' import NotFound from '@/pages/NotFound' 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 ServiceUnavailable from '@/pages/ServiceUnavailable' import SettingPage from '@/pages/users/SettingPage' 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