From a0a0feabf6e49b177b4159331edfc48cfbe96aeb Mon Sep 17 00:00:00 2001 From: Gorash Date: Thu, 2 Jun 2022 07:49:03 +0000 Subject: [PATCH] [IMP] website_sale: quantity in js sessionStorage to avoid server calls The session value is updated each time the user modifies the cart. The number is also updated when the user hovers the mouse over the cart, and if the value is different from that of the HTML content (if the user does undo in his history). opw-2737985 Part-of: odoo/odoo#92962 --- .../website_sale/static/src/js/website_sale.js | 18 ++++++++++++++---- .../static/src/js/website_sale_utils.js | 1 + addons/website_sale/views/templates.xml | 4 ++-- .../static/src/js/website_sale_options.js | 1 + 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/addons/website_sale/static/src/js/website_sale.js b/addons/website_sale/static/src/js/website_sale.js index 2f1f7e64510..af03a546496 100644 --- a/addons/website_sale/static/src/js/website_sale.js +++ b/addons/website_sale/static/src/js/website_sale.js @@ -80,6 +80,9 @@ publicWidget.registry.websiteSaleCartLink = publicWidget.Widget.extend({ $('.popover').on('mouseleave', function () { self.$el.trigger('mouseleave'); }); + self.cartQty = +$(data).find('.o_wsale_cart_quantity').text(); + sessionStorage.setItem('website_sale_cart_quantity', self.cartQty); + self._updateCartQuantityText(); }); }, 300); }, @@ -129,10 +132,16 @@ publicWidget.registry.websiteSaleCartLink = publicWidget.Widget.extend({ /** * @private */ - _updateCartQuantityValue() { - return this._rpc({route: "/shop/cart/quantity"}).then((cartQty) => { - this.cartQty = cartQty; - }); + async _updateCartQuantityValue() { + if ('website_sale_cart_quantity' in sessionStorage) { + this.cartQty = sessionStorage.getItem('website_sale_cart_quantity'); + } + if (this.el.querySelector('.my_cart_quantity').innerText != this.cartQty) { + return this._rpc({route: "/shop/cart/quantity"}).then((cartQty) => { + this.cartQty = cartQty; + sessionStorage.setItem('website_sale_cart_quantity', this.cartQty); + }); + } }, /** * @private @@ -359,6 +368,7 @@ publicWidget.registry.WebsiteSale = publicWidget.Widget.extend(VariantMixin, car $input.trigger('change'); return; } + sessionStorage.setItem('website_sale_cart_quantity', data.cart_quantity); if (!data.cart_quantity) { return window.location = '/shop/cart'; } diff --git a/addons/website_sale/static/src/js/website_sale_utils.js b/addons/website_sale/static/src/js/website_sale_utils.js index e5139a21910..af2e96aff98 100644 --- a/addons/website_sale/static/src/js/website_sale_utils.js +++ b/addons/website_sale/static/src/js/website_sale_utils.js @@ -34,6 +34,7 @@ const cartHandlerMixin = { route: "/shop/cart/update_json", params: params, }).then(async data => { + sessionStorage.setItem('website_sale_cart_quantity', data.cart_quantity); if (data.cart_quantity && (data.cart_quantity !== parseInt($(".my_cart_quantity").text()))) { await animateClone($('header .o_wsale_my_cart').first(), this.$itemImgContainer, 25, 40); updateCartNavBar(data); diff --git a/addons/website_sale/views/templates.xml b/addons/website_sale/views/templates.xml index 31a8af23e08..57c1d43a7ca 100644 --- a/addons/website_sale/views/templates.xml +++ b/addons/website_sale/views/templates.xml @@ -1268,8 +1268,8 @@ - View Cart ( item(s)) - + View Cart ( item(s)) + diff --git a/addons/website_sale_product_configurator/static/src/js/website_sale_options.js b/addons/website_sale_product_configurator/static/src/js/website_sale_options.js index 932ae557cd0..0c43812b4b5 100644 --- a/addons/website_sale_product_configurator/static/src/js/website_sale_options.js +++ b/addons/website_sale_product_configurator/static/src/js/website_sale_options.js @@ -116,6 +116,7 @@ publicWidget.registry.WebsiteSale.include({ const $quantity = $(".my_cart_quantity"); $quantity.parent().parent().removeClass('d-none'); $quantity.text(quantity).hide().fadeIn(600); + sessionStorage.setItem('website_sale_cart_quantity', quantity); }); }); },