import SvgIcon from '@/components/SvgIcon' import useScroll from '@/hooks/useScroll' import useUser from '@/hooks/useUser' import { resizeImage } from '@/utils/common' const NavigationButtons = () => { const navigate = useNavigate() enum ACTION { BACK = 'back', FORWARD = 'forward', } const handleNavigate = (action: ACTION) => { if (action === ACTION.BACK) navigate(-1) if (action === ACTION.FORWARD) navigate(1) } return (
{[ACTION.BACK, ACTION.FORWARD].map(action => (
handleNavigate(action)} key={action} className='app-region-no-drag btn-hover-animation rounded-lg p-2 text-gray-500 transition duration-300 after:rounded-full after:bg-black/[.06] hover:text-gray-900 dark:text-gray-300 dark:after:bg-white/10 dark:hover:text-gray-200' >
))}
) } const SearchBox = () => { const { type } = useParams() const [keywords, setKeywords] = useState('') const navigate = useNavigate() const toSearch = (e: React.KeyboardEvent) => { if (!keywords) return if (e.key === 'Enter') { navigate(`/search/${keywords}${type ? `/${type}` : ''}`) } } return (
setKeywords(e.target.value)} onKeyDown={toSearch} type='text' className='flex-grow bg-transparent placeholder:text-gray-500 dark:text-white dark:placeholder:text-gray-400' placeholder='搜索' />
setKeywords('')} className={classNames( 'cursor-default rounded-full p-1 text-gray-600 transition hover:bg-gray-400/20 dark:text-white/50 dark:hover:bg-white/20', !keywords && 'hidden' )} >
) } const Settings = () => { return (
) } const Avatar = () => { const navigate = useNavigate() const { data: user } = useUser() const avatarUrl = resizeImage(user?.profile?.avatarUrl ?? '', 'sm') return ( navigate('/login')} className='app-region-no-drag h-9 w-9 rounded-full bg-gray-100 dark:bg-gray-700' /> //
navigate('/login')}> // //
) } const Topbar = () => { /** * Show topbar background when scroll down */ const [mainContainer, setMainContainer] = useState(null) const scroll = useScroll(mainContainer, { throttle: 100 }) useEffect(() => { setMainContainer(document.getElementById('mainContainer')) }, [setMainContainer]) return (
) } export default Topbar