diff --git a/assets/js/base/utils/lazy-load-script.ts b/assets/js/base/utils/lazy-load-script.ts index 706b1d305e4..9758ecfd7f6 100644 --- a/assets/js/base/utils/lazy-load-script.ts +++ b/assets/js/base/utils/lazy-load-script.ts @@ -26,8 +26,16 @@ interface AppendScriptAttributesParam { * This function checks whether an element matching that selector exists. * Useful to know if a script has already been appended to the page. */ -const isScriptTagInDOM = ( scriptId: string ): boolean => { - const scriptElements = document.querySelectorAll( `script#${ scriptId }` ); +const isScriptTagInDOM = ( scriptId: string, src = '' ): boolean => { + const srcParts = src.split( '?' ); + if ( srcParts?.length > 1 ) { + src = srcParts[ 0 ]; + } + const selector = src + ? `script#${ scriptId }, script[src*="${ src }"]` + : `script#${ scriptId }`; + const scriptElements = document.querySelectorAll( selector ); + return scriptElements.length > 0; }; @@ -37,7 +45,10 @@ const isScriptTagInDOM = ( scriptId: string ): boolean => { */ const appendScript = ( attributes: AppendScriptAttributesParam ): void => { // Abort if id is not valid or a script with the same id exists. - if ( ! isString( attributes.id ) || isScriptTagInDOM( attributes.id ) ) { + if ( + ! isString( attributes.id ) || + isScriptTagInDOM( attributes.id, attributes?.src ) + ) { return; } const scriptElement = document.createElement( 'script' ); @@ -92,7 +103,7 @@ const lazyLoadScript = ( { translations, }: LazyLoadScriptParams ): Promise< void > => { return new Promise( ( resolve, reject ) => { - if ( isScriptTagInDOM( `${ handle }-js` ) ) { + if ( isScriptTagInDOM( `${ handle }-js`, src ) ) { resolve(); } diff --git a/assets/js/base/utils/preload-script.ts b/assets/js/base/utils/preload-script.ts index 12b5617b394..bd120523985 100644 --- a/assets/js/base/utils/preload-script.ts +++ b/assets/js/base/utils/preload-script.ts @@ -13,9 +13,12 @@ const preloadScript = ( { src, version, }: PreloadScriptParams ): void => { - const handleScriptElements = document.querySelectorAll( - `#${ handle }-js, #${ handle }-js-prefetch` - ); + const srcParts = src.split( '?' ); + if ( srcParts?.length > 1 ) { + src = srcParts[ 0 ]; + } + const selector = `#${ handle }-js, #${ handle }-js-prefetch, script[src*="${ src }"]`; + const handleScriptElements = document.querySelectorAll( selector ); if ( handleScriptElements.length === 0 ) { const prefetchLink = document.createElement( 'link' ); diff --git a/docs/internal-developers/testing/releases/876.md b/docs/internal-developers/testing/releases/876.md new file mode 100644 index 00000000000..067a53eab5e --- /dev/null +++ b/docs/internal-developers/testing/releases/876.md @@ -0,0 +1,15 @@ +# Testing notes and ZIP for release 8.7.6 + +Zip file for testing: [woocommerce-gutenberg-products-block.zip](https://github.com/woocommerce/woocommerce-blocks/files/10134947/woocommerce-gutenberg-products-block.zip) + +## Feature plugin and package inclusion in WooCommerce + +### Mini Cart block: fix compatibility with Page Optimize and Product Bundles plugins [#7794](https://github.com/woocommerce/woocommerce-blocks/pull/7794) [#7813](https://github.com/woocommerce/woocommerce-blocks/pull/7813) + +1. Install [Page Optimize](https://wordpress.org/plugins/page-optimize/) and [Product Bundles](https://woocommerce.com/products/product-bundles/). +2. Enable a block theme. +3. Customize the block theme and add the Mini Cart block in the header via Site Editor. +4. Save the changes. +5. In the frontend, lick on the Mini Cart. The drawer should open and show the "empty cart" message. +6. Go to the shop page and add a product to your cart. +7. Click on the Mini Cart. The drawer should open and show the product you just added. diff --git a/docs/internal-developers/testing/releases/README.md b/docs/internal-developers/testing/releases/README.md index d19815501fc..7d8e9ec13c9 100644 --- a/docs/internal-developers/testing/releases/README.md +++ b/docs/internal-developers/testing/releases/README.md @@ -97,6 +97,7 @@ Every release includes specific testing instructions for new features and bug fi - [8.7.3](./873.md) - [8.7.4](./874.md) - [8.7.5](./875.md) + - [8.7.6](./876.md) diff --git a/package.json b/package.json index b97a8e82ca4..86763fb0772 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@woocommerce/block-library", "title": "WooCommerce Blocks", "author": "Automattic", - "version": "8.7.5", + "version": "8.7.6", "description": "WooCommerce blocks for the Gutenberg editor.", "homepage": "https://github.com/woocommerce/woocommerce-gutenberg-products-block/", "keywords": [ diff --git a/readme.txt b/readme.txt index 5ab4bd0e15f..909d8f2bba9 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: gutenberg, woocommerce, woo commerce, products, blocks, woocommerce blocks Requires at least: 6.0 Tested up to: 6.0 Requires PHP: 7.0 -Stable tag: 8.7.5 +Stable tag: 8.7.6 License: GPLv3 License URI: https://www.gnu.org/licenses/gpl-3.0.html @@ -80,6 +80,13 @@ Release and roadmap notes available on the [WooCommerce Developers Blog](https:/ == Changelog == += 8.7.6 - 2022-12-01 + +#### Bug Fixes + +- Mini Cart block: fix compatibility with Page Optimize and Product Bundles plugins [#7794](https://github.com/woocommerce/woocommerce-blocks/pull/7794) +- Mini Cart block: Load wc-blocks-registry package at the page's load instead of lazy load it [#7813](https://github.com/woocommerce/woocommerce-blocks/pull/7813) + = 8.7.5 - 2022-10-31 = #### Enhancements diff --git a/src/BlockTypes/MiniCart.php b/src/BlockTypes/MiniCart.php index 7de272f5684..ff2b8934b36 100644 --- a/src/BlockTypes/MiniCart.php +++ b/src/BlockTypes/MiniCart.php @@ -103,7 +103,7 @@ protected function get_block_type_script( $key = null ) { $script = [ 'handle' => 'wc-' . $this->block_name . '-block-frontend', 'path' => $this->asset_api->get_block_asset_build_path( $this->block_name . '-frontend' ), - 'dependencies' => [], + 'dependencies' => [ 'wc-blocks-registry' ], ]; return $key ? $script[ $key ] : $script; } @@ -273,7 +273,7 @@ protected function append_script_and_deps_src( $script ) { } } } - if ( ! $script->src ) { + if ( ! $script->src || 'wc-blocks-registry' === $script->handle ) { return; } diff --git a/src/Package.php b/src/Package.php index 4fb9620fe0a..a4badec7884 100644 --- a/src/Package.php +++ b/src/Package.php @@ -109,7 +109,7 @@ public static function container( $reset = false ) { NewPackage::class, function ( $container ) { // leave for automated version bumping. - $version = '8.7.5'; + $version = '8.7.6'; return new NewPackage( $version, dirname( __DIR__ ), diff --git a/woocommerce-gutenberg-products-block.php b/woocommerce-gutenberg-products-block.php index a314f3d5c13..97164368d89 100644 --- a/woocommerce-gutenberg-products-block.php +++ b/woocommerce-gutenberg-products-block.php @@ -3,7 +3,7 @@ * Plugin Name: WooCommerce Blocks * Plugin URI: https://github.com/woocommerce/woocommerce-gutenberg-products-block * Description: WooCommerce blocks for the Gutenberg editor. - * Version: 8.7.5 + * Version: 8.7.6 * Author: Automattic * Author URI: https://woocommerce.com * Text Domain: woo-gutenberg-products-block