fix: use isActive instead of chatPanelOpen in ChatMessageView so messages load on /chat page
This commit is contained in:
@@ -13,15 +13,13 @@ import CloseIcon from '@mui/icons-material/Close';
|
||||
import { useMutation, useQueryClient } from '@tanstack/react-query';
|
||||
import { nextcloudApi } from '../../services/nextcloud';
|
||||
import { useChat } from '../../contexts/ChatContext';
|
||||
import { useLayout } from '../../contexts/LayoutContext';
|
||||
import ChatMessage from './ChatMessage';
|
||||
import type { NextcloudMessage } from '../../types/nextcloud.types';
|
||||
|
||||
const LONG_POLL_TIMEOUT = 25;
|
||||
|
||||
const ChatMessageView: React.FC = () => {
|
||||
const { selectedRoomToken, selectRoom, rooms, loginName } = useChat();
|
||||
const { chatPanelOpen } = useLayout();
|
||||
const { selectedRoomToken, selectRoom, rooms, loginName, isActive } = useChat();
|
||||
const queryClient = useQueryClient();
|
||||
const messagesEndRef = useRef<HTMLDivElement>(null);
|
||||
const scrollContainerRef = useRef<HTMLDivElement>(null);
|
||||
@@ -56,7 +54,7 @@ const ChatMessageView: React.FC = () => {
|
||||
|
||||
// Initial fetch + long-poll loop for near-instant message delivery
|
||||
useEffect(() => {
|
||||
if (!selectedRoomToken || !chatPanelOpen) return;
|
||||
if (!selectedRoomToken || !isActive) return;
|
||||
|
||||
let cancelled = false;
|
||||
let currentAbort: AbortController | null = null;
|
||||
@@ -134,7 +132,7 @@ const ChatMessageView: React.FC = () => {
|
||||
cancelled = true;
|
||||
currentAbort?.abort();
|
||||
};
|
||||
}, [selectedRoomToken, chatPanelOpen, queryClient, fetchReactions]);
|
||||
}, [selectedRoomToken, isActive, queryClient, fetchReactions]);
|
||||
|
||||
const room = rooms.find((r) => r.token === selectedRoomToken);
|
||||
const isOneToOne = room?.type === 1;
|
||||
@@ -149,12 +147,12 @@ const ChatMessageView: React.FC = () => {
|
||||
|
||||
// Mark room as read when first opened
|
||||
useEffect(() => {
|
||||
if (selectedRoomToken && chatPanelOpen) {
|
||||
if (selectedRoomToken && isActive) {
|
||||
nextcloudApi.markAsRead(selectedRoomToken).then(() => {
|
||||
queryClient.invalidateQueries({ queryKey: ['nextcloud', 'rooms'] });
|
||||
}).catch(() => {});
|
||||
}
|
||||
}, [selectedRoomToken, chatPanelOpen, queryClient]);
|
||||
}, [selectedRoomToken, isActive, queryClient]);
|
||||
|
||||
// Smart scroll: instant on initial load, smooth only when user is near bottom
|
||||
useEffect(() => {
|
||||
|
||||
@@ -12,6 +12,7 @@ interface ChatContextType {
|
||||
selectRoom: (token: string | null) => void;
|
||||
connected: boolean;
|
||||
loginName: string | null;
|
||||
isActive: boolean;
|
||||
}
|
||||
|
||||
const ChatContext = createContext<ChatContextType | undefined>(undefined);
|
||||
@@ -119,6 +120,7 @@ export const ChatProvider: React.FC<ChatProviderProps> = ({ children }) => {
|
||||
selectRoom,
|
||||
connected,
|
||||
loginName,
|
||||
isActive,
|
||||
};
|
||||
|
||||
return <ChatContext.Provider value={value}>{children}</ChatContext.Provider>;
|
||||
|
||||
Reference in New Issue
Block a user