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

List View: Simplify the BlockNavigation component #31290

Merged
merged 7 commits into from
May 21, 2021

Conversation

Copons
Copy link
Contributor

@Copons Copons commented Apr 28, 2021

Description

  • Simplify the BlockNavigation component, moving most of the logic inside its BlockNavigationTree sub-component.

This change was initiated after a conversation that surfaced how the BlockNavigation component is currently used.

Apparently, BlockNavigation is not intended to be used directly (it's not even exported by the package), but indirectly as rendered content of the BlockNavigationDropdown's dropdown, which was normally designed as List View dropdown for the Post Editor toolbar.
This makes the "index" component very opinionated as a dropdown content. It renders a dropdown label, it only shows the blocks belonging to the currently selected hierarchy, and so on.

In time, other consumers wanted to make use of the List View, but with different opinions.
Avoiding the "index" component, they started using BlockNavigationTree directly.
The Navigation block, for example, wanted a list starting from a specific client ID.
The Persistent List View wanted all the blocks, regardless of the hierarchy, and a range of other options.

Now that we are in the process of extending the Persistent List View from the Site Editor to the Post Editor as well, we realized that the only consumer using the List View as it was originally intended (BlockNavigation called through BlockNavigationDropdown) is the Widgets Editor.
Everyone else is hacking around it by experimentally using BlockNavigationTree.

In this PR I try to acknowledge this diversity, and move all the blocks logic inside BlockNavigationTree, while maintaining the current format and extensibility.

  • BlockNavigationTree is now directly responsible to retrieve the block list, the selected block (or blocks), etc.
  • BlockNavigationTree has a new onlyShowCurrentHierarchy prop to limit the list to only the currently selected hierarchy (e.g. if the selected block is nested inside a group, the list will show up to that group, instead of up to the document root). This is a breaking change: this behaviour used to be the default, while now it requires a flag.
  • Consumers can override the BlockNavigationTree selections by providing their own specific data through props.

Possible follow ups:

  • Make BlockNavigationTree the "index" component, to better reflect how it's actually used.
  • Remove BlockNavigation as we know it today. Move the leftovers (basically only the dropdown label, I think) into BlockNavigationDropdown.

How has this been tested?

Smoke test the various List View implementations:

  • Post Editor (list view dropdown in the header)
  • Site Editor (persistent list view in the header)
  • Widgets Editor (list view dropdown in the header)
  • Navigation block (block navigation in the block toolbar — make sure to select the parent block!)

Types of changes

Breaking change (fix or feature that would cause existing functionality to not work as expected)

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

@Copons Copons added [Type] Code Quality Issues or PRs that relate to code quality [Feature] List View Menu item in the top toolbar to select blocks from a list of links. labels Apr 28, 2021
@Copons Copons self-assigned this Apr 28, 2021
@github-actions
Copy link

github-actions bot commented Apr 28, 2021

Size Change: -97 B (0%)

Total Size: 1.62 MB

Filename Size Change
build/block-editor/index.js 119 kB +52 B (0%)
build/block-library/index.js 147 kB -48 B (0%)
build/edit-post/index.js 335 kB -54 B (0%)
build/edit-site/index.js 25.7 kB -47 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.12 kB 0 B
build/annotations/index.js 2.93 kB 0 B
build/api-fetch/index.js 2.42 kB 0 B
build/autop/index.js 2.28 kB 0 B
build/blob/index.js 673 B 0 B
build/block-directory/index.js 6.61 kB 0 B
build/block-directory/style-rtl.css 989 B 0 B
build/block-directory/style.css 990 B 0 B
build/block-editor/style-rtl.css 12.9 kB 0 B
build/block-editor/style.css 12.9 kB 0 B
build/block-library/blocks/archives/editor-rtl.css 61 B 0 B
build/block-library/blocks/archives/editor.css 60 B 0 B
build/block-library/blocks/audio/editor-rtl.css 58 B 0 B
build/block-library/blocks/audio/editor.css 58 B 0 B
build/block-library/blocks/audio/style-rtl.css 112 B 0 B
build/block-library/blocks/audio/style.css 112 B 0 B
build/block-library/blocks/block/editor-rtl.css 161 B 0 B
build/block-library/blocks/block/editor.css 161 B 0 B
build/block-library/blocks/button/editor-rtl.css 475 B 0 B
build/block-library/blocks/button/editor.css 474 B 0 B
build/block-library/blocks/button/style-rtl.css 603 B 0 B
build/block-library/blocks/button/style.css 602 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 315 B 0 B
build/block-library/blocks/buttons/editor.css 315 B 0 B
build/block-library/blocks/buttons/style-rtl.css 375 B 0 B
build/block-library/blocks/buttons/style.css 375 B 0 B
build/block-library/blocks/calendar/style-rtl.css 208 B 0 B
build/block-library/blocks/calendar/style.css 208 B 0 B
build/block-library/blocks/categories/editor-rtl.css 84 B 0 B
build/block-library/blocks/categories/editor.css 83 B 0 B
build/block-library/blocks/categories/style-rtl.css 79 B 0 B
build/block-library/blocks/categories/style.css 79 B 0 B
build/block-library/blocks/code/style-rtl.css 90 B 0 B
build/block-library/blocks/code/style.css 90 B 0 B
build/block-library/blocks/columns/editor-rtl.css 190 B 0 B
build/block-library/blocks/columns/editor.css 190 B 0 B
build/block-library/blocks/columns/style-rtl.css 422 B 0 B
build/block-library/blocks/columns/style.css 422 B 0 B
build/block-library/blocks/cover/editor-rtl.css 644 B 0 B
build/block-library/blocks/cover/editor.css 646 B 0 B
build/block-library/blocks/cover/style-rtl.css 1.22 kB 0 B
build/block-library/blocks/cover/style.css 1.23 kB 0 B
build/block-library/blocks/embed/editor-rtl.css 486 B 0 B
build/block-library/blocks/embed/editor.css 486 B 0 B
build/block-library/blocks/embed/style-rtl.css 401 B 0 B
build/block-library/blocks/embed/style.css 400 B 0 B
build/block-library/blocks/file/editor-rtl.css 301 B 0 B
build/block-library/blocks/file/editor.css 300 B 0 B
build/block-library/blocks/file/frontend.js 771 B 0 B
build/block-library/blocks/file/style-rtl.css 255 B 0 B
build/block-library/blocks/file/style.css 255 B 0 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB 0 B
build/block-library/blocks/freeform/editor.css 2.44 kB 0 B
build/block-library/blocks/gallery/editor-rtl.css 704 B 0 B
build/block-library/blocks/gallery/editor.css 705 B 0 B
build/block-library/blocks/gallery/style-rtl.css 1.06 kB 0 B
build/block-library/blocks/gallery/style.css 1.06 kB 0 B
build/block-library/blocks/group/editor-rtl.css 160 B 0 B
build/block-library/blocks/group/editor.css 160 B 0 B
build/block-library/blocks/group/style-rtl.css 57 B 0 B
build/block-library/blocks/group/style.css 57 B 0 B
build/block-library/blocks/heading/editor-rtl.css 129 B 0 B
build/block-library/blocks/heading/editor.css 129 B 0 B
build/block-library/blocks/heading/style-rtl.css 76 B 0 B
build/block-library/blocks/heading/style.css 76 B 0 B
build/block-library/blocks/home-link/style-rtl.css 259 B 0 B
build/block-library/blocks/home-link/style.css 259 B 0 B
build/block-library/blocks/html/editor-rtl.css 281 B 0 B
build/block-library/blocks/html/editor.css 281 B 0 B
build/block-library/blocks/image/editor-rtl.css 717 B 0 B
build/block-library/blocks/image/editor.css 716 B 0 B
build/block-library/blocks/image/style-rtl.css 481 B 0 B
build/block-library/blocks/image/style.css 485 B 0 B
build/block-library/blocks/latest-comments/style-rtl.css 281 B 0 B
build/block-library/blocks/latest-comments/style.css 282 B 0 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B 0 B
build/block-library/blocks/latest-posts/editor.css 137 B 0 B
build/block-library/blocks/latest-posts/style-rtl.css 523 B 0 B
build/block-library/blocks/latest-posts/style.css 522 B 0 B
build/block-library/blocks/legacy-widget/editor-rtl.css 557 B 0 B
build/block-library/blocks/legacy-widget/editor.css 557 B 0 B
build/block-library/blocks/list/style-rtl.css 63 B 0 B
build/block-library/blocks/list/style.css 63 B 0 B
build/block-library/blocks/media-text/editor-rtl.css 176 B 0 B
build/block-library/blocks/media-text/editor.css 176 B 0 B
build/block-library/blocks/media-text/style-rtl.css 492 B 0 B
build/block-library/blocks/media-text/style.css 489 B 0 B
build/block-library/blocks/more/editor-rtl.css 434 B 0 B
build/block-library/blocks/more/editor.css 434 B 0 B
build/block-library/blocks/navigation-link/editor-rtl.css 633 B 0 B
build/block-library/blocks/navigation-link/editor.css 634 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B 0 B
build/block-library/blocks/navigation-link/style.css 94 B 0 B
build/block-library/blocks/navigation/editor-rtl.css 1.54 kB 0 B
build/block-library/blocks/navigation/editor.css 1.54 kB 0 B
build/block-library/blocks/navigation/style-rtl.css 1.8 kB 0 B
build/block-library/blocks/navigation/style.css 1.8 kB 0 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B 0 B
build/block-library/blocks/nextpage/editor.css 395 B 0 B
build/block-library/blocks/page-list/editor-rtl.css 310 B 0 B
build/block-library/blocks/page-list/editor.css 311 B 0 B
build/block-library/blocks/page-list/style-rtl.css 233 B 0 B
build/block-library/blocks/page-list/style.css 233 B 0 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B 0 B
build/block-library/blocks/paragraph/editor.css 157 B 0 B
build/block-library/blocks/paragraph/style-rtl.css 247 B 0 B
build/block-library/blocks/paragraph/style.css 248 B 0 B
build/block-library/blocks/post-author/editor-rtl.css 209 B 0 B
build/block-library/blocks/post-author/editor.css 209 B 0 B
build/block-library/blocks/post-author/style-rtl.css 183 B 0 B
build/block-library/blocks/post-author/style.css 184 B 0 B
build/block-library/blocks/post-comments-form/style-rtl.css 140 B 0 B
build/block-library/blocks/post-comments-form/style.css 140 B 0 B
build/block-library/blocks/post-comments/style-rtl.css 360 B 0 B
build/block-library/blocks/post-comments/style.css 359 B 0 B
build/block-library/blocks/post-content/editor-rtl.css 139 B 0 B
build/block-library/blocks/post-content/editor.css 139 B 0 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B 0 B
build/block-library/blocks/post-excerpt/editor.css 73 B 0 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B 0 B
build/block-library/blocks/post-excerpt/style.css 69 B 0 B
build/block-library/blocks/post-featured-image/editor-rtl.css 338 B 0 B
build/block-library/blocks/post-featured-image/editor.css 338 B 0 B
build/block-library/blocks/post-featured-image/style-rtl.css 119 B 0 B
build/block-library/blocks/post-featured-image/style.css 119 B 0 B
build/block-library/blocks/post-title/style-rtl.css 60 B 0 B
build/block-library/blocks/post-title/style.css 60 B 0 B
build/block-library/blocks/preformatted/style-rtl.css 103 B 0 B
build/block-library/blocks/preformatted/style.css 103 B 0 B
build/block-library/blocks/pullquote/editor-rtl.css 183 B 0 B
build/block-library/blocks/pullquote/editor.css 183 B 0 B
build/block-library/blocks/pullquote/style-rtl.css 318 B 0 B
build/block-library/blocks/pullquote/style.css 318 B 0 B
build/block-library/blocks/query-loop/editor-rtl.css 98 B 0 B
build/block-library/blocks/query-loop/editor.css 97 B 0 B
build/block-library/blocks/query-loop/style-rtl.css 315 B 0 B
build/block-library/blocks/query-loop/style.css 317 B 0 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B 0 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B 0 B
build/block-library/blocks/query-pagination/editor-rtl.css 270 B 0 B
build/block-library/blocks/query-pagination/editor.css 262 B 0 B
build/block-library/blocks/query-pagination/style-rtl.css 168 B 0 B
build/block-library/blocks/query-pagination/style.css 168 B 0 B
build/block-library/blocks/query-title/editor-rtl.css 86 B 0 B
build/block-library/blocks/query-title/editor.css 86 B 0 B
build/block-library/blocks/query/editor-rtl.css 131 B 0 B
build/block-library/blocks/query/editor.css 132 B 0 B
build/block-library/blocks/quote/style-rtl.css 169 B 0 B
build/block-library/blocks/quote/style.css 169 B 0 B
build/block-library/blocks/rss/editor-rtl.css 201 B 0 B
build/block-library/blocks/rss/editor.css 202 B 0 B
build/block-library/blocks/rss/style-rtl.css 290 B 0 B
build/block-library/blocks/rss/style.css 290 B 0 B
build/block-library/blocks/search/editor-rtl.css 189 B 0 B
build/block-library/blocks/search/editor.css 189 B 0 B
build/block-library/blocks/search/style-rtl.css 359 B 0 B
build/block-library/blocks/search/style.css 362 B 0 B
build/block-library/blocks/separator/editor-rtl.css 99 B 0 B
build/block-library/blocks/separator/editor.css 99 B 0 B
build/block-library/blocks/separator/style-rtl.css 251 B 0 B
build/block-library/blocks/separator/style.css 251 B 0 B
build/block-library/blocks/shortcode/editor-rtl.css 512 B 0 B
build/block-library/blocks/shortcode/editor.css 512 B 0 B
build/block-library/blocks/site-logo/editor-rtl.css 440 B 0 B
build/block-library/blocks/site-logo/editor.css 441 B 0 B
build/block-library/blocks/site-logo/style-rtl.css 154 B 0 B
build/block-library/blocks/site-logo/style.css 154 B 0 B
build/block-library/blocks/social-link/editor-rtl.css 164 B 0 B
build/block-library/blocks/social-link/editor.css 165 B 0 B
build/block-library/blocks/social-links/editor-rtl.css 800 B 0 B
build/block-library/blocks/social-links/editor.css 799 B 0 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB 0 B
build/block-library/blocks/social-links/style.css 1.33 kB 0 B
build/block-library/blocks/spacer/editor-rtl.css 308 B 0 B
build/block-library/blocks/spacer/editor.css 308 B 0 B
build/block-library/blocks/spacer/style-rtl.css 48 B 0 B
build/block-library/blocks/spacer/style.css 48 B 0 B
build/block-library/blocks/table/editor-rtl.css 478 B 0 B
build/block-library/blocks/table/editor.css 478 B 0 B
build/block-library/blocks/table/style-rtl.css 480 B 0 B
build/block-library/blocks/table/style.css 480 B 0 B
build/block-library/blocks/tag-cloud/editor-rtl.css 118 B 0 B
build/block-library/blocks/tag-cloud/editor.css 118 B 0 B
build/block-library/blocks/tag-cloud/style-rtl.css 94 B 0 B
build/block-library/blocks/tag-cloud/style.css 94 B 0 B
build/block-library/blocks/template-part/editor-rtl.css 551 B 0 B
build/block-library/blocks/template-part/editor.css 550 B 0 B
build/block-library/blocks/term-description/editor-rtl.css 90 B 0 B
build/block-library/blocks/term-description/editor.css 90 B 0 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B 0 B
build/block-library/blocks/text-columns/editor.css 95 B 0 B
build/block-library/blocks/text-columns/style-rtl.css 166 B 0 B
build/block-library/blocks/text-columns/style.css 166 B 0 B
build/block-library/blocks/verse/style-rtl.css 87 B 0 B
build/block-library/blocks/verse/style.css 87 B 0 B
build/block-library/blocks/video/editor-rtl.css 569 B 0 B
build/block-library/blocks/video/editor.css 570 B 0 B
build/block-library/blocks/video/style-rtl.css 173 B 0 B
build/block-library/blocks/video/style.css 173 B 0 B
build/block-library/common-rtl.css 1.26 kB 0 B
build/block-library/common.css 1.26 kB 0 B
build/block-library/editor-rtl.css 9.93 kB 0 B
build/block-library/editor.css 9.92 kB 0 B
build/block-library/reset-rtl.css 506 B 0 B
build/block-library/reset.css 507 B 0 B
build/block-library/style-rtl.css 10.3 kB 0 B
build/block-library/style.css 10.3 kB 0 B
build/block-library/theme-rtl.css 692 B 0 B
build/block-library/theme.css 693 B 0 B
build/block-serialization-default-parser/index.js 1.29 kB 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/blocks/index.js 47.2 kB 0 B
build/components/index.js 188 kB 0 B
build/components/style-rtl.css 16.2 kB 0 B
build/components/style.css 16.2 kB 0 B
build/compose/index.js 9.95 kB 0 B
build/core-data/index.js 12.1 kB 0 B
build/customize-widgets/index.js 43.2 kB 0 B
build/customize-widgets/style-rtl.css 1.38 kB 0 B
build/customize-widgets/style.css 1.38 kB 0 B
build/data-controls/index.js 829 B 0 B
build/data/index.js 7.23 kB 0 B
build/date/index.js 31.8 kB 0 B
build/deprecated/index.js 739 B 0 B
build/dom-ready/index.js 577 B 0 B
build/dom/index.js 4.62 kB 0 B
build/edit-navigation/index.js 13.9 kB 0 B
build/edit-navigation/style-rtl.css 3.08 kB 0 B
build/edit-navigation/style.css 3.08 kB 0 B
build/edit-post/classic-rtl.css 454 B 0 B
build/edit-post/classic.css 454 B 0 B
build/edit-post/style-rtl.css 6.81 kB 0 B
build/edit-post/style.css 6.8 kB 0 B
build/edit-site/style-rtl.css 4.76 kB 0 B
build/edit-site/style.css 4.75 kB 0 B
build/edit-widgets/index.js 292 kB 0 B
build/edit-widgets/style-rtl.css 3.46 kB 0 B
build/edit-widgets/style.css 3.47 kB 0 B
build/editor/index.js 38.4 kB 0 B
build/editor/style-rtl.css 3.92 kB 0 B
build/editor/style.css 3.91 kB 0 B
build/element/index.js 3.44 kB 0 B
build/escape-html/index.js 739 B 0 B
build/format-library/index.js 5.66 kB 0 B
build/format-library/style-rtl.css 637 B 0 B
build/format-library/style.css 639 B 0 B
build/hooks/index.js 1.76 kB 0 B
build/html-entities/index.js 627 B 0 B
build/i18n/index.js 3.73 kB 0 B
build/is-shallow-equal/index.js 710 B 0 B
build/keyboard-shortcuts/index.js 1.65 kB 0 B
build/keycodes/index.js 1.43 kB 0 B
build/list-reusable-blocks/index.js 2.06 kB 0 B
build/list-reusable-blocks/style-rtl.css 629 B 0 B
build/list-reusable-blocks/style.css 628 B 0 B
build/media-utils/index.js 3.08 kB 0 B
build/navigation/index.js 2.85 kB 0 B
build/notices/index.js 1.07 kB 0 B
build/nux/index.js 2.31 kB 0 B
build/nux/style-rtl.css 718 B 0 B
build/nux/style.css 716 B 0 B
build/plugins/index.js 1.99 kB 0 B
build/primitives/index.js 1.03 kB 0 B
build/priority-queue/index.js 791 B 0 B
build/react-i18n/index.js 923 B 0 B
build/redux-routine/index.js 2.82 kB 0 B
build/reusable-blocks/index.js 2.54 kB 0 B
build/reusable-blocks/style-rtl.css 225 B 0 B
build/reusable-blocks/style.css 225 B 0 B
build/rich-text/index.js 10.7 kB 0 B
build/server-side-render/index.js 1.64 kB 0 B
build/shortcode/index.js 1.68 kB 0 B
build/token-list/index.js 846 B 0 B
build/url/index.js 1.95 kB 0 B
build/viewport/index.js 1.28 kB 0 B
build/warning/index.js 1.13 kB 0 B
build/widgets/index.js 1.66 kB 0 B
build/wordcount/index.js 1.24 kB 0 B

compressed-size-action

Copy link
Member

@david-szabo97 david-szabo97 left a comment

Choose a reason for hiding this comment

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

Left a few comments. Tested according to the testing instructions and it works well!

Copy link
Contributor

@Addison-Stavlo Addison-Stavlo left a comment

Choose a reason for hiding this comment

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

Just a few Qs and thoughts 😁

import { isClientIdSelected } from './utils';
import { store as blockEditorStore } from '../../store';

const noop = () => {};

export default function BlockNavigation( {
Copy link
Contributor

Choose a reason for hiding this comment

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

It seems we don't really use this component, as we are using the Tree component for the list views. It also seems this is not exported either.

Im only seeing this used in /block-navigation/dropdown.js ? Maybe it makes sense to get rid of this component altogether and just update dropdown.js to use Tree appropriately?

It also seems odd for this file to be named index.js. It doesn't look like we export this, im only seeing exports for dropdown, block-slot, editor, and tree specifically.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

It's definitely odd and, to be entirely honest, it has always seemed odd to me.
It's kinda clear to me that Tree should be the main component, and index.js should be integrated into Dropdown.
Although, Tree and Dropdown are exported by the package (even if __experimental), so there is a chance of accidentally breaking something.

Copy link
Contributor

Choose a reason for hiding this comment

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

Im only seeing this used in /block-navigation/dropdown.js ? Maybe it makes sense to get rid of this component altogether and just update dropdown.js to use Tree appropriately?

I agree with this and and since BlockNavigation is not exported and only BlockNavigationDropdown is, the implementation details are irrelevant as long as it keeps working as before.

Also changes at Tree should be okay since it's __experimental.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I've created a separate PR to address the restructuring, as it would make this extremely confusing to review: #31892

It branches out from this PR, and only takes care of removing BlockNavigation and replacing it with BlockNavigationTree.

@Copons Copons mentioned this pull request May 11, 2021
7 tasks
@Copons Copons force-pushed the try/simplify-block-navigation branch 3 times, most recently from ed7e1e9 to c3f86f5 Compare May 17, 2021 13:37
Copy link
Contributor

@ntsekouras ntsekouras left a comment

Choose a reason for hiding this comment

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

Thanks for working on this @Copons !

* @param {Array} props.blocks Custom subset of block client IDs to be used instead of the default hierarchy.
* @param {Function} props.onSelect Block selection callback.
* @param {Array} props.selectedBlockClientIds The client IDs of the (single or multi-) selected blocks.
* @param {boolean} props.showNestedBlocks Flag to enable displaying nested blocks.
Copy link
Contributor

Choose a reason for hiding this comment

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

Should we expose/handle this property explicitly and set it as default to true? Currently we have four usages of this component where all pass this prop with true.

Copy link
Member

Choose a reason for hiding this comment

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

Even though we almost have this enabled everywhere, personally I'd still prefer to opt-in rather than opt-out.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I don't have a strong opinion either way, to be honest.
I haven't paid much attention to that prop; it has been there for quite a while now, and I have no idea why it was introduced instead of just defaulting it to true. 🤔

return selectedBlockClientIds;
}

if ( __experimentalPersistentListViewFeatures ) {
Copy link
Contributor

Choose a reason for hiding this comment

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

Does this make any difference somewhere? getSelectedBlockClientIds will first check if it's single block selected and return it in an Array.

Copy link
Member

Choose a reason for hiding this comment

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

This is a confusing function 😬 I'd expect it to return an Array in all cases. Yet we return a single string on line 32.

We should just use getSelectedBlockClientIds() directly. We can also remove all the Array.isArray checks and just check for length property.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Well what do you know, I think you're right! 😄

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Or actually...

The problem here is that some consumers (Dropdown to be specific) really expect the selected client ID to be single and string, or null otherwise, whereas the Persistent List View wants the whole multiselection array.

For example, getBlockHierarchyRootClientId (used here and defined here) will use the parameter straight away as object property.

Using those two distinct functions basically saves a bunch of additional checks and conversions to make sure everything keeps receiving the parameters with the expected types.

This said, I think the major cause of confusion here is this:

const isSingleBlockSelected =
	selectedClientIds && ! Array.isArray( selectedClientIds );

Single selections can be arrays as well, and the naming here doesn't make it clear.
I guess isNotMultiselectedBlock would not make it much clearer, so I'm more oriented to just adding a comment to add some context.

Copy link
Member

@david-szabo97 david-szabo97 left a comment

Choose a reason for hiding this comment

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

Looks good to me! Chimed in into the threads.

return selectedBlockClientIds;
}

if ( __experimentalPersistentListViewFeatures ) {
Copy link
Member

Choose a reason for hiding this comment

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

This is a confusing function 😬 I'd expect it to return an Array in all cases. Yet we return a single string on line 32.

We should just use getSelectedBlockClientIds() directly. We can also remove all the Array.isArray checks and just check for length property.

* @param {Array} props.blocks Custom subset of block client IDs to be used instead of the default hierarchy.
* @param {Function} props.onSelect Block selection callback.
* @param {Array} props.selectedBlockClientIds The client IDs of the (single or multi-) selected blocks.
* @param {boolean} props.showNestedBlocks Flag to enable displaying nested blocks.
Copy link
Member

Choose a reason for hiding this comment

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

Even though we almost have this enabled everywhere, personally I'd still prefer to opt-in rather than opt-out.

Copy link
Contributor

@Addison-Stavlo Addison-Stavlo left a comment

Choose a reason for hiding this comment

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

Looks good and tests well! 🎉 🚀

@Copons
Copy link
Contributor Author

Copons commented May 20, 2021

Thanks folks!
I've pushed a new update to remove the unnecessary selectClientIds from the hooks, which as you pointed out is not really used anywhere.

When tests clear, I'll go ahead and merge this, and later the restructuring follow up.

@ntsekouras The points you raised in your review can be addressed separately, if you think they are a big deal.
They don't really change this PR, except for a bit of code quality polish.

@ntsekouras ntsekouras force-pushed the try/simplify-block-navigation branch from f1efb98 to 757f20b Compare May 20, 2021 17:33
Copy link
Contributor

@ntsekouras ntsekouras left a comment

Choose a reason for hiding this comment

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

Thanks 👍 - I've also rebased the PR since we had many changes with the 5.8 😄

@Copons Copons merged commit 0098f36 into trunk May 21, 2021
@Copons Copons deleted the try/simplify-block-navigation branch May 21, 2021 14:42
@github-actions github-actions bot added this to the Gutenberg 10.8 milestone May 21, 2021
fullofcaffeine added a commit that referenced this pull request May 22, 2021
…-take-2

* trunk: (57 commits)
  Image block: fix cover transform and excessive re-rendering (#32102)
  compose: Add types to useMergeRefs (#31939)
  Navigation: Fix collapsing regression. (#32081)
  components: Promote Elevation (#31614)
  compose: Add types to useReducedMotion and useMediaQuery (#31941)
  Update the graphic that appears in the Template Editor welcome guide (#32055)
  Block Navigation: use CSS for indentation with known max indent instead of spacer divs (#32063)
  Fix broken template part converter modal styles. (#32097)
  compose: Add types to `usePrevious` (#31944)
  components: Add ZStack (#31613)
  components: Fix Shortcut polymorphism (#31555)
  compose: Add types to `useFocusReturn` (#31949)
  compose: Add types to `useDebounce` (#32015)
  List View: Simplify the BlockNavigation component (#31290)
  Remove query context leftovers (#32093)
  Remove filter_var from blocks (#32046)
  Templates: Remove now-obsolete gutenberg_get_template_paths() (#32066)
  [RNMobile] Enable reusable block only in WP.com sites (#31744)
  Rename ViewOwnProps to PolymorphicComponentProps (#32053)
  Rich text: remove inline display warning (#32013)
  ...
@youknowriad youknowriad added 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 May 26, 2021
@youknowriad youknowriad 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 May 31, 2021
youknowriad pushed a commit that referenced this pull request May 31, 2021
Simplify the `BlockNavigation` component, moving most of the logic inside its `BlockNavigationTree` sub-component.
nylen pushed a commit to nylen/wordpress-develop-svn that referenced this pull request Jun 1, 2021
This includes the following fixes:

- Generate babel polyfill dynamically WordPress/gutenberg#31279
- Improve the List View component WordPress/gutenberg#31290 WordPress/gutenberg#32063
- Template mode:
    - Fix embed dimensions WordPress/gutenberg#32057
    - Update the welcome guide WordPress/gutenberg#32055 WordPress/gutenberg#32026
    - Don’t display the notice at the same time as the welcome guide WordPress/gutenberg#32076
    - Remove MetaBoxes WordPress/gutenberg#32315
    - Update the title area WordPress/gutenberg#32037 
- Widgets Screen:
    - Fix unsaved changes WordPress/gutenberg#31757
    - Fix toolbar alignment WordPress/gutenberg#31991
    - Fix block toolbar position after scroll WordPress/gutenberg#32212
    - Fix the visible widget area header WordPress/gutenberg#32262
    - Fix legacy widgets preview WordPress/gutenberg#32260
    - 
- Block Widgets in the customizer: 
    - Fix customizer title overlapping block toolbar WordPress/gutenberg#32140
    - Fix styling issues WordPress/gutenberg#32072
    - Fix escape key events WordPress/gutenberg#32175
    - Add preferences menu group label WordPress/gutenberg#32259
    - Fix creating and replacing legacy widgets WordPress/gutenberg#32005
    - Fix the welcome guide’s image WordPress/gutenberg#32264 WordPress/gutenberg#32302 
- Fix Cover to Image transform duotone error WordPress/gutenberg#32006
- Remove filter_var usage from blocks WordPress/gutenberg#32046 
- Fix image width for aligned Post Featured Image block WordPress/gutenberg#32070
- Prevent excessive Image block re-rendering WordPress/gutenberg#32102
- Remove gutenberg domain from core blocks WordPress/gutenberg#32152
- Use the block editor context class for the the different settings filters WordPress/gutenberg#32159
- Fix Latest Posts block grid view WordPress/gutenberg#32160
- Fix preset classes generation per block WordPress/gutenberg#32190
- Fix logic to enable custom colors and gradients WordPress/gutenberg#32200
- Update the Site Logo logic to use a dedicated site option WordPress/gutenberg#32229
- Limit the Latest Posts block’s featured image width WordPress/gutenberg#32245
- Remove opacity animation in the canvas. WordPress/gutenberg#32266
- Make the focus style valid CSS WordPress/gutenberg#32305
- Fix theme.json styles for the core/list block WordPress/gutenberg#32343
- Fix PHP notice when calling render_block WordPress/gutenberg#32135

Props nosolosw, noisysocks.
See #52991.


git-svn-id: https://develop.svn.wordpress.org/trunk@51051 602fd350-edb4-49c9-b593-d223f7449a82
pento pushed a commit to WordPress/wordpress-develop that referenced this pull request Jun 1, 2021
This includes the following fixes:

- Generate babel polyfill dynamically WordPress/gutenberg#31279
- Improve the List View component WordPress/gutenberg#31290 WordPress/gutenberg#32063
- Template mode:
    - Fix embed dimensions WordPress/gutenberg#32057
    - Update the welcome guide WordPress/gutenberg#32055 WordPress/gutenberg#32026
    - Don’t display the notice at the same time as the welcome guide WordPress/gutenberg#32076
    - Remove MetaBoxes WordPress/gutenberg#32315
    - Update the title area WordPress/gutenberg#32037 
- Widgets Screen:
    - Fix unsaved changes WordPress/gutenberg#31757
    - Fix toolbar alignment WordPress/gutenberg#31991
    - Fix block toolbar position after scroll WordPress/gutenberg#32212
    - Fix the visible widget area header WordPress/gutenberg#32262
    - Fix legacy widgets preview WordPress/gutenberg#32260
    - 
- Block Widgets in the customizer: 
    - Fix customizer title overlapping block toolbar WordPress/gutenberg#32140
    - Fix styling issues WordPress/gutenberg#32072
    - Fix escape key events WordPress/gutenberg#32175
    - Add preferences menu group label WordPress/gutenberg#32259
    - Fix creating and replacing legacy widgets WordPress/gutenberg#32005
    - Fix the welcome guide’s image WordPress/gutenberg#32264 WordPress/gutenberg#32302 
- Fix Cover to Image transform duotone error WordPress/gutenberg#32006
- Remove filter_var usage from blocks WordPress/gutenberg#32046 
- Fix image width for aligned Post Featured Image block WordPress/gutenberg#32070
- Prevent excessive Image block re-rendering WordPress/gutenberg#32102
- Remove gutenberg domain from core blocks WordPress/gutenberg#32152
- Use the block editor context class for the the different settings filters WordPress/gutenberg#32159
- Fix Latest Posts block grid view WordPress/gutenberg#32160
- Fix preset classes generation per block WordPress/gutenberg#32190
- Fix logic to enable custom colors and gradients WordPress/gutenberg#32200
- Update the Site Logo logic to use a dedicated site option WordPress/gutenberg#32229
- Limit the Latest Posts block’s featured image width WordPress/gutenberg#32245
- Remove opacity animation in the canvas. WordPress/gutenberg#32266
- Make the focus style valid CSS WordPress/gutenberg#32305
- Fix theme.json styles for the core/list block WordPress/gutenberg#32343
- Fix PHP notice when calling render_block WordPress/gutenberg#32135

Props nosolosw, noisysocks.
See #52991.


git-svn-id: https://develop.svn.wordpress.org/trunk@51051 602fd350-edb4-49c9-b593-d223f7449a82
markjaquith pushed a commit to markjaquith/WordPress that referenced this pull request Jun 1, 2021
This includes the following fixes:

- Generate babel polyfill dynamically WordPress/gutenberg#31279
- Improve the List View component WordPress/gutenberg#31290 WordPress/gutenberg#32063
- Template mode:
    - Fix embed dimensions WordPress/gutenberg#32057
    - Update the welcome guide WordPress/gutenberg#32055 WordPress/gutenberg#32026
    - Don’t display the notice at the same time as the welcome guide WordPress/gutenberg#32076
    - Remove MetaBoxes WordPress/gutenberg#32315
    - Update the title area WordPress/gutenberg#32037 
- Widgets Screen:
    - Fix unsaved changes WordPress/gutenberg#31757
    - Fix toolbar alignment WordPress/gutenberg#31991
    - Fix block toolbar position after scroll WordPress/gutenberg#32212
    - Fix the visible widget area header WordPress/gutenberg#32262
    - Fix legacy widgets preview WordPress/gutenberg#32260
    - 
- Block Widgets in the customizer: 
    - Fix customizer title overlapping block toolbar WordPress/gutenberg#32140
    - Fix styling issues WordPress/gutenberg#32072
    - Fix escape key events WordPress/gutenberg#32175
    - Add preferences menu group label WordPress/gutenberg#32259
    - Fix creating and replacing legacy widgets WordPress/gutenberg#32005
    - Fix the welcome guide’s image WordPress/gutenberg#32264 WordPress/gutenberg#32302 
- Fix Cover to Image transform duotone error WordPress/gutenberg#32006
- Remove filter_var usage from blocks WordPress/gutenberg#32046 
- Fix image width for aligned Post Featured Image block WordPress/gutenberg#32070
- Prevent excessive Image block re-rendering WordPress/gutenberg#32102
- Remove gutenberg domain from core blocks WordPress/gutenberg#32152
- Use the block editor context class for the the different settings filters WordPress/gutenberg#32159
- Fix Latest Posts block grid view WordPress/gutenberg#32160
- Fix preset classes generation per block WordPress/gutenberg#32190
- Fix logic to enable custom colors and gradients WordPress/gutenberg#32200
- Update the Site Logo logic to use a dedicated site option WordPress/gutenberg#32229
- Limit the Latest Posts block’s featured image width WordPress/gutenberg#32245
- Remove opacity animation in the canvas. WordPress/gutenberg#32266
- Make the focus style valid CSS WordPress/gutenberg#32305
- Fix theme.json styles for the core/list block WordPress/gutenberg#32343
- Fix PHP notice when calling render_block WordPress/gutenberg#32135

Props nosolosw, noisysocks.
See #52991.

Built from https://develop.svn.wordpress.org/trunk@51051


git-svn-id: http://core.svn.wordpress.org/trunk@50660 1a063a9b-81f0-0310-95a4-ce76da25c4cd
gMagicScott pushed a commit to gMagicScott/core.wordpress-mirror that referenced this pull request Jun 1, 2021
This includes the following fixes:

- Generate babel polyfill dynamically WordPress/gutenberg#31279
- Improve the List View component WordPress/gutenberg#31290 WordPress/gutenberg#32063
- Template mode:
    - Fix embed dimensions WordPress/gutenberg#32057
    - Update the welcome guide WordPress/gutenberg#32055 WordPress/gutenberg#32026
    - Don’t display the notice at the same time as the welcome guide WordPress/gutenberg#32076
    - Remove MetaBoxes WordPress/gutenberg#32315
    - Update the title area WordPress/gutenberg#32037 
- Widgets Screen:
    - Fix unsaved changes WordPress/gutenberg#31757
    - Fix toolbar alignment WordPress/gutenberg#31991
    - Fix block toolbar position after scroll WordPress/gutenberg#32212
    - Fix the visible widget area header WordPress/gutenberg#32262
    - Fix legacy widgets preview WordPress/gutenberg#32260
    - 
- Block Widgets in the customizer: 
    - Fix customizer title overlapping block toolbar WordPress/gutenberg#32140
    - Fix styling issues WordPress/gutenberg#32072
    - Fix escape key events WordPress/gutenberg#32175
    - Add preferences menu group label WordPress/gutenberg#32259
    - Fix creating and replacing legacy widgets WordPress/gutenberg#32005
    - Fix the welcome guide’s image WordPress/gutenberg#32264 WordPress/gutenberg#32302 
- Fix Cover to Image transform duotone error WordPress/gutenberg#32006
- Remove filter_var usage from blocks WordPress/gutenberg#32046 
- Fix image width for aligned Post Featured Image block WordPress/gutenberg#32070
- Prevent excessive Image block re-rendering WordPress/gutenberg#32102
- Remove gutenberg domain from core blocks WordPress/gutenberg#32152
- Use the block editor context class for the the different settings filters WordPress/gutenberg#32159
- Fix Latest Posts block grid view WordPress/gutenberg#32160
- Fix preset classes generation per block WordPress/gutenberg#32190
- Fix logic to enable custom colors and gradients WordPress/gutenberg#32200
- Update the Site Logo logic to use a dedicated site option WordPress/gutenberg#32229
- Limit the Latest Posts block’s featured image width WordPress/gutenberg#32245
- Remove opacity animation in the canvas. WordPress/gutenberg#32266
- Make the focus style valid CSS WordPress/gutenberg#32305
- Fix theme.json styles for the core/list block WordPress/gutenberg#32343
- Fix PHP notice when calling render_block WordPress/gutenberg#32135

Props nosolosw, noisysocks.
See #52991.

Built from https://develop.svn.wordpress.org/trunk@51051


git-svn-id: https://core.svn.wordpress.org/trunk@50660 1a063a9b-81f0-0310-95a4-ce76da25c4cd
F-Wilke pushed a commit to FiliagoDev/WordPress that referenced this pull request Jul 31, 2021
This includes the following fixes:

- Generate babel polyfill dynamically WordPress/gutenberg#31279
- Improve the List View component WordPress/gutenberg#31290 WordPress/gutenberg#32063
- Template mode:
    - Fix embed dimensions WordPress/gutenberg#32057
    - Update the welcome guide WordPress/gutenberg#32055 WordPress/gutenberg#32026
    - Don’t display the notice at the same time as the welcome guide WordPress/gutenberg#32076
    - Remove MetaBoxes WordPress/gutenberg#32315
    - Update the title area WordPress/gutenberg#32037 
- Widgets Screen:
    - Fix unsaved changes WordPress/gutenberg#31757
    - Fix toolbar alignment WordPress/gutenberg#31991
    - Fix block toolbar position after scroll WordPress/gutenberg#32212
    - Fix the visible widget area header WordPress/gutenberg#32262
    - Fix legacy widgets preview WordPress/gutenberg#32260
    - 
- Block Widgets in the customizer: 
    - Fix customizer title overlapping block toolbar WordPress/gutenberg#32140
    - Fix styling issues WordPress/gutenberg#32072
    - Fix escape key events WordPress/gutenberg#32175
    - Add preferences menu group label WordPress/gutenberg#32259
    - Fix creating and replacing legacy widgets WordPress/gutenberg#32005
    - Fix the welcome guide’s image WordPress/gutenberg#32264 WordPress/gutenberg#32302 
- Fix Cover to Image transform duotone error WordPress/gutenberg#32006
- Remove filter_var usage from blocks WordPress/gutenberg#32046 
- Fix image width for aligned Post Featured Image block WordPress/gutenberg#32070
- Prevent excessive Image block re-rendering WordPress/gutenberg#32102
- Remove gutenberg domain from core blocks WordPress/gutenberg#32152
- Use the block editor context class for the the different settings filters WordPress/gutenberg#32159
- Fix Latest Posts block grid view WordPress/gutenberg#32160
- Fix preset classes generation per block WordPress/gutenberg#32190
- Fix logic to enable custom colors and gradients WordPress/gutenberg#32200
- Update the Site Logo logic to use a dedicated site option WordPress/gutenberg#32229
- Limit the Latest Posts block’s featured image width WordPress/gutenberg#32245
- Remove opacity animation in the canvas. WordPress/gutenberg#32266
- Make the focus style valid CSS WordPress/gutenberg#32305
- Fix theme.json styles for the core/list block WordPress/gutenberg#32343
- Fix PHP notice when calling render_block WordPress/gutenberg#32135

Props nosolosw, noisysocks.
See #52991.

Built from https://develop.svn.wordpress.org/trunk@51051


git-svn-id: http://core.svn.wordpress.org/trunk@50660 1a063a9b-81f0-0310-95a4-ce76da25c4cd
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] List View Menu item in the top toolbar to select blocks from a list of links. [Type] Code Quality Issues or PRs that relate to code quality
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants