import { useQuery } from '@tanstack/react-query' import { useMemo } from 'react' import ReactMarkdown from 'react-markdown' import remarkGFM from 'remark-gfm' import PrefetchLink from '@/components/PrefetchLink' import SectionTitle from '@/components/common/SectionTitle' import SubsectionTitle from '@/components/common/SubsectionTitle' import { wikiKeys } from '@/lib/queryKeys' import remarkWikiAutoLink from '@/lib/remark-wiki-autolink' import { fetchWikiPages } from '@/lib/wiki' import type { FC } from 'react' import type { Components } from 'react-markdown' type Props = { title: string body?: string } const mdComponents = { h1: ({ children }) => {children}, h2: ({ children }) => {children}, ol: ({ children }) =>
    {children}
, ul: ({ children }) => , a: (({ href, children }) => ( ['/', '.'].some (e => href?.startsWith (e)) ? {children} : ( {children} ))) } as const satisfies Components export default (({ title, body }: Props) => { const { data } = useQuery ({ enabled: Boolean (body), queryKey: wikiKeys.index ({ }), queryFn: () => fetchWikiPages ({ }) }) const pageNames = (data ?? []).map (page => page.title).sort ((a, b) => b.length - a.length) const remarkPlugins = useMemo ( () => [() => remarkWikiAutoLink (pageNames), remarkGFM], [pageNames]) return ( {body || `このページは存在しません。[新規作成してください](/wiki/new?title=${ encodeURIComponent (title) })。`} ) }) satisfies FC