From d309bfd472844e6580c87fcf93d574bb6151d820 Mon Sep 17 00:00:00 2001 From: Kieran Date: Tue, 18 Apr 2023 11:40:56 +0100 Subject: [PATCH] feat: Trending users @ghobs91 --- packages/app/src/Element/FollowButton.tsx | 6 +-- packages/app/src/Element/TrendingUsers.tsx | 52 ++++++++++++++++++++++ packages/app/src/Pages/SearchPage.tsx | 2 + 3 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 packages/app/src/Element/TrendingUsers.tsx diff --git a/packages/app/src/Element/FollowButton.tsx b/packages/app/src/Element/FollowButton.tsx index 25259f09..044f20e4 100644 --- a/packages/app/src/Element/FollowButton.tsx +++ b/packages/app/src/Element/FollowButton.tsx @@ -5,6 +5,7 @@ import { HexKey } from "@snort/nostr"; import useEventPublisher from "Feed/EventPublisher"; import { parseId } from "Util"; import useLogin from "Hooks/useLogin"; +import AsyncButton from "Element/AsyncButton"; import messages from "./messages"; @@ -37,11 +38,10 @@ export default function FollowButton(props: FollowButtonProps) { } return ( - + ); } diff --git a/packages/app/src/Element/TrendingUsers.tsx b/packages/app/src/Element/TrendingUsers.tsx new file mode 100644 index 00000000..c1fb0d66 --- /dev/null +++ b/packages/app/src/Element/TrendingUsers.tsx @@ -0,0 +1,52 @@ +import { useEffect, useState } from "react"; +import { HexKey } from "@snort/nostr"; +import { FormattedMessage } from "react-intl"; + +import FollowListBase from "Element/FollowListBase"; +import PageSpinner from "Element/PageSpinner"; + +interface TrendingUser { + pubkey: HexKey; +} + +interface TrendingUserResponse { + profiles: Array; +} + +async function fetchTrendingUsers() { + try { + const res = await fetch(`https://api.nostr.band/v0/trending/profiles`); + if (res.ok) { + const data = (await res.json()) as TrendingUserResponse; + return data.profiles.map(a => a.pubkey); + } + } catch (e) { + console.warn(`Failed to load link preview`); + } +} + +const TrendingUsers = () => { + const [userList, setUserList] = useState(); + + useEffect(() => { + (async () => { + const data = await fetchTrendingUsers(); + if (data) { + setUserList(data); + } + })(); + }, []); + + if (!userList) return ; + + return ( + <> +

+ +

+ + + ); +}; + +export default TrendingUsers; diff --git a/packages/app/src/Pages/SearchPage.tsx b/packages/app/src/Pages/SearchPage.tsx index 464ecab6..4f4361d4 100644 --- a/packages/app/src/Pages/SearchPage.tsx +++ b/packages/app/src/Pages/SearchPage.tsx @@ -9,6 +9,7 @@ import { SearchRelays } from "Const"; import { System } from "System"; import { MetadataCache } from "Cache"; import { UserCache } from "Cache/UserCache"; +import TrendingUsers from "Element/TrendingUsers"; import messages from "./messages"; @@ -64,6 +65,7 @@ const SearchPage = () => { autoFocus={true} /> + {!keyword && } {keyword && allUsers?.slice(0, 3).map(u => } className="card" pubkey={u.pubkey} />)} {keyword && (