このコミットが含まれているのは:
@@ -14,7 +14,7 @@ import type { Post, Tag, WikiPage } from '@/types'
|
||||
|
||||
|
||||
export default () => {
|
||||
const [posts, setPosts] = useState<Post[]> ([])
|
||||
const [posts, setPosts] = useState<Post[] | null> (null)
|
||||
const [wikiPage, setWikiPage] = useState<WikiPage | null> (null)
|
||||
|
||||
const location = useLocation ()
|
||||
@@ -30,7 +30,7 @@ export default () => {
|
||||
.then (res => setPosts (toCamel (res.data, { deep: true })))
|
||||
.catch (err => {
|
||||
console.error ('Failed to fetch posts:', err)
|
||||
setPosts ([])
|
||||
setPosts (null)
|
||||
}))
|
||||
|
||||
setWikiPage (null)
|
||||
@@ -53,25 +53,26 @@ export default () => {
|
||||
: `${ SITE_TITLE } 〜 ぼざクリも、ぼざろ外も、外伝もあるんだよ`}
|
||||
</title>
|
||||
</Helmet>
|
||||
<TagSidebar posts={posts} />
|
||||
<TagSidebar posts={posts || []} />
|
||||
<MainArea>
|
||||
<TabGroup key={wikiPage}>
|
||||
<Tab name="広場">
|
||||
{posts.length
|
||||
? (
|
||||
<div className="flex flex-wrap gap-4 p-4">
|
||||
{posts.map (post => (
|
||||
<Link to={`/posts/${ post.id }`}
|
||||
key={post.id}
|
||||
className="w-40 h-40 overflow-hidden rounded-lg shadow-md hover:shadow-lg">
|
||||
<img src={post.thumbnail ?? post.thumbnailBase}
|
||||
className="object-none w-full h-full" />
|
||||
</Link>))}
|
||||
</div>)
|
||||
: '広場には何もありませんよ.'}
|
||||
{posts == null ? 'Loading...' : (
|
||||
posts.length
|
||||
? (
|
||||
<div className="flex flex-wrap gap-4 p-4">
|
||||
{posts.map (post => (
|
||||
<Link to={`/posts/${ post.id }`}
|
||||
key={post.id}
|
||||
className="w-40 h-40 overflow-hidden rounded-lg shadow-md hover:shadow-lg">
|
||||
<img src={post.thumbnail ?? post.thumbnailBase}
|
||||
className="object-none w-full h-full" />
|
||||
</Link>))}
|
||||
</div>)
|
||||
: '広場には何もありませんよ.')}
|
||||
</Tab>
|
||||
{(wikiPage && wikiPage.body) && (
|
||||
<Tab name="Wiki" init={!(posts.length)}>
|
||||
<Tab name="Wiki" init={!(posts?.length)}>
|
||||
<WikiBody body={wikiPage.body} />
|
||||
<div className="my-2">
|
||||
<Link to={`/wiki/${ wikiPage.title }`}>Wiki を見る</Link>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import axios from 'axios'
|
||||
import toCamel from 'camelcase-keys'
|
||||
import React, { useEffect, useState } from 'react'
|
||||
import { Helmet } from 'react-helmet'
|
||||
import { Link } from 'react-router-dom'
|
||||
@@ -17,7 +18,7 @@ export default () => {
|
||||
|
||||
const search = () => {
|
||||
void (axios.get (`${ API_BASE_URL }/wiki/search`, { params: { title } })
|
||||
.then (res => setResults (res.data)))
|
||||
.then (res => setResults (toCamel (res.data, { deep: true }))))
|
||||
}
|
||||
|
||||
const handleSearch = (e: React.FormEvent) => {
|
||||
@@ -82,7 +83,7 @@ export default () => {
|
||||
</Link>
|
||||
</td>
|
||||
<td className="p-2 text-gray-100 text-sm">
|
||||
{page.updated_at}
|
||||
{page.updatedAt}
|
||||
</td>
|
||||
</tr>))}
|
||||
</tbody>
|
||||
|
||||
新しい課題から参照
ユーザをブロックする