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

Navigation: add dedicated sidebar for managing layout of navigation menus #39290

Merged
merged 19 commits into from
Mar 28, 2022

Conversation

gwwar
Copy link
Contributor

@gwwar gwwar commented Mar 8, 2022

What?

This PR adds a new navigation sidebar in the site editor. This sidebar replaces the list view modal, and allows one to see the contents of navigation menus even if they aren't in the current template.

Screen.Capture.on.2022-03-15.at.14-09-57.mov

Why?

Part of explorations for #36667.

This PR pulls out a more pragmatic piece of #38600 out to focus specifically on a Navigation sidebar.

We may find that it's still a little early to display a new top level panel while we iterate on UX options, so let me know if folks would like to add a feature flag. @getdave: I suggest we ship and iterate based on feedback.

How?

A couple of key points in this PR:

  • A new selector __experimentalGetGlobalBlocksByName allows us to display the correct current menu when the panel is open.
  • Using a BlockEditorProvider gives us the editing and save functionality we mostly expect, however there are side-effects that occur in the rendering of BlockList. This means that we need to think through how to provide information like allowed block information (which blocks may be inserted into another), when BlockList is not rendered (as is the case for ListView). I've added a temporary workaround by dispatching this information manually. Folks should discuss if this temporary patch is worthwhile, or if we should think of a better solution with some refactoring of block list. Note that the current solution is fragile and will drift, but it does fix dragging and has a relatively small surface area.
  • A new slotfill in blocktoolbar to decouple the navigation block from having to know about a site-editor component.
  • We only had interest in adding this panel to the site editor, so this PR effectively removes the list view modal in the post-editor without an alternative. @getdave: I think that's ok since we already have the standard List View available in the Post Editor which does the exact same thing.
  • List View has gained new properties to allow all levels to be collapsed by default. (now extracted into Add prop to control default expand/collapse state of ListView nodes #39486)

Todo

Testing Instructions

All of the below should be tested in the Site Editor.

Nav block menu to sidebar association

The intent is to verify that the menu matches that associated with the selected Nav block:

  • refresh the Site Editor to clear existing Redux state.
  • add a Nav block and associate a Navigation Menu with it.
  • with the Nav block selected toggle the Nav sidebar open
  • see that the menu that is associated with the selected Nav block is active in the sidebar

Default Navigation Menu selection based on Template

  • refresh the Site Editor to clear existing Redux state.
  • add a Nav block and associate a Navigation Menu with it.
  • deselect the Navigation block.
  • toggle the sidebar open.
  • the sidebar should select the Nav Menu associated with the first Navigation block in the currently template.
  • try variations (i.e. multiple Nav blocks some without associated Menus) to ensure the correct menu is always selected.

Default Navigation Menu selection based on available Nav Menus

  • refresh the Site Editor to clear existing Redux state.
  • remove all Nav blocks from the current template.
  • toggle the sidebar open.
  • see the sidebar Menu displays the first available wp_navigation returned by the REST API.

Modifying Menus items

  • Pick a Navigation Menu that you know - temporarily add to a Nav block so you know what it looks like then remove the Nav block.
  • Open Nav sidebar.
  • Modify the menu - move up and down, delete items...etc
  • Check the menu shows up in the multi-entity saving flow.
  • Save
  • Add the same menu to a new Nav block.
  • Check the changes you made in the sidebar are reflected there.

Misc.

  • Verify that in the Widget, Navigation and Post editor that the navigation sidebar is not available.

@github-actions
Copy link

github-actions bot commented Mar 8, 2022

Size Change: +1.27 kB (0%)

Total Size: 1.21 MB

Filename Size Change
build/block-editor/index.min.js 147 kB +67 B (0%)
build/block-library/index.min.js 171 kB -317 B (0%)
build/edit-site/index.min.js 46.4 kB +1.25 kB (+3%)
build/edit-site/style-rtl.css 7.74 kB +136 B (+2%)
build/edit-site/style.css 7.71 kB +137 B (+2%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/admin-manifest/index.min.js 1.24 kB
build/annotations/index.min.js 2.77 kB
build/api-fetch/index.min.js 2.27 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 487 B
build/block-directory/index.min.js 6.49 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 15.4 kB
build/block-editor/style.css 15.4 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 150 B
build/block-library/blocks/audio/editor.css 150 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/avatar/editor-rtl.css 59 B
build/block-library/blocks/avatar/editor.css 59 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 445 B
build/block-library/blocks/button/editor.css 445 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 292 B
build/block-library/blocks/buttons/editor.css 292 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 103 B
build/block-library/blocks/code/style.css 103 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 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/comments-query-loop/editor-rtl.css 95 B
build/block-library/blocks/comments-query-loop/editor.css 95 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.56 kB
build/block-library/blocks/cover/style.css 1.56 kB
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 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 353 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 961 B
build/block-library/blocks/gallery/editor.css 964 B
build/block-library/blocks/gallery/style-rtl.css 1.51 kB
build/block-library/blocks/gallery/style.css 1.51 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 731 B
build/block-library/blocks/image/editor.css 730 B
build/block-library/blocks/image/style-rtl.css 529 B
build/block-library/blocks/image/style.css 535 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 199 B
build/block-library/blocks/latest-posts/editor.css 198 B
build/block-library/blocks/latest-posts/style-rtl.css 447 B
build/block-library/blocks/latest-posts/style.css 446 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 708 B
build/block-library/blocks/navigation-link/editor.css 706 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 375 B
build/block-library/blocks/navigation/editor-rtl.css 2.03 kB
build/block-library/blocks/navigation/editor.css 2.04 kB
build/block-library/blocks/navigation/style-rtl.css 1.89 kB
build/block-library/blocks/navigation/style.css 1.88 kB
build/block-library/blocks/navigation/view.min.js 2.85 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 363 B
build/block-library/blocks/page-list/editor.css 363 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 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 521 B
build/block-library/blocks/post-comments/style.css 521 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 323 B
build/block-library/blocks/post-template/style.css 323 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 370 B
build/block-library/blocks/pullquote/style.css 370 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 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 201 B
build/block-library/blocks/quote/style.css 201 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 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 140 B
build/block-library/blocks/separator/editor.css 140 B
build/block-library/blocks/separator/style-rtl.css 233 B
build/block-library/blocks/separator/style.css 233 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 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 759 B
build/block-library/blocks/site-logo/editor.css 759 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 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB
build/block-library/blocks/social-links/style.css 1.36 kB
build/block-library/blocks/spacer/editor-rtl.css 332 B
build/block-library/blocks/spacer/editor.css 332 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 226 B
build/block-library/blocks/tag-cloud/style.css 227 B
build/block-library/blocks/template-part/editor-rtl.css 235 B
build/block-library/blocks/template-part/editor.css 235 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 571 B
build/block-library/blocks/video/editor.css 572 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 934 B
build/block-library/common.css 932 B
build/block-library/editor-rtl.css 10 kB
build/block-library/editor.css 10 kB
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/style-rtl.css 11.2 kB
build/block-library/style.css 11.2 kB
build/block-library/theme-rtl.css 689 B
build/block-library/theme.css 694 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 46.8 kB
build/components/index.min.js 223 kB
build/components/style-rtl.css 14.9 kB
build/components/style.css 14.9 kB
build/compose/index.min.js 11.2 kB
build/core-data/index.min.js 14.3 kB
build/customize-widgets/index.min.js 11 kB
build/customize-widgets/style-rtl.css 1.39 kB
build/customize-widgets/style.css 1.39 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 8.61 kB
build/date/index.min.js 32 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.58 kB
build/edit-navigation/index.min.js 15.8 kB
build/edit-navigation/style-rtl.css 4.04 kB
build/edit-navigation/style.css 4.05 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/index.min.js 29.6 kB
build/edit-post/style-rtl.css 7.07 kB
build/edit-post/style.css 7.07 kB
build/edit-widgets/index.min.js 16.3 kB
build/edit-widgets/style-rtl.css 4.4 kB
build/edit-widgets/style.css 4.39 kB
build/editor/index.min.js 38.4 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.71 kB
build/element/index.min.js 4.29 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 6.62 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.66 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.79 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.83 kB
build/keycodes/index.min.js 1.41 kB
build/list-reusable-blocks/index.min.js 1.75 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.94 kB
build/notices/index.min.js 957 B
build/nux/index.min.js 2.12 kB
build/nux/style-rtl.css 751 B
build/nux/style.css 749 B
build/plugins/index.min.js 1.98 kB
build/preferences/index.min.js 1.2 kB
build/primitives/index.min.js 949 B
build/priority-queue/index.min.js 611 B
build/react-i18n/index.min.js 704 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.69 kB
build/reusable-blocks/index.min.js 2.24 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11.1 kB
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.52 kB
build/token-list/index.min.js 668 B
build/url/index.min.js 1.99 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.21 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.07 kB

compressed-size-action

@scruffian
Copy link
Contributor

Thanks for putting this together

@@ -140,6 +142,11 @@ export default function BlockToolbar( { hideDragHandle } ) {
group="other"
className="block-editor-block-toolbar__slot"
/>
<__unstableBlockNameContext.Provider
Copy link
Contributor

Choose a reason for hiding this comment

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

This is used to provide a toggle to open the Navigation sidebar for the currently selected Navigation block.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Added a picture for folks too. In trunk clicking this opens a list-view modal, but on this branch it should open the new sidebar.

list view

@getdave getdave mentioned this pull request Mar 9, 2022
42 tasks
Copy link
Contributor

@getdave getdave left a comment

Choose a reason for hiding this comment

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

I took this for a spin. It's a really great start and I can see it provides some benefits as a way to manage a Navigation Menu outside of the Navigation block (which can have its limitations).

Nonetheless there are some rough edges and pain points that we need to either

  • fix in this PR
  • note down as "known limitations" and track in follow up Issues

This is not intended to sound overly critical. I fully acknowledge that this isn't the "finished article" and we're still iterating on the design and UX of this approach. Moreover, I will likely be working on this PR so it's in my interests to be thorough in exposing problems 😄

Here are my thoughts:

UX problems

  • the requirement to side scroll to see the ellipsis menu on long menu item names is suboptimal

Screen Capture on 2022-03-10 at 11-06-08

  • the loading animation doesn't marry well with the positioning of the menu when it renders

Screen Capture on 2022-03-10 at 11-09-06

Missing features

These may or may not be within the scope of this PR or indeed the feature more widely. But we should acknowledge them:

  • inability to add new menu items - tricky due to inability to edit text...etc
  • inability to create new menus - this is important for "safe exploration" (the ability to create menus without having to render them to a post via the Nav block).

Summary

I think this is a great start and I appreciate all the effort that's gone into it 👏

The implementation aside however, even if it were polished I cannot see it solving all the user requirements for managing menus outside of the block. We are missing

  • ability to create new menus
  • ability to directly manipulate the menu item text content
  • ability to manipulate the menu item block settings
  • ability to access the raw inner blocks of the Navigation Menu itself

Therefore I wonder whether we should restyle this sidebar less as a means to manage the content of the menu and instead make it more about managing the structure of a menu. Indeed this may have been the original genesis of the idea as outlined in #36667.

@gwwar
Copy link
Contributor Author

gwwar commented Mar 10, 2022

Noting some related issues to ListView that can be worked on outside of this PR:

we might want to avoid rendering the menu with all levels fully expanded.

There's some discussion in #34759 for that. Folks prefer collapsed by default, there will need to be a small refactor for component open/closed state in ListView. Folks should also be mindful of making sure windowing working as expected when ListView has many items.

the requirement to side scroll to see the ellipsis menu on long menu item names is suboptimal

This is a general issue with ListView taking up an arbitrary width based on the current contents. It's more noticeable here since the right sidebars are smaller than the secondary ones.

I played around with this a bit in #35605 though I think it's ideal if we can standardize a bit on sidebar widths as well. @jasmussen do you know if there was an existing issue for this one?

drag and drop indicators (blue lines) overflow outside of the sidebar

We likely only need to fix this if we want this panel to land on the right vs left. Shouldn't be too bad to tidy up.

Also note that folks have been wanting more direct dragging in ListView. I recently updated framer motion to v6 which has new drag utilities, so folks should be able to experiment with that again. Previously performance was a blocker for this, but ListView also uses windowing now for larger cases so that shouldn't be as much of an issue.

Here's a prototype of what it could look like using framer v4: #34022

I wonder whether we should restyle this sidebar less as a means to manage the content of the menu and instead make it more about managing the structure of a menu

🤔 Is that not what the panel currently does?

@skorasaurus skorasaurus added the [Feature] Site Editor Related to the overarching Site Editor (formerly "full site editing") label Mar 10, 2022
@paaljoachim
Copy link
Contributor

I am testing the PR.

Clicking the "List view" icon in the toolbar opens panel in the sidebar. I would assume that it would be associated with the Navigation block sidebar settings. Clicking the X closes the right sidebar.

Screenshot 2022-03-10 at 23 03 15

Here it could instead be on top of the panels kinda like clicking the 3 dot contextual Options icon in the top right corner opens on top of the sidebar settings. Here it can remain connected with the Nav block sidebar settings.
Clicking the X would only close the Navigation and one would then see the Nav block sidebar settings underneath.
I removed the Navigation icon seen in the top bar as the space can become too crowded.

Nav-sidebar-panel-on-top-of

Another option.
Could we add the full Navigation as a "regular" panel seen in the standard Navigation block settings? Along with the other Navigation block sidebar settings. Clicking the "List view" icon in the toolbar could then open the panel showing the Navigation. Closing the panel the other Navigation block panels would be seen.

Here is the mockup showing only the one Edit panel.
Edit-nav-in-sidebar

If it can not directly be added to the sidebar panels then one could perhaps have a panel with information and a button to open the Navigation editor.

Nav-block-sidebar-edit-nav

@scruffian
Copy link
Contributor

I think the intention of this panel is ultimately that it becomes a "site level" panel as outlined in #36667. Eventually we'll be able to manage all navigation blocks here, and create new ones. This PR is just a first step towards that goal, and although neither of those things are yet possible we should be looking to move in that direction.

It is easier to get there in small increments, by only changing one thing at at time. I think the next step will probably be to make this panel dark and move it, and the Styles sidebar to the left of the window, so I'd rather keep the behaviour of the sidebar as is for now and revisit it in the next PR.

@getdave
Copy link
Contributor

getdave commented Mar 14, 2022

Thank you for the feedback everyone.

I agree we ought to keep the scope of this PR narrow and iterate in future PRs.

I'm going to look at ironing out bugs and then addressing some of the points that have been raised.

@getdave

This comment was marked as outdated.

@getdave getdave added Needs Design Feedback Needs general design feedback. Needs Design Needs design efforts. labels Mar 15, 2022
@getdave
Copy link
Contributor

getdave commented Mar 15, 2022

It would very valuable to gain some design input here.

Note: we're specifically trying to limit the scope of this PR to encompass adding a place to modify your Navigation Menus only.

Items where I think design could add most value:

  • suggestions for visual improvements to the loading state indicators.
  • opinions on positioning of movers and "3 dots" menu.
  • general improvements to the aesthetics of the panel (if any).

I will update the PR description with that latest screenshots and information.

cc @jasmussen @jameskoster

@getdave getdave self-assigned this Mar 15, 2022
@talldan
Copy link
Contributor

talldan commented Mar 16, 2022

For a first attempt, I don't think the user experience is too far off.

I don't recommend trying to ship the block movers or any other new List View features in this PR, maybe a follow-up? It doesn't all have to be done in one go. They've been inactive for probably about two years, I think they'll need some refinement, accessibility testing and e2e tests.

I think it'd be good to consider moving this feature to the left of the screen before merging though. At the moment a user can have two List Views open, which is confusing. I think this one should just replace the global List View when it's selected from the nav block. The designs all show the feature on the left, so I think it's best to start with that so that the ergonomics are correct (e.g. Block Settings can be toggled open). The sidebar on the right is also a bit narrower, so not ideal for this feature.

@getdave
Copy link
Contributor

getdave commented Mar 16, 2022

Thanks for taking time to feedback here @talldan.

I don't recommend trying to ship the block movers or any other new List View features in this PR, maybe a follow-up?

I don't think block movers are a new feature of list view. They come "out of the box" so to speak. What would you suggest? Disabling them?

I could remove other features I've added to ListView into smaller follow ups. That should keep things simple as long as it doesn't muddy the review process.

I agree that shipping in smaller increments is best.

@talldan
Copy link
Contributor

talldan commented Mar 16, 2022

I don't think block movers are a new feature of list view. They come "out of the box" so to speak. What would you suggest? Disabling them?

Oh right. They've never been shipped as an active feature. I guess they're automatically enabled in the List View component? Maybe they're included here accidentally. I think they can be turned on or off via a showMovers prop.

@getdave
Copy link
Contributor

getdave commented Mar 16, 2022

Currently this feature is not very exposed to users - let's use that to our advantage.

We could look to simplify this PR by removing non-essential features (moving those to separate PRs) and shipping "as is".

We can then follow up to:

  • re-add non-essential features (based on merging other PRs).
  • move the sidebar to the left hand side panel
  • design improvements

@talldan @scruffian what do you think?

@jasmussen
Copy link
Contributor

jasmussen commented Mar 16, 2022

Thanks for taking a stab at a minimal first version! Here's what I see in quick GIF form:
state

A few thoughts. Firstly that it seems fine to start the pinned item on the right, even if eventually we'll likely move it left as part of #36667.

Perhaps an artifact of my local env. being sheparded along without a fresh restart in a while, but I can't find in the dropdown list the particular menu used on my site. "Header Navigation" as the chosen menu doesn't show up in the list:

Screenshot 2022-03-16 at 08 12 15

Note that if I choose a menu in the canvas which also shows up on the right, the canvas DOES update to reflect any changes I make dragging things around.

"Navigation" seems like a good simple name for the panel.

The existance of this panel itself seems to suggest a good next step would be to explore: what happens if there are zero navigation menus created saved? Can we show the structure of the site itself (using page metadata such as parent and sort order), and then save a menu as soon as a customization is made?

If I only ever have a single menu saved, we don't need to show the dropdown:

Screenshot 2022-03-16 at 08 16 48

If I select a navigation block in the canvas, and I have multiple menus saved, should the panel update to pick the selected menu?

What do you think? Nice work!

@talldan
Copy link
Contributor

talldan commented Mar 16, 2022

Currently this feature is not very exposed to users - let's use that to our advantage.
...
what do you think?

I think that makes sense. I personally feel this PR could go much smaller, as I'm not sure all the features will make sense to an end user. As an example:

  • Selecting a nav block updates the menu in the sidebar, but changing the menu via sidebar's dropdown doesn't equally affect the block
  • Using the button on the editor topbar shows the menu for one of the blocks, but doesn't highlight the related nav block.
  • You can view a menu that's not in use, but can't do much with that menu.

I think the difficult part is that right now the feature feels very connected to the editor canvas, but the end goal is for it to represent and be used to build a more global site structure. Some of these features are maybe being introduced too early (the menu dropdown being the main one).

@getdave getdave force-pushed the add/navigation-sidebar branch from 4c75946 to 9a59e6e Compare March 28, 2022 08:38
@getdave
Copy link
Contributor

getdave commented Mar 28, 2022

@tellthemachines Thank you so much for your review. As this PR is growing ever larger I'm going to look to merge it and then address these points as follow ups. They are important and I will raise Issues for each now and ensure they are addressed as may next tasks.

The "Open list view" label on the block toolbar might be confusing because we already have a list view;

Ok let's rename that.

Tracked in: #39800

I'd expect focus to be transferred to the sidebar when that button is clicked, as well as from the "Navigation Menus" button in the header

Hmmm. Let me test the other sidebars and see what happens. Should be possible to auto-focus inside the sidebar.

Tracked in: #39801

When moving inside a navigation item with the Arrow keys, focus doesn't follow the visual order of the buttons. I can only focus "Move up" and "Move down" by focusing the "Options" button first, and then moving back with Left Arrow. Not sure what's happening there, but focus order and markup order aren't matching.

Is this something we also experience with ListView in other contexts (as in the primary List View)? I'll take a look.

Tracked in #39802.

We might want to think of a shorter text label for the header button, because "Navigation Menus" is taking up a lot of space when button text labels are enabled:

Agreed. Great spot.

Tracked in #39803.

@tellthemachines
Copy link
Contributor

Thanks for following up with those issues @getdave !

Is this something we also experience with ListView in other contexts (as in the primary List View)? I'll take a look.

I'm not sure as the primary List View doesn't have the movers. It occurred to me that this could be related to keyboard improvements in #38358, which changed the behaviour of Left/Right arrows to allow expanding and collapsing rows better.

<ListView
id={ id }
showNestedBlocks
showBlockMovers
Copy link
Contributor

@talldan talldan Mar 29, 2022

Choose a reason for hiding this comment

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

@getdave I think it would be good to disable the block movers until the keyboard navigation issues are solved and there has been accessibility feedback. At the moment the mover buttons don't seem to be in the expected place when using the right arrow key (as mentioned in #39802).

@alexstine
Copy link
Contributor

For accessibility feedback, @tellthemachines covered everything I was going to mention. The whole thing is really not keyboard accessible right now. Is there a tracking issue or new PR yet?

@getdave
Copy link
Contributor

getdave commented Mar 30, 2022

The whole thing is really not keyboard accessible right now. Is there a tracking issue or new PR yet?

Yes I've listed them out here.

@paaljoachim
Copy link
Contributor

Switching menus does not affect the current selected Header menu.
I expected that switching a menu in the drop down area when a Navigation block is selected that the menu used in the block would also change.

@getdave
Copy link
Contributor

getdave commented Apr 4, 2022

Switching menus does not affect the current selected Header menu. I expected that switching a menu in the drop down area when a Navigation block is selected that the menu used in the block would also change.

That's not a featured we optimised for. Interesting that you expected that to happen.

To me this whole thing shows that we need to "divorce" the Navigation sidebar from the concept of the editor canvas.

@jasmussen
Copy link
Contributor

There's a design outlined in #36667 (comment) which aims to make it clearer that it is a global interface rather than one contextual to the content like the block inspector is.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Site Editor Related to the overarching Site Editor (formerly "full site editing") Needs Design Feedback Needs general design feedback. Needs Design Needs design efforts.
Projects
No open projects
Archived in project
Development

Successfully merging this pull request may close these issues.

9 participants