245 lines
7.2 KiB
JavaScript
245 lines
7.2 KiB
JavaScript
(function(context,$) {
|
|
|
|
"use strict";
|
|
|
|
context.JK = context.JK || {};
|
|
context.JK.AccountProfileExperience = function(app) {
|
|
var $document = $(document);
|
|
var logger = context.JK.logger;
|
|
var EVENTS = context.JK.EVENTS;
|
|
var api = context.JK.Rest();
|
|
var $screen = $('#account-profile-experience');
|
|
var profileUtils = context.JK.ProfileUtils;
|
|
var $btnCancel = $screen.find('.account-edit-profile-cancel');
|
|
var $btnBack = $screen.find('.account-edit-profile-back');
|
|
var $btnSubmit = $screen.find('.account-edit-profile-submit');
|
|
|
|
var $instrumentSelector = $screen.find('.instrument_selector');
|
|
var $userGenres = $screen.find('#user-genres');
|
|
|
|
function beforeShow(data) {
|
|
}
|
|
|
|
function afterShow(data) {
|
|
|
|
if (window.ProfileStore.solo) {
|
|
$btnBack.hide()
|
|
$btnSubmit.text('SAVE & RETURN TO PROFILE');
|
|
}
|
|
else {
|
|
$btnBack.show()
|
|
$btnSubmit.text('SAVE & NEXT');
|
|
}
|
|
|
|
resetForm();
|
|
renderExperience();
|
|
}
|
|
|
|
function resetForm() {
|
|
$screen.find('form .error-text').remove();
|
|
$screen.find('form .error').removeClass("error");
|
|
}
|
|
|
|
function populateAccountProfile(userDetail, instruments) {
|
|
|
|
loadGenres(profileUtils.profileGenres(userDetail.genres));
|
|
|
|
$instrumentSelector.empty();
|
|
$.each(instruments, function(index, instrument) {
|
|
var template = context.JK.fillTemplate($('#account-profile-instrument').html(), {
|
|
checked : isUserInstrument(instrument, userDetail.instruments) ? "checked=\"checked\"" :"",
|
|
description : instrument.description,
|
|
id : instrument.id
|
|
});
|
|
$instrumentSelector.append(template);
|
|
});
|
|
|
|
// and fill in the proficiency for the instruments that the user can play
|
|
if(userDetail.instruments) {
|
|
$.each(userDetail.instruments, function(index, userInstrument) {
|
|
$('tr[data-instrument-id="' + userInstrument.instrument_id + '"] select.proficiency_selector', $screen).val(userInstrument.proficiency_level);
|
|
});
|
|
}
|
|
|
|
$screen.find('select[name=skill_level]').val(userDetail.skill_level);
|
|
$screen.find('select[name=concert_count]').val(userDetail.concert_count);
|
|
$screen.find('select[name=studio_session_count]').val(userDetail.studio_session_count);
|
|
context.JK.checkbox($instrumentSelector.find('input[type="checkbox"]'), true)
|
|
}
|
|
|
|
function isUserInstrument(instrument, userInstruments) {
|
|
var isUserInstrument = false;
|
|
if(!userInstruments) return false;
|
|
|
|
$.each(userInstruments, function(index, userInstrument) {
|
|
if(instrument.id == userInstrument.instrument_id) {
|
|
isUserInstrument = true;
|
|
return false;
|
|
}
|
|
});
|
|
return isUserInstrument;
|
|
}
|
|
|
|
function loadGenres(selectedGenres) {
|
|
$userGenres.empty();
|
|
|
|
rest.getGenres().done(function (genres) {
|
|
$.each(genres, function (index, genre) {
|
|
var genreTemplate = $('#template-user-setup-genres').html();
|
|
var selected = '';
|
|
if (selectedGenres) {
|
|
var genreMatch = $.grep(selectedGenres, function (n, i) {
|
|
return n.genre_id === genre.id;
|
|
});
|
|
if (genreMatch.length > 0) {
|
|
selected = "checked";
|
|
}
|
|
}
|
|
var genreHtml = context.JK.fillTemplate(genreTemplate, {
|
|
id: genre.id,
|
|
description: genre.description,
|
|
checked: selected
|
|
});
|
|
$userGenres.append(genreHtml);
|
|
});
|
|
|
|
context.JK.checkbox($userGenres.find('input[type="checkbox"]'), true)
|
|
});
|
|
}
|
|
|
|
function resetGenres() {
|
|
$('input[type=checkbox]:checked', $userGenres).each(function (i) {
|
|
$(this).removeAttr("checked");
|
|
});
|
|
var $tdGenres = $("#tdBandGenres");
|
|
}
|
|
|
|
function getSelectedGenres() {
|
|
var genres = [];
|
|
$('input[type=checkbox]:checked', $userGenres).each(function (i) {
|
|
var genre = $(this).val();
|
|
genres.push(genre);
|
|
});
|
|
return genres;
|
|
}
|
|
|
|
function events() {
|
|
$btnCancel.click(function(evt) {
|
|
evt.stopPropagation();
|
|
window.ProfileActions.cancelProfileEdit()
|
|
return false;
|
|
});
|
|
|
|
$btnBack.click(function(evt) {
|
|
evt.stopPropagation();
|
|
navigateTo('/client#/account/profile/');
|
|
return false;
|
|
});
|
|
|
|
enableSubmits()
|
|
}
|
|
|
|
function enableSubmits() {
|
|
$btnSubmit.on("click", function(evt) {
|
|
evt.stopPropagation();
|
|
handleUpdateProfile();
|
|
return false;
|
|
});
|
|
|
|
$btnSubmit.removeClass("disabled")
|
|
}
|
|
|
|
function disableSubmits() {
|
|
$btnSubmit.addClass("disabled")
|
|
$btnSubmit.off("click")
|
|
}
|
|
|
|
function renderExperience() {
|
|
$.when(api.getUserProfile(), api.getInstruments())
|
|
.done(function(userDetailResponse, instrumentsResponse) {
|
|
var userDetail = userDetailResponse[0];
|
|
populateAccountProfile(userDetail, instrumentsResponse[0]);
|
|
});
|
|
}
|
|
|
|
function navigateTo(targetLocation) {
|
|
resetForm();
|
|
context.location = targetLocation;
|
|
}
|
|
|
|
function handleUpdateProfile() {
|
|
disableSubmits()
|
|
resetForm();
|
|
|
|
var instruments = getSelectedInstruments();
|
|
var genres = getSelectedGenres();
|
|
|
|
api.updateUser({
|
|
instruments: instruments,
|
|
genres: genres,
|
|
skill_level: $screen.find('select[name=skill_level]').val(),
|
|
concert_count: $screen.find('select[name=concert_count]').val(),
|
|
studio_session_count: $screen.find('select[name=studio_session_count]').val()
|
|
})
|
|
.done(postUpdateProfileSuccess)
|
|
.fail(postUpdateProfileFailure)
|
|
.always(enableSubmits)
|
|
}
|
|
|
|
function postUpdateProfileSuccess(response) {
|
|
$document.triggerHandler(EVENTS.USER_UPDATED, response);
|
|
ProfileActions.editProfileNext('interests')
|
|
}
|
|
|
|
function postUpdateProfileFailure(xhr, textStatus, errorMessage) {
|
|
|
|
var errors = JSON.parse(xhr.responseText)
|
|
|
|
if(xhr.status == 422) {
|
|
var instruments = context.JK.format_errors("musician_instruments", errors);
|
|
|
|
if(instruments != null) {
|
|
$instrumentSelector.closest('div.field').addClass('error').append(instruments);
|
|
}
|
|
}
|
|
else {
|
|
app.ajaxError(xhr, textStatus, errorMessage)
|
|
}
|
|
}
|
|
|
|
function getSelectedInstruments() {
|
|
var instruments = [];
|
|
$('input[type=checkbox]:checked', $instrumentSelector).each(function(i) {
|
|
|
|
var instrumentElement = $(this).closest('tr');
|
|
// traverse up to common parent of this instrument, and pick out proficiency selector
|
|
var proficiency = $('select.proficiency_selector', instrumentElement).val();
|
|
|
|
instruments.push({
|
|
instrument_id: instrumentElement.attr('data-instrument-id'),
|
|
proficiency_level: proficiency,
|
|
priority : i
|
|
});
|
|
});
|
|
|
|
return instruments;
|
|
}
|
|
|
|
function initialize() {
|
|
var screenBindings = {
|
|
'beforeShow': beforeShow,
|
|
'afterShow': afterShow
|
|
};
|
|
|
|
app.bindScreen('account/profile/experience', screenBindings);
|
|
|
|
events();
|
|
}
|
|
|
|
this.initialize = initialize;
|
|
this.beforeShow = beforeShow;
|
|
this.afterShow = afterShow;
|
|
return this;
|
|
};
|
|
|
|
})(window,jQuery); |