From 117e6527e8b15d45a03fd4d5d7bbbd4314d35f0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ella=20van=C2=A0Durpe?= Date: Mon, 25 Jul 2022 21:19:46 +0200 Subject: [PATCH 1/4] Transforms: add group unwrap --- packages/block-library/src/group/transforms.js | 7 +++++++ packages/blocks/src/api/factory.js | 12 +++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/block-library/src/group/transforms.js b/packages/block-library/src/group/transforms.js index e71f55202c2216..4c838c1c3de79e 100644 --- a/packages/block-library/src/group/transforms.js +++ b/packages/block-library/src/group/transforms.js @@ -47,6 +47,13 @@ const transforms = { }, }, ], + to: [ + { + type: 'block', + blocks: [ '*' ], + transform: ( attributes, innerBlocks ) => innerBlocks, + }, + ], }; export default transforms; diff --git a/packages/blocks/src/api/factory.js b/packages/blocks/src/api/factory.js index ed0cb2ae4f624b..e8bd813d205c57 100644 --- a/packages/blocks/src/api/factory.js +++ b/packages/blocks/src/api/factory.js @@ -210,6 +210,7 @@ const isPossibleTransformForSource = ( transform, direction, blocks ) => { // a Grouping block. if ( ! isMultiBlock && + direction === 'from' && isContainerGroupBlock( sourceBlock.name ) && isContainerGroupBlock( transform.blockName ) ) { @@ -555,9 +556,14 @@ export function switchToBlockType( blocks, name ) { return null; } - const hasSwitchedBlock = - name === '*' || - some( transformationResults, ( result ) => result.name === name ); + if ( name === '*' ) { + return transformationResults; + } + + const hasSwitchedBlock = some( + transformationResults, + ( result ) => result.name === name + ); // Ensure that at least one block object returned by the transformation has // the expected "destination" block type. From 301f7aa21b98f90fe5dd16dd48b012d918cae5f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ella=20van=C2=A0Durpe?= Date: Tue, 26 Jul 2022 13:24:59 +0200 Subject: [PATCH 2/4] Try fixing tests --- packages/blocks/src/api/factory.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/blocks/src/api/factory.js b/packages/blocks/src/api/factory.js index e8bd813d205c57..d989337ab369d6 100644 --- a/packages/blocks/src/api/factory.js +++ b/packages/blocks/src/api/factory.js @@ -491,8 +491,7 @@ export function switchToBlockType( blocks, name ) { transformationsTo, ( t ) => t.type === 'block' && - ( isWildcardBlockTransform( t ) || - t.blocks.indexOf( name ) !== -1 ) && + t.blocks.indexOf( name ) !== -1 && ( ! isMultiBlock || t.isMultiBlock ) && maybeCheckTransformIsMatch( t, blocksArray ) ) || From cf2a74fee426cf0fbe59d5541807748dab4593c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ella=20van=C2=A0Durpe?= Date: Tue, 26 Jul 2022 14:01:52 +0200 Subject: [PATCH 3/4] Add comment --- packages/blocks/src/api/factory.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/blocks/src/api/factory.js b/packages/blocks/src/api/factory.js index d989337ab369d6..71b370f79c1cbd 100644 --- a/packages/blocks/src/api/factory.js +++ b/packages/blocks/src/api/factory.js @@ -555,6 +555,8 @@ export function switchToBlockType( blocks, name ) { return null; } + // When unwrapping blocks (`switchToBlockType( wrapperblocks, '*' )`), do + // not run filters on the unwrapped blocks. They shoud remain as they are. if ( name === '*' ) { return transformationResults; } From 81af99e71d5a1de6bb83b745886bc971bdaf0cdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ella=20van=C2=A0Durpe?= Date: Tue, 26 Jul 2022 16:08:07 +0200 Subject: [PATCH 4/4] Add e2e test --- .../specs/editor/blocks/group.test.js | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/packages/e2e-tests/specs/editor/blocks/group.test.js b/packages/e2e-tests/specs/editor/blocks/group.test.js index ad2bc8596ed6c2..142cfe79523df0 100644 --- a/packages/e2e-tests/specs/editor/blocks/group.test.js +++ b/packages/e2e-tests/specs/editor/blocks/group.test.js @@ -6,6 +6,8 @@ import { searchForBlock, getEditedPostContent, createNewPost, + pressKeyWithModifier, + transformBlockTo, } from '@wordpress/e2e-test-utils'; describe( 'Group', () => { @@ -40,4 +42,37 @@ describe( 'Group', () => { expect( await getEditedPostContent() ).toMatchSnapshot(); } ); + + it( 'can wrap in group and unwrap group', async () => { + await clickBlockAppender(); + await page.keyboard.type( '1' ); + await page.keyboard.press( 'Enter' ); + await page.keyboard.type( '2' ); + await pressKeyWithModifier( 'shift', 'ArrowUp' ); + await transformBlockTo( 'Group' ); + + expect( await getEditedPostContent() ).toMatchInlineSnapshot( ` + " +
+

1

+ + + +

2

+
+ " + ` ); + + await transformBlockTo( 'Unwrap' ); + + expect( await getEditedPostContent() ).toMatchInlineSnapshot( ` + " +

1

+ + + +

2

+ " + ` ); + } ); } );