import React, { useState, useEffect } from 'react' import { Link, useLocation, useNavigate, useParams } from 'react-router-dom' import SettingsDialogue from './SettingsDialogue' import { Button } from './ui/button' import { cn } from '@/lib/utils' import { WikiIdBus } from '@/lib/eventBus/WikiIdBus' import type { User } from '@/types' type Props = { user: User setUser: (user: User) => void } const enum Menu { None, Post, Deerjikist, Tag, Wiki } const TopNav: React.FC = ({ user, setUser }: Props) => { const location = useLocation () const navigate = useNavigate () const [settingsVsbl, setSettingsVsbl] = useState (false) const [selectedMenu, setSelectedMenu] = useState (Menu.None) const [wikiId, setWikiId] = useState (WikiIdBus.get ()) const [wikiSearch, setWikiSearch] = useState ('') const [activeIndex, setActiveIndex] = useState (-1) const [suggestions, setSuggestions] = useState ([]) const [suggestionsVsbl, setSuggestionsVsbl] = useState (false) const MyLink = ({ to, title, menu, base }: { to: string title: string menu?: Menu base?: string }) => ( {title} ) const whenWikiSearchChanged = e => { setWikiSearch (e.target.value) const q: string = e.target.value.split (' ').at (-1) if (!(q)) { setSuggestions ([]) return } // void (axios.get(`${ API_BASE_URL }/`)) } const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter' && wikiSearch.length && (!(suggestionsVsbl) || activeIndex < 0)) { navigate (`/wiki/${ encodeURIComponent (wikiSearch) }`) setSuggestionsVsbl (false) } } const handleTagSelect = (tag: Tag) => { } useEffect (() => { WikiIdBus.subscribe (setWikiId) }, []) useEffect (() => { if (location.pathname.startsWith ('/posts')) setSelectedMenu (Menu.Post) else if (location.pathname.startsWith ('/deerjikists')) setSelectedMenu (Menu.Deerjikist) else if (location.pathname.startsWith ('/tags')) setSelectedMenu (Menu.Tag) else if (location.pathname.startsWith ('/wiki')) setSelectedMenu (Menu.Wiki) else setSelectedMenu (Menu.None) }, [location]) return ( <> {(() => { const className = 'bg-gray-700 text-white px-3 flex items-center w-full min-h-[40px]' const subClass = 'hover:text-orange-500 h-full flex items-center px-3' const inputBox = 'flex items-center px-3 mx-2' const Separator = () => | switch (selectedMenu) { case Menu.Post: return (
一覧 投稿追加
) case Menu.Wiki: return (
setSuggestionsVsbl (true)} onBlur={() => setSuggestionsVsbl (false)} onKeyDown={handleKeyDown} /> 検索 新規 全体履歴 ヘルプ {/^\/wiki\/(?!new|changes)[^\/]+/.test (location.pathname) && <> 広場 履歴 編輯 }
) } }) ()} ) } export default TopNav