import { useEffect, useMemo, useState } from "react"; import { useIntl } from "react-intl"; import { useNavigate, useParams } from "react-router-dom"; import Timeline from "@/Components/Feed/Timeline"; import TabSelectors, { Tab } from "@/Components/TabSelectors/TabSelectors"; import TrendingNotes from "@/Components/Trending/TrendingPosts"; import TrendingUsers from "@/Components/Trending/TrendingUsers"; import FollowListBase from "@/Components/User/FollowListBase"; import { TimelineSubject } from "@/Feed/TimelineFeed"; import useProfileSearch from "@/Hooks/useProfileSearch"; import { debounce } from "@/Utils"; const NOTES = 0; const PROFILES = 1; const Profiles = ({ keyword }: { keyword: string }) => { const searchFn = useProfileSearch(); const results = useMemo(() => searchFn(keyword), [keyword, searchFn]); const ids = useMemo(() => results.map(r => r.pubkey), [results]); const content = keyword ? ( ) : ( ); return
{content}
; }; const SearchPage = () => { const params = useParams(); const { formatMessage } = useIntl(); const [search, setSearch] = useState(params.keyword ?? ""); const [keyword, setKeyword] = useState(params.keyword ?? ""); // tabs const SearchTab = [ { text: formatMessage({ defaultMessage: "Notes", id: "7+Domh" }), value: NOTES }, { text: formatMessage({ defaultMessage: "People", id: "Tpy00S" }), value: PROFILES }, ]; const [tab, setTab] = useState(SearchTab[0]); const navigate = useNavigate(); useEffect(() => { if (keyword === params.keyword) return; if (keyword) { // "navigate" changing only url navigate(`/search/${encodeURIComponent(keyword)}`); } else { navigate(`/search`); } }, [keyword]); useEffect(() => { setKeyword(params.keyword ?? ""); setSearch(params.keyword ?? ""); // Also update the search input field }, [params.keyword]); useEffect(() => { return debounce(500, () => setKeyword(search)); }, [search]); const subject = useMemo(() => { return { type: "post_keyword", items: [keyword], discriminator: keyword, } as TimelineSubject; }, [keyword]); function tabContent() { if (tab.value === PROFILES) { return ; } if (!keyword) { return ; } return ; } return (
setSearch(e.target.value)} />
{tabContent()}
); }; export default SearchPage;