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

260 lines
7.9 KiB
JavaScript

(function (context, $) {
"use strict";
context.JK = context.JK || {};
context.JK.RedeemCompleteScreen = 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;
var $jamTrackInClient = null;
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;
var shoppingCartItem = null;
function beforeShow() {
context.JK.Tracking.redeemCompleteTrack()
$noPurchasesPrompt.addClass('hidden')
$purchasedJamTracks.empty()
$thanksPanel.addClass("hidden")
$purchasedJamTrackHeader.attr('status', 'in-progress')
$jamTrackInBrowser.addClass('hidden')
$jamTrackInClient.addClass('hidden')
}
function afterShow(data) {
// if there is no current user, but it apperas we have a login cookie, just refresh
if(!context.JK.currentUserId && $.cookie('remember_token')) {
window.location.reload();
}
else {
redeemJamTrack()
}
//prepThanks()
}
function handleShoppingCartResponse(carts) {
if(!checkoutUtils.hasOnlyFreeItemsInShoppingCart(carts)) {
// the user has multiple items in their shopping cart. They shouldn't be here.
logger.error("invalid access of redeemComplete page")
window.location = '/client#/jamtrack/search'
}
else {
rest.placeOrder()
.done(function(purchaseResponse) {
rest.updateUser()
checkoutUtils.setLastPurchase(purchaseResponse)
jamTrackUtils.checkShoppingCart()
prepThanks();
})
.fail(app.ajaxError)
}
}
function redeemJamTrack() {
rest.getShoppingCarts()
.done(handleShoppingCartResponse)
.fail(app.ajaxError);
}
function beforeHide() {
if(downloadJamTracks) {
context._.each(downloadJamTracks, function(downloadJamTrack) {
downloadJamTrack.destroy();
downloadJamTrack.root.remove();
})
downloadJamTracks = [];
}
purchasedJamTracks = null;
purchasedJamTrackIterator = 0;
}
function prepThanks() {
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 {
if(gon.isNativeClient) {
$jamTrackInClient.removeClass('hidden')
}
else {
$jamTrackInBrowser.removeClass('hidden');
}
$thanksPanel.removeClass('hidden')
handleJamTracksPurchased(purchaseResponse.jam_tracks)
}
}
function handleJamTracksPurchased(jamTracks) {
// were any JamTracks purchased?
var jamTracksPurchased = jamTracks && jamTracks.length > 0;
if(jamTracksPurchased) {
if(gon.isNativeClient) {
$jamTrackInClient.removeClass('hidden')
context.JK.GA.virtualPageView('/redeemInClient');
startDownloadJamTracks(jamTracks)
}
else {
$jamTrackInBrowser.removeClass('hidden');
app.user().done(function(user) {
// relative to 1 day ago (24 * 60 * 60 * 1000)
if(new Date(user.created_at).getTime() < new Date().getTime() - 86400000) {
logger.debug("existing user recorded")
context.JK.GA.virtualPageView('/redeemInBrowserExistingUser');
}
else {
logger.debug("new user recorded")
context.JK.GA.virtualPageView('/redeemInBrowserNewUser');
}
})
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 events() {
$backBtn.on('click', function(e) {
e.preventDefault();
context.location = '/client#/jamtrack/search'
})
}
function initialize() {
var screenBindings = {
'beforeShow': beforeShow,
'afterShow': afterShow,
'beforeHide': beforeHide
};
app.bindScreen('redeemComplete', screenBindings);
$screen = $("#redeemCompleteScreen");
$templatePurchasedJamTrack = $('#template-purchased-jam-track');
$thanksPanel = $screen.find(".thanks-panel");
$jamTrackInBrowser = $screen.find(".jam-tracks-in-browser");
$jamTrackInClient = $screen.find(".jam-tracks-in-client");
$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";
events();
}
this.initialize = initialize;
return this;
}
})
(window, jQuery);