import { useCallback, useEffect, useRef, useState } from 'react'; import { useAccountComment } from '@plebbit/plebbit-react-hooks'; import { Link, useLocation, useNavigate, useParams } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { isAllView, isCatalogView, isSubscriptionsView } from '../../lib/utils/view-utils'; import styles from './topbar.module.css'; import useDefaultSubplebbits, { categorizeSubplebbits, useDefaultSubplebbitAddresses } from '../../hooks/use-default-subplebbits'; import _, { debounce } from 'lodash'; import { TimeFilter } from '../board-buttons'; const SearchBar = ({ setShowSearchBar }: { setShowSearchBar: (show: boolean) => void }) => { const navigate = useNavigate(); const searchBarRef = useRef(null); const searchInputRef = useRef(null); const placeholder = `"community.eth/.sol" / "12D3KooW..."`; useEffect(() => { searchInputRef.current?.focus(); }, []); const handleClickOutside = useCallback( (event: MouseEvent) => { if (searchBarRef.current && !searchBarRef.current.contains(event.target as Node)) { setShowSearchBar(false); } }, [searchBarRef, setShowSearchBar], ); useEffect(() => { document.addEventListener('mousedown', handleClickOutside); return () => { document.removeEventListener('mousedown', handleClickOutside); }; }, [handleClickOutside]); const handleSearchSubmit = (event: React.FormEvent) => { event.preventDefault(); const searchInput = searchInputRef.current?.value; if (searchInput) { searchInputRef.current.value = ''; navigate(`/p/${searchInput}`); setShowSearchBar(false); } }; return (
); }; const TopBarDesktop = () => { const { t } = useTranslation(); const location = useLocation(); const params = useParams(); const isInCatalogView = isCatalogView(location.pathname, params); const subplebbits = useDefaultSubplebbits(); const [showSearchBar, setShowSearchBar] = useState(false); const { plebbitSubs, interestsSubs, randomSubs, internationalSubs, projectsSubs } = categorizeSubplebbits(subplebbits); const renderSubplebbits = (subplebbits: any) => { return subplebbits.map((sub: any, index: any) => ( {index === 0 ? null : ' '} {sub.address.includes('.') ? sub.address : sub.address.slice(0, 10).concat('...')} {index !== subplebbits.length - 1 ? ' /' : null} )); }; return (
[all / subscriptions]{' '} {subplebbits && ( <> [{renderSubplebbits(plebbitSubs)}] [{renderSubplebbits(projectsSubs)}] [{renderSubplebbits(interestsSubs)}] [{renderSubplebbits(randomSubs)}] [ {renderSubplebbits(internationalSubs)}] [ { e.preventDefault(); alert('work in progress'); }} > Create ] [ { e.preventDefault(); alert('work in progress'); }} > Vote ] )} [{t('settings')}] [ setShowSearchBar(!showSearchBar)}>{t('search')}] [{t('home')}] {showSearchBar && }
); }; const TopBarMobile = ({ subplebbitAddress }: { subplebbitAddress: string }) => { const { t } = useTranslation(); const navigate = useNavigate(); const subplebbitAddresses = useDefaultSubplebbitAddresses(); const displaySubplebbitAddress = subplebbitAddress && subplebbitAddress.length > 30 ? subplebbitAddress.slice(0, 30).concat('...') : subplebbitAddress; const [showSearchBar, setShowSearchBar] = useState(false); const currentSubplebbitIsInList = subplebbitAddresses.some((address: string) => address === subplebbitAddress); const location = useLocation(); const params = useParams(); const isInAllView = isAllView(location.pathname, params); const isInCatalogView = isCatalogView(location.pathname, params); const isInSubscriptionsView = isSubscriptionsView(location.pathname, useParams()); const selectValue = isInAllView ? 'all' : isInSubscriptionsView ? 'subscriptions' : subplebbitAddress; const boardSelect = ( ); // navbar animation on scroll const [visible, setVisible] = useState(true); const prevScrollPosRef = useRef(0); useEffect(() => { const debouncedHandleScroll = debounce(() => { const currentScrollPos = window.scrollY; const prevScrollPos = prevScrollPosRef.current; setVisible(prevScrollPos > currentScrollPos || currentScrollPos < 10); prevScrollPosRef.current = currentScrollPos; }, 50); window.addEventListener('scroll', debouncedHandleScroll); return () => window.removeEventListener('scroll', debouncedHandleScroll); }, []); return ( ); }; const TopBar = () => { const params = useParams(); const accountComment = useAccountComment({ commentIndex: params?.accountCommentIndex as any }); const subplebbitAddress = params?.subplebbitAddress || accountComment?.subplebbitAddress; return ( <> ); }; export default TopBar;