This commit is contained in:
@@ -14,7 +14,8 @@ import type { WikiPage } from '@/types'
|
||||
|
||||
|
||||
export default () => {
|
||||
const { title } = useParams ()
|
||||
const params = useParams ()
|
||||
const title = params.title ?? ''
|
||||
|
||||
const location = useLocation ()
|
||||
const navigate = useNavigate ()
|
||||
@@ -27,45 +28,56 @@ export default () => {
|
||||
useEffect (() => {
|
||||
if (/^\d+$/.test (title))
|
||||
{
|
||||
void (axios.get (`${ API_BASE_URL }/wiki/${ title }`)
|
||||
.then (res => navigate (`/wiki/${ res.data.title }`, { replace: true })))
|
||||
return
|
||||
void (async () => {
|
||||
const res = await axios.get (`${ API_BASE_URL }/wiki/${ title }`)
|
||||
const data = res.data as WikiPage
|
||||
navigate (`/wiki/${ data.title }`, { replace: true })
|
||||
}) ()
|
||||
return
|
||||
}
|
||||
|
||||
void (axios.get (`${ API_BASE_URL }/wiki/title/${ encodeURIComponent (title) }`, version && { params: { version } })
|
||||
.then (res => {
|
||||
setWikiPage (toCamel (res.data, { deep: true }))
|
||||
WikiIdBus.set (res.data.id)
|
||||
})
|
||||
.catch (() => setWikiPage (null)))
|
||||
void (async () => {
|
||||
try
|
||||
{
|
||||
const res = await axios.get (`${ API_BASE_URL }/wiki/title/${ encodeURIComponent (title) }`,
|
||||
{ params: { ...(version ? { version } : { }) } })
|
||||
const data = toCamel (res.data as any, { deep: true }) as WikiPage
|
||||
setWikiPage (data)
|
||||
WikiIdBus.set (data.id)
|
||||
}
|
||||
catch
|
||||
{
|
||||
setWikiPage (null)
|
||||
}
|
||||
}) ()
|
||||
|
||||
return () => WikiIdBus.set (null)
|
||||
}, [title, location.search])
|
||||
|
||||
return (
|
||||
<MainArea>
|
||||
<Helmet>
|
||||
<title>{`${ title } Wiki | ${ SITE_TITLE }`}</title>
|
||||
</Helmet>
|
||||
{(wikiPage && version) && (
|
||||
<div className="text-sm flex gap-3 items-center justify-center border border-gray-700 rounded px-2 py-1 mb-4">
|
||||
{wikiPage.pred ? (
|
||||
<Link to={`/wiki/${ title }?version=${ wikiPage.pred }`}>
|
||||
< 古
|
||||
</Link>) : <>(最古)</>}
|
||||
<Helmet>
|
||||
<title>{`${ title } Wiki | ${ SITE_TITLE }`}</title>
|
||||
</Helmet>
|
||||
{(wikiPage && version) && (
|
||||
<div className="text-sm flex gap-3 items-center justify-center border border-gray-700 rounded px-2 py-1 mb-4">
|
||||
{wikiPage.pred ? (
|
||||
<Link to={`/wiki/${ title }?version=${ wikiPage.pred }`}>
|
||||
< 古
|
||||
</Link>) : <>(最古)</>}
|
||||
|
||||
<span>{wikiPage.updatedAt}</span>
|
||||
<span>{wikiPage.updatedAt}</span>
|
||||
|
||||
{wikiPage.succ ? (
|
||||
<Link to={`/wiki/${ title }?version=${ wikiPage.succ }`}>
|
||||
新 >
|
||||
</Link>) : <>(最新)</>}
|
||||
</div>)}
|
||||
<PageTitle>{title}</PageTitle>
|
||||
<div className="prose mx-auto p-4">
|
||||
{wikiPage === undefined
|
||||
? 'Loading...'
|
||||
: <WikiBody body={wikiPage?.body || `このページは存在しません。[新規作成してください](/wiki/new?title=${ title })。`} />}
|
||||
</div>
|
||||
{wikiPage.succ ? (
|
||||
<Link to={`/wiki/${ title }?version=${ wikiPage.succ }`}>
|
||||
新 >
|
||||
</Link>) : <>(最新)</>}
|
||||
</div>)}
|
||||
<PageTitle>{title}</PageTitle>
|
||||
<div className="prose mx-auto p-4">
|
||||
{wikiPage === undefined
|
||||
? 'Loading...'
|
||||
: <WikiBody body={wikiPage?.body || `このページは存在しません。[新規作成してください](/wiki/new?title=${ title })。`} />}
|
||||
</div>
|
||||
</MainArea>)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user