From 9118349520d3ece3771e4764023f5fb90b9b12ec Mon Sep 17 00:00:00 2001 From: roykho Date: Wed, 24 Mar 2021 09:59:20 -0700 Subject: [PATCH] Remove duplicate notices from cart during ajax updates closes #28914 --- assets/js/frontend/cart.js | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/assets/js/frontend/cart.js b/assets/js/frontend/cart.js index b4455119c08..d3291238c8e 100644 --- a/assets/js/frontend/cart.js +++ b/assets/js/frontend/cart.js @@ -57,6 +57,28 @@ jQuery( function( $ ) { $node.removeClass( 'processing' ).unblock(); }; + /** + * Removes duplicate notices. + * + * @param {JQuery Object} notices + */ + var remove_duplicate_notices = function( notices ) { + var seen = []; + var new_notices = notices; + + notices.each( function( index ) { + var text = $( this ).text(); + + if ( 'undefined' === typeof seen[ text ] ) { + seen[ text ] = true; + } else { + new_notices.splice( index, 1 ); + } + } ); + + return notices; + }; + /** * Update the .woocommerce div with a string of html. * @@ -67,7 +89,7 @@ jQuery( function( $ ) { var $html = $.parseHTML( html_str ); var $new_form = $( '.woocommerce-cart-form', $html ); var $new_totals = $( '.cart_totals', $html ); - var $notices = $( '.woocommerce-error, .woocommerce-message, .woocommerce-info', $html ); + var $notices = remove_duplicate_notices( $( '.woocommerce-error, .woocommerce-message, .woocommerce-info', $html ) ); // No form, cannot do this. if ( $( '.woocommerce-cart-form' ).length === 0 ) {