1
0
forked from Kieran/snort

refactor: revert LocalSearch

This commit is contained in:
Kieran 2024-01-25 20:07:43 +00:00
parent e72f779ab7
commit 9a220fafd5
Signed by: Kieran
GPG Key ID: DE71CEB3925BE941
3 changed files with 18 additions and 55 deletions

View File

@ -1,45 +0,0 @@
import { EventKind, RequestBuilder, TaggedNostrEvent } from "@snort/system";
import { useRequestBuilder } from "@snort/system-react";
import { useEffect, useMemo, useState } from "react";
import { Relay } from "@/Cache";
import { SearchRelays } from "@/Utils/Const";
import PageSpinner from "../PageSpinner";
import { TimelineFragment } from "./TimelineFragment";
export function LocalSearch({ term, kind }: { term: string; kind: EventKind }) {
const [frag, setFrag] = useState<TimelineFragment>();
const r = useMemo(() => {
const rb = new RequestBuilder("search");
rb.withFilter().search(term).kinds([kind]).relay(SearchRelays).limit(100);
return rb;
}, [term]);
useRequestBuilder(r);
useEffect(() => {
setFrag(undefined);
if (term) {
Relay.query([
"REQ",
"local-search",
{
kinds: [kind],
limit: 100,
search: term,
},
]).then(res => {
setFrag({
refTime: 0,
events: res as Array<TaggedNostrEvent>,
});
});
}
}, [term, kind]);
if (frag) {
return <TimelineFragment frag={frag} />;
}
return <PageSpinner />;
}

View File

@ -1,7 +1,6 @@
import "./Timeline.css"; import "./Timeline.css";
import { unixNow } from "@snort/shared"; import { socialGraphInstance, TaggedNostrEvent } from "@snort/system";
import { EventKind, socialGraphInstance, TaggedNostrEvent } from "@snort/system";
import { useCallback, useMemo, useState } from "react"; import { useCallback, useMemo, useState } from "react";
import { FormattedMessage } from "react-intl"; import { FormattedMessage } from "react-intl";
@ -50,20 +49,20 @@ const Timeline = (props: TimelineProps) => {
const followDistance = socialGraphInstance.getFollowDistance(a.pubkey); const followDistance = socialGraphInstance.getFollowDistance(a.pubkey);
return followDistance === props.followDistance; return followDistance === props.followDistance;
}; };
const a = [...nts.filter(a => a.kind !== EventKind.LiveEvent)]; return nts
return a
?.filter(a => (props.postsOnly ? !a.tags.some(b => b[0] === "e") : true)) ?.filter(a => (props.postsOnly ? !a.tags.some(b => b[0] === "e") : true))
.filter(a => props.ignoreModeration && checkFollowDistance(a)); .filter(a => props.ignoreModeration || checkFollowDistance(a));
}, },
[props.postsOnly, props.ignoreModeration, props.followDistance], [props.postsOnly, props.ignoreModeration, props.followDistance],
); );
const mainFeed = useMemo(() => { const mainFeed = useMemo(() => {
return filterPosts(feed.main ?? []); return filterPosts(feed.main ?? []);
}, [feed, filterPosts]); }, [feed.main, filterPosts]);
const latestFeed = useMemo(() => { const latestFeed = useMemo(() => {
return filterPosts(feed.latest ?? []).filter(a => !mainFeed.some(b => b.id === a.id)); return filterPosts(feed.latest ?? []).filter(a => !mainFeed.some(b => b.id === a.id));
}, [feed, filterPosts]); }, [feed.latest, feed.main, filterPosts]);
const latestAuthors = useMemo(() => { const latestAuthors = useMemo(() => {
return dedupeByPubkey(latestFeed).map(e => e.pubkey); return dedupeByPubkey(latestFeed).map(e => e.pubkey);
@ -87,7 +86,7 @@ const Timeline = (props: TimelineProps) => {
frags={[ frags={[
{ {
events: mainFeed, events: mainFeed,
refTime: mainFeed.at(0)?.created_at ?? unixNow(), refTime: 0,
}, },
]} ]}
latest={latestAuthors} latest={latestAuthors}

View File

@ -2,11 +2,12 @@ import { useEffect, useMemo, useState } from "react";
import { FormattedMessage, useIntl } from "react-intl"; import { FormattedMessage, useIntl } from "react-intl";
import { useNavigate, useParams } from "react-router-dom"; import { useNavigate, useParams } from "react-router-dom";
import { LocalSearch } from "@/Components/Feed/LocalSearch"; import Timeline from "@/Components/Feed/Timeline";
import TabSelectors, { Tab } from "@/Components/TabSelectors/TabSelectors"; import TabSelectors, { Tab } from "@/Components/TabSelectors/TabSelectors";
import TrendingNotes from "@/Components/Trending/TrendingPosts"; import TrendingNotes from "@/Components/Trending/TrendingPosts";
import TrendingUsers from "@/Components/Trending/TrendingUsers"; import TrendingUsers from "@/Components/Trending/TrendingUsers";
import FollowListBase from "@/Components/User/FollowListBase"; import FollowListBase from "@/Components/User/FollowListBase";
import { TimelineSubject } from "@/Feed/TimelineFeed";
import useProfileSearch from "@/Hooks/useProfileSearch"; import useProfileSearch from "@/Hooks/useProfileSearch";
import { debounce } from "@/Utils"; import { debounce } from "@/Utils";
@ -53,6 +54,14 @@ const SearchPage = () => {
return debounce(500, () => setKeyword(search)); return debounce(500, () => setKeyword(search));
}, [search]); }, [search]);
const searchTimeline = useMemo(() => {
return {
type: "post_keyword",
discriminator: keyword,
items: [keyword]
} as TimelineSubject;
}, [keyword]);
function tabContent() { function tabContent() {
if (tab.value === PROFILES) { if (tab.value === PROFILES) {
return <Profiles keyword={keyword} />; return <Profiles keyword={keyword} />;
@ -65,7 +74,7 @@ const SearchPage = () => {
return ( return (
<> <>
{sortOptions()} {sortOptions()}
<LocalSearch term={keyword} kind={1} /> <Timeline subject={searchTimeline} postsOnly={false} method="LIMIT_UNTIL" />
</> </>
); );
} }