import { useIntl, FormattedMessage } from "react-intl"; import { useParams } from "react-router-dom"; import ProfilePreview from "Element/ProfilePreview"; import Timeline from "Element/Timeline"; import { useEffect, useState } from "react"; import { debounce } from "Util"; import { router } from "index"; import { SearchRelays } from "Const"; import { System } from "System"; import { MetadataCache } from "Cache"; import { UserCache } from "Cache/UserCache"; import TrendingUsers from "Element/TrendingUsers"; import messages from "./messages"; const SearchPage = () => { const params = useParams(); const { formatMessage } = useIntl(); const [search, setSearch] = useState(params.keyword); const [keyword, setKeyword] = useState(params.keyword); const [allUsers, setAllUsers] = useState(); useEffect(() => { if (keyword) { // "navigate" changing only url router.navigate(`/search/${encodeURIComponent(keyword)}`); UserCache.search(keyword).then(v => setAllUsers(v)); } else { router.navigate(`/search`); setAllUsers([]); } }, [keyword]); useEffect(() => { return debounce(500, () => setKeyword(search)); }, [search]); useEffect(() => { const addedRelays: string[] = []; for (const [k, v] of SearchRelays) { if (!System.Sockets.has(k)) { System.ConnectToRelay(k, v); addedRelays.push(k); } } return () => { for (const r of addedRelays) { System.DisconnectRelay(r); } }; }, []); return (

setSearch(e.target.value)} autoFocus={true} />
{!keyword && } {keyword && allUsers?.slice(0, 3).map(u => } className="card" pubkey={u.pubkey} />)} {keyword && ( )}
); }; export default SearchPage;