みてるぞ 1 day ago
parent
commit
1a965146dc
6 changed files with 43 additions and 36 deletions
  1. +22
    -24
      frontend/src/App.tsx
  2. +1
    -1
      frontend/src/components/TagSidebar.tsx
  3. +1
    -2
      frontend/src/components/TopNav.tsx
  4. +1
    -1
      frontend/src/components/layout/SidebarComponent.tsx
  5. +9
    -4
      frontend/src/pages/posts/PostDetailPage.tsx
  6. +9
    -4
      frontend/src/pages/posts/PostListPage.tsx

+ 22
- 24
frontend/src/App.tsx View File

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

+ 1
- 1
frontend/src/components/TagSidebar.tsx View File

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


+ 1
- 2
frontend/src/components/TopNav.tsx View File

@@ -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:


+ 1
- 1
frontend/src/components/layout/SidebarComponent.tsx View File

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

+ 9
- 4
frontend/src/pages/posts/PostDetailPage.tsx View File

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

+ 9
- 4
frontend/src/pages/posts/PostListPage.tsx View File

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

Loading…
Cancel
Save