import { useEffect, useState } from 'react' import { Helmet } from 'react-helmet' import { Link, useLocation, useParams, useNavigate } from 'react-router-dom' import ReactMarkdown from 'react-markdown' import axios from 'axios' import { API_BASE_URL, SITE_TITLE } from '@/config' import MainArea from '@/components/layout/MainArea' import { WikiIdBus } from '@/lib/eventBus/WikiIdBus' import PageTitle from '@/components/common/PageTitle' import type { WikiPage } from '@/types' export default () => { const { title } = useParams () const location = useLocation () const navigate = useNavigate () const [wikiPage, setWikiPage] = useState (undefined) const query = new URLSearchParams (location.search) const version = query.get ('version') useEffect (() => { if (/^\d+$/.test (title)) { void (axios.get (`${ API_BASE_URL }/wiki/${ title }`) .then (res => navigate (`/wiki/${ res.data.title }`, { replace: true }))) return } void (axios.get (`${ API_BASE_URL }/wiki/title/${ encodeURIComponent (title) }`, version && { params: { version } }) .then (res => { setWikiPage (res.data) WikiIdBus.set (res.data.id) }) .catch (() => setWikiPage (null))) }, [title, location.search]) return ( {`${ title } Wiki | ${ SITE_TITLE }`} {(wikiPage && version) && (
{wikiPage.pred ? ( < 古 ) : <>(最古)} {wikiPage.updated_at} {wikiPage.succ ? ( 新 > ) : <>(最新)}
)} {title}
{wikiPage === undefined ? 'Loading...' : ( <> (['/', '.'].some (e => href?.startsWith (e)) ? {children} : {children})) }}> {wikiPage?.body || `このページは存在しません。[新規作成してください](/wiki/new?title=${ title })。`} )}
) }