Skip to content
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

Block Support Panels - Make block support tools panels compatible with multi-selection #37216

Merged

Conversation

aaronrobertshaw
Copy link
Contributor

@aaronrobertshaw aaronrobertshaw commented Dec 8, 2021

Fixes:

Depends on:

Description

The recent switch to using grouped inspector controls for the typography block support panel meant the typography controls were no longer included within the normal InspectorControls slot. As such, they didn't display when multi-block selections were made.

This PR adds the new grouped inspector controls slots into the block inspector for multi-selections. It also updates the BlockSupportToolsPanel to be compatible with multiple selected blocks.

How has this been tested?

  1. Create a new post and add multiple paragraph blocks
  2. Select a single paragraph block and adjust its typography ensuring that still functions
  3. Now select multiple paragraph blocks together
  4. The typography controls should still be present in the sidebar (they will display the options as per the first block selected in order of position on the page)
  5. Adjust the typography settings and ensure all selected blocks update accordingly
  6. Save the post and check blocks on the frontend
  7. Test resetting individual controls as well as the "reset all" option.

Screenshots

MultiSelectTypography

Types of changes

Bug fix.

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • I've tested my changes with keyboard and screen readers.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all *.native.js files for terms that need renaming or removal).

@aaronrobertshaw aaronrobertshaw added [Type] Bug An existing feature does not function as intended [Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi labels Dec 8, 2021
@aaronrobertshaw aaronrobertshaw self-assigned this Dec 8, 2021
@github-actions
Copy link

github-actions bot commented Dec 8, 2021

Size Change: +99 B (0%)

Total Size: 1.13 MB

Filename Size Change
build/block-editor/index.min.js 140 kB +99 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 960 B
build/admin-manifest/index.min.js 1.1 kB
build/annotations/index.min.js 2.75 kB
build/api-fetch/index.min.js 2.21 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.28 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/style-rtl.css 14.6 kB
build/block-editor/style.css 14.6 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 58 B
build/block-library/blocks/audio/editor.css 58 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 470 B
build/block-library/blocks/button/editor.css 470 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 B
build/block-library/blocks/buttons/editor-rtl.css 291 B
build/block-library/blocks/buttons/editor.css 291 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 134 B
build/block-library/blocks/code/theme.css 134 B
build/block-library/blocks/columns/editor-rtl.css 210 B
build/block-library/blocks/columns/editor.css 208 B
build/block-library/blocks/columns/style-rtl.css 502 B
build/block-library/blocks/columns/style.css 501 B
build/block-library/blocks/comment-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.22 kB
build/block-library/blocks/cover/style.css 1.22 kB
build/block-library/blocks/embed/editor-rtl.css 488 B
build/block-library/blocks/embed/editor.css 488 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 322 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 966 B
build/block-library/blocks/gallery/editor.css 970 B
build/block-library/blocks/gallery/style-rtl.css 1.63 kB
build/block-library/blocks/gallery/style.css 1.62 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 159 B
build/block-library/blocks/group/editor.css 159 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 810 B
build/block-library/blocks/image/editor.css 809 B
build/block-library/blocks/image/style-rtl.css 507 B
build/block-library/blocks/image/style.css 511 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B
build/block-library/blocks/latest-posts/editor.css 137 B
build/block-library/blocks/latest-posts/style-rtl.css 528 B
build/block-library/blocks/latest-posts/style.css 527 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 493 B
build/block-library/blocks/media-text/style.css 490 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 649 B
build/block-library/blocks/navigation-link/editor.css 650 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/view.min.js 343 B
build/block-library/blocks/navigation/editor-rtl.css 1.91 kB
build/block-library/blocks/navigation/editor.css 1.91 kB
build/block-library/blocks/navigation/style-rtl.css 1.69 kB
build/block-library/blocks/navigation/style.css 1.68 kB
build/block-library/blocks/navigation/view.min.js 2.82 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 377 B
build/block-library/blocks/page-list/editor.css 377 B
build/block-library/blocks/page-list/style-rtl.css 172 B
build/block-library/blocks/page-list/style.css 172 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 273 B
build/block-library/blocks/paragraph/style.css 273 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/style-rtl.css 446 B
build/block-library/blocks/post-comments-form/style.css 446 B
build/block-library/blocks/post-comments/style-rtl.css 507 B
build/block-library/blocks/post-comments/style.css 507 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 391 B
build/block-library/blocks/post-template/style.css 392 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 389 B
build/block-library/blocks/pullquote/style.css 388 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 273 B
build/block-library/blocks/query-pagination/style.css 269 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 187 B
build/block-library/blocks/quote/style.css 187 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 245 B
build/block-library/blocks/separator/style.css 245 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 744 B
build/block-library/blocks/site-logo/editor.css 744 B
build/block-library/blocks/site-logo/style-rtl.css 181 B
build/block-library/blocks/site-logo/style.css 181 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 670 B
build/block-library/blocks/social-links/editor.css 669 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB
build/block-library/blocks/social-links/style.css 1.32 kB
build/block-library/blocks/spacer/editor-rtl.css 307 B
build/block-library/blocks/spacer/editor.css 307 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 146 B
build/block-library/blocks/tag-cloud/style.css 146 B
build/block-library/blocks/template-part/editor-rtl.css 560 B
build/block-library/blocks/template-part/editor.css 559 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 569 B
build/block-library/blocks/video/editor.css 570 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/common-rtl.css 910 B
build/block-library/common.css 908 B
build/block-library/editor-rtl.css 10 kB
build/block-library/editor.css 10 kB
build/block-library/index.min.js 163 kB
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/style-rtl.css 10.8 kB
build/block-library/style.css 10.8 kB
build/block-library/theme-rtl.css 675 B
build/block-library/theme.css 679 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/blocks/index.min.js 46.3 kB
build/components/index.min.js 214 kB
build/components/style-rtl.css 15.5 kB
build/components/style.css 15.5 kB
build/compose/index.min.js 11.2 kB
build/core-data/index.min.js 13.2 kB
build/customize-widgets/index.min.js 11.4 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 631 B
build/data/index.min.js 7.49 kB
build/date/index.min.js 31.9 kB
build/deprecated/index.min.js 485 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.5 kB
build/edit-navigation/index.min.js 16 kB
build/edit-navigation/style-rtl.css 3.76 kB
build/edit-navigation/style.css 3.76 kB
build/edit-post/classic-rtl.css 492 B
build/edit-post/classic.css 494 B
build/edit-post/index.min.js 29.4 kB
build/edit-post/style-rtl.css 7.13 kB
build/edit-post/style.css 7.13 kB
build/edit-site/index.min.js 35.6 kB
build/edit-site/style-rtl.css 6.61 kB
build/edit-site/style.css 6.6 kB
build/edit-widgets/index.min.js 16.5 kB
build/edit-widgets/style-rtl.css 4.18 kB
build/edit-widgets/style.css 4.18 kB
build/editor/index.min.js 37.9 kB
build/editor/style-rtl.css 3.75 kB
build/editor/style.css 3.74 kB
build/element/index.min.js 3.29 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 6.58 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.63 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.71 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.8 kB
build/keycodes/index.min.js 1.39 kB
build/list-reusable-blocks/index.min.js 1.72 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.92 kB
build/notices/index.min.js 925 B
build/nux/index.min.js 2.08 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.84 kB
build/primitives/index.min.js 924 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.65 kB
build/reusable-blocks/index.min.js 2.22 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11 kB
build/server-side-render/index.min.js 1.57 kB
build/shortcode/index.min.js 1.49 kB
build/token-list/index.min.js 639 B
build/url/index.min.js 1.9 kB
build/viewport/index.min.js 1.05 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.15 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@aaronrobertshaw
Copy link
Contributor Author

I've split out the ToolsPanel specific changes from this PR into #37273.

@aaronrobertshaw aaronrobertshaw changed the title [WIP] Block Support Panels - Make block support tools panels compatible with multi-selection Block Support Panels - Make block support tools panels compatible with multi-selection Dec 10, 2021
@aaronrobertshaw aaronrobertshaw marked this pull request as ready for review December 10, 2021 07:20
@ramonjd
Copy link
Member

ramonjd commented Dec 12, 2021

Works as described for me:

✅ Select a single paragraph block and adjust its typography ensuring that still functions
✅ Now select multiple paragraph blocks together
✅ The typography controls should still be present in the sidebar (they will display the options as per the first block selected in order of position on the page)
✅ Adjust the typography settings and ensure all selected blocks update accordingly
✅ Save the post and check blocks on the frontend
✅ Test resetting individual controls as well as the "reset all" option.

I also tested multi-selecting other text-blocks (heading etc): the typography panel doesn't appear.

they will display the options as per the first block selected in order of position on the page

At first it threw me to see subsequent paragraphs' typography settings switch to the initial block's

Kapture 2021-12-13 at 09 12 38

I think my brain expected to see only the changed settings take effect, for example, if I only altered line height, then only the line height would change.

But I understand there needs to be some base value in the controls when multi-selecting and using the initial block's seems to me to be the most logical.

I'm not arguing for a change in functionality, just documenting. :)

Copy link
Contributor

@andrewserong andrewserong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work @aaronrobertshaw! The overall approach looks good to me, and the ToolsPanel / ToolsPanelItem behaviour worked correctly for me.

I noticed one issue with keyboard handling, which is that when updating a UnitControl with multiple blocks selected, pressing Backspace or Delete on my keyboard within the field, unintentionally winds up deleting the blocks instead of just the character in the input field:

Kapture 2021-12-13 at 11 17 19

I wasn't too sure where the fix should go for this, whether the individual UnitControl component needs to add an event.stopPropagation, or if we should do that within the BlockSupportToolsPanel?

@aaronrobertshaw
Copy link
Contributor Author

Thanks for testing @ramonjd and @andrewserong 🙇

I also tested multi-selecting other text-blocks (heading etc): the typography panel doesn't appear.

By this, I take it you mean mixing block types didn't display the typography panel? If I select multiple heading blocks I still get the typography panel in the block inspector.

I noticed one issue with keyboard handling, which is that when updating a UnitControl with multiple blocks selected, pressing Backspace or Delete on my keyboard within the field, unintentionally winds up deleting the blocks instead of just the character in the input field:

Nice catch!

I wasn't too sure where the fix should go for this, whether the individual UnitControl component needs to add an event.stopPropagation, or if we should do that within the BlockSupportToolsPanel?

This appears to affect more than just the UnitControl. Any field accepting keyboard input suffers from the same problem e.g. TextControl, ColorPicker inputs etc. There is a block editor keyboard shortcut for the del and backspace keys while more than one block is selected. It is this, that is being triggered and causing the block deletion.

I don't think it is feasible to rely on any input within the BlockInspector preventing propagation of keyboard events for just the del or backspace keys. Especially once we take into account 3rd party blocks etc. If all key presses weren't propagated we'd also then block other keyboard shortcuts such as cmd + s for saving etc.

This issue looks to be unrelated to this PR and probably needs a broader solution. It exists on trunk with the ColorPicker. Click on the color swatch, toggle the edit button for the color value in the picker and press the del key there to replicate.

There was a PR a few months ago switching shortcut handling to React events but this issue appears to pre-date that. I went back several months without finding a point that you could use del or backspace in a block inspector field without triggering the deletion of the multi-selection.

I've created an issue for this here: #37316

Moving forward, I don't think this issue needs to block this PR or #37273. What do you think?

@youknowriad do you have any thoughts on how best to prevent only the core/block-editor/delete-multi-selection event when attempting to clear inputs via the keyboard?

@ramonjd
Copy link
Member

ramonjd commented Dec 13, 2021

By this, I take it you mean mixing block types didn't display the typography panel? If I select multiple heading blocks I still get the typography panel in the block inspector.

Yes, thanks for interpreting my vague comment. 😆 I can confirm that selecting multiple text blocks of the same type (e.g, Heading) works as advertised as well.

@ramonjd
Copy link
Member

ramonjd commented Dec 13, 2021

I think I might have found another peculiarity, and it would be good to get a confidence check.

Selecting blocks by dragging upwards appears to reset styles.

It appears to happen when the last empty paragraph block is included in the multiple select (and thereafter even if the empty paragraph block isn't included in the selection) , and only when dragging upwards and not downwards.

Notice that the Typography panel is empty.

Kapture 2021-12-13 at 22 37 12

I checked on trunk and I can't replicate using color controls.

Kapture 2021-12-13 at 22 25 42

@aaronrobertshaw
Copy link
Contributor Author

I think I might have found another peculiarity, and it would be good to get a confidence check.

Thanks for bringing that one to light @ramonjd 👍

I might have hit that one as well early on when I was putting this together but when I got to testing I couldn't replicate it.

I'll dig into this tomorrow. Given it isn't happening with the color panel it appears related to the ToolsPanelItem registrations. Also, I'll hold off on merging #37273 until I work out what is going on.

@mtias mtias added Backport to WP 6.7 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta [Type] Regression Related to a regression in the latest release labels Dec 14, 2021
@mtias
Copy link
Member

mtias commented Dec 14, 2021

Marking as backport considering it's a regression.

@aaronrobertshaw aaronrobertshaw force-pushed the update/tools-panel-allow-null-id branch from 806b842 to 073087f Compare December 16, 2021 10:02
@aaronrobertshaw aaronrobertshaw force-pushed the fix/block-support-tools-panel-for-multi-selects branch from 58fee8f to 605f412 Compare December 16, 2021 10:04
@aaronrobertshaw
Copy link
Contributor Author

It appears to happen when the last empty paragraph block is included in the multiple select (and thereafter even if the empty paragraph block isn't included in the selection) , and only when dragging upwards and not downwards.

After digging into this, I found the issue arises once more than 2 blocks are selected in reverse order. I believe it caused panel items to deregister unexpectedly along with triggering the item's onDeselect callback which is what resulted in the reset attributes.

I've updated the logic around panel item registration and deregistration in #37273. I think this has solved this particular issue as it works for me in my testing so far. Hopefully, you get the same results 🤞.

I think my brain expected to see only the changed settings take effect, for example, if I only altered line height, then only the line height would change.

I felt the same @ramonjd. This might be something we can iterate on as a follow-up to this?

@ramonjd
Copy link
Member

ramonjd commented Dec 16, 2021

I think this has solved this particular issue as it works for me in my testing so far. Hopefully, you get the same results 🤞.

Nice, thanks a lot! I can no longer reproduce the reverse selection bug 🍺

Kapture 2021-12-17 at 10 01 19

I felt the same @ramonjd. This might be something we can iterate on as a follow-up to this?

Definitely 👍

Copy link
Member

@ramonjd ramonjd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Took this for another spin:

✅ Select a single paragraph block and adjust its typography ensuring that still functions
✅ Now select multiple paragraph blocks together
✅ The typography controls should still be present in the sidebar (they will display the options as per the first block selected in order of position on the page)
✅ Adjust the typography settings and ensure all selected blocks update accordingly
✅ Save the post and check blocks on the frontend
✅ Test resetting individual controls as well as the "reset all" option.
✅ Multiselecting text blocks, upwards and downwards, has no effect on the above functionality.

LGTM

Copy link
Contributor

@andrewserong andrewserong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @aaronrobertshaw, I just re-tested this and it's working nicely for me:

✅ Adjusting a single paragraph block in isolation works
✅ Adjusting multiple paragraph blocks together works with settings being applied to the selection, and resetting individual controls and "reset all" works as to be expected

The only issue I ran into is the issue of keyboard shortcuts firing from the sidebar which we're looking into separately in #37326, so I don't think that's a blocker for getting this PR in.

LGTM! 🎉

Base automatically changed from update/tools-panel-allow-null-id to trunk December 17, 2021 03:33
@aaronrobertshaw aaronrobertshaw force-pushed the fix/block-support-tools-panel-for-multi-selects branch from 6114004 to d1dae14 Compare December 17, 2021 03:37
@aaronrobertshaw
Copy link
Contributor Author

I felt the same @ramonjd. This might be something we can iterate on as a follow-up to this?

I've looked into the way this worked prior to the ToolsPanel switch for the typography panel. After this PR is merged, we are back to the same functionality. I'm not sure we should change that behaviour if it is what people have come to expect.

Of course, if it is proven desirable to refine it, I'll happily revisit this.

Demo of functionality before Typography ToolsPanel switch
MultiSelectStyling.mp4

@aaronrobertshaw aaronrobertshaw merged commit b747b90 into trunk Dec 17, 2021
@aaronrobertshaw aaronrobertshaw deleted the fix/block-support-tools-panel-for-multi-selects branch December 17, 2021 04:25
@github-actions github-actions bot added this to the Gutenberg 12.3 milestone Dec 17, 2021
@tellthemachines tellthemachines removed the Backport to WP 6.7 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta label Dec 21, 2021
tellthemachines pushed a commit that referenced this pull request Dec 21, 2021
…h multi-selection (#37216)

* Update block support panels to display in multi select inspector
* Update the order of block support slots
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Design Tools Tools that impact the appearance of blocks both to expand the number of tools and improve the experi [Type] Bug An existing feature does not function as intended [Type] Regression Related to a regression in the latest release
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants