import React, { useState, useEffect } from 'react'; import Dialog from '@mui/material/Dialog'; import DialogTitle from '@mui/material/DialogTitle'; import DialogContent from '@mui/material/DialogContent'; import TextField from '@mui/material/TextField'; import List from '@mui/material/List'; import ListItem from '@mui/material/ListItem'; import ListItemButton from '@mui/material/ListItemButton'; import ListItemAvatar from '@mui/material/ListItemAvatar'; import ListItemText from '@mui/material/ListItemText'; import Avatar from '@mui/material/Avatar'; import CircularProgress from '@mui/material/CircularProgress'; import Box from '@mui/material/Box'; import Typography from '@mui/material/Typography'; import { useQuery } from '@tanstack/react-query'; import { nextcloudApi } from '../../services/nextcloud'; interface NewChatDialogProps { open: boolean; onClose: () => void; onRoomCreated: (token: string) => void; } const NewChatDialog: React.FC = ({ open, onClose, onRoomCreated }) => { const [search, setSearch] = useState(''); const [creating, setCreating] = useState(false); // Reset state when dialog opens useEffect(() => { if (open) { setSearch(''); setCreating(false); } }, [open]); const { data: users, isLoading } = useQuery({ queryKey: ['nextcloud', 'users', search], queryFn: () => nextcloudApi.searchUsers(search), enabled: open && search.length >= 2, staleTime: 30_000, }); const handleSelect = async (userId: string, displayName: string) => { setCreating(true); try { const { token } = await nextcloudApi.createRoom(1, userId, displayName); onRoomCreated(token); onClose(); } catch { // ignore } finally { setCreating(false); } }; const handleClose = () => { setSearch(''); onClose(); }; return ( Neues Gespr\u00E4ch setSearch(e.target.value)} sx={{ mb: 1 }} /> {(isLoading || creating) && ( )} {!isLoading && !creating && search.length >= 2 && (!users || users.length === 0) && ( Keine Benutzer gefunden )} {!creating && users && users.length > 0 && ( {users.map((user) => ( handleSelect(user.id, user.label)}> {user.label.substring(0, 2).toUpperCase()} ))} )} ); }; export default NewChatDialog;