Skip to content

Commit aa0abb9

Browse files
authored
Light block: introduce useBlockWrapperProps (#23034)
* useBlockProps * Restore delete behaviour * Rename * Address feedback * Avoid inline hook calls * Convert recently added blocks * Rebase errors
1 parent 7491f3c commit aa0abb9

34 files changed

Lines changed: 472 additions & 338 deletions

File tree

packages/block-editor/src/components/block-list/block-wrapper.js

Lines changed: 200 additions & 178 deletions
Large diffs are not rendered by default.

packages/block-editor/src/components/block-list/block-wrapper.native.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
*/
44
import ELEMENTS from './block-wrapper-elements';
55

6+
export function useBlockWrapperProps( props = {} ) {
7+
return props;
8+
}
9+
610
const ExtendedBlockComponent = ELEMENTS.reduce( ( acc, element ) => {
711
acc[ element ] = element;
812
return acc;

packages/block-editor/src/components/block-list/block.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* External dependencies
33
*/
44
import classnames from 'classnames';
5+
import { omit } from 'lodash';
56

67
/**
78
* WordPress dependencies
@@ -210,7 +211,7 @@ function BlockListBlock( {
210211
name,
211212
mode,
212213
blockTitle: blockType.title,
213-
wrapperProps,
214+
wrapperProps: omit( wrapperProps, [ 'data-align' ] ),
214215
};
215216
const memoizedValue = useMemo( () => value, Object.values( value ) );
216217

packages/block-editor/src/components/index.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,10 @@ export { default as __experimentalPreviewOptions } from './preview-options';
6868
export { default as __experimentalUseResizeCanvas } from './use-resize-canvas';
6969
export { default as BlockInspector } from './block-inspector';
7070
export { default as BlockList } from './block-list';
71-
export { Block as __experimentalBlock } from './block-list/block-wrapper';
71+
export {
72+
Block as __experimentalBlock,
73+
useBlockWrapperProps as __experimentalUseBlockWrapperProps,
74+
} from './block-list/block-wrapper';
7275
export { default as BlockMover } from './block-mover';
7376
export { default as BlockPreview } from './block-preview';
7477
export { default as BlockSelectionClearer } from './block-selection-clearer';

packages/block-editor/src/components/index.native.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,10 @@ export { default as BlockStyles } from './block-styles';
5555
export { default as DefaultBlockAppender } from './default-block-appender';
5656
export { default as __unstableEditorStyles } from './editor-styles';
5757
export { default as Inserter } from './inserter';
58-
export { Block as __experimentalBlock } from './block-list/block-wrapper';
58+
export {
59+
Block as __experimentalBlock,
60+
useBlockWrapperProps as __experimentalUseBlockWrapperProps,
61+
} from './block-list/block-wrapper';
5962
export { default as FloatingToolbar } from './floating-toolbar';
6063

6164
// State Related Components

packages/block-editor/src/components/rich-text/index.js

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,22 @@ function RichTextWrapper(
128128
__unstableEmbedURLOnPaste,
129129
__unstableDisableFormats: disableFormats,
130130
disableLineBreaks,
131+
unstableOnFocus,
132+
__unstableAllowPrefixTransformations,
133+
__unstableMultilineRootTag,
134+
// Native props.
135+
__unstableMobileNoFocusOnMount,
136+
deleteEnter,
137+
placeholderTextColor,
138+
textAlign,
139+
selectionColor,
140+
tagsToEliminate,
141+
rootTagsToEliminate,
142+
disableEditingMenu,
143+
fontSize,
144+
fontFamily,
145+
fontWeight,
146+
fontStyle,
131147
...props
132148
},
133149
forwardedRef
@@ -528,7 +544,6 @@ function RichTextWrapper(
528544

529545
const content = (
530546
<RichText
531-
{ ...props }
532547
clientId={ clientId }
533548
identifier={ identifier }
534549
ref={ ref }
@@ -563,6 +578,11 @@ function RichTextWrapper(
563578
disabled={ disabled }
564579
start={ startAttr }
565580
reversed={ reversed }
581+
unstableOnFocus={ unstableOnFocus }
582+
__unstableAllowPrefixTransformations={
583+
__unstableAllowPrefixTransformations
584+
}
585+
__unstableMultilineRootTag={ __unstableMultilineRootTag }
566586
// Native props.
567587
onCaretVerticalPositionChange={ onCaretVerticalPositionChange }
568588
blockIsSelected={
@@ -571,6 +591,18 @@ function RichTextWrapper(
571591
: blockIsSelected
572592
}
573593
shouldBlurOnUnmount={ shouldBlurOnUnmount }
594+
__unstableMobileNoFocusOnMount={ __unstableMobileNoFocusOnMount }
595+
deleteEnter={ deleteEnter }
596+
placeholderTextColor={ placeholderTextColor }
597+
textAlign={ textAlign }
598+
selectionColor={ selectionColor }
599+
tagsToEliminate={ tagsToEliminate }
600+
rootTagsToEliminate={ rootTagsToEliminate }
601+
disableEditingMenu={ disableEditingMenu }
602+
fontSize={ fontSize }
603+
fontFamily={ fontFamily }
604+
fontWeight={ fontWeight }
605+
fontStyle={ fontStyle }
574606
>
575607
{ ( {
576608
isSelected: nestedIsSelected,
@@ -599,6 +631,7 @@ function RichTextWrapper(
599631
{ ( { listBoxId, activeId, onKeyDown } ) => (
600632
<TagName
601633
{ ...editableProps }
634+
{ ...props }
602635
aria-autocomplete={
603636
listBoxId ? 'list' : undefined
604637
}

packages/block-library/src/audio/edit.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
MediaPlaceholder,
1717
MediaReplaceFlow,
1818
RichText,
19-
__experimentalBlock as Block,
19+
__experimentalUseBlockWrapperProps as useBlockWrapperProps,
2020
} from '@wordpress/block-editor';
2121
import { useEffect } from '@wordpress/element';
2222
import { __ } from '@wordpress/i18n';
@@ -41,7 +41,7 @@ function AudioEdit( {
4141
insertBlocksAfter,
4242
} ) {
4343
const { id, autoplay, caption, loop, preload, src } = attributes;
44-
44+
const blockWrapperProps = useBlockWrapperProps();
4545
const mediaUpload = useSelect( ( select ) => {
4646
const { getSettings } = select( 'core/block-editor' );
4747
return getSettings().mediaUpload;
@@ -116,7 +116,7 @@ function AudioEdit( {
116116
}
117117
if ( ! src ) {
118118
return (
119-
<Block.div>
119+
<div { ...blockWrapperProps }>
120120
<MediaPlaceholder
121121
icon={ <BlockIcon icon={ icon } /> }
122122
onSelect={ onSelectAudio }
@@ -127,7 +127,7 @@ function AudioEdit( {
127127
notices={ noticeUI }
128128
onError={ onUploadError }
129129
/>
130-
</Block.div>
130+
</div>
131131
);
132132
}
133133

@@ -175,7 +175,7 @@ function AudioEdit( {
175175
/>
176176
</PanelBody>
177177
</InspectorControls>
178-
<Block.figure>
178+
<figure { ...blockWrapperProps }>
179179
{ /*
180180
Disable the audio tag so the user clicking on it won't play the
181181
file or change the position slider when the controls are enabled.
@@ -197,7 +197,7 @@ function AudioEdit( {
197197
}
198198
/>
199199
) }
200-
</Block.figure>
200+
</figure>
201201
</>
202202
);
203203
}

packages/block-library/src/button/edit.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import {
2222
BlockControls,
2323
InspectorControls,
2424
RichText,
25-
__experimentalBlock as Block,
25+
__experimentalUseBlockWrapperProps as useBlockWrapperProps,
2626
__experimentalLinkControl as LinkControl,
2727
__experimentalUseEditorFeature as useEditorFeature,
2828
} from '@wordpress/block-editor';
@@ -197,11 +197,12 @@ function ButtonEdit( props ) {
197197
);
198198

199199
const colorProps = getColorAndStyleProps( attributes, colors, true );
200+
const blockWrapperProps = useBlockWrapperProps();
200201

201202
return (
202203
<>
203204
<ColorEdit { ...props } />
204-
<Block.div>
205+
<div { ...blockWrapperProps }>
205206
<RichText
206207
placeholder={ placeholder || __( 'Add text…' ) }
207208
value={ text }
@@ -231,7 +232,7 @@ function ButtonEdit( props ) {
231232
onMerge={ mergeBlocks }
232233
identifier="text"
233234
/>
234-
</Block.div>
235+
</div>
235236
<URLPicker
236237
url={ url }
237238
setAttributes={ setAttributes }

packages/block-library/src/buttons/edit.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import {
55
__experimentalAlignmentHookSettingsProvider as AlignmentHookSettingsProvider,
66
InnerBlocks,
7-
__experimentalBlock as Block,
7+
__experimentalUseBlockWrapperProps as useBlockWrapperProps,
88
} from '@wordpress/block-editor';
99

1010
/**
@@ -21,16 +21,17 @@ const alignmentHooksSetting = {
2121
};
2222

2323
function ButtonsEdit() {
24+
const blockWrapperProps = useBlockWrapperProps();
2425
return (
25-
<Block.div>
26+
<div { ...blockWrapperProps }>
2627
<AlignmentHookSettingsProvider value={ alignmentHooksSetting }>
2728
<InnerBlocks
2829
allowedBlocks={ ALLOWED_BLOCKS }
2930
template={ BUTTONS_TEMPLATE }
3031
orientation="horizontal"
3132
/>
3233
</AlignmentHookSettingsProvider>
33-
</Block.div>
34+
</div>
3435
);
3536
}
3637

packages/block-library/src/code/edit.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@ import { __ } from '@wordpress/i18n';
88
*/
99
import {
1010
PlainText,
11-
__experimentalBlock as Block,
11+
__experimentalUseBlockWrapperProps as useBlockWrapperProps,
1212
} from '@wordpress/block-editor';
1313

1414
export default function CodeEdit( { attributes, setAttributes } ) {
15+
const blockWrapperProps = useBlockWrapperProps();
1516
return (
16-
<Block.pre>
17+
<pre { ...blockWrapperProps }>
1718
<PlainText
1819
__experimentalVersion={ 2 }
1920
tagName="code"
@@ -22,6 +23,6 @@ export default function CodeEdit( { attributes, setAttributes } ) {
2223
placeholder={ __( 'Write code…' ) }
2324
aria-label={ __( 'Code' ) }
2425
/>
25-
</Block.pre>
26+
</pre>
2627
);
2728
}

0 commit comments

Comments
 (0)