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

[RNMobile] Enable child block settings to be hidden via parent block #36371

Merged
merged 7 commits into from
Nov 15, 2021

Conversation

SiobhyB
Copy link
Contributor

@SiobhyB SiobhyB commented Nov 10, 2021

Description

More and more blocks are beginning to use the Inner Block API to pull in child blocks to a parent block. As part of this, it's sometimes necessary to change or hide certain parts of a child block.

For the native apps, the settings control is included within each block. This is different to the web, where the block's settings are separated out into a sidebar. Due to this difference, the ability to hide the settings control for child blocks is likely to be a fairly common use case for parent blocks on the native side.

With this PR, a __experimentalHideChildBlockControls block support, is introduced. If a parent block declares __experimentalHideChildBlockControls to be true with this PR applied, then the settings control for its child blocks won't be displayed. It is set to false by default.

The support was inspired by other experimental block supports that allow developers to change aspects of child blocks, for example: Following discussions in #26313, __experimentalExposeControlsToChildren and __experimentalShareWithChildBlocks were introduced in #33955 and #34644.

How has this been tested?

Note: The Columns block is being used as a proof of concept here and for the purposes of testing. We are not planning to actually remove the settings control from inner Column blocks. The following steps can be repurposed for any block using inner blocks.

  • Add "__experimentalHideChildBlockControls": true to the columns' block's block.json file. It should be added to the block supports object here.
  • With the change saved, add a new Columns block to the editor in the Android or iOS apps.
  • Edit an individual Column block within Columns and confirm that the settings control is not available for the individual inner blocks.

We should also test other blocks using inner blocks, such as Social Icons and Buttons, to verify there are no regressions.

Screenshots

Before After

Types of changes

This PR introduces a non-breaking change which fixes an issue, with the following high-level overview of the code:

  • A native-specific version of the use-display-block-controls component was created in d902f41.
  • In a23280c, a check for whether __experimentalHideChildBlockControls is true was added to the newly created file. This will now enable parent blocks to set the value to true if the settings control should be hidden from child blocks. hasBlockSupport is used to achieve this.

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).

Siobhan added 2 commits November 10, 2021 11:48
With this commit, the logic for hiding block controls is moved to its own function in the 'use-display-block-controls/index.native.' file.

For the purpose of this commit, the code is copied to a native-specific file from the web-version of the file here: https://github.com/WordPress/gutenberg/blob/trunk/packages/block-editor/src/components/use-display-block-controls/index.js

The file will be further refined with native-specific functionality in later commits.
Folllowing the previous commit, code that isn't going to be used on the apps is removed from the file that was previously copied/pasted. As the apps don't currently support multiple selection, it's not necessary to account for it when determining whether to display settings.
@github-actions
Copy link

github-actions bot commented Nov 10, 2021

Size Change: 0 B

Total Size: 1.09 MB

ℹ️ 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/index.min.js 139 kB
build/block-editor/style-rtl.css 14.5 kB
build/block-editor/style.css 14.5 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 206 B
build/block-library/blocks/columns/editor.css 205 B
build/block-library/blocks/columns/style-rtl.css 503 B
build/block-library/blocks/columns/style.css 502 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.18 kB
build/block-library/blocks/cover/style.css 1.18 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 977 B
build/block-library/blocks/gallery/editor.css 982 B
build/block-library/blocks/gallery/style-rtl.css 1.62 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/home-link/style-rtl.css 247 B
build/block-library/blocks/home-link/style.css 247 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 731 B
build/block-library/blocks/image/editor.css 730 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/style-rtl.css 213 B
build/block-library/blocks/navigation-submenu/style.css 213 B
build/block-library/blocks/navigation-submenu/view.min.js 343 B
build/block-library/blocks/navigation/editor-rtl.css 1.89 kB
build/block-library/blocks/navigation/editor.css 1.89 kB
build/block-library/blocks/navigation/style-rtl.css 1.55 kB
build/block-library/blocks/navigation/style.css 1.54 kB
build/block-library/blocks/navigation/view.min.js 2.74 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 444 B
build/block-library/blocks/post-comments-form/style.css 444 B
build/block-library/blocks/post-comments/style-rtl.css 492 B
build/block-library/blocks/post-comments/style.css 493 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 396 B
build/block-library/blocks/post-featured-image/editor.css 397 B
build/block-library/blocks/post-featured-image/style-rtl.css 156 B
build/block-library/blocks/post-featured-image/style.css 156 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 378 B
build/block-library/blocks/pullquote/style.css 378 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 262 B
build/block-library/blocks/query-pagination/editor.css 255 B
build/block-library/blocks/query-pagination/style-rtl.css 234 B
build/block-library/blocks/query-pagination/style.css 231 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 770 B
build/block-library/blocks/site-logo/editor.css 770 B
build/block-library/blocks/site-logo/style-rtl.css 165 B
build/block-library/blocks/site-logo/style.css 165 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 824 B
build/block-library/blocks/social-links/editor.css 823 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 815 B
build/block-library/common.css 812 B
build/block-library/editor-rtl.css 9.84 kB
build/block-library/editor.css 9.85 kB
build/block-library/index.min.js 161 kB
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/style-rtl.css 10.5 kB
build/block-library/style.css 10.5 kB
build/block-library/theme-rtl.css 672 B
build/block-library/theme.css 677 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.3 kB
build/components/style.css 15.3 kB
build/compose/index.min.js 10.9 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.42 kB
build/date/index.min.js 31.5 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.6 kB
build/edit-post/style-rtl.css 7.1 kB
build/edit-post/style.css 7.09 kB
build/edit-site/index.min.js 28.3 kB
build/edit-site/style-rtl.css 5.37 kB
build/edit-site/style.css 5.37 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.8 kB
build/editor/style-rtl.css 3.78 kB
build/editor/style.css 3.77 kB
build/element/index.min.js 3.29 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 6.57 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.86 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/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

@SiobhyB SiobhyB changed the title [RNMobile] Logic for hiding block controls [RNMobile] Logic for hiding settings controls Nov 10, 2021
By only displaying the settings control if '__experimentalExposeControlsToChildren' is true (which is the default), parent blocks can now hide the control by setting this block support to false.
@SiobhyB SiobhyB added Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change) [Feature] Nested / Inner Blocks Anything related to the experience of nested/inner blocks inside a larger container, like Group or P labels Nov 10, 2021
@SiobhyB SiobhyB changed the title [RNMobile] Logic for hiding settings controls [RNMobile] Enable block settings control to be hidden Nov 10, 2021
@SiobhyB SiobhyB changed the title [RNMobile] Enable block settings control to be hidden [RNMobile] Enable child block settings to be hidden via parent block Nov 10, 2021
@SiobhyB SiobhyB self-assigned this Nov 10, 2021
@SiobhyB
Copy link
Contributor Author

SiobhyB commented Nov 10, 2021

👋 @gziolo, I wondered whether you might have time to check whether __experimentalExposeControlsToChildren is being used in the way you envisioned here?

If not, would creating a new experimental block support make sense? For example, __experimentalDisplayChildrenControls?

Thanks in advance!

@SiobhyB SiobhyB marked this pull request as ready for review November 10, 2021 16:40
Copy link
Contributor

@guarani guarani left a comment

Choose a reason for hiding this comment

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

👋 I left a comment below with what the point I raised with you offline today, @SiobhyB.
Even if it turns out that __experimentalExposeControlsToChildren can't be used for the purpose defined in this PR, I'm hopeful we could create another "feature" for this purpose e.g. __experimentalHideChildrensControls. I'm looking forward to seeing whether this is a possibility.

The '__experimentalExposeControlsToChildren' block support served a different purpose to our needs. With this commit, the support we're using has been renamed to '__experimentalDisplayChildBlockControls' to more accurately reflect its intention.
Copy link
Contributor

@guarani guarani left a comment

Choose a reason for hiding this comment

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

Thanks @SiobhyB! The new __experimentalDisplayChildBlockControls block support is a great way to allow parent blocks to define the availability of their child block's settings.

I tested this on a variety of blocks using the demo app and it worked as expected. I left a suggestion above, but feel this is also good to merge as-is.

Siobhan added 2 commits November 11, 2021 22:56
The '__experimentalDisplayChildBlockControls' is renamed to '__experimentalHideChildBlockControls' with this commit.

This was suggested here: #36371 (comment)

With the following reason as to why this will improve clarity: "I feel it's a bit odd introducing a new block supports that declares a feature that already exists: child block controls. It might be confusing to see blocks that don't include this particular block supports at all, but still display their child's block controls."
@gziolo
Copy link
Member

gziolo commented Nov 12, 2021

What’s the rationale behind bringing this functionality only to the mobile app? Why isn’t it an issue in the web version? In my mind, we should aim to align APIs and UX between platforms. How this flag is going to be consumed?

The current proposal will impact only all direct children of the block that enables this flag. For the existing flag, there is ongoing discussion to allow block authors to use an option to propagate the behavior to deeply nested inner blocks.

@SiobhyB
Copy link
Contributor Author

SiobhyB commented Nov 12, 2021

What’s the rationale behind bringing this functionality only to the mobile app? Why isn’t it an issue in the web version? In my mind, we should aim to align APIs and UX between platforms.

Thanks for your input here @gziolo! 🙇‍♀️ The context behind what led to this PR can be broken down as follows:

  • We want to make it easier for third parties to create mobile/native versions of blocks.
  • In many cases, a web version of a block already exists, so the native developer would usually use the existing web code and adapt it for use in native files.
  • There are a lot of benefits to using inner blocks but if the web version of the block doesn't use them (fairly common as inner blocks are relatively new) then there can be problems with getting the block's HTML output to match across web/mobile.
  • It's not always feasible to refactor the web version of the block to use inner blocks.
  • The settings control is built into each block on the native apps and usually includes options that change the block's HTML. The option to hide the control is therefore really helpful in this scenario, where native developers want to use inner blocks even though the web version doesn't use them.

This is the exact scenario that we've come across while attempting to use inner blocks for a third party block, Jetpack's Tiled Gallery, and we think other third parties could also get blocked with the same issues.

As the web version of a block is generally the first to be created, and we don't currently have many third party native blocks, I'm not certain if there would be as much of a use case for web developers to hide the settings control for inner blocks.

Do you think there would still be a case for introducing __experimentalHideChildBlockControls on the web side even with the above considerations/context? If so, I'd be happy to roll the change into the main use-display-block-controls/index.js file here, but wanted to give the extra context beforehand.

@gziolo
Copy link
Member

gziolo commented Nov 12, 2021

@SiobhyB, thank you your detailed answer. I'm still thinking whether we can avoid introducing a new API and bring the same behavior based on different factors.

The settings control is built into each block on the native apps and usually includes options that change the block's HTML. The option to hide the control is therefore really helpful in this scenario, where native developers want to use inner blocks even though the web version doesn't use them.

Can you remind me what settings control is? You mentioned the HTML editing mode so in my mind it's the same as:

Screen Shot 2021-11-12 at 17 37 19

Or is it related to the InspectorControls SlotFill?

@SiobhyB
Copy link
Contributor Author

SiobhyB commented Nov 12, 2021

Can you remind me what settings control is? You mentioned the HTML editing mode so in my mind it's the same as
Or is it related to the InspectorControls SlotFill?

Ah, sorry for the confusion, @gziolo! Yes, I'm referring to the InspectorControls SlotFill rather than the screenshotted dropdown menu. I've highlighted the settings control/icon I'm referring to here for clarity, too:

Settings icon Settings sheet

The reason I mentioned HTML is that changes to those settings will also change the inner block's HTML, which we're not able to support in our use case.

I'm still thinking whether we can avoid introducing a new API and bring the same behavior based on different factors.

I'd be really grateful if you have other ideas for hiding those settings. 🙇‍♀️ We'll also need to customize other parts of inner blocks in future (for example, hiding the BlockCaption component), so any solutions that would also help us with that would be ideal. Thank you for your help so far, too.

@SiobhyB SiobhyB force-pushed the rnmobile/try/hide-child-block-controls branch from fa74b59 to 94f4ea1 Compare November 15, 2021 11:55
@gziolo
Copy link
Member

gziolo commented Nov 15, 2021

@SiobhyB, feel free to land it as is. I’ll keep thinking if there is an alternative possible 👍

@SiobhyB
Copy link
Contributor Author

SiobhyB commented Nov 15, 2021

Thank you @gziolo! I'll go ahead to merge now with a view to iterate if we come up with a better solution at a later date 👍

@SiobhyB SiobhyB merged commit 73e6f60 into trunk Nov 15, 2021
@SiobhyB SiobhyB deleted the rnmobile/try/hide-child-block-controls branch November 15, 2021 17:28
@github-actions github-actions bot added this to the Gutenberg 12.0 milestone Nov 15, 2021
SiobhyB pushed a commit to Automattic/jetpack that referenced this pull request Nov 16, 2021
As discussed in WordPress/gutenberg#36371, '__experimentalExposeControlsToChildren' doesn't accurately reflect what we're trying to achieve. Instead, a new block supports, '__experimentalHideChildBlockControls', as been created for accuracy and clarity.
SiobhyB pushed a commit to Automattic/jetpack that referenced this pull request Nov 16, 2021
This PR leverages the `__experimentalHideChildBlockControls` block supports introduced in WordPress/gutenberg#36371 to hide the settings tab for the inner image blocks.
SiobhyB pushed a commit that referenced this pull request Nov 18, 2021
If a parent block is hiding child block controls, we can reasonable deduce that that would include the option to edit the child block's caption.

This commit builds on the work done in #36371 to detect if a parent block is hiding child block controls via the '__experimentalHideChildBlockControls' block supports.
SiobhyB pushed a commit that referenced this pull request Nov 18, 2021
…ocks (#36618)

This commit provides a way for parent blocks to hide the block caption component (if used) in any inner child block.

The code builds on the work done in #36371, which introduced a new "__experimentalHideChildBlockControls" block support. The purpose of the new block support is to hide child block settings/controls, which is helpful in cases when native blocks need to customize inner blocks. A further outline of the use case for this support can be found here.

With this PR, the block caption component now also listens for "__experimentalHideChildBlockControls". If it is set to true then any captions are hidden from child blocks.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Nested / Inner Blocks Anything related to the experience of nested/inner blocks inside a larger container, like Group or P Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants