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

View File

@ -2,11 +2,12 @@ import { useEffect, useMemo, useState } from "react";
import { FormattedMessage, useIntl } from "react-intl";
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 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";
@ -53,6 +54,14 @@ const SearchPage = () => {
return debounce(500, () => setKeyword(search));
}, [search]);
const searchTimeline = useMemo(() => {
return {
type: "post_keyword",
discriminator: keyword,
items: [keyword]
} as TimelineSubject;
}, [keyword]);
function tabContent() {
if (tab.value === PROFILES) {
return <Profiles keyword={keyword} />;
@ -65,7 +74,7 @@ const SearchPage = () => {
return (
<>
{sortOptions()}
<LocalSearch term={keyword} kind={1} />
<Timeline subject={searchTimeline} postsOnly={false} method="LIMIT_UNTIL" />
</>
);
}