@@ -1,7 +1,7 @@ | |||||
import axios from 'axios' | import axios from 'axios' | ||||
import toCamel from 'camelcase-keys' | import toCamel from 'camelcase-keys' | ||||
import { useEffect, useState } from 'react' | import { useEffect, useState } from 'react' | ||||
import { BrowserRouter as Router, Route, Routes, Navigate } from 'react-router-dom' | |||||
import { BrowserRouter, Navigate, Route, Routes } from 'react-router-dom' | |||||
import TopNav from '@/components/TopNav' | import TopNav from '@/components/TopNav' | ||||
import { Toaster } from '@/components/ui/toaster' | import { Toaster } from '@/components/ui/toaster' | ||||
@@ -70,29 +70,27 @@ export default () => { | |||||
return ( | return ( | ||||
<> | <> | ||||
<Router> | |||||
<div className="flex flex-col h-screen w-screen"> | |||||
<TopNav user={user} /> | |||||
<div className="flex flex-1"> | |||||
<Routes> | |||||
<Route path="/" element={<Navigate to="/posts" replace />} /> | |||||
<Route path="/posts" element={<PostListPage />} /> | |||||
<Route path="/posts/new" element={<PostNewPage user={user} />} /> | |||||
<Route path="/posts/:id" element={<PostDetailPage user={user} />} /> | |||||
<Route path="/tags/nico" element={<NicoTagListPage user={user} />} /> | |||||
<Route path="/wiki" element={<WikiSearchPage />} /> | |||||
<Route path="/wiki/:title" element={<WikiDetailPage />} /> | |||||
<Route path="/wiki/new" element={<WikiNewPage user={user} />} /> | |||||
<Route path="/wiki/:id/edit" element={<WikiEditPage user={user} />} /> | |||||
<Route path="/wiki/:id/diff" element={<WikiDiffPage />} /> | |||||
<Route path="/wiki/changes" element={<WikiHistoryPage />} /> | |||||
<Route path="/users/settings" element={<SettingPage user={user} setUser={setUser} />} /> | |||||
<Route path="/settings" element={<Navigate to="/users/settings" replace />} /> | |||||
<Route path="*" element={<NotFound />} /> | |||||
</Routes> | |||||
</div> | |||||
</div> | |||||
</Router> | |||||
<div className="flex flex-col h-screen w-screen"> | |||||
<TopNav user={user} /> | |||||
<BrowserRouter> | |||||
<Routes> | |||||
<Route path="/" element={<Navigate to="/posts" replace />} /> | |||||
<Route path="/posts" element={<PostListPage />} /> | |||||
<Route path="/posts/new" element={<PostNewPage user={user} />} /> | |||||
<Route path="/posts/:id" element={<PostDetailPage user={user} />} /> | |||||
<Route path="/tags/nico" element={<NicoTagListPage user={user} />} /> | |||||
<Route path="/wiki" element={<WikiSearchPage />} /> | |||||
<Route path="/wiki/:title" element={<WikiDetailPage />} /> | |||||
<Route path="/wiki/new" element={<WikiNewPage user={user} />} /> | |||||
<Route path="/wiki/:id/edit" element={<WikiEditPage user={user} />} /> | |||||
<Route path="/wiki/:id/diff" element={<WikiDiffPage />} /> | |||||
<Route path="/wiki/changes" element={<WikiHistoryPage />} /> | |||||
<Route path="/users/settings" element={<SettingPage user={user} setUser={setUser} />} /> | |||||
<Route path="/settings" element={<Navigate to="/users/settings" replace />} /> | |||||
<Route path="*" element={<NotFound />} /> | |||||
</Routes> | |||||
</BrowserRouter> | |||||
</div> | |||||
<Toaster /> | <Toaster /> | ||||
</>) | </>) | ||||
} | } |
@@ -64,7 +64,7 @@ export default ({ posts }: Props) => { | |||||
</li>))) : [])} | </li>))) : [])} | ||||
</ul> | </ul> | ||||
<SectionTitle>関聯</SectionTitle> | <SectionTitle>関聯</SectionTitle> | ||||
{posts.length && ( | |||||
{posts.length > 0 && ( | |||||
<a href="#" | <a href="#" | ||||
onClick={ev => { | onClick={ev => { | ||||
ev.preventDefault () | ev.preventDefault () | ||||
@@ -166,8 +166,7 @@ export default ({ user }: Props) => { | |||||
return ( | return ( | ||||
<div className={className}> | <div className={className}> | ||||
<Link to="/posts" className={subClass}>一覧</Link> | <Link to="/posts" className={subClass}>一覧</Link> | ||||
{['admin', 'member'].some (r => user?.role === r) && ( | |||||
<Link to="/posts/new" className={subClass}>投稿追加</Link>)} | |||||
<Link to="/posts/new" className={subClass}>投稿追加</Link> | |||||
<Link to="/wiki/ヘルプ:広場" className={subClass}>ヘルプ</Link> | <Link to="/wiki/ヘルプ:広場" className={subClass}>ヘルプ</Link> | ||||
</div>) | </div>) | ||||
case Menu.Tag: | case Menu.Tag: | ||||
@@ -4,6 +4,6 @@ type Props = { children: React.ReactNode } | |||||
export default ({ children }: Props) => ( | export default ({ children }: Props) => ( | ||||
<div className="w-64 bg-gray-100 p-4 border-r border-gray-200 h-full"> | |||||
<div className="p-4 w-full md:w-64 md:h-full"> | |||||
{children} | {children} | ||||
</div>) | </div>) |
@@ -24,8 +24,8 @@ type Props = { user: User | null } | |||||
export default ({ user }: Props) => { | export default ({ user }: Props) => { | ||||
const { id } = useParams () | const { id } = useParams () | ||||
const [post, setPost] = useState<Post | null> (null) | |||||
const [editing, setEditing] = useState (true) | const [editing, setEditing] = useState (true) | ||||
const [post, setPost] = useState<Post | null> (null) | |||||
const [status, setStatus] = useState (200) | const [status, setStatus] = useState (200) | ||||
const changeViewedFlg = async () => { | const changeViewedFlg = async () => { | ||||
@@ -92,13 +92,15 @@ export default ({ user }: Props) => { | |||||
: 'bg-gray-500 hover:bg-gray-600') | : 'bg-gray-500 hover:bg-gray-600') | ||||
return ( | return ( | ||||
<> | |||||
<div className="md:flex md:flex-1"> | |||||
<Helmet> | <Helmet> | ||||
{(post?.thumbnail || post?.thumbnailBase) && ( | {(post?.thumbnail || post?.thumbnailBase) && ( | ||||
<meta name="thumbnail" content={post.thumbnail || post.thumbnailBase} />)} | <meta name="thumbnail" content={post.thumbnail || post.thumbnailBase} />)} | ||||
{post && <title>{`${ post.title || post.url } | ${ SITE_TITLE }`}</title>} | {post && <title>{`${ post.title || post.url } | ${ SITE_TITLE }`}</title>} | ||||
</Helmet> | </Helmet> | ||||
<TagDetailSidebar post={post} /> | |||||
<div className="hidden md:block"> | |||||
<TagDetailSidebar post={post} /> | |||||
</div> | |||||
<MainArea> | <MainArea> | ||||
{post | {post | ||||
? ( | ? ( | ||||
@@ -126,5 +128,8 @@ export default ({ user }: Props) => { | |||||
</>) | </>) | ||||
: 'Loading...'} | : 'Loading...'} | ||||
</MainArea> | </MainArea> | ||||
</>) | |||||
<div className="md:hidden"> | |||||
<TagDetailSidebar post={post} /> | |||||
</div> | |||||
</div>) | |||||
} | } |
@@ -77,7 +77,7 @@ export default () => { | |||||
}, [location.search]) | }, [location.search]) | ||||
return ( | return ( | ||||
<> | |||||
<div className="md:flex md:flex-1"> | |||||
<Helmet> | <Helmet> | ||||
<title> | <title> | ||||
{tags.length | {tags.length | ||||
@@ -85,13 +85,15 @@ export default () => { | |||||
: `${ SITE_TITLE } 〜 ぼざろクリーチャーシリーズ綜合リンク集サイト`} | : `${ SITE_TITLE } 〜 ぼざろクリーチャーシリーズ綜合リンク集サイト`} | ||||
</title> | </title> | ||||
</Helmet> | </Helmet> | ||||
<TagSidebar posts={posts.slice (0, 20)} /> | |||||
<div className="hidden md:block"> | |||||
<TagSidebar posts={posts.slice (0, 20)} /> | |||||
</div> | |||||
<MainArea> | <MainArea> | ||||
<TabGroup> | <TabGroup> | ||||
<Tab name="広場"> | <Tab name="広場"> | ||||
{posts.length | {posts.length | ||||
? ( | ? ( | ||||
<div className="flex flex-wrap gap-4 p-4"> | |||||
<div className="flex flex-wrap gap-4 gap-y-8 p-4 justify-between"> | |||||
{posts.map (post => ( | {posts.map (post => ( | ||||
<Link to={`/posts/${ post.id }`} | <Link to={`/posts/${ post.id }`} | ||||
key={post.id} | key={post.id} | ||||
@@ -115,5 +117,8 @@ export default () => { | |||||
</Tab>)} | </Tab>)} | ||||
</TabGroup> | </TabGroup> | ||||
</MainArea> | </MainArea> | ||||
</>) | |||||
<div className="md:hidden"> | |||||
<TagSidebar posts={posts.slice (0, 20)} /> | |||||
</div> | |||||
</div>) | |||||
} | } |