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

Clear selection state when RESET_BLOCKS action is dispatched #21371

Closed

Conversation

talldan
Copy link
Contributor

@talldan talldan commented Apr 3, 2020

Description

In #21340 a fix toolbar is used for the new Navigation Menus page that's being developed as an experimental feature.

@draganescu noticed an issue when testing this and changing between menus (#21340 (review)), which seems to be due to block selection state not being reset when RESET_BLOCKS is dispatched by the new menu selection.

How has this been tested?

This can fairly easily be reproduced in the post editor:

  1. Enable the Top Toolbar option
  2. Add a paragraph with some text to a post and ensure it stays selected so that the block toolbar is shown at the top
  3. In the browser dev tools open up the console and execute the following to reset blocks: wp.data.dispatch('core/block-editor').resetBlocks([]);
  4. Observe in the top toolbar the block movers and more menu are no longer displayed. (In master they're displayed and clicking on the more menu causes the editor to throw an error.)

Types of changes

Bug fix (non-breaking change which fixes an issue)

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.

@talldan talldan added [Type] Bug An existing feature does not function as intended [Package] Block editor /packages/block-editor labels Apr 3, 2020
@talldan talldan self-assigned this Apr 3, 2020
@github-actions
Copy link

github-actions bot commented Apr 3, 2020

Size Change: +1 B

Total Size: 884 kB

Filename Size Change
build/block-editor/index.js 102 kB +1 B
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.02 kB 0 B
build/annotations/index.js 3.45 kB 0 B
build/api-fetch/index.js 3.8 kB 0 B
build/autop/index.js 2.59 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/index.js 6.03 kB 0 B
build/block-directory/style-rtl.css 760 B 0 B
build/block-directory/style.css 760 B 0 B
build/block-editor/style-rtl.css 10.7 kB 0 B
build/block-editor/style.css 10.7 kB 0 B
build/block-library/editor-rtl.css 7.22 kB 0 B
build/block-library/editor.css 7.22 kB 0 B
build/block-library/index.js 110 kB 0 B
build/block-library/style-rtl.css 7.53 kB 0 B
build/block-library/style.css 7.54 kB 0 B
build/block-library/theme-rtl.css 669 B 0 B
build/block-library/theme.css 671 B 0 B
build/block-serialization-default-parser/index.js 1.65 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/blocks/index.js 57.5 kB 0 B
build/components/index.js 195 kB 0 B
build/components/style-rtl.css 16.6 kB 0 B
build/components/style.css 16.5 kB 0 B
build/compose/index.js 6.21 kB 0 B
build/core-data/index.js 10.7 kB 0 B
build/data-controls/index.js 1.03 kB 0 B
build/data/index.js 8.23 kB 0 B
build/date/index.js 5.37 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 569 B 0 B
build/dom/index.js 3.05 kB 0 B
build/edit-navigation/index.js 2.48 kB 0 B
build/edit-navigation/style-rtl.css 239 B 0 B
build/edit-navigation/style.css 241 B 0 B
build/edit-post/index.js 92.3 kB 0 B
build/edit-post/style-rtl.css 12 kB 0 B
build/edit-post/style.css 12 kB 0 B
build/edit-site/index.js 9.12 kB 0 B
build/edit-site/style-rtl.css 4.61 kB 0 B
build/edit-site/style.css 4.61 kB 0 B
build/edit-widgets/index.js 4.43 kB 0 B
build/edit-widgets/style-rtl.css 3.74 kB 0 B
build/edit-widgets/style.css 3.74 kB 0 B
build/editor/editor-styles-rtl.css 423 B 0 B
build/editor/editor-styles.css 426 B 0 B
build/editor/index.js 42.8 kB 0 B
build/editor/style-rtl.css 3.49 kB 0 B
build/editor/style.css 3.49 kB 0 B
build/element/index.js 4.44 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 6.95 kB 0 B
build/format-library/style-rtl.css 502 B 0 B
build/format-library/style.css 502 B 0 B
build/hooks/index.js 1.93 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 3.57 kB 0 B
build/is-shallow-equal/index.js 710 B 0 B
build/keyboard-shortcuts/index.js 2.3 kB 0 B
build/keycodes/index.js 1.7 kB 0 B
build/list-reusable-blocks/index.js 2.99 kB 0 B
build/list-reusable-blocks/style-rtl.css 226 B 0 B
build/list-reusable-blocks/style.css 226 B 0 B
build/media-utils/index.js 4.84 kB 0 B
build/notices/index.js 1.57 kB 0 B
build/nux/index.js 3.01 kB 0 B
build/nux/style-rtl.css 616 B 0 B
build/nux/style.css 613 B 0 B
build/plugins/index.js 2.54 kB 0 B
build/primitives/index.js 1.5 kB 0 B
build/priority-queue/index.js 780 B 0 B
build/redux-routine/index.js 2.84 kB 0 B
build/rich-text/index.js 14.5 kB 0 B
build/server-side-render/index.js 2.54 kB 0 B
build/shortcode/index.js 1.69 kB 0 B
build/token-list/index.js 1.28 kB 0 B
build/url/index.js 4.01 kB 0 B
build/viewport/index.js 1.6 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

@@ -1094,6 +1094,8 @@ function selection( state = {}, action ) {

return { clientId: blockToSelect.clientId };
}
case 'RESET_BLOCKS':
return {};
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is a pretty basic solution at the moment and it doesn't cover that there might be cases where selection should be retained. Maybe if the client id for the currently selected block exists in the blocks array from the RESET_BLOCKS action?

It looks like RESET_BLOCKS is used for synchronizing templates, so that looks like a case where selection could be unexpectedly lost.

However, with multi-selections, trying to retain a selection might cause a situation where selectionStart is retained but selectionEnd is cleared or vice versa.

@talldan
Copy link
Contributor Author

talldan commented Apr 7, 2020

Closing and moving to an issue: #21445

For now this has been worked around in #21340 by explicitly calling the clearSelection() action.

@talldan talldan closed this Apr 7, 2020
@talldan talldan deleted the fix/reset-blocks-not-clearing-selection-state branch April 7, 2020 05:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Package] Block editor /packages/block-editor [Type] Bug An existing feature does not function as intended
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant