/** * Extensão para adicionar uma ação via JS após adicionar o produto ao carrinho * * PFerramentas_AddToCartAction * * @category PFerramentas * @package PFerramentas_AddToCartAction * @author Guilherme Venerato * @copyright Copyright (c) 2020 Palácio das Ferramentas (https://www.palaciodasferramentas.com.br/) * @license https://opensource.org/licenses/OSL-3.0.php Open Software License 3.0 */ define([ 'jquery', 'mage/translate' ], function ($, $t) { 'use strict'; return function (widget) { $.widget('mage.catalogAddToCart', widget, { /** * @param {String} form */ ajaxSubmit: function (form) { var self = this; $(self.options.minicartSelector).trigger('contentLoading'); self.disableAddToCartButton(form); $.ajax({ url: form.attr('action'), data: form.serialize(), type: 'post', dataType: 'json', /** @inheritdoc */ beforeSend: function () { if (self.isLoaderEnabled()) { $('body').trigger(self.options.processStart); } }, /** @inheritdoc */ success: function (res) { var eventData, parameters; $(document).trigger('ajax:addToCart', form.data().productSku); if (self.isLoaderEnabled()) { $('body').trigger(self.options.processStop); } if (res.backUrl) { eventData = { 'form': form, 'redirectParameters': [] }; // trigger global event, so other modules will be able add parameters to redirect url $('body').trigger('catalogCategoryAddToCartRedirect', eventData); if (eventData.redirectParameters.length > 0) { parameters = res.backUrl.split('#'); parameters.push(eventData.redirectParameters.join('&')); res.backUrl = parameters.join('#'); } window.location = res.backUrl; return; } if (res.messages) { $(self.options.messagesSelector).html(res.messages); } if (res.minicart) { $(self.options.minicartSelector).replaceWith(res.minicart); $(self.options.minicartSelector).trigger('contentUpdated'); } if (res.product && res.product.statusText) { $(self.options.productStatusSelector) .removeClass('available') .addClass('unavailable') .find('span') .html(res.product.statusText); } $('.mage-dropdown-dialog').toggleClass('show'); $('.backdrop').toggleClass('show'); $('.new-minicart-popup .close-minicart').toggleClass('show'); $("html, body").animate({ scrollTop: 0 }, "slow"); $('body').toggleClass('no-scroll'); self.getInstallments(); setTimeout(function(){ if (jQuery('.block-minicart').is(":visible")) { $('.mage-dropdown-dialog').removeClass('show'); $('.backdrop').removeClass('show'); $('.new-minicart-popup .close-minicart').removeClass('show'); $('body').removeClass('no-scroll'); } }, 15000); var clickedButton = $(document.activeElement).attr('name'); if (clickedButton === 'addtocartform') { window.location.href = '/checkout/cart'; } self.enableAddToCartButton(form); } }); }, /** * @param {String} form */ enableAddToCartButton: function (form) { var addToCartButtonTextAdded = this.options.addToCartButtonTextAdded || $t('Added'), self = this, addToCartButton = $(form).find(this.options.addToCartButtonSelector); //addToCartButton.find('span').text(addToCartButtonTextAdded); addToCartButton.prop('title', addToCartButtonTextAdded); setTimeout(function () { //var addToCartButtonTextDefault = self.options.addToCartButtonTextDefault || $t('Comprar e Receber'); var addToCartButtonTextDefault = self.options.addToCartButtonTextDefault || $t('Comprar'); addToCartButton.removeClass(self.options.addToCartButtonDisabledClass); //addToCartButton.find('span').text(addToCartButtonTextDefault); addToCartButton.prop('title', addToCartButtonTextDefault); }, 1000); }, /** * @param {String} form */ disableAddToCartButton: function (form) { var addToCartButtonTextWhileAdding = this.options.addToCartButtonTextWhileAdding || $t('Adding...'), addToCartButton = $(form).find(this.options.addToCartButtonSelector); addToCartButton.addClass(this.options.addToCartButtonDisabledClass); //addToCartButton.find('span').text(addToCartButtonTextWhileAdding); addToCartButton.prop('title', addToCartButtonTextWhileAdding); }, getInstallments: function () { $('.minicart-installments').empty(); setTimeout(function(){ if (!$(".minicart-installments").hasClass("show")) { $('.minicart-installments').toggleClass('show'); } }, 1000); $.ajax({ url: '/installments/ajax/index', method: 'GET', dataType: 'json', success: function (response) { $('.minicart-installments').append(response); }, error: function (xhr, status, error) { console.error('Erro:', error); } }); } }); return $.mage.catalogAddToCart; } });