CYS: no highlight the pattern when it is added (#48802)
* CYS: Improve Block Toolbar logic * CYS: no highlight pattern when it is added * Add changefile(s) from automation for the following project(s): woocommerce --------- Co-authored-by: github-actions <github-actions@github.com>
This commit is contained in:
parent
5b6797dc22
commit
d4128118c1
|
@ -1,7 +1,13 @@
|
||||||
/**
|
/**
|
||||||
* External dependencies
|
* External dependencies
|
||||||
*/
|
*/
|
||||||
import { useCallback, useMemo, useRef, useState } from '@wordpress/element';
|
import {
|
||||||
|
useCallback,
|
||||||
|
useEffect,
|
||||||
|
useMemo,
|
||||||
|
useRef,
|
||||||
|
useState,
|
||||||
|
} from '@wordpress/element';
|
||||||
import { useSelect, useDispatch, select } from '@wordpress/data';
|
import { useSelect, useDispatch, select } from '@wordpress/data';
|
||||||
import { BlockInstance, cloneBlock } from '@wordpress/blocks';
|
import { BlockInstance, cloneBlock } from '@wordpress/blocks';
|
||||||
import { close } from '@wordpress/icons';
|
import { close } from '@wordpress/icons';
|
||||||
|
@ -13,7 +19,9 @@ import {
|
||||||
unlock,
|
unlock,
|
||||||
// @ts-expect-error No types for this exist yet.
|
// @ts-expect-error No types for this exist yet.
|
||||||
} from '@wordpress/edit-site/build-module/lock-unlock';
|
} from '@wordpress/edit-site/build-module/lock-unlock';
|
||||||
|
// @ts-expect-error No types for this exist yet.
|
||||||
|
// eslint-disable-next-line @woocommerce/dependency-group
|
||||||
|
import { useIsSiteEditorLoading } from '@wordpress/edit-site/build-module/components/layout/hooks';
|
||||||
// eslint-disable-next-line @woocommerce/dependency-group
|
// eslint-disable-next-line @woocommerce/dependency-group
|
||||||
import {
|
import {
|
||||||
store as coreStore,
|
store as coreStore,
|
||||||
|
@ -53,8 +61,48 @@ export const SidebarPatternScreen = ( { category }: { category: string } ) => {
|
||||||
currentTemplate?.id ?? ''
|
currentTemplate?.id ?? ''
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const blockToScroll = useRef< string | null >( null );
|
||||||
|
|
||||||
|
const isEditorLoading = useIsSiteEditorLoading();
|
||||||
|
|
||||||
|
const isSpinnerVisible = isLoading || isEditorLoading;
|
||||||
|
|
||||||
|
useEffect( () => {
|
||||||
|
if ( isEditorLoading ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const iframe = window.document.querySelector(
|
||||||
|
'.woocommerce-customize-store-assembler > iframe[name="editor-canvas"]'
|
||||||
|
) as HTMLIFrameElement;
|
||||||
|
|
||||||
|
const blockList = iframe?.contentWindow?.document.body.querySelector(
|
||||||
|
'.block-editor-block-list__layout'
|
||||||
|
);
|
||||||
|
|
||||||
|
const observer = new MutationObserver( () => {
|
||||||
|
if ( blockToScroll.current ) {
|
||||||
|
const block = blockList?.querySelector(
|
||||||
|
`[id="block-${ blockToScroll.current }"]`
|
||||||
|
);
|
||||||
|
|
||||||
|
if ( block ) {
|
||||||
|
block.scrollIntoView();
|
||||||
|
blockToScroll.current = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
|
if ( blockList ) {
|
||||||
|
observer.observe( blockList, { childList: true } );
|
||||||
|
}
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
observer.disconnect();
|
||||||
|
};
|
||||||
|
}, [ isEditorLoading ] );
|
||||||
|
|
||||||
// @ts-expect-error No types for this exist yet.
|
// @ts-expect-error No types for this exist yet.
|
||||||
const { selectBlock, insertBlocks } = useDispatch( blockEditorStore );
|
const { insertBlocks } = useDispatch( blockEditorStore );
|
||||||
|
|
||||||
const insertableIndex = useMemo( () => {
|
const insertableIndex = useMemo( () => {
|
||||||
return blocks.findLastIndex(
|
return blocks.findLastIndex(
|
||||||
|
@ -72,11 +120,11 @@ export const SidebarPatternScreen = ( { category }: { category: string } ) => {
|
||||||
( blockInstance: BlockInstance ) => cloneBlock( blockInstance )
|
( blockInstance: BlockInstance ) => cloneBlock( blockInstance )
|
||||||
);
|
);
|
||||||
|
|
||||||
insertBlocks( cloneBlocks, insertableIndex );
|
insertBlocks( cloneBlocks, insertableIndex, undefined, false );
|
||||||
|
|
||||||
selectBlock( cloneBlocks.blocks[ 0 ].clientId, -1 );
|
blockToScroll.current = cloneBlocks[ 0 ].clientId;
|
||||||
},
|
},
|
||||||
[ insertBlocks, insertableIndex, selectBlock ]
|
[ insertBlocks, insertableIndex ]
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -125,12 +173,12 @@ export const SidebarPatternScreen = ( { category }: { category: string } ) => {
|
||||||
}
|
}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
{ isLoading && (
|
{ isSpinnerVisible && (
|
||||||
<span className="components-placeholder__preview">
|
<span className="components-placeholder__preview">
|
||||||
<Spinner />
|
<Spinner />
|
||||||
</span>
|
</span>
|
||||||
) }
|
) }
|
||||||
{ ! isLoading && (
|
{ ! isSpinnerVisible && (
|
||||||
<BlockPatternList
|
<BlockPatternList
|
||||||
shownPatterns={ patterns.slice( 0, patternPagination ) }
|
shownPatterns={ patterns.slice( 0, patternPagination ) }
|
||||||
blockPatterns={ patterns.slice( 0, patternPagination ) }
|
blockPatterns={ patterns.slice( 0, patternPagination ) }
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
Significance: minor
|
||||||
|
Type: update
|
||||||
|
|
||||||
|
CYS: no highlight the pattern when it is added.
|
Loading…
Reference in New Issue