From 7555d8b65a28775d080191e69ee88edecc8fba30 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Wed, 16 Jul 2014 01:20:59 -0400 Subject: [PATCH] VRFS-1892 refresh only the affected session row when updating RSVPs --- .../javascripts/dialog/rsvpSubmitDialog.js | 36 +++++++------ web/app/assets/javascripts/findSession.js | 5 -- web/app/assets/javascripts/globals.js | 1 + web/app/assets/javascripts/sessionList.js | 51 ++++++++++++------- .../assets/javascripts/web/session_info.js | 4 +- 5 files changed, 55 insertions(+), 42 deletions(-) diff --git a/web/app/assets/javascripts/dialog/rsvpSubmitDialog.js b/web/app/assets/javascripts/dialog/rsvpSubmitDialog.js index a473ca89d..228b0077f 100644 --- a/web/app/assets/javascripts/dialog/rsvpSubmitDialog.js +++ b/web/app/assets/javascripts/dialog/rsvpSubmitDialog.js @@ -3,32 +3,33 @@ "use strict"; context.JK = context.JK || {}; context.JK.RsvpSubmitDialog = function(app, sessionId) { + var EVENTS = context.JK.EVENTS; var logger = context.JK.logger; var rest = context.JK.Rest(); - var $screen = null; + var $dialog = null; var dialogId = 'rsvp-submit-dialog'; var $btnSubmit = $("#btnSubmitRsvp"); function beforeShow(data) { - $('.error', $screen).hide(); + $('.error', $dialog).hide(); } function afterShow(data) { - $('.rsvp-instruments', $screen).empty(); + $('.rsvp-instruments', $dialog).empty(); rest.getSessionHistory(sessionId) .done(function(response) { if (response) { - $('.session-name', $screen).html(response.name); + $('.session-name', $dialog).html(response.name); - $('.scheduled-start', $screen).html(response.pretty_scheduled_start_with_timezone); + $('.scheduled-start', $dialog).html(response.pretty_scheduled_start_with_timezone); if (response.recurring_mode !== null && response.recurring_mode === 'weekly') { - $('.schedule-recurrence', $screen).html("Recurs " + response.recurring_mode + " on this day at this time"); + $('.schedule-recurrence', $dialog).html("Recurs " + response.recurring_mode + " on this day at this time"); } if (response['is_unstructured_rsvp?']) { - $('.rsvp-instruments', $screen).append('Any Instrument
'); + $('.rsvp-instruments', $dialog).append('Any Instrument
'); } if (response.open_slots && response.open_slots.length > 0) { @@ -36,7 +37,7 @@ var instrument = val.instrument_id; var instrumentTitleCase = context.JK.toTitleCase(instrument); - $('.rsvp-instruments', $screen).append('' + instrumentTitleCase + "
"); + $('.rsvp-instruments', $dialog).append('' + instrumentTitleCase + "
"); }); } } @@ -55,20 +56,23 @@ $btnSubmit.unbind('click'); $btnSubmit.click(function(e) { e.preventDefault(); + var slotIds = []; $("input:checked", '.rsvp-instruments').each(function(index) { slotIds.push($(this).val()); }); if (slotIds.length === 0) { - $('.error', $screen).show(); + $('.error', $dialog).show(); return; } var error = false; + + // TODO: show spinner?? rest.submitRsvpRequest(sessionId, slotIds) .done(function(response) { - var comment = $.trim($('.txtComment', $screen).val()); + var comment = $.trim($('.txtComment', $dialog).val()); if (comment.length > 0) { rest.addSessionInfoComment(sessionId, comment) .done(function(response) { @@ -76,20 +80,20 @@ }) .fail(function(xhr, textStatus, errorMessage) { error = true; - $('.error', $screen).html("Unexpected error occurred while saving message (" + xhr.status + ")"); - $('.error', $screen).show(); + $('.error', $dialog).html("Unexpected error occurred while saving message (" + xhr.status + ")"); + $('.error', $dialog).show(); }); } if (!error) { + $dialog.triggerHandler(EVENTS.RSVP_SUBMITTED); app.layout.closeDialog(dialogId); - $btnSubmit.trigger("rsvpSubmitEvent"); } }) .fail(function(xhr, textStatus, errorMessage) { var error = JSON.parse(xhr.responseText); - $('.error', $screen).html(error.message); - $('.error', $screen).show(); + $('.error', $dialog).html(error.message); + $('.error', $dialog).show(); }); return false; @@ -106,7 +110,7 @@ app.bindDialog(dialogId, dialogBindings); - $screen = $('[layout-id="' + dialogId + '"]'); + $dialog = $('[layout-id="' + dialogId + '"]'); events(); } diff --git a/web/app/assets/javascripts/findSession.js b/web/app/assets/javascripts/findSession.js index 36207bfd0..e5b9c417b 100644 --- a/web/app/assets/javascripts/findSession.js +++ b/web/app/assets/javascripts/findSession.js @@ -324,11 +324,6 @@ }); $('#btn-refresh').on("click", search); - - // this event is raised by the RSVP submit dialog after submitting an RSVP request - $(document).on("rsvpSubmitEvent", function() { - $('#btn-refresh').trigger('click'); - }); } function initialize() { diff --git a/web/app/assets/javascripts/globals.js b/web/app/assets/javascripts/globals.js index 23e560f8e..087e0213d 100644 --- a/web/app/assets/javascripts/globals.js +++ b/web/app/assets/javascripts/globals.js @@ -31,6 +31,7 @@ DIALOG_CLOSED : 'dialog_closed', SHOW_SIGNUP : 'show_signup', SHOW_SIGNIN : 'show_signin', + RSVP_SUBMITTED: 'rsvp_submitted', RSVP_CANCELED : 'rsvp_canceled' } diff --git a/web/app/assets/javascripts/sessionList.js b/web/app/assets/javascripts/sessionList.js index afe67acf9..b471e5a1f 100644 --- a/web/app/assets/javascripts/sessionList.js +++ b/web/app/assets/javascripts/sessionList.js @@ -127,7 +127,7 @@ } } - function renderInactiveSession(session, tbGroup) { + function renderInactiveSession(session, tbGroup, $rowToUpdate) { var openSlots = false; var hasInvitation = false; @@ -188,40 +188,36 @@ var showRsvpLink = true; var noLinkText = ''; - if(approvedRsvpId) { + if (approvedRsvpId) { showRsvpLink = false; noLinkText = $('You have been confirmed for this session. Cancel'); noLinkText.find('a').click(function() { - var rsvpCancelDlg = new context.JK.RsvpCancelDialog(app, session.id, approvedRsvpId); - rsvpCancelDlg.initialize(); - app.layout.showDialog('rsvp-cancel-dialog') + ui.launchRsvpCancelDialog(session.id, approvedRsvpId) .one(EVENTS.RSVP_CANCELED, function() { // VRFS-1891 }) .one(EVENTS.DIALOG_CLOSED, function() { $(this).unbind(EVENTS.RSVP_CANCELED); }); - return false; + return false; }); } - else if(pendingRsvpId) { + else if (pendingRsvpId) { showRsvpLink = false; noLinkText = $('You have RSVP\'ed to this session. Cancel'); noLinkText.find('a').click(function() { - var rsvpCancelDlg = new context.JK.RsvpCancelDialog(app, session.id, pendingRsvpId); - rsvpCancelDlg.initialize(); - app.layout.showDialog('rsvp-cancel-dialog') + ui.launchRsvpCancelDialog(session.id, pendingRsvpId) .one(EVENTS.RSVP_CANCELED, function() { // VRFS-1891 }) .one(EVENTS.DIALOG_CLOSED, function() { $(this).unbind(EVENTS.RSVP_CANCELED); }); - return false; + return false; }); } - else if(!openSlots) { - showRsvpLink = false + else if (!openSlots) { + showRsvpLink = false; noLinkText = 'No more openings in this session.'; } else if (!openRsvps && !hasInvitation) { @@ -229,8 +225,6 @@ noLinkText = 'You need an invitation to RSVP to this session.'; } - - // notation files if (session.music_notations) { for (i=0; i < session.music_notations.length; i++) { @@ -239,19 +233,38 @@ } var sessionVals = buildSessionObject(session, notationFileHtml, rsvpUsersHtml, openSlotsHtml, latencyHtml); - sessionVals.scheduled_start = session.pretty_scheduled_start_with_timezone; - sessionVals.rsvp_link_display_style = showRsvpLink ? "block" : "none"; var row = context.JK.fillTemplate($inactiveSessionTemplate.html(), sessionVals); - $(tbGroup).append(row); + + // initial page load + if (!$rowToUpdate) { + $(tbGroup).append(row); + } + // inline update after an RSVP submission / cancellation + else { + $rowToUpdate.replaceWith(row); + } + var $parentRow = $('tr[data-session-id=' + session.id + ']', tbGroup); + if (showRsvpLink) { + $('.rsvp-msg', $parentRow).hide(); var $parentRow = $('tr[data-session-id=' + session.id + ']', tbGroup); + $('.rsvp-link', $parentRow).click(function(evt) { - ui.launchRsvpSubmitDialog(session.id); + ui.launchRsvpSubmitDialog(session.id) + .one(EVENTS.RSVP_SUBMITTED, function() { + rest.getSessionHistory(session.id) + .done(function(response) { + renderInactiveSession(response, tbGroup, $parentRow); + }); + }) + .one(EVENTS.DIALOG_CLOSED, function() { + $(this).unbind(EVENTS.RSVP_SUBMITTED); + }); return false; }); } diff --git a/web/app/assets/javascripts/web/session_info.js b/web/app/assets/javascripts/web/session_info.js index f26e1e878..b08a9d406 100644 --- a/web/app/assets/javascripts/web/session_info.js +++ b/web/app/assets/javascripts/web/session_info.js @@ -201,11 +201,11 @@ addLatencyDetails(); - $(document).on("rsvpSubmitEvent", function() { + $(document).on(EVENTS.RSVP_SUBMITTED, function() { location.reload(); }); - $(document).on("rsvpCancelEvent", function() { + $(document).on(EVENTS.RSVP_CANCELED, function() { location.reload(); }); }