diff --git a/src/static/rooms.js b/src/static/rooms.js index a1a4b4a..acf830b 100644 --- a/src/static/rooms.js +++ b/src/static/rooms.js @@ -6,14 +6,20 @@ let isSubscribedToRooms = false; // Show the public rooms browser function showPublicRoomsBrowser() { - document.getElementById('publicRoomsBrowser').style.display = 'block'; - loadPublicRoomsWebSocket(); - subscribeToPublicRooms(); + const browserElement = document.getElementById('publicRoomsBrowser'); + if (browserElement) { + browserElement.style.display = 'block'; + loadPublicRoomsWebSocket(); + subscribeToPublicRooms(); + } } // Close the public rooms browser function closePublicRoomsBrowser() { - document.getElementById('publicRoomsBrowser').style.display = 'none'; + const browserElement = document.getElementById('publicRoomsBrowser'); + if (browserElement) { + browserElement.style.display = 'none'; + } unsubscribeFromPublicRooms(); // Clear auto-refresh @@ -46,8 +52,11 @@ function loadPublicRoomsWebSocket() { try { showLoadingState(); - currentSortBy = document.getElementById('roomsSortSelect').value; - currentMinUsers = document.getElementById('minUsersFilter').value || 0; + const sortSelect = document.getElementById('roomsSortSelect'); + const minUsersFilter = document.getElementById('minUsersFilter'); + + currentSortBy = sortSelect ? sortSelect.value : 'activity'; + currentMinUsers = minUsersFilter ? (minUsersFilter.value || 0) : 0; if (typeof socket !== 'undefined' && socket !== null && socket.connected) { socket.emit('request_public_rooms', { @@ -71,8 +80,11 @@ async function loadPublicRoomsHTTP() { try { showLoadingState(); - const sortBy = document.getElementById('roomsSortSelect').value; - const minUsers = document.getElementById('minUsersFilter').value || 0; + const sortSelect = document.getElementById('roomsSortSelect'); + const minUsersFilter = document.getElementById('minUsersFilter'); + + const sortBy = sortSelect ? sortSelect.value : 'activity'; + const minUsers = minUsersFilter ? (minUsersFilter.value || 0) : 0; const response = await fetch(`/api/rooms/public?sort=${sortBy}&min_users=${minUsers}&limit=50`); @@ -84,10 +96,14 @@ async function loadPublicRoomsHTTP() { publicRoomsData = data.rooms || []; // Also load stats - const statsResponse = await fetch('/api/rooms/stats'); - if (statsResponse.ok) { - const stats = await statsResponse.json(); - updateStatsDisplay(stats); + try { + const statsResponse = await fetch('/api/rooms/stats'); + if (statsResponse.ok) { + const stats = await statsResponse.json(); + updateStatsDisplay(stats); + } + } catch (statsError) { + console.warn('Failed to load room stats:', statsError); } displayRooms(); @@ -106,8 +122,8 @@ function refreshPublicRooms() { // Update stats display function updateStatsDisplay(stats) { const statsElement = document.getElementById('roomsStats'); - if (statsElement) { - statsElement.textContent = `${stats.public_rooms} public rooms • ${stats.total_users} users online`; + if (statsElement && stats) { + statsElement.textContent = `${stats.public_rooms || 0} public rooms • ${stats.total_users || 0} users online`; } } @@ -149,7 +165,7 @@ function displayRooms() { if (roomsLoading) roomsLoading.style.display = 'none'; - if (publicRoomsData.length === 0) { + if (!publicRoomsData || publicRoomsData.length === 0) { if (roomsEmpty) roomsEmpty.style.display = 'flex'; if (roomsList) roomsList.style.display = 'none'; return; @@ -164,13 +180,15 @@ function displayRooms() { // Create room card HTML function createRoomCard(room) { - const activityClass = getActivityClass(room.minutes_since_activity); - const timeAgo = formatTimeAgo(room.minutes_since_activity); + if (!room) return ''; + + const activityClass = getActivityClass(room.minutes_since_activity || 0); + const timeAgo = formatTimeAgo(room.minutes_since_activity || 0); return ` -