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

304 lines
11 KiB
JavaScript
Raw Normal View History

(function(context,$) {
"use strict"
context.JK = context.JK || {}
context.JK.AccountProfileInterests = function(app) {
var $document = $(document)
var logger = context.JK.logger
var EVENTS = context.JK.EVENTS
var api = context.JK.Rest()
var ui = new context.JK.UIHelper(JK.app)
var user = {}
var profileUtils = context.JK.ProfileUtils
var masterGenreList = []
var NONE_SPECIFIED = 'None specified'
var GENRE_LIST_DELIMITER = ', '
var $screen = $('#account-profile-interests')
var SELECT_GENRE_SELECTOR = '.select-genre'
var GENRE_LIST_SELECTOR = '.genre-list'
// virtual bands
var $virtualBandYes = $screen.find('#virtual-band-yes')
var $virtualBandNo = $screen.find('#virtual-band-no')
var $virtualBandGenres = $screen.find('#virtual-band-genres')
var $btnVirtualBandGenreSelect = $virtualBandGenres.find(SELECT_GENRE_SELECTOR)
var $virtualBandGenreList = $virtualBandGenres.find(GENRE_LIST_SELECTOR)
var $virtualBandCommitment = $screen.find('#virtual-band-commitment')
// traditional bands
var $traditionalBandYes = $screen.find('#traditional-band-yes')
var $traditionalBandNo = $screen.find('#traditional-band-no')
var $traditionalBandGenres = $screen.find('#traditional-band-genres')
var $btnTraditionalBandGenreSelect = $traditionalBandGenres.find(SELECT_GENRE_SELECTOR)
var $traditionalBandGenreList = $traditionalBandGenres.find(GENRE_LIST_SELECTOR)
var $traditionalBandCommitment = $screen.find('#traditional-band-commitment')
var $traditionalTouringOption = $screen.find('#traditional-band-touring')
// paid sessions
var $paidSessionsYes = $screen.find('#paid-sessions-yes')
var $paidSessionsNo = $screen.find('#paid-sessions-no')
var $paidSessionsGenres = $screen.find('#paid-sessions-genres')
var $btnPaidSessionsGenreSelect = $paidSessionsGenres.find(SELECT_GENRE_SELECTOR)
var $paidSessionsGenreList = $paidSessionsGenres.find(GENRE_LIST_SELECTOR)
var $hourlyRate = $screen.find('#hourly-rate')
var $dailyRate = $screen.find('#daily-rate')
// free sessions
var $freeSessionsYes = $screen.find('#free-sessions-yes')
var $freeSessionsNo = $screen.find('#free-sessions-no')
var $freeSessionsGenres = $screen.find('#free-sessions-genres')
var $btnFreeSessionsGenreSelect = $freeSessionsGenres.find(SELECT_GENRE_SELECTOR)
var $freeSessionsGenreList = $freeSessionsGenres.find(GENRE_LIST_SELECTOR)
// cowriting
var $cowritingYes = $screen.find('#cowriting-yes')
var $cowritingNo = $screen.find('#cowriting-no')
var $cowritingGenres = $screen.find('#cowriting-genres')
var $btnCowritingGenreSelect = $cowritingGenres.find(SELECT_GENRE_SELECTOR)
var $cowritingGenreList = $cowritingGenres.find(GENRE_LIST_SELECTOR)
var $cowritingPurpose = $screen.find('#cowriting-purpose')
var $btnCancel = $screen.find('.account-edit-profile-cancel')
var $btnBack = $screen.find('.account-edit-profile-back')
var $btnSubmit = $screen.find('.account-edit-profile-submit')
function beforeShow(data) {
}
function afterShow(data) {
renderInterests()
}
function resetForm() {
$screen.find('form .error-text').remove()
$screen.find('form .error').removeClass("error")
}
function populateAccountProfile(userDetail) {
// Column 1 - options
if (userDetail) {
if (userDetail.virtual_band) {
$virtualBandYes.iCheck('check').attr('checked', 'checked')
}
else {
$virtualBandNo.iCheck('check').attr('checked', 'checked')
}
if (userDetail.traditional_band) {
$traditionalBandYes.iCheck('check').attr('checked', 'checked')
}
else {
$traditionalBandNo.iCheck('check').attr('checked', 'checked')
}
if (userDetail.paid_sessions) {
$paidSessionsYes.iCheck('check').attr('checked', 'checked')
}
else {
$paidSessionsNo.iCheck('check').attr('checked', 'checked')
}
if (userDetail.free_sessions) {
$freeSessionsYes.iCheck('check').attr('checked', 'checked')
}
else {
$freeSessionsNo.iCheck('check').attr('checked', 'checked')
}
if (userDetail.cowriting) {
$cowritingYes.iCheck('check').attr('checked', 'checked')
}
else {
$cowritingNo.iCheck('check').attr('checked', 'checked')
}
}
// Column 2 - genres
var genres = profileUtils.virtualBandGenreList(userDetail.genres)
$virtualBandGenreList.html(genres && genres.length > 0 ? genres : NONE_SPECIFIED)
genres = profileUtils.traditionalBandGenreList(userDetail.genres)
$traditionalBandGenreList.html(genres && genres.length > 0 ? genres : NONE_SPECIFIED)
genres = profileUtils.paidSessionGenreList(userDetail.genres)
$paidSessionsGenreList.html(genres && genres.length > 0 ? genres : NONE_SPECIFIED)
genres = profileUtils.freeSessionGenreList(userDetail.genres)
$freeSessionsGenreList.html(genres && genres.length > 0 ? genres : NONE_SPECIFIED)
genres = profileUtils.cowritingGenreList(userDetail.genres)
$cowritingGenreList.html(genres && genres.length > 0 ? genres : NONE_SPECIFIED)
// Column 3 - misc (play commitment, rates, cowriting purpose)
$virtualBandCommitment.val(userDetail.virtual_band_commitment)
context.JK.dropdown($virtualBandCommitment)
$traditionalBandCommitment.val(userDetail.traditional_band_commitment)
context.JK.dropdown($traditionalBandCommitment)
$traditionalTouringOption.val(userDetail.traditional_band_touring ? '1' : '0')
context.JK.dropdown($traditionalTouringOption)
// convert the value to cents
$hourlyRate.val(profileUtils.normalizeMoneyForDisplay(userDetail.paid_sessions_hourly_rate));
$dailyRate.val(profileUtils.normalizeMoneyForDisplay(userDetail.paid_sessions_daily_rate));
$cowritingPurpose.val(userDetail.cowriting_purpose)
context.JK.dropdown($cowritingPurpose)
}
function bindGenreSelector(type, $btnSelect, $genreList) {
$btnSelect.unbind('click').bind('click', function(e) {
e.preventDefault()
var genreText = $genreList.html()
var genres = []
if (genres !== NONE_SPECIFIED) {
genres = genreText.split(GENRE_LIST_DELIMITER)
}
ui.launchGenreSelectorDialog(type, genres, function(selectedGenres) {
$genreList.html(selectedGenres && selectedGenres.length > 0 ? selectedGenres.join(GENRE_LIST_DELIMITER) : NONE_SPECIFIED)
})
return false
})
}
function events() {
bindGenreSelector('virtual bands', $btnVirtualBandGenreSelect, $virtualBandGenreList)
bindGenreSelector('traditional bands', $btnTraditionalBandGenreSelect, $traditionalBandGenreList)
bindGenreSelector('paid sessions', $btnPaidSessionsGenreSelect, $paidSessionsGenreList)
bindGenreSelector('free sessions', $btnFreeSessionsGenreSelect, $freeSessionsGenreList)
bindGenreSelector('co-writing', $btnCowritingGenreSelect, $cowritingGenreList)
$btnCancel.click(function(e) {
e.stopPropagation()
navigateTo('/client#/profile/' + context.JK.currentUserId)
return false
})
$btnBack.click(function(e) {
e.stopPropagation()
navigateTo('/client#/account/profile/experience')
return false
})
enableSubmits()
context.JK.dropdown($virtualBandCommitment)
context.JK.dropdown($traditionalBandCommitment)
context.JK.dropdown($cowritingPurpose)
}
function enableSubmits() {
$btnSubmit.on("click", function(e) {
e.stopPropagation()
handleUpdateProfile()
return false
})
$btnSubmit.removeClass("disabled")
}
function disableSubmits() {
$btnSubmit.addClass("disabled")
$btnSubmit.off("click")
}
function renderInterests() {
$.when(api.getUserProfile())
.done(function(userDetail) {
populateAccountProfile(userDetail)
})
}
function navigateTo(targetLocation) {
context.location = targetLocation
}
function handleUpdateProfile() {
disableSubmits()
resetForm()
api.updateUser({
virtual_band: $screen.find('input[name=virtual_band]:checked').val(),
virtual_band_genres: $virtualBandGenreList.html() === NONE_SPECIFIED ? [] : $virtualBandGenreList.html().split(GENRE_LIST_DELIMITER),
virtual_band_commitment: $virtualBandCommitment.val(),
traditional_band: $screen.find('input[name=traditional_band]:checked').val(),
traditional_band_genres: $traditionalBandGenreList.html() === NONE_SPECIFIED ? [] : $traditionalBandGenreList.html().split(GENRE_LIST_DELIMITER),
traditional_band_commitment: $traditionalBandCommitment.val(),
traditional_band_touring: $traditionalTouringOption.val(),
paid_sessions: $screen.find('input[name=paid_sessions]:checked').val(),
paid_session_genres: $paidSessionsGenreList.html() === NONE_SPECIFIED ? [] : $paidSessionsGenreList.html().split(GENRE_LIST_DELIMITER),
paid_sessions_hourly_rate: profileUtils.normalizeMoneyForSubmit($hourlyRate.val()),
paid_sessions_daily_rate: profileUtils.normalizeMoneyForSubmit($dailyRate.val()),
free_sessions: $screen.find('input[name=free_sessions]:checked').val(),
free_session_genres: $freeSessionsGenreList.html() === NONE_SPECIFIED ? [] : $freeSessionsGenreList.html().split(GENRE_LIST_DELIMITER),
cowriting: $screen.find('input[name=cowriting]:checked').val(),
cowriting_genres: $cowritingGenreList.html() === NONE_SPECIFIED ? [] : $cowritingGenreList.html().split(GENRE_LIST_DELIMITER),
cowriting_purpose: $cowritingPurpose.val()
})
.done(postUpdateProfileSuccess)
.fail(postUpdateProfileFailure)
.always(enableSubmits)
}
function postUpdateProfileSuccess(response) {
$document.triggerHandler(EVENTS.USER_UPDATED, response)
context.location = "/client#/account/profile/samples"
}
function postUpdateProfileFailure(xhr, textStatus, errorMessage) {
var errors = JSON.parse(xhr.responseText)
if(xhr.status == 422) {
context.JK.append_errors($hourlyRate, 'paid_sessions_hourly_rate', errors)
context.JK.append_errors($dailyRate, 'paid_sessions_daily_rate', errors)
if(errors.errors.length > 0) {
app.notifyServerError(xhr)
}
}
else {
app.ajaxError(xhr, textStatus, errorMessage)
}
}
function initialize() {
var screenBindings = {
'beforeShow': beforeShow,
'afterShow': afterShow
}
app.bindScreen('account/profile/interests', screenBindings)
events()
$screen.find('.interest-options').iCheck({
checkboxClass: 'icheckbox_minimal',
radioClass: 'iradio_minimal',
inheritClass: true
})
profileUtils.initializeHelpBubbles($screen)
}
this.initialize = initialize
this.beforeShow = beforeShow
this.afterShow = afterShow
return this
}
})(window,jQuery)