jam-cloud/web/app/assets/javascripts/acceptFriendRequestDialog.js

187 lines
5.4 KiB
JavaScript

(function(context,$) {
"use strict";
context.JK = context.JK || {};
context.JK.AcceptFriendRequestDialog = function(app) {
var logger = context.JK.logger;
var rest = context.JK.Rest();
var $dialog = null;
var $dialogContents = null;
var $notFriendsTemplate = null;
var $alreadyFriendsTemplate = null;
var $genericErrorTemplate = null;
var $alreadyProcessedTemplate = null;
var $acceptBtn = null;
var $closeBtn = null;
var $cancelBtn = null;
var $actionBtns = null;
var friendRequestId = null;
var user = null;
var sending = false;
var friendRequest = null;
function reset() {
sending = false;
friendRequest = null;
$dialogContents.empty();
$actionBtns.hide();
$actionBtns.find('a').hide();
$acceptBtn.text('ACCEPT');
}
function buildShowRequest() {
return {friend_request_id: friendRequestId};
}
function buildAcceptRequest() {
var message = {};
message['friend_request_id'] = friendRequest.id;
message['status'] = 'accept';
return message;
}
function acceptRequest(e) {
if(!sending) {
sending = true;
$acceptBtn.text('ACCEPTING...')
rest.acceptFriendRequest(buildAcceptRequest())
.done(function() {
app.layout.closeDialog('accept-friend-request')
})
.fail(function(jqXHR) {
app.notifyServerError(jqXHR, 'Unable to Accept Friend Request');
})
.always(function() {
sending = false;
$acceptBtn.text('ACCEPT');
})
}
return false;
}
function modifyResponseWithUIData() {
friendRequest.friend.user_type = friendRequest.friend.musician ? 'musician' : 'fan'
friendRequest.user.user_type = friendRequest.user.musician ? 'musician' : 'fan'
friendRequest.friend.photo_url = context.JK.resolveAvatarUrl(friendRequest.friend.photo_url);
friendRequest.user.photo_url = context.JK.resolveAvatarUrl(friendRequest.user.photo_url);
}
function renderNoActionPossibleBtns() {
$closeBtn.show();
$actionBtns.show();
}
function renderDefaultBtns() {
$cancelBtn.show();
$acceptBtn.show();
$actionBtns.show();
}
function renderAlreadyFriends(options) {
return $(context._.template($alreadyFriendsTemplate.html(), options, { variable: 'data' }));
}
function renderAlreadyProcessed(options) {
return $(context._.template($alreadyProcessedTemplate.html(), options, { variable: 'data' }));
}
function renderNotFriends(options) {
return $(context._.template($notFriendsTemplate.html(), options, { variable: 'data' }));
}
function renderGenericError(options) {
return $(context._.template($genericErrorTemplate.html(), options, { variable: 'data' }));
}
function beforeShow(args) {
app.layout.closeDialog('accept-friend-request') // ensure no others are showing. this is a singleton dialog
app.user()
.done(function(userDetail) {
user = userDetail;
friendRequestId = args.d1;
if(!friendRequestId) throw "friend request must be specified in AcceptFriendRequestDialog"
rest.getFriendRequest(buildShowRequest())
.done(function(response) {
friendRequest = response;
modifyResponseWithUIData();
var options = friendRequest;
var contents = null;
if(friendRequest.user_id == user.id) {
contents = renderGenericError({error_message: 'You can\'t become friends with yourself.'})
renderNoActionPossibleBtns();
}
else if(friendRequest.user.is_friend) {
// already friends
contents = renderAlreadyFriends(options);
renderNoActionPossibleBtns();
}
else if(friendRequest.status) {
contents = renderAlreadyProcessed(options);
renderNoActionPossibleBtns();
}
else {
contents = renderNotFriends(options);
renderDefaultBtns();
}
$dialogContents.append(contents);
context.JK.bindHoverEvents(contents);
})
.fail(function(jqXHR) {
app.notifyServerError(jqXHR, 'Unable to Load Friend Request')
renderNoActionPossibleBtns();
})
})
}
function events() {
$acceptBtn.click(acceptRequest);
}
function afterHide() {
reset();
}
function initialize() {
var dialogBindings = {
'beforeShow' : beforeShow,
'afterHide': afterHide
};
app.bindDialog('accept-friend-request', dialogBindings);
$dialog = $('#accept-friend-request-dialog');
$dialogContents = $dialog.find('.dialog-inner');
$notFriendsTemplate = $('#template-friend-request-not-friends');
$alreadyFriendsTemplate = $('#template-friend-request-already-friends');
$alreadyProcessedTemplate = $('#template-friend-request-already-processed')
$genericErrorTemplate = $('#template-friend-generic-error');
$acceptBtn = $dialog.find('.btn-accept-friend-request');
$cancelBtn = $dialog.find('.btn-cancel-dialog');
$closeBtn = $dialog.find('.btn-close-dialog');
$actionBtns = $dialog.find('.action-buttons');
events();
}
this.initialize = initialize;
}
return this;
})(window,jQuery);