From 76d8efcec6a4f7a2d69120194f43714d1b197681 Mon Sep 17 00:00:00 2001 From: Kiril Zhelyazkov Date: Thu, 23 Apr 2020 11:08:17 +0300 Subject: [PATCH] fix: [#21810] Allow default pasting behaviour in FontSizePicker --- .../src/components/copy-handler/index.js | 120 +++++++++--------- 1 file changed, 63 insertions(+), 57 deletions(-) diff --git a/packages/block-editor/src/components/copy-handler/index.js b/packages/block-editor/src/components/copy-handler/index.js index be6e03097a4671..d65a1834e2142d 100644 --- a/packages/block-editor/src/components/copy-handler/index.js +++ b/packages/block-editor/src/components/copy-handler/index.js @@ -1,77 +1,83 @@ /** * WordPress dependencies */ +import { useRef } from '@wordpress/element'; import { serialize, pasteHandler } from '@wordpress/blocks'; import { documentHasSelection } from '@wordpress/dom'; -import { withDispatch } from '@wordpress/data'; -import { compose } from '@wordpress/compose'; +import { useDispatch, useSelect } from '@wordpress/data'; /** * Internal dependencies */ import { getPasteEventData } from '../../utils/get-paste-event-data'; -function CopyHandler( { children, handler } ) { - return ( -
- { children } -
- ); -} +function CopyHandler( { children } ) { + const containerRef = useRef(); + + const { + getBlocksByClientId, + getSelectedBlockClientIds, + hasMultiSelection, + getSettings, + } = useSelect( ( select ) => select( 'core/block-editor' ), [] ); + + const { removeBlocks, replaceBlocks } = useDispatch( 'core/block-editor' ); -export default compose( [ - withDispatch( ( dispatch, ownProps, { select } ) => { - const { - getBlocksByClientId, - getSelectedBlockClientIds, - hasMultiSelection, - getSettings, - } = select( 'core/block-editor' ); - const { removeBlocks, replaceBlocks } = dispatch( 'core/block-editor' ); - const { - __experimentalCanUserUseUnfilteredHTML: canUserUseUnfilteredHTML, - } = getSettings(); + const { + __experimentalCanUserUseUnfilteredHTML: canUserUseUnfilteredHTML, + } = getSettings(); - return { - handler( event ) { - const selectedBlockClientIds = getSelectedBlockClientIds(); + const handler = ( event ) => { + const selectedBlockClientIds = getSelectedBlockClientIds(); - if ( selectedBlockClientIds.length === 0 ) { - return; - } + if ( selectedBlockClientIds.length === 0 ) { + return; + } - // Always handle multiple selected blocks. - // Let native copy behaviour take over in input fields. - if ( ! hasMultiSelection() && documentHasSelection() ) { - return; - } + // Always handle multiple selected blocks. + // Let native copy behaviour take over in input fields. + if ( ! hasMultiSelection() && documentHasSelection() ) { + return; + } - event.preventDefault(); + if ( ! containerRef.current.contains( event.target ) ) { + return; + } + event.preventDefault(); - if ( event.type === 'copy' || event.type === 'cut' ) { - const blocks = getBlocksByClientId( - selectedBlockClientIds - ); - const serialized = serialize( blocks ); + if ( event.type === 'copy' || event.type === 'cut' ) { + const blocks = getBlocksByClientId( selectedBlockClientIds ); + const serialized = serialize( blocks ); - event.clipboardData.setData( 'text/plain', serialized ); - event.clipboardData.setData( 'text/html', serialized ); - } + event.clipboardData.setData( 'text/plain', serialized ); + event.clipboardData.setData( 'text/html', serialized ); + } - if ( event.type === 'cut' ) { - removeBlocks( selectedBlockClientIds ); - } else if ( event.type === 'paste' ) { - const { plainText, html } = getPasteEventData( event ); - const blocks = pasteHandler( { - HTML: html, - plainText, - mode: 'BLOCKS', - canUserUseUnfilteredHTML, - } ); + if ( event.type === 'cut' ) { + removeBlocks( selectedBlockClientIds ); + } else if ( event.type === 'paste' ) { + const { plainText, html } = getPasteEventData( event ); + const blocks = pasteHandler( { + HTML: html, + plainText, + mode: 'BLOCKS', + canUserUseUnfilteredHTML, + } ); + + replaceBlocks( selectedBlockClientIds, blocks ); + } + }; + + return ( +
+ { children } +
+ ); +} - replaceBlocks( selectedBlockClientIds, blocks ); - } - }, - }; - } ), -] )( CopyHandler ); +export default CopyHandler;