| @@ -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>) | |||||
| } | } | ||||