import React from 'react'; import Box from '@mui/material/Box'; import Typography from '@mui/material/Typography'; import IconButton from '@mui/material/IconButton'; import Tooltip from '@mui/material/Tooltip'; import { Link, useNavigate } from 'react-router-dom'; import { useQueryClient } from '@tanstack/react-query'; import { Settings } from '@mui/icons-material'; import DashboardLayout from '../components/dashboard/DashboardLayout'; import { useChat } from '../contexts/ChatContext'; import { usePermissionContext } from '../contexts/PermissionContext'; import { nextcloudApi } from '../services/nextcloud'; import { notificationsApi } from '../services/notifications'; import ChatRoomList from '../components/chat/ChatRoomList'; import ChatMessageView from '../components/chat/ChatMessageView'; const ChatContent: React.FC = () => { const { rooms, selectedRoomToken, connected } = useChat(); const { hasPermission } = usePermissionContext(); const navigate = useNavigate(); const queryClient = useQueryClient(); const markedRoomsRef = React.useRef(new Set()); // Dismiss nextcloud_talk notifications when on this page React.useEffect(() => { notificationsApi.dismissByType('nextcloud_talk').then(() => { queryClient.invalidateQueries({ queryKey: ['notifications'] }); queryClient.invalidateQueries({ queryKey: ['unreadNotificationCount'] }); }).catch(() => {}); }, [queryClient]); // Mark unread rooms as read when rooms data updates React.useEffect(() => { const unread = rooms.filter( (r) => r.unreadMessages > 0 && !markedRoomsRef.current.has(r.token), ); if (unread.length === 0) return; unread.forEach((r) => markedRoomsRef.current.add(r.token)); Promise.allSettled(unread.map((r) => nextcloudApi.markAsRead(r.token))).then(() => { queryClient.invalidateQueries({ queryKey: ['nextcloud', 'rooms'] }); }); }, [rooms, queryClient]); // Mark selected room as read when a conversation is opened React.useEffect(() => { if (!selectedRoomToken) return; nextcloudApi.markAsRead(selectedRoomToken).then(() => { queryClient.invalidateQueries({ queryKey: ['nextcloud', 'rooms'] }); }).catch(() => {}); }, [selectedRoomToken, queryClient]); return ( {hasPermission('nextcloud:configure') && ( navigate('/admin/settings?tab=1&subtab=nextcloud')}> )} {!connected ? ( Nextcloud nicht verbunden. Bitte verbinden Sie sich in den{' '} Einstellungen. ) : ( <> {selectedRoomToken ? ( ) : ( Wähle ein Gespräch aus, um zu beginnen. )} )} ); }; const ChatPage: React.FC = () => { return ( ); }; export default ChatPage;