import { Box, Container, Spinner } from "@/components"; import { Conversation } from "@/components/conversation"; import { Quote } from "@/components/quote"; import { RepostNote } from "@/components/repost"; import { TextNote } from "@/components/text"; import { User } from "@/components/user"; import { type LumeEvent, NostrQuery } from "@/system"; import { Kind } from "@/types"; import { createFileRoute, defer } from "@tanstack/react-router"; import { Await } from "@tanstack/react-router"; import { Suspense, useCallback } from "react"; import { WindowVirtualizer } from "virtua"; export const Route = createFileRoute("/users/$id")({ beforeLoad: async () => { const settings = await NostrQuery.getUserSettings(); return { settings }; }, loader: async ({ params }) => { return { data: defer(NostrQuery.getUserEvents(params.id)) }; }, component: Screen, }); function Screen() { const { id } = Route.useParams(); const { data } = Route.useLoaderData(); const renderItem = useCallback( (event: LumeEvent) => { if (!event) return; switch (event.kind) { case Kind.Repost: return ; default: { if (event.isConversation) { return ( ); } if (event.isQuote) { return ; } return ; } } }, [data], ); return (

Latest notes

Loading...
} > {(events) => events.map((event) => renderItem(event))}
); }