/** * Модальное окно для создания нового чата */ 'use client'; import React, { useState, useEffect } from 'react'; import { Box, Typography, TextField, List, ListItemButton, ListItemText, Avatar, Dialog, DialogTitle, DialogContent, IconButton, CircularProgress } from '@mui/material'; import CloseRoundedIcon from '@mui/icons-material/CloseRounded'; import apiClient from '@/lib/api-client'; import { createChat } from '@/api/chat'; import { LoadingSpinner } from '../common/LoadingSpinner'; interface User { id: number; email: string; first_name?: string; last_name?: string; avatar_url?: string | null; role: string; } interface NewChatModalProps { isOpen: boolean; onClose: () => void; onChatCreated: (chat: any) => void; } export function NewChatModal({ isOpen, onClose, onChatCreated }: NewChatModalProps) { const [search, setSearch] = useState(''); const [users, setUsers] = useState([]); const [loading, setLoading] = useState(false); const [creating, setCreating] = useState(false); useEffect(() => { if (isOpen) { loadContacts(); } }, [isOpen, search]); const loadContacts = async () => { setLoading(true); try { const response = await apiClient.get(`/users/contacts/?search=${encodeURIComponent(search)}`); setUsers(response.data.results || response.data || []); } catch (error) { console.error('Failed to load contacts:', error); } finally { setLoading(false); } }; const handleCreateChat = async (userId: number) => { setCreating(userId as any); try { const response = await apiClient.post('/chat/chats/create_direct/', { user_id: userId }); const chat = response.data.data || response.data; onChatCreated(chat); onClose(); } catch (error) { console.error('Failed to create chat:', error); } finally { setCreating(false); } }; return ( Новый чат setSearch(e.target.value)} size="small" sx={{ mb: 2 }} /> {loading && users.length === 0 ? ( ) : users.length === 0 ? ( Контакты не найдены ) : ( {users.map((user) => ( handleCreateChat(user.id)} disabled={creating === (user.id as any)} sx={{ borderRadius: '12px', mb: 0.5 }} > {user.first_name?.[0] || user.email[0].toUpperCase()} {creating === (user.id as any) && } ))} )} ); }