diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/full-screen-loader.js b/app/code/Magento/Checkout/view/frontend/web/js/model/full-screen-loader.js index ca9d6493a16740f1a43555d84459df4403bd3c88..9005015d2460e12c5462551aecce97f1bd31c003 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/model/full-screen-loader.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/model/full-screen-loader.js @@ -24,7 +24,7 @@ define([ /** * Stop full page loader action * - * @param {Boolean} forceStop + * @param {Boolean} [forceStop] */ stopLoader: function (forceStop) { var $elem = $(containerId), diff --git a/app/code/Magento/SalesRule/view/frontend/web/js/action/cancel-coupon.js b/app/code/Magento/SalesRule/view/frontend/web/js/action/cancel-coupon.js index ed5744feb6ce84df31a5a59b42f520bb97316792..d1e294c9a8f0c1dc4edf82e52cbe509b09da8fbe 100644 --- a/app/code/Magento/SalesRule/view/frontend/web/js/action/cancel-coupon.js +++ b/app/code/Magento/SalesRule/view/frontend/web/js/action/cancel-coupon.js @@ -17,16 +17,20 @@ define( 'mage/storage', 'Magento_Checkout/js/action/get-payment-information', 'Magento_Checkout/js/model/totals', - 'mage/translate' + 'mage/translate', + 'Magento_Checkout/js/model/full-screen-loader' ], - function ($, quote, urlManager, errorProcessor, messageContainer, storage, getPaymentInformationAction, totals, $t) { + function ($, quote, urlManager, errorProcessor, messageContainer, storage, getPaymentInformationAction, totals, $t, + fullScreenLoader) { 'use strict'; - return function (isApplied, isLoading) { + return function (isApplied) { var quoteId = quote.getQuoteId(), url = urlManager.getCancelCouponUrl(quoteId), message = $t('Your coupon was successfully removed.'); + messageContainer.clear(); + fullScreenLoader.startLoader(); return storage.delete( url, @@ -39,6 +43,7 @@ define( $.when(deferred).done(function () { isApplied(false); totals.isLoading(false); + fullScreenLoader.stopLoader(); }); messageContainer.addSuccessMessage({ 'message': message @@ -47,12 +52,9 @@ define( ).fail( function (response) { totals.isLoading(false); + fullScreenLoader.stopLoader(); errorProcessor.process(response, messageContainer); } - ).always( - function () { - isLoading(false); - } ); }; } diff --git a/app/code/Magento/SalesRule/view/frontend/web/js/action/set-coupon-code.js b/app/code/Magento/SalesRule/view/frontend/web/js/action/set-coupon-code.js index 606fe4013ea762c5460c49202907463d7c7952f2..a2b7ff19f2139ffa7e23b37eda039d5b9ccc32a8 100644 --- a/app/code/Magento/SalesRule/view/frontend/web/js/action/set-coupon-code.js +++ b/app/code/Magento/SalesRule/view/frontend/web/js/action/set-coupon-code.js @@ -18,25 +18,22 @@ define( 'mage/storage', 'mage/translate', 'Magento_Checkout/js/action/get-payment-information', - 'Magento_Checkout/js/model/totals' + 'Magento_Checkout/js/model/totals', + 'Magento_Checkout/js/model/full-screen-loader' ], function ( - ko, - $, - quote, - urlManager, - errorProcessor, - messageContainer, - storage, - $t, - getPaymentInformationAction, - totals + ko, $, quote, urlManager, errorProcessor, messageContainer, storage, $t, getPaymentInformationAction, totals, + fullScreenLoader ) { 'use strict'; - return function (couponCode, isApplied, isLoading) { - var quoteId = quote.getQuoteId(); - var url = urlManager.getApplyCouponUrl(couponCode, quoteId); - var message = $t('Your coupon was successfully applied.'); + + return function (couponCode, isApplied) { + var quoteId = quote.getQuoteId(), + url = urlManager.getApplyCouponUrl(couponCode, quoteId), + message = $t('Your coupon was successfully applied.'); + + fullScreenLoader.startLoader(); + return storage.put( url, {}, @@ -45,19 +42,22 @@ define( function (response) { if (response) { var deferred = $.Deferred(); - isLoading(false); + isApplied(true); totals.isLoading(true); getPaymentInformationAction(deferred); $.when(deferred).done(function () { + fullScreenLoader.stopLoader(); totals.isLoading(false); }); - messageContainer.addSuccessMessage({'message': message}); + messageContainer.addSuccessMessage({ + 'message': message + }); } } ).fail( function (response) { - isLoading(false); + fullScreenLoader.stopLoader(); totals.isLoading(false); errorProcessor.process(response, messageContainer); } diff --git a/app/code/Magento/SalesRule/view/frontend/web/js/view/payment/discount.js b/app/code/Magento/SalesRule/view/frontend/web/js/view/payment/discount.js index 8e8c0798ff3b59ce0ffa0a803242abe1d02fcee7..6dc973a7a1e4298469251f71f6e26f09a95cc5d0 100644 --- a/app/code/Magento/SalesRule/view/frontend/web/js/view/payment/discount.js +++ b/app/code/Magento/SalesRule/view/frontend/web/js/view/payment/discount.js @@ -13,49 +13,53 @@ define( ], function ($, ko, Component, quote, setCouponCodeAction, cancelCouponAction) { 'use strict'; - var totals = quote.getTotals(); - var couponCode = ko.observable(null); + + var totals = quote.getTotals(), + couponCode = ko.observable(null), + isApplied = ko.observable(couponCode() != null); + if (totals()) { couponCode(totals()['coupon_code']); } - var isApplied = ko.observable(couponCode() != null); - var isLoading = ko.observable(false); + return Component.extend({ defaults: { template: 'Magento_SalesRule/payment/discount' }, couponCode: couponCode, + /** * Applied flag */ isApplied: isApplied, - isLoading: isLoading, + /** * Coupon code application procedure */ apply: function() { if (this.validate()) { - isLoading(true); - setCouponCodeAction(couponCode(), isApplied, isLoading); + setCouponCodeAction(couponCode(), isApplied); } }, + /** * Cancel using coupon */ cancel: function() { if (this.validate()) { - isLoading(true); couponCode(''); - cancelCouponAction(isApplied, isLoading); + cancelCouponAction(isApplied); } }, + /** * Coupon form validation * - * @returns {boolean} + * @returns {Boolean} */ - validate: function() { + validate: function () { var form = '#discount-form'; + return $(form).validation() && $(form).validation('isValid'); } }); diff --git a/app/code/Magento/SalesRule/view/frontend/web/template/payment/discount.html b/app/code/Magento/SalesRule/view/frontend/web/template/payment/discount.html index d6bc4c764d5714382d017adce856deaf84c8b3ff..4ba38906fe9c1e98c8d248574585cc01ef815914 100644 --- a/app/code/Magento/SalesRule/view/frontend/web/template/payment/discount.html +++ b/app/code/Magento/SalesRule/view/frontend/web/template/payment/discount.html @@ -15,7 +15,7 @@ <!-- ko foreach: getRegion('messages') --> <!-- ko template: getTemplate() --><!-- /ko --> <!--/ko--> - <form class="form form-discount" id="discount-form" data-bind="blockLoader: isLoading"> + <form class="form form-discount" id="discount-form"> <div class="payment-option-inner"> <div class="field"> <label class="label" for="discount-code"> diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Payment.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Payment.php index f1776d2bf933e17d63006948795418309348ffe3..cad6dda90459845718bc3ab1e3ac2952cca16640 100644 --- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Payment.php +++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Payment.php @@ -85,6 +85,7 @@ class Payment extends Block $paymentLabelSelector = sprintf($this->paymentMethodLabel, $payment['method']); try { + $this->waitForElementNotVisible($this->waitElement); $this->waitForElementVisible($paymentLabelSelector); } catch (\Exception $exception) { throw new \Exception('Such payment method is absent.');