document.addEventListener('DOMContentLoaded', function () { let currentRoomId = null; let lastMessageId = 0; let messagePollInterval = null; let roomPollInterval = null; let isFetchingMessages = false; const UI = { roomList: document.getElementById('room-list'), noChatSelected: document.getElementById('no-chat-selected'), chatHeader: document.getElementById('active-chat-header'), chatTitle: document.getElementById('active-chat-title'), chatHeaderInfo: document.getElementById('chat-header-info'), messages: document.getElementById('chat-messages'), inputArea: document.getElementById('chat-input-area'), form: document.getElementById('chat-form'), input: document.getElementById('chat-input'), indicator: document.getElementById('polling-indicator'), // 🟢 متغیرهای جدید برای Modal کاربران newChatBtn: document.getElementById('new-chat-btn'), usersModal: document.getElementById('users-modal'), closeModalBtn: document.getElementById('close-users-modal'), usersList: document.getElementById('users-list'), searchInput: document.getElementById('user-search-input') }; // ── منطق مودال کاربران ── if (UI.newChatBtn) { UI.newChatBtn.addEventListener('click', () => { UI.usersModal.style.transform = 'translateY(0)'; // نمایش مودال (بالا آمدن) fetchUsers(''); // لود اولیه لیست کاربران }); } if (UI.closeModalBtn) { UI.closeModalBtn.addEventListener('click', () => { UI.usersModal.style.transform = 'translateY(100%)'; // مخفی کردن مودال (پایین رفتن) }); } if (UI.searchInput) { let timeout = null; UI.searchInput.addEventListener('input', (e) => { clearTimeout(timeout); // دیباونس (Debounce) برای جلوگیری از ریکوئستهای تکراری timeout = setTimeout(() => { fetchUsers(e.target.value); }, 300); }); } async function fetchUsers(query) { UI.usersList.innerHTML = '
Failed to load users.
'; } } function renderUsers(users) { if (users.length === 0) { UI.usersList.innerHTML = 'No users found.
'; return; } UI.usersList.innerHTML = users.map(user => { const initial = user.name ? user.name.charAt(0).toUpperCase() : 'U'; // استفاده از کلاسهای room-item و room-avatar برای هماهنگی 100 درصدی return `No active chats found.
'; return; } UI.roomList.innerHTML = rooms.map(room => { const isActive = currentRoomId === room.id; const safeTitle = room.title.replace(/'/g, "\\'"); const initial = room.title ? room.title.charAt(0).toUpperCase() : 'G'; return `No messages yet. Start the conversation!