diff --git a/src/components/ChatViewer.tsx b/src/components/ChatViewer.tsx index 3d12ea2..20a5d3e 100644 --- a/src/components/ChatViewer.tsx +++ b/src/components/ChatViewer.tsx @@ -534,6 +534,9 @@ export function ChatViewer({ // Cleanup subscriptions when conversation changes or component unmounts useEffect(() => { + // Reset first batch flag when conversation changes + setHasLoadedFirstBatch(false); + return () => { if (conversation) { adapter.cleanup(conversation.id); @@ -547,6 +550,13 @@ export function ChatViewer({ [adapter, conversation], ); + // Track when first batch of messages has loaded + useEffect(() => { + if (messages && messages.length > 0 && !hasLoadedFirstBatch) { + setHasLoadedFirstBatch(true); + } + }, [messages, hasLoadedFirstBatch]); + // Process messages to include day markers const messagesWithMarkers = useMemo(() => { if (!messages || messages.length === 0) return []; @@ -588,6 +598,7 @@ export function ChatViewer({ // State for loading older messages const [isLoadingOlder, setIsLoadingOlder] = useState(false); const [hasMore, setHasMore] = useState(true); + const [hasLoadedFirstBatch, setHasLoadedFirstBatch] = useState(false); // Ref to Virtuoso for programmatic scrolling const virtuosoRef = useRef(null); @@ -998,6 +1009,7 @@ export function ChatViewer({ components={{ Header: () => hasMore && + hasLoadedFirstBatch && conversationResult.status === "success" && protocol !== "nip-10" ? (