diff --git a/web/app/assets/javascripts/bandProfile.js b/web/app/assets/javascripts/bandProfile.js index 60c63f967..7551163e3 100644 --- a/web/app/assets/javascripts/bandProfile.js +++ b/web/app/assets/javascripts/bandProfile.js @@ -5,6 +5,7 @@ context.JK = context.JK || {}; context.JK.BandProfileScreen = function(app) { var logger = context.JK.logger; + var rest = context.JK.Rest(); var bandId; var isMember = false; var band = {}; @@ -59,7 +60,7 @@ configureBandFollowingButton(true); } else { - configureMemberFollowingButton(true); + configureMemberFollowingButton(true, id); } }, error: app.ajaxError @@ -350,7 +351,6 @@ } function bindPendingMembers() { - $("#band-profile-members").append("

Pending Band Invitations

"); var url = "/api/bands/" + bandId + "/musicians?pending=true"; $.ajax({ type: "GET", @@ -359,7 +359,10 @@ async: false, processData:false, success: function(response) { - bindMusicians(response); + if (response && response.length > 0) { + $("#band-profile-members").append("

Pending Band Invitations

"); + bindMusicians(response); + } }, error: app.ajaxError }); @@ -400,12 +403,34 @@ var following = isFollowingMember(musician.id); configureMemberFollowingButton(following, musician.id); + configureRemoveMemberButton(musician.id); + // TODO: wire up Friend button click handler // var friend = isFriend(musician.id); // configureMemberFriendButton(friend, musician.id); }); } + function configureRemoveMemberButton(userId) { + + var $divMember = $('div[user-id=' + userId + ']', '#band-profile-members'); + var $btnRemoveMember = $divMember.find('#btn-remove-member'); + if (isMember) { + $btnRemoveMember.show(); + $btnRemoveMember.unbind("click"); + $btnRemoveMember.click(function() { + rest.removeBandMember(bandId, userId) + .done(function() { + $divMember.remove(); + }) + .fail(app.ajaxError); + }); + } + else { + $btnRemoveMember.hide(); + } + } + // TODO: refactor // checks if person viewing the profile is also a band member function setIsMember() { @@ -441,12 +466,10 @@ if (isMember) { $("#btn-follow-band").hide(); - $("#btn-edit-band-members").show(); $("#btn-edit-band-profile").show(); } else { $("#btn-follow-band").show(); - $("#btn-edit-band-members").hide(); $("#btn-edit-band-profile").hide(); } diff --git a/web/app/assets/javascripts/jam_rest.js b/web/app/assets/javascripts/jam_rest.js index 648ced0ff..e2c44c86c 100644 --- a/web/app/assets/javascripts/jam_rest.js +++ b/web/app/assets/javascripts/jam_rest.js @@ -115,6 +115,17 @@ }); } + function removeBandMember(bandId, userId) { + var url = "/api/bands/" + bandId + "/musicians/" + userId; + return $.ajax({ + type: "DELETE", + dataType: "json", + url: url, + async: false, + processData:false + }); + } + function getSession(id) { var url = "/api/sessions/" + id; return $.ajax({ @@ -484,6 +495,7 @@ this.getBand = getBand; this.createBandInvitation = createBandInvitation; this.updateBandInvitation = updateBandInvitation; + this.removeBandMember = removeBandMember; return this; }; diff --git a/web/app/controllers/api_bands_controller.rb b/web/app/controllers/api_bands_controller.rb index b3ca1e623..ff9c09833 100644 --- a/web/app/controllers/api_bands_controller.rb +++ b/web/app/controllers/api_bands_controller.rb @@ -65,7 +65,9 @@ class ApiBandsController < ApiController def musician_destroy unless params[:id].blank? || params[:user_id].blank? + BandMusician.delete_all "(band_id = '#{params[:id]}' AND user_id = '#{params[:user_id]}')" end + render :json => {}, :status => 202 end ###################### FOLLOWERS ######################## diff --git a/web/app/views/clients/_bandProfile.html.erb b/web/app/views/clients/_bandProfile.html.erb index 04e40c750..12c321312 100644 --- a/web/app/views/clients/_bandProfile.html.erb +++ b/web/app/views/clients/_bandProfile.html.erb @@ -19,7 +19,6 @@
FOLLOW EDIT PROFILE - EDIT MEMBERS


@@ -92,6 +91,7 @@ {biography}

PROFILE   FOLLOW   + REMOVE MEMBER