snort/src/Pages/SearchPage.tsx

56 lines
1.7 KiB
TypeScript
Raw Normal View History

2023-01-24 12:33:18 +00:00
import { useParams } from "react-router-dom";
import Timeline from "Element/Timeline";
2023-01-28 15:40:19 +00:00
import { useEffect, useState } from "react";
import { debounce } from "Util";
import { router } from "index";
import { SearchRelays } from "Const";
import { System } from "Nostr/System";
2023-01-24 12:33:18 +00:00
const SearchPage = () => {
2023-01-28 15:40:19 +00:00
const params: any = useParams();
const [search, setSearch] = useState<string>();
const [keyword, setKeyword] = useState<string | undefined>(params.keyword);
useEffect(() => {
if (keyword) {
// "navigate" changing only url
router.navigate(`/search/${encodeURIComponent(keyword)}`)
}
}, [keyword]);
useEffect(() => {
return debounce(500, () => setKeyword(search));
}, [search]);
useEffect(() => {
let addedRelays: string[] = [];
for (let [k, v] of SearchRelays) {
if (!System.Sockets.has(k)) {
System.ConnectToRelay(k, v);
addedRelays.push(k);
}
}
return () => {
for (let r of addedRelays) {
System.DisconnectRelay(r);
}
}
}, []);
2023-01-24 12:33:18 +00:00
return (
2023-02-06 21:42:47 +00:00
<div className="main-content">
2023-01-28 15:40:19 +00:00
<h2>Search</h2>
<div className="flex mb10">
<input type="text" className="f-grow mr10" placeholder="Search.." value={search} onChange={e => setSearch(e.target.value)} />
</div>
2023-02-06 22:33:01 +00:00
{keyword && <Timeline
key={keyword}
subject={{ type: "keyword", items: [keyword], discriminator: keyword }}
postsOnly={false}
method={"TIME_RANGE"} />}
2023-02-06 21:42:47 +00:00
</div>
2023-01-24 12:33:18 +00:00
)
}
2023-02-06 21:42:47 +00:00
export default SearchPage;