diff --git a/packages/app/src/Components/Textarea/Textarea.tsx b/packages/app/src/Components/Textarea/Textarea.tsx index 4f1325558..92e094448 100644 --- a/packages/app/src/Components/Textarea/Textarea.tsx +++ b/packages/app/src/Components/Textarea/Textarea.tsx @@ -9,7 +9,7 @@ import TextareaAutosize from "react-textarea-autosize"; import Avatar from "@/Components/User/Avatar"; import Nip05 from "@/Components/User/Nip05"; import { FuzzySearchResult } from "@/Db/FuzzySearch"; -import { userSearch } from "@/Hooks/useProfileSearch"; +import useProfileSearch from "@/Hooks/useProfileSearch"; import searchEmoji from "@/Utils/emoji-search"; import messages from "../messages"; @@ -58,6 +58,7 @@ interface TextareaProps { const Textarea = (props: TextareaProps) => { const { formatMessage } = useIntl(); + const userSearch = useProfileSearch(); const userDataProvider = (token: string) => { return userSearch(token).slice(0, 10); diff --git a/packages/app/src/Hooks/useProfileSearch.tsx b/packages/app/src/Hooks/useProfileSearch.tsx index 45a4902da..50b8b6ba1 100644 --- a/packages/app/src/Hooks/useProfileSearch.tsx +++ b/packages/app/src/Hooks/useProfileSearch.tsx @@ -1,13 +1,13 @@ import fuzzySearch from "@/Db/FuzzySearch"; -import useWoT from "./useWoT"; +import useWoT, { WoT } from "./useWoT"; -export default function useProfileSearch(search: string | undefined) { - return userSearch(search); +export default function useProfileSearch() { + const wot = useWoT(); + return (search: string | undefined) => userSearch(wot, search); } -export function userSearch(search: string | undefined) { - const wot = useWoT(); +function userSearch(wot: WoT, search: string | undefined) { const searchString = search?.trim() ?? ""; const fuseResults = (searchString?.length ?? 0) > 0 ? fuzzySearch.search(searchString) : []; diff --git a/packages/app/src/Hooks/useWoT.ts b/packages/app/src/Hooks/useWoT.ts index a7122ca88..4bc2f831a 100644 --- a/packages/app/src/Hooks/useWoT.ts +++ b/packages/app/src/Hooks/useWoT.ts @@ -1,28 +1,29 @@ -import { TaggedNostrEvent } from "@snort/system"; +import { SystemInterface, TaggedNostrEvent } from "@snort/system"; import { SnortContext } from "@snort/system-react"; import { useContext, useMemo } from "react"; +export interface WoT { + sortEvents: (events: Array) => Array; + sortPubkeys: (events: Array) => Array; + followDistance: (pk: string) => number; + followedByCount: (pk: string) => number; + followedBy: (pk: string) => Set; +} + +function wotOnSystem(system: SystemInterface) { + const sgi = system.config.socialGraphInstance; + return { + sortEvents: (events: Array) => + events.sort((a, b) => sgi.getFollowDistance(a.pubkey) - sgi.getFollowDistance(b.pubkey)), + sortPubkeys: (events: Array) => events.sort((a, b) => sgi.getFollowDistance(a) - sgi.getFollowDistance(b)), + followDistance: (pk: string) => sgi.getFollowDistance(pk), + followedByCount: (pk: string) => sgi.followedByFriendsCount(pk), + followedBy: (pk: string) => sgi.followedByFriends(pk), + instance: sgi, + }; +} + export default function useWoT() { const system = useContext(SnortContext); - return useMemo( - () => ({ - sortEvents: (events: Array) => - events.sort( - (a, b) => - system.config.socialGraphInstance.getFollowDistance(a.pubkey) - - system.config.socialGraphInstance.getFollowDistance(b.pubkey), - ), - sortPubkeys: (events: Array) => - events.sort( - (a, b) => - system.config.socialGraphInstance.getFollowDistance(a) - - system.config.socialGraphInstance.getFollowDistance(b), - ), - followDistance: (pk: string) => system.config.socialGraphInstance.getFollowDistance(pk), - followedByCount: (pk: string) => system.config.socialGraphInstance.followedByFriendsCount(pk), - followedBy: (pk: string) => system.config.socialGraphInstance.followedByFriends(pk), - instance: system.config.socialGraphInstance, - }), - [system.config.socialGraphInstance], - ); + return useMemo(() => wotOnSystem(system), [system]); }