var AccountView = View.extend({ initialize: function(){ this.consent = new ConsentModal({ parent: this }) }, connect: function(initialLoginPath){ auth.init(this.ready.bind(this, function(){}, initialLoginPath)) }, ready: function(cb, initialLoginPath){ if (auth.logged_in()) { this.logged_in(cb, initialLoginPath) } else { this.logged_out(cb) } }, addresses: [], addressLookup: {}, ccs: [], ccLookup: {}, listAddresses: function(opt){ opt = opt || {} sdk.address.list({ success: function(data){ this.populateAddresses(data, opt.success) }.bind(this), error: function(data){ console.log("error listing addresses!") console.log(data.responseText) opt.error && opt.error() }.bind(this), }) }, populateAddresses: function(data, cb){ console.log("populate addresses:", data.AddressBook.addressBookItem) if (! data.AddressBook) { console.log("no addresses") cb && cb() return } this.addresses = data.AddressBook.addressBookItem this.addressLookup = {} data.AddressBook.addressBookItem.forEach(function(item){ this.addressLookup[ item.Id ] = item if (item.IsDefault) { console.log("SHIPPING ADDRESS", item) app.shipping.populate(item) } if (item.IsBillingDefault) { console.log("BILLING ADDRESS") app.payment.populate(item) } }.bind(this)) app.cart.shipping.populate() app.cart.payment.populate() cb && cb() }, listCreditCards: function(cb){ sdk.payment.list_credit_cards({ success: function(data){ this.populateCreditCards(data, cb) }.bind(this) }) }, populateCreditCards: function(data, cb){ // console.log("populate ccs:", data.CreditCards) this.ccs = data.CreditCards this.ccLookup = {} if (! data.CreditCards || ! data.CreditCards.length) { } else { data.CreditCards.forEach(function(cc){ this.ccLookup[cc.Id || cc.Guid] = cc }.bind(this)) app.payment.populate( data.CreditCards[0] ) app.cart.payment.populate() } cb && cb() }, logged_in: function(cb, initialLoginPath){ this.listAddresses() this.listCreditCards() $("#nav .login").hide() $("#nav .account, #nav .logout").show() if (! auth.deferred_product && app.last_view) { if (app.last_view != app.login && app.last_view != app.signin && app.last_view != app.logout) { app.view && app.view.hide && app.view.hide() app.view = app.last_view app.view.show() } } else { cb && cb() } console.log('logged in') app.account.consent.check() if ( ! auth.has_cart() ) { console.log('no cart') app.curtain.show("loading") auth.create_cart({ success: function(){ console.log('got cart') if (auth.deferred_product) { console.log('adding deferred product') auth.add_deferred_product_to_cart({ success: function(){ console.log('success!') app.router.go("cart") setTimeout(function(){ app.curtain.hide("loading") }, 500) }, error: function(){ // TODO: should not be called because cart was just created console.log("ERROR ADDING PRODUCT TO NEW CART") }, }) } else { if (initialLoginPath) { console.log("navigating to deep link route from logged_in") app.router.go(initialLoginPath) } else if (!app.last_view) { app.router.go("account/profile") } app.account.consent.check() app.curtain.hide("loading") } }, error: function(){ // error CREATING cart... console.log("ERROR CREATING CART") auth.log_out() app.account.logged_out() }, }) } else { if (auth.deferred_product) { auth.add_deferred_product_to_cart({ success: function(){ app.router.go("cart") }, error: function(){ // TODO: cart might be invalid.. console.log("CALLED LOGGED_IN, HAD DEFERRED PRODUCT") }, }) } else { app.cart.load() } } }, logged_out: function(cb){ $("#nav .login").show() $("#nav .account, #nav .logout").hide() $("#nav").removeClass("account") cb && cb() }, })