jam-cloud/web/app/assets/javascripts/dialog/sessionSettingsDialog.js

211 lines
7.0 KiB
JavaScript

(function(context,$) {
context.JK = context.JK || {};
context.JK.SessionSettingsDialog = function(app, sessionScreen) {
var logger = context.JK.logger;
var $dialog;
var $screen = $('#session-settings');
var $selectedFilenames = $screen.find('#selected-filenames');
var $uploadSpinner = $screen.find($('.upload-spinner'));
var $selectedFilenames = $('#settings-selected-filenames');
var $inputFiles = $('#settings-select-files');
var $btnSelectFiles = $screen.find('.btn-select-files');
var rest = new JK.Rest();
function beforeShow(data) {
context.JK.GenreSelectorHelper.render('#session-settings-genre');
$dialog = $('[layout-id="session-settings"]');
var currentSession = sessionScreen.getCurrentSession();
// id
$('#session-settings-id').val(currentSession.id);
// genre
context.JK.GenreSelectorHelper.setSelectedGenres('#session-settings-genre', currentSession.genres);
// name
$('#session-settings-name').val(currentSession.name);
// description
$('#session-settings-description').val(currentSession.description);
// language
$('#session-settings-description').val(currentSession.language);
// musician access
if (!currentSession.musician_access && !currentSession.approval_required) {
$('#session-settings-musician-access').val('only-rsvp');
}
else if (currentSession.musician_access && currentSession.approval_required) {
$('#session-settings-musician-access').val('musicians-approval');
}
else if (currentSession.musician_access && !currentSession.approval_required) {
$('#session-settings-musician-access').val('musicians');
}
// fan access
if (!currentSession.fan_access && !currentSession.fan_chat) {
$('#session-settings-fan-access').val('no-listen-chat');
}
else if (currentSession.fan_access && !currentSession.fan_chat) {
$('#session-settings-fan-access').val('listen-chat-each');
}
else if (currentSession.fan_access && currentSession.fan_chat) {
$('#session-settings-fan-access').val('listen-chat-band');
}
// notation files
$selectedFilenames.empty();
for (var i=0; i < currentSession.music_notations.length; i++) {
var notation = currentSession.music_notations[i];
console.log('notation.file_name %o', notation.file_name);
$selectedFilenames.append('<a href="' + notation.file_url + '" rel="external">' + notation.file_name + '</a>&nbsp;');
}
context.JK.dropdown($('#session-settings-language'));
context.JK.dropdown($('#session-settings-musician-access'));
context.JK.dropdown($('#session-settings-fan-access'));
}
function saveSettings(evt) {
var data = {};
data.genre = context.JK.GenreSelectorHelper.getSelectedGenres('#session-settings-genre')[0];
data.name = $('#session-settings-name').val();
data.description = $('#session-settings-description').val();
data.language = $('#session-settings-language').val();
// musician access
var musicianAccess = $('#session-settings-musician-access').val();
if (musicianAccess === 'only-rsvp') {
data.musician_access = false;
data.approval_required = false;
}
else if (musicianAccess === 'musicians-approval') {
data.musician_access = true;
data.approval_required = true;
}
else if (musicianAccess === 'musicians') {
data.musician_access = true;
data.approval_required = false;
}
// fan access
var fanAccess = $('#session-settings-fan-access').val();
if (fanAccess == 'no-listen-chat') {
data.fan_access = false;
data.fan_chat = false;
}
else if (fanAccess == 'listen-chat-each') {
data.fan_access = true;
data.fan_chat = false;
}
else if (fanAccess == 'listen-chat-band') {
data.fan_access = true;
data.fan_chat = true;
}
rest.updateSession($('#session-settings-id').val(), data).done(settingsSaved);
}
function changeSelectedFiles() {
var fileNames = [];
var files = $inputFiles.get(0).files;
var error = false;
for (var i = 0; i < files.length; ++i) {
var name = files.item(i).name;
var ext = name.split('.').pop().toLowerCase();
if ($.inArray(ext, ["pdf", "png", "jpg", "jpeg", "gif", "xml", "mxl", "txt"]) == -1) {
error = true;
break;
}
fileNames.push(name);
}
if (error) {
app.notifyAlert("Error", "We're sorry, but you can only upload images (.png .jpg .jpeg .gif), text (.txt), PDFs (.pdf), and XML files (.xml .mxl).");
$inputFiles.replaceWith($inputFiles.clone(true));
}
else {
// upload as soon as user picks their files.
uploadNotations($inputFiles.get(0).files)
.done(function() {
context._.each(fileNames, function(fileName) {
$selectedFilenames.append(fileName);
})
})
}
}
function uploadNotations(notations) {
var formData = new FormData();
$.each(notations, function(i, file) {
formData.append('files[]', file);
});
formData.append('client_id', app.clientId);
$btnSelectFiles.text('UPLOADING...').data('uploading', true)
$uploadSpinner.show();
return rest.uploadMusicNotations(formData)
.done(function(response) {
var error_files = [];
$.each(response, function(i, music_notation) {
if (music_notation.errors) {
//error_files.push(createSessionSettings.notations[i].name);
}
})
if (error_files.length > 0) {
app.notifyAlert("Failed to upload notations.", error_files.join(', '));
}
})
.fail(function(jqXHR) {
app.notifyServerError(jqXHR, "Unable to upload music notations");
})
.always(function() {
$btnSelectFiles.text('SELECT FILES...').data('uploading', null)
$uploadSpinner.hide();
})
}
function toggleSelectFiles(event) {
if($btnSelectFiles.data('uploading')) {
logger.debug("ignoring click of SELECT FILES... while uploading")
return false;
}
event.preventDefault();
$('#session-select-files').trigger('click');
return false;
}
function settingsSaved(response) {
// No response returned from this call. 204.
sessionScreen.refreshCurrentSession(true);
app.layout.closeDialog('session-settings');
}
function events() {
$('#session-settings-dialog-submit').on('click', saveSettings);
$inputFiles.on('change', changeSelectedFiles);
$btnSelectFiles.on('click', toggleSelectFiles);
}
this.initialize = function() {
events();
var dialogBindings = {
'beforeShow': beforeShow
};
app.bindDialog('session-settings', dialogBindings);
};
};
})(window,jQuery);