resolve issues with new features

This commit is contained in:
Matthias Hochmeister
2026-03-12 18:36:22 +01:00
parent d1fed74f3b
commit 34f246af24
6 changed files with 30 additions and 23 deletions

View File

@@ -49,16 +49,20 @@ const ChatPanelInner: React.FC = () => {
// Mark unread rooms as read in Nextcloud whenever panel is open and rooms update
React.useEffect(() => {
if (!chatPanelOpen) return;
rooms.filter((r) => r.unreadMessages > 0).forEach((r) => {
nextcloudApi.markAsRead(r.token).catch(() => {});
const unread = rooms.filter((r) => r.unreadMessages > 0);
if (unread.length === 0) return;
Promise.allSettled(unread.map((r) => nextcloudApi.markAsRead(r.token))).then(() => {
queryClient.invalidateQueries({ queryKey: ['nextcloud', 'rooms'] });
});
}, [chatPanelOpen, rooms]);
}, [chatPanelOpen, rooms, queryClient]);
// Mark the selected room as read when a conversation is opened
React.useEffect(() => {
if (!selectedRoomToken) return;
nextcloudApi.markAsRead(selectedRoomToken).catch(() => {});
}, [selectedRoomToken]);
nextcloudApi.markAsRead(selectedRoomToken).then(() => {
queryClient.invalidateQueries({ queryKey: ['nextcloud', 'rooms'] });
}).catch(() => {});
}, [selectedRoomToken, queryClient]);
if (!chatPanelOpen) {
return (

View File

@@ -1,6 +1,6 @@
import { useState, useEffect } from 'react';
import { Box, Tabs, Tab, Typography } from '@mui/material';
import { Navigate, useSearchParams } from 'react-router-dom';
import { Navigate, useNavigate, useSearchParams } from 'react-router-dom';
import DashboardLayout from '../components/dashboard/DashboardLayout';
import ServiceManagerTab from '../components/admin/ServiceManagerTab';
import SystemHealthTab from '../components/admin/SystemHealthTab';
@@ -24,6 +24,7 @@ function TabPanel({ children, value, index }: TabPanelProps) {
const ADMIN_TAB_COUNT = 6;
function AdminDashboard() {
const navigate = useNavigate();
const [searchParams] = useSearchParams();
const [tab, setTab] = useState(() => {
const t = Number(searchParams.get('tab'));
@@ -47,7 +48,7 @@ function AdminDashboard() {
<Typography variant="h4" sx={{ mb: 3 }}>Administration</Typography>
<Box sx={{ borderBottom: 1, borderColor: 'divider' }}>
<Tabs value={tab} onChange={(_e, v) => setTab(v)}>
<Tabs value={tab} onChange={(_e, v) => { setTab(v); navigate(`/admin?tab=${v}`, { replace: true }); }}>
<Tab label="Services" />
<Tab label="System" />
<Tab label="Benutzer" />

View File

@@ -159,8 +159,8 @@ const UebersichtTab: React.FC<UebersichtTabProps> = ({ equipment, onStatusUpdate
await equipmentApi.updateStatus(equipment.id, payload);
setStatusDialogOpen(false);
onStatusUpdated();
} catch {
setSaveError('Status konnte nicht gespeichert werden.');
} catch (err: any) {
setSaveError(err?.response?.data?.message || 'Status konnte nicht gespeichert werden.');
} finally {
setSaving(false);
}

View File

@@ -153,8 +153,8 @@ const UebersichtTab: React.FC<UebersichtTabProps> = ({ vehicle, onStatusUpdated,
await vehiclesApi.updateStatus(vehicle.id, payload);
setStatusDialogOpen(false);
onStatusUpdated();
} catch {
setSaveError('Status konnte nicht gespeichert werden.');
} catch (err: any) {
setSaveError(err?.response?.data?.message || 'Status konnte nicht gespeichert werden.');
} finally {
setSaving(false);
}

View File

@@ -2158,7 +2158,7 @@ export default function Kalender() {
{/* Tabs */}
<Tabs
value={activeTab}
onChange={(_, v) => setActiveTab(v)}
onChange={(_, v) => { setActiveTab(v); navigate(`/kalender?tab=${v}`, { replace: true }); }}
sx={{ mb: 2, borderBottom: 1, borderColor: 'divider' }}
>
<Tab icon={<EventIcon />} iconPosition="start" label="Dienste & Veranstaltungen" />