Skip to content

Commit 9b35bc6

Browse files
yogeshbhutkaryogeshbhutkartyxlamirkaMamaduka
authored
Media Replace Flow: Add custom toggle support and fix button height (#68084)
* Update background image control dropdown height to fit-content * Replace ToolbarButton with Button in MediaReplaceFlow component * Refactor MediaReplaceFlow to support dynamic button variants and update BackgroundImageControls to specify button variant * Refactor MediaReplaceFlow to set default button variant to 'toolbar' and remove unused default variant * Remove redundant height property from background image control dropdown styles * Refactor BackgroundImageControls and MediaReplaceFlow to improve button rendering and support custom toggle rendering * Remove unnecessary blank line in MediaReplaceFlow component * Update BackgroundImageControls to use 'ArrowDown' key for dropdown navigation * Media Replace Flow: Add custom toggle support and fix button height * added `renderToggle` prop details to readme * refactor: remove unused styles * style: increase dropdown toggle height to 40px Co-authored-by: yogeshbhutkar <[email protected]> Co-authored-by: tyxla <[email protected]> Co-authored-by: mirka <[email protected]> Co-authored-by: Mamaduka <[email protected]> Co-authored-by: juanfra <[email protected]>
1 parent 6eb365e commit 9b35bc6

File tree

5 files changed

+40
-19
lines changed

5 files changed

+40
-19
lines changed

packages/block-editor/src/components/background-image-control/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
Placeholder,
2525
Spinner,
2626
__experimentalDropdownContentWrapper as DropdownContentWrapper,
27+
Button,
2728
} from '@wordpress/components';
2829
import { __, _x, sprintf } from '@wordpress/i18n';
2930
import { store as noticesStore } from '@wordpress/notices';
@@ -378,6 +379,9 @@ function BackgroundImageControls( {
378379
/>
379380
}
380381
variant="secondary"
382+
renderToggle={ ( props ) => (
383+
<Button { ...props } __next40pxDefaultSize />
384+
) }
381385
onError={ onUploadError }
382386
onReset={ () => {
383387
closeAndFocus();

packages/block-editor/src/components/background-image-control/style.scss

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@
2323

2424
.components-dropdown {
2525
display: block;
26-
height: 36px;
26+
27+
.block-editor-global-styles-background-panel__dropdown-toggle {
28+
height: 40px;
29+
}
2730
}
2831
}
2932

@@ -44,7 +47,6 @@
4447

4548
.components-dropdown {
4649
display: block;
47-
height: 36px;
4850
}
4951

5052
button.components-button {

packages/block-editor/src/components/media-replace-flow/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,10 @@ If passed, children are rendered inside the dropdown.
9898
- Required: No
9999

100100
If passed, children are rendered inside the dropdown. If a function is provided for this prop, it will receive an object with the `onClose` prop as an argument.
101+
102+
### renderToggle
103+
104+
- Type: `func`
105+
- Required: No
106+
107+
If passed, it will be used to render the provided button instead of the default one. It should accept and pass through `button` props to a `button` element.

packages/block-editor/src/components/media-replace-flow/index.js

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
/**
22
* WordPress dependencies
33
*/
4-
import { useRef } from '@wordpress/element';
54
import { __, _x } from '@wordpress/i18n';
65
import { speak } from '@wordpress/a11y';
76
import {
87
FormFileUpload,
98
NavigableMenu,
109
MenuItem,
11-
ToolbarButton,
1210
Dropdown,
1311
withFilters,
12+
ToolbarButton,
1413
} from '@wordpress/components';
1514
import { useSelect, withDispatch } from '@wordpress/data';
1615
import { DOWN } from '@wordpress/keycodes';
@@ -55,9 +54,9 @@ const MediaReplaceFlow = ( {
5554
addToGallery,
5655
handleUpload = true,
5756
popoverProps,
57+
renderToggle,
5858
} ) => {
5959
const { getSettings } = useSelect( blockEditorStore );
60-
const editMediaButtonRef = useRef();
6160
const errorNoticeID = `block-editor/media-replace-flow/error-notice/${ ++uniqueId }`;
6261

6362
const onUploadError = ( message ) => {
@@ -133,17 +132,27 @@ const MediaReplaceFlow = ( {
133132
<Dropdown
134133
popoverProps={ popoverProps }
135134
contentClassName="block-editor-media-replace-flow__options"
136-
renderToggle={ ( { isOpen, onToggle } ) => (
137-
<ToolbarButton
138-
ref={ editMediaButtonRef }
139-
aria-expanded={ isOpen }
140-
aria-haspopup="true"
141-
onClick={ onToggle }
142-
onKeyDown={ openOnArrowDown }
143-
>
144-
{ name }
145-
</ToolbarButton>
146-
) }
135+
renderToggle={ ( { isOpen, onToggle } ) => {
136+
if ( renderToggle ) {
137+
return renderToggle( {
138+
'aria-expanded': isOpen,
139+
'aria-haspopup': 'true',
140+
onClick: onToggle,
141+
onKeyDown: openOnArrowDown,
142+
children: name,
143+
} );
144+
}
145+
return (
146+
<ToolbarButton
147+
aria-expanded={ isOpen }
148+
aria-haspopup="true"
149+
onClick={ onToggle }
150+
onKeyDown={ openOnArrowDown }
151+
>
152+
{ name }
153+
</ToolbarButton>
154+
);
155+
} }
147156
renderContent={ ( { onClose } ) => (
148157
<>
149158
<NavigableMenu className="block-editor-media-replace-flow__media-upload-menu">
@@ -222,7 +231,6 @@ const MediaReplaceFlow = ( {
222231
showSuggestions={ false }
223232
onChange={ ( { url } ) => {
224233
onSelectURL( url );
225-
editMediaButtonRef.current.focus();
226234
} }
227235
/>
228236
</form>

packages/block-library/src/post-template/block.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@
5050
},
5151
"__experimentalDefaultControls": {
5252
"blockGap": true,
53-
"padding" : false,
54-
"margin" : false
53+
"padding": false,
54+
"margin": false
5555
}
5656
},
5757
"interactivity": {

0 commit comments

Comments
 (0)