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

225 lines
6.9 KiB
JavaScript
Raw Permalink Normal View History

2015-05-12 19:14:44 +00:00
(function (context, $) {
"use strict";
context.JK = context.JK || {};
context.JK.CheckoutCompleteScreen = function (app) {
var EVENTS = context.JK.EVENTS;
var logger = context.JK.logger;
var rest = context.JK.Rest();
var jamTrackUtils = context.JK.JamTrackUtils;
var checkoutUtils = context.JK.CheckoutUtilsInstance;
var $screen = null;
var $navigation = null;
var $templatePurchasedJamTrack = null;
var $thanksPanel = null;
var $jamTrackInBrowser = null;
2015-11-29 19:58:10 +00:00
var $giftCardPurchased = null;
2015-05-12 19:14:44 +00:00
var $purchasedJamTrack = null;
var $purchasedJamTrackHeader = null;
var $purchasedJamTracks = null;
var userDetail = null;
var step = null;
var downloadJamTracks = [];
var purchasedJamTracks = null;
var purchasedJamTrackIterator = 0;
var $backBtn = null;
var $downloadApplicationLink = null;
var $noPurchasesPrompt = null;
function beforeShow() {
}
function afterShow(data) {
prepThanks()
}
function beforeHide() {
if(downloadJamTracks) {
context._.each(downloadJamTracks, function(downloadJamTrack) {
downloadJamTrack.destroy();
downloadJamTrack.root.remove();
})
downloadJamTracks = [];
}
purchasedJamTracks = null;
purchasedJamTrackIterator = 0;
}
function prepThanks() {
$noPurchasesPrompt.addClass('hidden')
$purchasedJamTracks.empty()
$thanksPanel.addClass("hidden")
$purchasedJamTrackHeader.attr('status', 'in-progress')
step = 3;
renderNavigation();
showThanks();
}
function showThanks(purchaseResponse) {
var purchaseResponse = checkoutUtils.getLastPurchase();
if(!purchaseResponse || purchaseResponse.length == 0) {
// user got to this page with no context
logger.debug("no purchases found; nothing to show")
$noPurchasesPrompt.removeClass('hidden')
}
else {
$thanksPanel.removeClass('hidden')
handleJamTracksPurchased(purchaseResponse.jam_tracks)
2015-11-29 19:58:10 +00:00
handleGiftCardsPurchased(purchaseResponse.gift_cards)
2015-05-12 19:14:44 +00:00
}
}
2015-11-29 19:58:10 +00:00
function handleGiftCardsPurchased(gift_cards) {
// were any GiftCards purchased?
if(gift_cards && gift_cards.length > 0) {
$giftCardPurchased.removeClass('hidden')
}
}
2015-05-12 19:14:44 +00:00
function handleJamTracksPurchased(jamTracks) {
// were any JamTracks purchased?
var jamTracksPurchased = jamTracks && jamTracks.length > 0;
if(jamTracksPurchased) {
if(gon.isNativeClient) {
startDownloadJamTracks(jamTracks)
}
else {
$jamTrackInBrowser.removeClass('hidden');
app.user().done(function(user) {
if(!user.first_downloaded_client_at) {
$downloadApplicationLink.removeClass('hidden')
}
})
}
}
}
function startDownloadJamTracks(jamTracks) {
// there can be multiple purchased JamTracks, so we cycle through them
purchasedJamTracks = jamTracks;
// populate list of jamtracks purchased, that we will iterate through graphically
context._.each(jamTracks, function(jamTrack) {
var downloadJamTrack = new context.JK.DownloadJamTrack(app, jamTrack, 'small');
var $purchasedJamTrack = $(context._.template(
$templatePurchasedJamTrack.html(),
jamTrack,
{variable: 'data'}
));
$purchasedJamTracks.append($purchasedJamTrack)
// show it on the page
$purchasedJamTrack.append(downloadJamTrack.root)
downloadJamTracks.push(downloadJamTrack)
})
iteratePurchasedJamTracks();
}
function iteratePurchasedJamTracks() {
if(purchasedJamTrackIterator < purchasedJamTracks.length ) {
var downloadJamTrack = downloadJamTracks[purchasedJamTrackIterator++];
// make sure the 'purchasing JamTrack' section can be seen
$purchasedJamTrack.removeClass('hidden');
// the widget indicates when it gets to any transition; we can hide it once it reaches completion
$(downloadJamTrack).on(EVENTS.JAMTRACK_DOWNLOADER_STATE_CHANGED, function(e, data) {
if(data.state == downloadJamTrack.states.synchronized) {
logger.debug("jamtrack " + downloadJamTrack.jamTrack.name + " synchronized;")
//downloadJamTrack.root.remove();
downloadJamTrack.destroy();
// go to the next JamTrack
iteratePurchasedJamTracks()
}
})
logger.debug("jamtrack " + downloadJamTrack.jamTrack.name + " downloader initializing")
// kick off the download JamTrack process
downloadJamTrack.init()
// XXX style-test code
// downloadJamTrack.transitionError("package-error", "The server failed to create your package.")
}
else {
logger.debug("done iterating over purchased JamTracks")
$purchasedJamTrackHeader.attr('status', 'done')
}
}
function clearOrderPage() {
$orderContent.empty();
}
function renderNavigation() {
$navigation.html("");
var navigationHtml = $(
context._.template(
$('#template-checkout-navigation').html(),
{current: step, purchases_disable_class: gon.global.purchases_enabled ? 'hidden' : ''},
{variable: 'data'}
)
);
$navigation.append(navigationHtml);
}
function events() {
$backBtn.on('click', function(e) {
e.preventDefault();
context.location = '/client#/checkoutOrder'
})
}
function initialize() {
var screenBindings = {
'beforeShow': beforeShow,
'afterShow': afterShow,
'beforeHide': beforeHide
};
app.bindScreen('checkoutComplete', screenBindings);
$screen = $("#checkoutCompleteScreen");
$navigation = $screen.find(".checkout-navigation-bar");
$templatePurchasedJamTrack = $('#template-purchased-jam-track');
$thanksPanel = $screen.find(".thanks-panel");
$jamTrackInBrowser = $screen.find(".thanks-detail.jam-tracks-in-browser");
2015-11-29 19:58:10 +00:00
$giftCardPurchased = $screen.find('.thanks-detail.gift-card')
2015-05-12 19:14:44 +00:00
$purchasedJamTrack = $thanksPanel.find(".thanks-detail.purchased-jam-track");
$purchasedJamTrackHeader = $purchasedJamTrack.find(".purchased-jam-track-header");
$purchasedJamTracks = $purchasedJamTrack.find(".purchased-list")
$backBtn = $screen.find('.back');
$downloadApplicationLink = $screen.find('.download-jamkazam-wrapper');
$noPurchasesPrompt = $screen.find('.no-purchases-prompt')
if ($screen.length == 0) throw "$screen must be specified";
if ($navigation.length == 0) throw "$navigation must be specified";
events();
}
this.initialize = initialize;
return this;
}
})
(window, jQuery);