-
Notifications
You must be signed in to change notification settings - Fork 4.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Position: Refactor "Position" controls panel to use ToolsPanel
instead of PanelBody
#67967
base: trunk
Are you sure you want to change the base?
Position: Refactor "Position" controls panel to use ToolsPanel
instead of PanelBody
#67967
Conversation
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.
To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. |
ToolsPanel
instead of PanelBody
ToolsPanel
instead of PanelBody
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Before this update the position control also allowed you to update its value when multiple group blocks (blocks that support position) were selected. That code has been removed here.
For a single block this already works well. But we need to also handle multi block selection again :)
Before this update ( Trunk Branch ):After this update ( The current PR ):As demonstrated in the GIFs above, the position control indeed is capable of updating values when multiple group blocks are selected. It's also found to be working with 2 Group Blocks and 1 Row Block together. Analysis of removed code:const [ initialOpen, setInitialOpen ] = useState();
// Determine whether the panel should be expanded.
const { multiSelectedBlocks } = useSelect( ( select ) => {
const { getBlocksByClientId, getSelectedBlockClientIds } =
select( blockEditorStore );
const clientIds = getSelectedBlockClientIds();
return {
multiSelectedBlocks: getBlocksByClientId( clientIds ),
};
}, [] ); The above block is responsible to return the blocks that are currently selected. useLayoutEffect( () => {
// If any selected block has a position set, open the panel by default.
// The first block's value will still be used within the control though.
if ( initialOpen === undefined ) {
setInitialOpen(
multiSelectedBlocks.some(
( { attributes } ) => !! attributes?.style?.position?.type
)
);
}
}, [ initialOpen, multiSelectedBlocks, setInitialOpen ] ); This block of code toggles the state This toggled state is used as an initial value for the <PanelBody
className="block-editor-block-inspector__position"
title={ __( 'Position' ) }
initialOpen={ initialOpen ?? false }
>
<InspectorControls.Slot group="position" />
</PanelBody> But, we don't need the initialOpen prop, hence, the above code is not required when using the ToolsPanel component, and hence was removed. As per my understanding, it has nothing to do with being able to update multiple selected blocks. Please let me know if I'm missing out something in my approach, but as per the comment, @fabiankaegy mentioned the component now does not support updating position when multiple blocks are selected, but that doesn't seem to be the case and multi-block selection + updation, in my opinion is working properly as demonstrated in the 2nd GIF. Can you please provide a screencast for my reference, if this doesn't answer the bug that you've mentioned? CC: @fabiankaegy |
Hi @fabiankaegy, circling back to check if the above comment resolves this review. Please let me know if any changes still need to be made. |
Fixes: #67950
What?
This PR introduces the usage of
ToolsPanel
instead ofPanelBody
inside thePosition
block support UI.Why?
This PR is a part of #67813 which standardizes the usage of
ToolsPanel
insideBlock Support UI
.How?
PanelBody
is replaced with the correspondingToolsPanel
component.Testing Instructions
ToolsPanel
component.Screencast
Screen.Recording.2024-12-13.at.4.03.43.PM.mov