import { useInfiniteQuery, type QueryFunctionContext } from "@tanstack/react-query" import type { Channel, MessageId } from "~/lib/api/types" import ChatMessage from "./chat-message" import MessageBox from "./message-box" import VisibleTrigger from "./visible-trigger" interface ChannelAreaProps { channel: Channel } export default function ChannelArea( { channel }: ChannelAreaProps ) { const channelId = channel.id const fetchMessages = async ({ pageParam }: QueryFunctionContext) => { return await import("~/lib/api/client/channel").then(m => m.default.paginatedMessages(channelId, 50, pageParam as MessageId | undefined)) } const { data, error, fetchNextPage, hasNextPage, isFetching, isFetchingNextPage, isPending, status, } = useInfiniteQuery({ queryKey: ["messages", channelId], initialPageParam: undefined, queryFn: fetchMessages, getNextPageParam: (lastPage) => lastPage.length < 50 ? undefined : lastPage[lastPage.length - 1]?.id, staleTime: Infinity, }) const fetchNextPageVisible = () => { if (!isFetchingNextPage && hasNextPage) fetchNextPage() } let messageArea = null if (isPending) { messageArea =