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 (
}
>
{(events) => events.map((event) => renderItem(event))}
);
}