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

[Widget Editor] Fixed sidebar inserter #25681

Merged
merged 5 commits into from
Sep 29, 2020
Merged

Conversation

adamziel
Copy link
Contributor

@adamziel adamziel commented Sep 28, 2020

Description

Solves #25649

Side-note: As the fixed sidebar inserter may also be useful in the navigation editor, and other editors yet to come, it could be a good idea to extract reusable parts to the interface package.

How has this been tested?

  1. Go to widgets editor
  2. Click "Add widget"
  3. Confirm the inserter was displayed in form of a fixed sidebar
  4. Confirm the interactions make sense (clicking outside hides the inserter, it's not displayed together with the right sidebar on small screens)
  5. Confirm the inserter actually works

Screenshots

Zrzut ekranu 2020-09-29 o 10 27 58

Types of changes

New feature (non-breaking change which adds functionality)

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • 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.

@adamziel adamziel added [Feature] Widgets Screen The block-based screen that replaced widgets.php. [Block] Legacy Widget Affects the Legacy Widget Block - used for displaying Classic Widgets [Package] Edit Widgets /packages/edit-widgets labels Sep 28, 2020
@adamziel adamziel self-assigned this Sep 28, 2020
@github-actions
Copy link

github-actions bot commented Sep 28, 2020

Size Change: +1.37 kB (0%)

Total Size: 1.17 MB

Filename Size Change
build/a11y/index.js 1.14 kB -1 B
build/block-directory/index.js 8.61 kB -2 B (0%)
build/block-editor/index.js 129 kB +145 B (0%)
build/block-library/editor-rtl.css 8.6 kB -8 B (0%)
build/block-library/editor.css 8.6 kB -9 B (0%)
build/block-library/index.js 135 kB -89 B (0%)
build/block-library/style-rtl.css 7.65 kB +41 B (0%)
build/block-library/style.css 7.64 kB +43 B (0%)
build/blocks/index.js 47.5 kB -1 B
build/components/index.js 168 kB -21 B (0%)
build/components/style-rtl.css 15.4 kB +7 B (0%)
build/components/style.css 15.4 kB +7 B (0%)
build/compose/index.js 9.42 kB +2 B (0%)
build/data/index.js 8.42 kB -14 B (0%)
build/edit-post/index.js 306 kB +2 B (0%)
build/edit-site/index.js 20.4 kB -85 B (0%)
build/edit-site/style-rtl.css 3.76 kB +222 B (5%) 🔍
build/edit-site/style.css 3.77 kB +224 B (5%) 🔍
build/edit-widgets/index.js 18.7 kB +956 B (5%) 🔍
build/edit-widgets/style-rtl.css 3.03 kB +302 B (9%) 🔍
build/edit-widgets/style.css 3.03 kB +304 B (10%) ⚠️
build/editor/index.js 45.5 kB +5 B (0%)
build/format-library/index.js 7.49 kB +1 B
build/redux-routine/index.js 2.85 kB -1 B
build/rich-text/index.js 13 kB -660 B (5%)
ℹ️ View Unchanged
Filename Size Change
build/annotations/index.js 3.52 kB 0 B
build/api-fetch/index.js 3.35 kB 0 B
build/autop/index.js 2.72 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/style-rtl.css 943 B 0 B
build/block-directory/style.css 942 B 0 B
build/block-editor/style-rtl.css 11.1 kB 0 B
build/block-editor/style.css 11.1 kB 0 B
build/block-library/theme-rtl.css 741 B 0 B
build/block-library/theme.css 741 B 0 B
build/block-serialization-default-parser/index.js 1.78 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/core-data/index.js 12 kB 0 B
build/data-controls/index.js 1.27 kB 0 B
build/date/index.js 31.9 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 568 B 0 B
build/dom/index.js 4.42 kB 0 B
build/edit-navigation/index.js 10.7 kB 0 B
build/edit-navigation/style-rtl.css 868 B 0 B
build/edit-navigation/style.css 871 B 0 B
build/edit-post/style-rtl.css 6.25 kB 0 B
build/edit-post/style.css 6.24 kB 0 B
build/editor/editor-styles-rtl.css 492 B 0 B
build/editor/editor-styles.css 493 B 0 B
build/editor/style-rtl.css 3.83 kB 0 B
build/editor/style.css 3.82 kB 0 B
build/element/index.js 4.44 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/style-rtl.css 547 B 0 B
build/format-library/style.css 548 B 0 B
build/hooks/index.js 1.74 kB 0 B
build/html-entities/index.js 621 B 0 B
build/i18n/index.js 3.55 kB 0 B
build/is-shallow-equal/index.js 709 B 0 B
build/keyboard-shortcuts/index.js 2.39 kB 0 B
build/keycodes/index.js 1.85 kB 0 B
build/list-reusable-blocks/index.js 3.02 kB 0 B
build/list-reusable-blocks/style-rtl.css 476 B 0 B
build/list-reusable-blocks/style.css 476 B 0 B
build/media-utils/index.js 5.12 kB 0 B
build/notices/index.js 1.69 kB 0 B
build/nux/index.js 3.27 kB 0 B
build/nux/style-rtl.css 671 B 0 B
build/nux/style.css 668 B 0 B
build/plugins/index.js 2.44 kB 0 B
build/primitives/index.js 1.34 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/server-side-render/index.js 2.6 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.24 kB 0 B
build/url/index.js 4.06 kB 0 B
build/viewport/index.js 1.74 kB 0 B
build/warning/index.js 1.13 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

@adamziel adamziel marked this pull request as ready for review September 29, 2020 08:27
onMouseDown={ ( event ) => {
event.preventDefault();
} }
onClick={ () => {
Copy link
Member

Choose a reason for hiding this comment

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

Nitpick: Let's move it to a function in the render function to make easier to read.

true
);
}
// eslint-disable-next-line @wordpress/react-no-unsafe-timeout
Copy link
Member

Choose a reason for hiding this comment

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

Why do we need this?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Without it, eslint complains about doing setTimeout without matching clearTimeout. In this case the setTimeout call is all about running code on the next tick so clearTimeout wouldn't make as much sense.

Copy link
Member

Choose a reason for hiding this comment

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

Ahh I meant to comment the next line: why do we need the setTimeout?

Copy link
Contributor Author

@adamziel adamziel Sep 29, 2020

Choose a reason for hiding this comment

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

Without it, the DOM updates resulting from selectBlock() and setIsInserterOpened() calls are applied the same tick and pretty much in a random order. The inserter is closed if any other part of the app receives focus. If selectBlock() happens to take effect after setIsInserterOpened() then the inserter is visible for a brief moment and then gets auto-closed due to focus moving to the selected block.

Copy link
Member

Choose a reason for hiding this comment

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

Maybe requestAnimationFrame would be a better choice? And would also appreciate if you can add some comments above it, since it's not idiomatic code 😅

withFocusReturn( ( { children } ) => children )
);

export default function PopoverWrapper( { onClose, children, className } ) {
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 a very generic component and I think ideally this becomes a set of hooks or a single hook as it's more about behavior and less about UI. (that said, it's separate from this PR)

Copy link
Member

@kevin940726 kevin940726 left a comment

Choose a reason for hiding this comment

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

After opening the inserter sidebar, the height of the window increased magically 😅

image

@draganescu
Copy link
Contributor

@adamziel while testing I found a problem:

  • collapse all the widget areas
  • click to open the inserter
  • first widget areas expands - correct
  • scroll and click to expand second widget area
    x inserter closes - incorrect

@adamziel
Copy link
Contributor Author

@kevin940726 interesting! I played with it a bit and failed to reproduce the issue - how did you arrive at that state?

@adamziel
Copy link
Contributor Author

collapse all the widget areas
click to open the inserter
first widget areas expands - correct
scroll and click to expand second widget area
x inserter closes - incorrect

@draganescu it's not a bug, it's a feature. The inserter acts like a popover, just like it does in the post editor. We discussed some related problems in #24561 and #24822. Tl;dr - we concluded that following the post editor pattern is the most sensible way to start.

@mapk
Copy link
Contributor

mapk commented Sep 29, 2020

we concluded that following the post editor pattern is the most sensible way to start.

I agree. This is correct behavior. Although I noticed that the first click on another widget area did not immediately open that area. It should. Here's what's happening now:

click

The other issue I noticed, which I'm not sure should be posted here, but here goes...

The drop placeholder when hovering over the blocks in the Inserter panel should appear BELOW any existing blocks if nothing is selected. Same way it works in the post editor. Notice below, I already have a block in the first area, but the drop placeholder is appearing above it.

Screen Shot 2020-09-29 at 8 05 08 AM

@adamziel
Copy link
Contributor Author

adamziel commented Sep 29, 2020

@kevin940726 nevermind, I just reproduced it and added a fix (overflow: hidden). It's not perfect but should do it for this PR and 9.1. Let's absolutely revisit it.

Copy link
Contributor

@draganescu draganescu left a comment

Choose a reason for hiding this comment

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

Because this advances the UI a lot in regard to the design spec we have I'd like to merge this and come back to it's problems in future PRs.

We'll need to address:

  • The widget areas should expand in one click
  • The insert highlight in widget area should show at the end of the area
  • Remove the need to have overflow:hidden for .block-editor-inserter__menu

@draganescu draganescu dismissed kevin940726’s stale review September 29, 2020 15:33

Review issues fixed

@kevin940726
Copy link
Member

Worth noticing that if the expected behavior is to append the block to the end of the widget area, we might don't need selectBlock( rootClientId ); at all, hence could potentially remove the setTimteout hack . Needs testing though 🤔.

@draganescu draganescu deleted the add/fixed-sidebar-inserter branch September 29, 2020 16:15
@github-actions github-actions bot added this to the Gutenberg 9.2 milestone Sep 29, 2020
youknowriad pushed a commit that referenced this pull request Sep 30, 2020
* Fixed sidebar inserter

* Styles for the title

* Scrollable toolbar on mobile

* Add a comment and extract handleClick into a separate function

* Fix the page height issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Legacy Widget Affects the Legacy Widget Block - used for displaying Classic Widgets [Feature] Widgets Screen The block-based screen that replaced widgets.php. [Package] Edit Widgets /packages/edit-widgets
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants