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