import { commands } from "@/commands.gen"; import { Spinner } from "@/components"; import { User } from "@/components/user"; import * as ScrollArea from "@radix-ui/react-scroll-area"; import { useQuery } from "@tanstack/react-query"; import { createFileRoute } from "@tanstack/react-router"; import { message } from "@tauri-apps/plugin-dialog"; import { fetch } from "@tauri-apps/plugin-http"; import { useRef, useState, useTransition } from "react"; import { Virtualizer } from "virtua"; export const Route = createFileRoute("/columns/_layout/create-newsfeed/users")({ component: Screen, }); interface Trending { profiles: Array<{ pubkey: string }>; } function Screen() { const { redirect, label, account } = Route.useSearch(); const { queryClient } = Route.useRouteContext(); const { isLoading, isError, data } = useQuery({ queryKey: ["trending-users"], queryFn: async ({ signal }) => { const res = await fetch("https://api.nostr.band/v0/trending/profiles", { signal, }); if (res.status !== 200) { throw new Error("Error."); } const data: Trending = await res.json(); const users = data.profiles.map((item) => item.pubkey); return users; }, refetchOnWindowFocus: false, }); const navigate = Route.useNavigate(); const ref = useRef(null); const [follows, setFollows] = useState([]); const [isPending, startTransition] = useTransition(); const toggleFollow = (pubkey: string) => { setFollows((prev) => prev.includes(pubkey) ? prev.filter((i) => i !== pubkey) : [...prev, pubkey], ); }; const submit = () => { startTransition(async () => { const res = await commands.setContactList(follows); if (res.status === "ok") { await queryClient.invalidateQueries({ queryKey: [label, account] }); navigate({ to: redirect }); } else { await message(res.error, { kind: "error" }); return; } }); }; return (
{isLoading ? (
Loading...
) : isError ? (
Error.
) : ( data?.map((item) => (
)) )}
); }