From fd5763c0cd49283d267b6c28b40f6bdf7bf6d949 Mon Sep 17 00:00:00 2001 From: f Date: Wed, 27 Oct 2021 15:32:59 -0300 Subject: [PATCH] =?UTF-8?q?desde=20tintalimon:=20no=20fallar=20si=20el=20p?= =?UTF-8?q?roducto=20no=20est=C3=A1=20en=20storage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _packs/controllers/cart_controller.js | 32 +++++++++++++++++++++------ 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/_packs/controllers/cart_controller.js b/_packs/controllers/cart_controller.js index e711bd8..705181b 100644 --- a/_packs/controllers/cart_controller.js +++ b/_packs/controllers/cart_controller.js @@ -34,11 +34,14 @@ export default class extends CartBaseController { if (quantity < 1) return; const orderToken = await this.tokenGetOrCreate() + const product = this.product + + if (!product) return event.target.disabled = true const response = await this.spree.cart.setQuantity({ orderToken }, { - line_item_id: this.product.line_item.id, + line_item_id: product.line_item.id, quantity, include: 'line_items' }) @@ -60,7 +63,7 @@ export default class extends CartBaseController { if (!this.hasSubtotalTarget) return - this.subtotalTarget.innerText = this.product.line_item.attributes.discounted_amount + this.subtotalTarget.innerText = product.line_item.attributes.discounted_amount }) } @@ -110,7 +113,13 @@ export default class extends CartBaseController { } get product () { - return JSON.parse(this.storage.getItem(this.storageId)) + const product = JSON.parse(this.storage.getItem(this.storageId)) + + if (!product) { + console.error("El producto es nulo!", this.storageId, this.storage.length, this.cart) + } + + return product } /* @@ -183,10 +192,13 @@ export default class extends CartBaseController { * item is removed, it removes itself from the page and the storage. */ async remove () { - if (!this.product.line_item) return + const product = this.product + + if (!product) return + if (!product.line_item) return const orderToken = this.token - const response = await this.spree.cart.removeItem({ orderToken }, this.product.line_item.id, { include: 'line_items' }) + const response = await this.spree.cart.removeItem({ orderToken }, product.line_item.id, { include: 'line_items' }) if (response.isFail()) { this.handleFailure(response) @@ -225,14 +237,18 @@ export default class extends CartBaseController { * Recovers the order if something failed */ async recover () { + console.error('Recuperando pedido', this.token) + // Removes the failing token this.storage.removeItem('token') + // Get a new token and cart + await this.tokenGetOrCreate() + // Stores the previous cart const cart = this.cart - // Get a new token and cart - await this.tokenGetOrCreate() + if (!cart) return // Add previous items and their quantities to the new cart by // mimicking user's actions @@ -243,6 +259,8 @@ export default class extends CartBaseController { const product = this.product + if (!product) continue + this.data.set('image', product.image) this.data.set('title', product.title) this.data.set('extra', product.extra.join('|'))