diff --git a/app/assets/javascripts/active_meetings.js b/app/assets/javascripts/active_meetings.js index ac656fe7..0427d015 100644 --- a/app/assets/javascripts/active_meetings.js +++ b/app/assets/javascripts/active_meetings.js @@ -1,3 +1,4 @@ +// Handles action cable events from bbb-webhooks and initial population of active meetings. MEETINGS = {} @@ -5,18 +6,19 @@ MEETINGS = {} if($('body').data('current-user')){ App.messages = App.cable.subscriptions.create('RefreshMeetingsChannel', { received: function(data) { - console.log(data) + console.log('Recieved ' + data['method'] + ' action for ' + data['meeting'] + '.') if(isPreviouslyJoined(data['meeting'])){ if(data['method'] == 'create'){ - // Create an empty meeting. MEETINGS[data['meeting']] = {'name': data['meeting'], 'participants': 0, 'moderators': 0} renderActiveMeeting(MEETINGS[data['meeting']]) + updatePreviousMeetings(); } else if(data['method'] == 'destroy'){ removeActiveMeeting(MEETINGS[data['meeting']]) + PreviousMeetings.append([data['meeting']]) delete MEETINGS[data['meeting']] } else if(data['method'] == 'join'){ handleUser(data, 1) @@ -29,6 +31,15 @@ if($('body').data('current-user')){ }); } +updatePreviousMeetings = function(){ + $("ul.previously-joined li").each(function(idx, li) { + previous_meeting = $(li); + if(Object.keys(MEETINGS).indexOf(previous_meeting.text()) > -1){ + previous_meeting.remove() + } + }); +} + handleUser = function(data, n){ if(data['role'] == 'MODERATOR'){ MEETINGS[data['meeting']]['moderators'] += n @@ -39,7 +50,7 @@ handleUser = function(data, n){ } updateMeetingText = function(meeting){ - $('#' + meeting['name']).html('' + meeting['name'] + ' (' + + $('#' + meeting['name'].replace(' ', '_')).html('' + meeting['name'] + ' (' + meeting['participants'] + ((meeting['participants'] == 1) ? ' user, ' : ' users, ') + meeting['moderators'] + ((meeting['moderators'] == 1) ? ' mod)' : ' mods)')) } @@ -57,9 +68,13 @@ initialPopulate = function(){ 'moderators': moderators} if(isPreviouslyJoined(name)){ renderActiveMeeting(MEETINGS[name]) - // remove it. } } + }).done(function(){ + // Remove from previous meetings if they are active. + updatePreviousMeetings(); + $('.hidden-list').show(); + $('.fa-spinner').hide(); }); } @@ -69,7 +84,7 @@ isPreviouslyJoined = function(meeting){ } renderActiveMeeting = function(m){ - var meeting_item = $('
  • ' + m['name'] + '' + + var meeting_item = $('
  • ' + m['name'] + '' + ' (' + m['participants'] + ' users, ' + m['moderators'] + ' mods)' + '
  • ') $('.actives').append(meeting_item); @@ -80,8 +95,7 @@ renderActiveMeeting = function(m){ } removeActiveMeeting = function(meeting){ - $('#' + meeting['name']).remove() - //$(".actives:contains('" + meeting['name'] + "')").remove() + $('#' + meeting['name'].replace(' ', '_')).remove() } // Directly join a meeting from active meetings. @@ -114,4 +128,4 @@ joinMeeting = function(meeting_name){ } } -if($('body').data('current-user')){ console.log('Populating active meetings.'); initialPopulate() } +if($('body').data('current-user')){ console.log('Populating active meetings.'); setTimeout(initialPopulate, 1250); } diff --git a/app/assets/stylesheets/main/landing.scss b/app/assets/stylesheets/main/landing.scss index d8a63cf8..53dc2a34 100644 --- a/app/assets/stylesheets/main/landing.scss +++ b/app/assets/stylesheets/main/landing.scss @@ -89,3 +89,8 @@ color: green; } } + +.fa-spinner { + width: 100%; + text-align: center; +} diff --git a/app/views/landing/_previously_joined.html.erb b/app/views/landing/_previously_joined.html.erb index ad404847..bede4087 100644 --- a/app/views/landing/_previously_joined.html.erb +++ b/app/views/landing/_previously_joined.html.erb @@ -16,14 +16,18 @@ <% if current_user %>