Merge branch '#89'

This commit is contained in:
2025-08-03 19:08:42 +09:00
3 changed files with 23 additions and 7 deletions
+19 -4
View File
@@ -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[]> ([])
@@ -79,10 +97,7 @@ export default ({ title, body }: Props) => {
}, [body, pageNames]) }, [body, 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>)
} }
+1 -1
View File
@@ -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
+3 -2
View File
@@ -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) && (