This commit is contained in:
@@ -4,13 +4,31 @@ import { useEffect, useState } from 'react'
|
|||||||
import ReactMarkdown from 'react-markdown'
|
import ReactMarkdown from 'react-markdown'
|
||||||
import { Link } from 'react-router-dom'
|
import { Link } from 'react-router-dom'
|
||||||
|
|
||||||
|
import SectionTitle from '@/components/common/SectionTitle'
|
||||||
|
import SubsectionTitle from '@/components/common/SubsectionTitle'
|
||||||
import { API_BASE_URL } from '@/config'
|
import { API_BASE_URL } from '@/config'
|
||||||
|
|
||||||
|
import type { Components } from 'react-markdown'
|
||||||
|
|
||||||
import type { WikiPage } from '@/types'
|
import type { WikiPage } from '@/types'
|
||||||
|
|
||||||
type Props = { title: string
|
type Props = { title: string
|
||||||
body?: string }
|
body?: string }
|
||||||
|
|
||||||
|
const mdComponents = { h1: ({ children }) => <SectionTitle>{children}</SectionTitle>,
|
||||||
|
h2: ({ children }) => <SubsectionTitle>{children}</SubsectionTitle>,
|
||||||
|
ol: ({ children }) => <ol className="list-decimal pl-6">{children}</ol>,
|
||||||
|
ul: ({ children }) => <ul className="list-disc pl-6">{children}</ul>,
|
||||||
|
a: (({ href, children }) => (
|
||||||
|
['/', '.'].some (e => href?.startsWith (e))
|
||||||
|
? <Link to={href!}>{children}</Link>
|
||||||
|
: (
|
||||||
|
<a href={href}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer">
|
||||||
|
{children}
|
||||||
|
</a>))) } as const satisfies Components
|
||||||
|
|
||||||
|
|
||||||
export default ({ title, body }: Props) => {
|
export default ({ title, body }: Props) => {
|
||||||
const [pageNames, setPageNames] = useState<string[]> ([])
|
const [pageNames, setPageNames] = useState<string[]> ([])
|
||||||
@@ -75,10 +93,7 @@ export default ({ title, body }: Props) => {
|
|||||||
}, [pageNames])
|
}, [pageNames])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ReactMarkdown components={{ a: (
|
<ReactMarkdown components={mdComponents}>
|
||||||
({ href, children }) => (['/', '.'].some (e => href?.startsWith (e))
|
|
||||||
? <Link to={href!}>{children}</Link>
|
|
||||||
: <a href={href} target="_blank" rel="noopener noreferrer">{children}</a>)) }}>
|
|
||||||
{realBody || `このページは存在しません。[新規作成してください](/wiki/new?title=${ encodeURIComponent (title) })。`}
|
{realBody || `このページは存在しません。[新規作成してください](/wiki/new?title=${ encodeURIComponent (title) })。`}
|
||||||
</ReactMarkdown>)
|
</ReactMarkdown>)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ export default () => {
|
|||||||
</Tab>
|
</Tab>
|
||||||
{tags.length === 1 && (
|
{tags.length === 1 && (
|
||||||
<Tab name="Wiki">
|
<Tab name="Wiki">
|
||||||
<WikiBody body={wikiPage?.body} title={tags[0]} />
|
<WikiBody title={tags[0]} body={wikiPage?.body} />
|
||||||
<div className="my-2">
|
<div className="my-2">
|
||||||
<Link to={`/wiki/${ encodeURIComponent (tags[0]) }`}>
|
<Link to={`/wiki/${ encodeURIComponent (tags[0]) }`}>
|
||||||
Wiki を見る
|
Wiki を見る
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ export default () => {
|
|||||||
}
|
}
|
||||||
}) ()
|
}) ()
|
||||||
|
|
||||||
|
setPosts ([])
|
||||||
void (async () => {
|
void (async () => {
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -73,7 +74,7 @@ export default () => {
|
|||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
setPosts ([])
|
;
|
||||||
}
|
}
|
||||||
}) ()
|
}) ()
|
||||||
|
|
||||||
@@ -123,7 +124,7 @@ export default () => {
|
|||||||
<div className="prose mx-auto p-4">
|
<div className="prose mx-auto p-4">
|
||||||
{wikiPage === undefined
|
{wikiPage === undefined
|
||||||
? 'Loading...'
|
? 'Loading...'
|
||||||
: <WikiBody body={wikiPage?.body} title={title} />}
|
: <WikiBody title={title} body={wikiPage?.body} />}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{(!(version) && posts.length > 0) && (
|
{(!(version) && posts.length > 0) && (
|
||||||
|
|||||||
Reference in New Issue
Block a user