import * as React from "react"; import { useVirtualizer } from "@tanstack/react-virtual"; import Switch from "./switch"; import ConversationModal from "../modal/conversation"; import CommunityModal from "../modal/community"; import { Loader2 } from "lucide-react"; import { useSession } from "@tensamin/storage/session"; export default function List() { const [category, setCategory] = React.useState< "conversations" | "communities" >("conversations"); const { contacts, communities } = useSession(); const items = category === "conversations" ? contacts : communities; const scrollRef = React.useRef(null); // TanStack Virtual is intentionally used here; React Compiler memoization is skipped. // eslint-disable-next-line react-hooks/incompatible-library const virtualizer = useVirtualizer({ count: items?.length || 0, estimateSize: () => 60, getScrollElement: () => scrollRef.current, }); return (
{items === null ? (

Loading...

) : null}
{items && virtualizer.getVirtualItems().map((virtualItem) => { const itemKey = `${category}-${virtualItem.index}`; return (
{category === "conversations" ? ( contacts?.[virtualItem.index] ? ( ) : null ) : communities?.[virtualItem.index] ? ( ) : null}
); })}
); }