This commit is contained in:
2025-06-29 22:27:28 +09:00
parent 281c85f2f6
commit 068d0aed14
4 changed files with 94 additions and 32 deletions
+68 -8
View File
@@ -12,7 +12,7 @@ type Props = { user: User
const enum Menu { None,
Post,
Deerjikist,
User,
Tag,
Wiki }
@@ -28,6 +28,8 @@ const TopNav: React.FC = ({ user, setUser }: Props) => {
const [activeIndex, setActiveIndex] = useState (-1)
const [suggestions, setSuggestions] = useState<WikiPage[]> ([])
const [suggestionsVsbl, setSuggestionsVsbl] = useState (false)
const [tagSearch, setTagSearch] = useState ('')
const [userSearch, setUserSearch] = useState ('')
const MyLink = ({ to, title, menu, base }: { to: string
title: string
@@ -40,16 +42,43 @@ const TopNav: React.FC = ({ user, setUser }: Props) => {
{title}
</Link>)
const whenWikiSearchChanged = e => {
setWikiSearch (e.target.value)
const whenTagSearchChanged = ev => {
// TODO: 実装
const q: string = e.target.value.split (' ').at (-1)
setTagSearch (ev.target.value)
const q: string = ev.target.value.split (' ').at (-1)
if (!(q))
{
setSuggestions ([])
return
}
}
const whenWikiSearchChanged = ev => {
// TODO: 実装
setWikiSearch (ev.target.value)
const q: string = ev.target.value.split (' ').at (-1)
if (!(q))
{
setSuggestions ([])
return
}
}
const whenUserSearchChanged = ev => {
// TODO: 実装
setUserSearch (ev.target.value)
const q: string = ev.target.value.split (' ').at (-1)
if (!(q))
{
setSuggestions ([])
return
}
// void (axios.get(`${ API_BASE_URL }/`))
}
const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
@@ -70,8 +99,8 @@ const TopNav: React.FC = ({ user, setUser }: Props) => {
useEffect (() => {
if (location.pathname.startsWith ('/posts'))
setSelectedMenu (Menu.Post)
else if (location.pathname.startsWith ('/deerjikists'))
setSelectedMenu (Menu.Deerjikist)
else if (location.pathname.startsWith ('/users'))
setSelectedMenu (Menu.User)
else if (location.pathname.startsWith ('/tags'))
setSelectedMenu (Menu.Tag)
else if (location.pathname.startsWith ('/wiki'))
@@ -86,9 +115,9 @@ const TopNav: React.FC = ({ user, setUser }: Props) => {
<div className="flex items-center gap-2 h-full">
<Link to="/posts" className="mx-4 text-xl font-bold text-orange-500"> </Link>
<MyLink to="/posts" title="広場" />
<MyLink to="/deerjikists" title="ニジラー" />
<MyLink to="/tags" title="タグ" />
<MyLink to="/wiki/ヘルプ:ホーム" base="/wiki" title="Wiki" />
<MyLink to="/users" title="ニジラー" />
</div>
<div className="ml-auto pr-4">
<Button onClick={() => setSettingsVsbl (true)}>{user?.name || '名もなきニジラー'}</Button>
@@ -112,6 +141,23 @@ const TopNav: React.FC = ({ user, setUser }: Props) => {
<Link to="/posts/new" className={subClass}>稿</Link>
<Link to="/wiki/ヘルプ:広場" className={subClass}></Link>
</div>)
case Menu.Tag:
return (
<div className={className}>
<input type="text"
className={inputBox}
placeholder="タグ検索"
value={tagSearch}
onChange={whenTagSearchChanged}
onFocus={() => setSuggestionsVsbl (true)}
onBlur={() => setSuggestionsVsbl (false)}
onKeyDown={handleKeyDown} />
<Link to="/tags" className={subClass}></Link>
<Link to="/tags/aliases" className={subClass}></Link>
<Link to="/tags/implications" className={subClass}></Link>
<Link to="/wiki/ヘルプ:タグのつけ方" className={subClass}></Link>
<Link to="/wiki/ヘルプ:タグ" className={subClass}></Link>
</div>)
case Menu.Wiki:
return (
<div className={className}>
@@ -135,6 +181,20 @@ const TopNav: React.FC = ({ user, setUser }: Props) => {
<Link to={`/wiki/${ wikiId || location.pathname.split ('/')[2] }/edit`} className={subClass}></Link>
</>}
</div>)
case Menu.User:
return (
<div className={className}>
<input type="text"
className={inputBox}
placeholder="ニジラー検索"
value={userSearch}
onChange={whenUserSearchChanged}
onFocus={() => setSuggestionsVsbl (true)}
onBlur={() => setSuggestionsVsbl (false)}
onKeyDown={handleKeyDown} />
<Link to="/users" className={subClass}></Link>
{user && <Link to={`/users/${ user.id }`} className={subClass}></Link>}
</div>)
}
}) ()}
</>)