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

Fix save, undo and redo keyboard shortcuts in navigation editor #28257

Merged
merged 2 commits into from
Jan 21, 2021

Conversation

grzim
Copy link
Contributor

@grzim grzim commented Jan 16, 2021

Saving post logic moved to upper layer so both - save button and cmd+s shortcut are using the same piece of code.

Description

Regarding #28213 keyboard shortcut to save navigation added.
The listener is added to the editor. As the editor does not play any interactive role, I have disabled the linter rule eslint-disable-next-line jsx-a11y/no-static-element-interactions

How has this been tested?

Tested manually

Types of changes

New feature

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.

…ved to upper layer so both - save button and cmd+s shortcut are using the same piece of code.
@github-actions
Copy link

github-actions bot commented Jan 16, 2021

Size Change: +2.45 kB (0%)

Total Size: 1.28 MB

Filename Size Change
build/a11y/index.js 1.14 kB -1 B (0%)
build/autop/index.js 2.84 kB +1 B (0%)
build/block-directory/index.js 9.08 kB -1 B (0%)
build/block-editor/index.js 122 kB +325 B (0%)
build/block-editor/style-rtl.css 11.9 kB +309 B (+3%)
build/block-editor/style.css 11.9 kB +309 B (+3%)
build/block-library/blocks/cover/style-rtl.css 1.3 kB +7 B (+1%)
build/block-library/blocks/cover/style.css 1.3 kB +6 B (0%)
build/block-library/blocks/navigation/editor-rtl.css 1.49 kB +106 B (+8%) 🔍
build/block-library/blocks/navigation/editor.css 1.48 kB +103 B (+7%) 🔍
build/block-library/blocks/paragraph/style-rtl.css 392 B +2 B (+1%)
build/block-library/blocks/paragraph/style.css 392 B +1 B (0%)
build/block-library/blocks/social-links/style-rtl.css 1.48 kB +43 B (+3%)
build/block-library/blocks/social-links/style.css 1.48 kB +43 B (+3%)
build/block-library/blocks/template-part/editor-rtl.css 794 B +80 B (+11%) ⚠️
build/block-library/blocks/template-part/editor.css 794 B +80 B (+11%) ⚠️
build/block-library/editor-rtl.css 9.06 kB +90 B (+1%)
build/block-library/editor.css 9.06 kB +85 B (+1%)
build/block-library/index.js 142 kB +538 B (0%)
build/block-library/style-rtl.css 8.59 kB +61 B (+1%)
build/block-library/style.css 8.59 kB +61 B (+1%)
build/block-serialization-default-parser/index.js 1.88 kB -3 B (0%)
build/blocks/index.js 48.1 kB -1 B (0%)
build/components/index.js 173 kB +101 B (0%)
build/components/style-rtl.css 15.5 kB +8 B (0%)
build/components/style.css 15.5 kB +5 B (0%)
build/compose/index.js 11.3 kB +1 B (0%)
build/core-data/index.js 15.2 kB +1 B (0%)
build/data/index.js 8.99 kB +4 B (0%)
build/date/index.js 31.8 kB +2 B (0%)
build/deprecated/index.js 769 B +1 B (0%)
build/dom/index.js 4.95 kB -1 B (0%)
build/edit-navigation/index.js 11.2 kB +22 B (0%)
build/edit-post/index.js 306 kB -6 B (0%)
build/edit-post/style-rtl.css 6.51 kB -52 B (-1%)
build/edit-post/style.css 6.5 kB -53 B (-1%)
build/edit-site/index.js 24.2 kB +2 B (0%)
build/edit-site/style-rtl.css 4.01 kB +3 B (0%)
build/edit-site/style.css 4.01 kB +4 B (0%)
build/edit-widgets/index.js 23.6 kB -2 B (0%)
build/edit-widgets/style-rtl.css 3.17 kB +4 B (0%)
build/edit-widgets/style.css 3.17 kB +3 B (0%)
build/editor/editor-styles-rtl.css 543 B +67 B (+14%) ⚠️
build/editor/editor-styles.css 545 B +67 B (+14%) ⚠️
build/editor/index.js 41.9 kB +27 B (0%)
build/element/index.js 4.62 kB -2 B (0%)
build/format-library/index.js 6.76 kB +3 B (0%)
build/is-shallow-equal/index.js 697 B -1 B (0%)
build/list-reusable-blocks/index.js 3.15 kB +1 B (0%)
build/notices/index.js 1.85 kB -2 B (0%)
build/nux/index.js 3.42 kB -2 B (0%)
build/plugins/index.js 2.54 kB +1 B (0%)
build/priority-queue/index.js 790 B +1 B (0%)
build/redux-routine/index.js 2.84 kB -1 B (0%)
build/reusable-blocks/index.js 2.92 kB +1 B (0%)
build/shortcode/index.js 1.7 kB +1 B (0%)
build/url/index.js 3.02 kB +1 B (0%)
build/warning/index.js 1.14 kB -1 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/annotations/index.js 3.8 kB 0 B
build/api-fetch/index.js 3.42 kB 0 B
build/blob/index.js 665 B 0 B
build/block-directory/style-rtl.css 1.01 kB 0 B
build/block-directory/style.css 1.01 kB 0 B
build/block-library/blocks/archives/editor-rtl.css 196 B 0 B
build/block-library/blocks/archives/editor.css 196 B 0 B
build/block-library/blocks/audio/editor-rtl.css 194 B 0 B
build/block-library/blocks/audio/editor.css 194 B 0 B
build/block-library/blocks/audio/style-rtl.css 225 B 0 B
build/block-library/blocks/audio/style.css 225 B 0 B
build/block-library/blocks/block/editor-rtl.css 283 B 0 B
build/block-library/blocks/block/editor.css 283 B 0 B
build/block-library/blocks/button/editor-rtl.css 576 B 0 B
build/block-library/blocks/button/editor.css 577 B 0 B
build/block-library/blocks/button/style-rtl.css 552 B 0 B
build/block-library/blocks/button/style.css 552 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 345 B 0 B
build/block-library/blocks/buttons/editor.css 346 B 0 B
build/block-library/blocks/buttons/style-rtl.css 419 B 0 B
build/block-library/blocks/buttons/style.css 419 B 0 B
build/block-library/blocks/calendar/style-rtl.css 319 B 0 B
build/block-library/blocks/calendar/style.css 319 B 0 B
build/block-library/blocks/categories/editor-rtl.css 210 B 0 B
build/block-library/blocks/categories/editor.css 209 B 0 B
build/block-library/blocks/categories/style-rtl.css 208 B 0 B
build/block-library/blocks/categories/style.css 208 B 0 B
build/block-library/blocks/code/style-rtl.css 216 B 0 B
build/block-library/blocks/code/style.css 216 B 0 B
build/block-library/blocks/columns/editor-rtl.css 300 B 0 B
build/block-library/blocks/columns/editor.css 299 B 0 B
build/block-library/blocks/columns/style-rtl.css 529 B 0 B
build/block-library/blocks/columns/style.css 528 B 0 B
build/block-library/blocks/cover/editor-rtl.css 524 B 0 B
build/block-library/blocks/cover/editor.css 522 B 0 B
build/block-library/blocks/embed/editor-rtl.css 594 B 0 B
build/block-library/blocks/embed/editor.css 595 B 0 B
build/block-library/blocks/embed/style-rtl.css 489 B 0 B
build/block-library/blocks/embed/style.css 489 B 0 B
build/block-library/blocks/file/editor-rtl.css 314 B 0 B
build/block-library/blocks/file/editor.css 313 B 0 B
build/block-library/blocks/file/style-rtl.css 352 B 0 B
build/block-library/blocks/file/style.css 352 B 0 B
build/block-library/blocks/freeform/editor-rtl.css 2.55 kB 0 B
build/block-library/blocks/freeform/editor.css 2.55 kB 0 B
build/block-library/blocks/gallery/editor-rtl.css 783 B 0 B
build/block-library/blocks/gallery/editor.css 783 B 0 B
build/block-library/blocks/gallery/style-rtl.css 1.17 kB 0 B
build/block-library/blocks/gallery/style.css 1.17 kB 0 B
build/block-library/blocks/group/editor-rtl.css 433 B 0 B
build/block-library/blocks/group/editor.css 432 B 0 B
build/block-library/blocks/group/style-rtl.css 190 B 0 B
build/block-library/blocks/group/style.css 190 B 0 B
build/block-library/blocks/heading/editor-rtl.css 248 B 0 B
build/block-library/blocks/heading/editor.css 248 B 0 B
build/block-library/blocks/heading/style-rtl.css 212 B 0 B
build/block-library/blocks/heading/style.css 212 B 0 B
build/block-library/blocks/html/editor-rtl.css 384 B 0 B
build/block-library/blocks/html/editor.css 385 B 0 B
build/block-library/blocks/image/editor-rtl.css 801 B 0 B
build/block-library/blocks/image/editor.css 800 B 0 B
build/block-library/blocks/image/style-rtl.css 569 B 0 B
build/block-library/blocks/image/style.css 570 B 0 B
build/block-library/blocks/latest-comments/editor-rtl.css 277 B 0 B
build/block-library/blocks/latest-comments/editor.css 275 B 0 B
build/block-library/blocks/latest-comments/style-rtl.css 382 B 0 B
build/block-library/blocks/latest-comments/style.css 382 B 0 B
build/block-library/blocks/latest-posts/editor-rtl.css 254 B 0 B
build/block-library/blocks/latest-posts/editor.css 254 B 0 B
build/block-library/blocks/latest-posts/style-rtl.css 634 B 0 B
build/block-library/blocks/latest-posts/style.css 634 B 0 B
build/block-library/blocks/list/editor-rtl.css 203 B 0 B
build/block-library/blocks/list/editor.css 203 B 0 B
build/block-library/blocks/list/style-rtl.css 201 B 0 B
build/block-library/blocks/list/style.css 201 B 0 B
build/block-library/blocks/media-text/editor-rtl.css 311 B 0 B
build/block-library/blocks/media-text/editor.css 311 B 0 B
build/block-library/blocks/media-text/style-rtl.css 642 B 0 B
build/block-library/blocks/media-text/style.css 640 B 0 B
build/block-library/blocks/more/editor-rtl.css 545 B 0 B
build/block-library/blocks/more/editor.css 545 B 0 B
build/block-library/blocks/navigation-link/editor-rtl.css 503 B 0 B
build/block-library/blocks/navigation-link/editor.css 504 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 805 B 0 B
build/block-library/blocks/navigation-link/style.css 803 B 0 B
build/block-library/blocks/navigation/style-rtl.css 289 B 0 B
build/block-library/blocks/navigation/style.css 289 B 0 B
build/block-library/blocks/nextpage/editor-rtl.css 507 B 0 B
build/block-library/blocks/nextpage/editor.css 507 B 0 B
build/block-library/blocks/paragraph/editor-rtl.css 236 B 0 B
build/block-library/blocks/paragraph/editor.css 236 B 0 B
build/block-library/blocks/post-author/editor-rtl.css 329 B 0 B
build/block-library/blocks/post-author/editor.css 329 B 0 B
build/block-library/blocks/post-author/style-rtl.css 303 B 0 B
build/block-library/blocks/post-author/style.css 303 B 0 B
build/block-library/blocks/post-comments-form/style-rtl.css 358 B 0 B
build/block-library/blocks/post-comments-form/style.css 358 B 0 B
build/block-library/blocks/post-content/editor-rtl.css 262 B 0 B
build/block-library/blocks/post-content/editor.css 262 B 0 B
build/block-library/blocks/post-excerpt/editor-rtl.css 206 B 0 B
build/block-library/blocks/post-excerpt/editor.css 206 B 0 B
build/block-library/blocks/post-featured-image/editor-rtl.css 453 B 0 B
build/block-library/blocks/post-featured-image/editor.css 453 B 0 B
build/block-library/blocks/post-featured-image/style-rtl.css 223 B 0 B
build/block-library/blocks/post-featured-image/style.css 223 B 0 B
build/block-library/blocks/preformatted/style-rtl.css 193 B 0 B
build/block-library/blocks/preformatted/style.css 193 B 0 B
build/block-library/blocks/pullquote/editor-rtl.css 304 B 0 B
build/block-library/blocks/pullquote/editor.css 304 B 0 B
build/block-library/blocks/pullquote/style-rtl.css 428 B 0 B
build/block-library/blocks/pullquote/style.css 428 B 0 B
build/block-library/blocks/query-loop/editor-rtl.css 217 B 0 B
build/block-library/blocks/query-loop/editor.css 216 B 0 B
build/block-library/blocks/query-loop/style-rtl.css 427 B 0 B
build/block-library/blocks/query-loop/style.css 429 B 0 B
build/block-library/blocks/query/editor-rtl.css 279 B 0 B
build/block-library/blocks/query/editor.css 279 B 0 B
build/block-library/blocks/quote/editor-rtl.css 195 B 0 B
build/block-library/blocks/quote/editor.css 195 B 0 B
build/block-library/blocks/quote/style-rtl.css 284 B 0 B
build/block-library/blocks/quote/style.css 285 B 0 B
build/block-library/blocks/rss/editor-rtl.css 307 B 0 B
build/block-library/blocks/rss/editor.css 309 B 0 B
build/block-library/blocks/rss/style-rtl.css 394 B 0 B
build/block-library/blocks/rss/style.css 393 B 0 B
build/block-library/blocks/search/editor-rtl.css 285 B 0 B
build/block-library/blocks/search/editor.css 285 B 0 B
build/block-library/blocks/search/style-rtl.css 454 B 0 B
build/block-library/blocks/search/style.css 456 B 0 B
build/block-library/blocks/separator/editor-rtl.css 229 B 0 B
build/block-library/blocks/separator/editor.css 229 B 0 B
build/block-library/blocks/separator/style-rtl.css 352 B 0 B
build/block-library/blocks/separator/style.css 352 B 0 B
build/block-library/blocks/shortcode/editor-rtl.css 603 B 0 B
build/block-library/blocks/shortcode/editor.css 603 B 0 B
build/block-library/blocks/site-logo/editor-rtl.css 321 B 0 B
build/block-library/blocks/site-logo/editor.css 321 B 0 B
build/block-library/blocks/site-logo/style-rtl.css 238 B 0 B
build/block-library/blocks/site-logo/style.css 238 B 0 B
build/block-library/blocks/social-link/editor-rtl.css 283 B 0 B
build/block-library/blocks/social-link/editor.css 283 B 0 B
build/block-library/blocks/social-links/editor-rtl.css 811 B 0 B
build/block-library/blocks/social-links/editor.css 810 B 0 B
build/block-library/blocks/spacer/editor-rtl.css 416 B 0 B
build/block-library/blocks/spacer/editor.css 416 B 0 B
build/block-library/blocks/spacer/style-rtl.css 184 B 0 B
build/block-library/blocks/spacer/style.css 184 B 0 B
build/block-library/blocks/subhead/editor-rtl.css 223 B 0 B
build/block-library/blocks/subhead/editor.css 223 B 0 B
build/block-library/blocks/subhead/style-rtl.css 210 B 0 B
build/block-library/blocks/subhead/style.css 210 B 0 B
build/block-library/blocks/table/editor-rtl.css 593 B 0 B
build/block-library/blocks/table/editor.css 593 B 0 B
build/block-library/blocks/table/style-rtl.css 501 B 0 B
build/block-library/blocks/table/style.css 501 B 0 B
build/block-library/blocks/tag-cloud/editor-rtl.css 237 B 0 B
build/block-library/blocks/tag-cloud/editor.css 235 B 0 B
build/block-library/blocks/tag-cloud/style-rtl.css 221 B 0 B
build/block-library/blocks/tag-cloud/style.css 221 B 0 B
build/block-library/blocks/text-columns/editor-rtl.css 220 B 0 B
build/block-library/blocks/text-columns/editor.css 220 B 0 B
build/block-library/blocks/text-columns/style-rtl.css 283 B 0 B
build/block-library/blocks/text-columns/style.css 283 B 0 B
build/block-library/blocks/verse/editor-rtl.css 194 B 0 B
build/block-library/blocks/verse/editor.css 194 B 0 B
build/block-library/blocks/verse/style-rtl.css 215 B 0 B
build/block-library/blocks/verse/style.css 215 B 0 B
build/block-library/blocks/video/editor-rtl.css 617 B 0 B
build/block-library/blocks/video/editor.css 617 B 0 B
build/block-library/blocks/video/style-rtl.css 303 B 0 B
build/block-library/blocks/video/style.css 304 B 0 B
build/block-library/common-rtl.css 1.01 kB 0 B
build/block-library/common.css 1.01 kB 0 B
build/block-library/theme-rtl.css 860 B 0 B
build/block-library/theme.css 860 B 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/data-controls/index.js 829 B 0 B
build/dom-ready/index.js 571 B 0 B
build/edit-navigation/style-rtl.css 938 B 0 B
build/edit-navigation/style.css 944 B 0 B
build/editor/style-rtl.css 3.89 kB 0 B
build/editor/style.css 3.89 kB 0 B
build/escape-html/index.js 735 B 0 B
build/format-library/style-rtl.css 620 B 0 B
build/format-library/style.css 621 B 0 B
build/hooks/index.js 2.27 kB 0 B
build/html-entities/index.js 623 B 0 B
build/i18n/index.js 3.57 kB 0 B
build/keyboard-shortcuts/index.js 2.54 kB 0 B
build/keycodes/index.js 1.94 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 5.32 kB 0 B
build/nux/style-rtl.css 731 B 0 B
build/nux/style.css 727 B 0 B
build/primitives/index.js 1.43 kB 0 B
build/rich-text/index.js 13.5 kB 0 B
build/server-side-render/index.js 2.77 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/viewport/index.js 1.86 kB 0 B
build/wordcount/index.js 1.22 kB 0 B

compressed-size-action

Copy link
Contributor

@talldan talldan left a comment

Choose a reason for hiding this comment

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

Something I didn't realise is that there is already some code for the shortcut:

Sorry for that, I just thought they hadn't been implemented. The existing implementation uses the useShortcut and registerShortcut functions, the idea behind that APIs is that someday shortcut customisation can be added as a feature.

None of these shortcuts seem to be working though, so it'd be good to figure out why and fix them.

@grzim
Copy link
Contributor Author

grzim commented Jan 18, 2021

It is not working as <NavigationEditorShortcuts/> is not added to layout.index.js . It can be easily solved, nevertheless, I don't like the approach which is used here.
Is there any solid argument to keep a convention like <BlockEditorKeyboardShortcuts.Register /> ?
I really don't like this idea as it can be very confusing.
Furthermore, from my experience, this entire approach with components returning null is improper as this kind of logic should be put to custom hooks.

@talldan
Copy link
Contributor

talldan commented Jan 19, 2021

@grzim I'm ok with only using hooks. I'm not completely sure why it's a component, but I think other editors also implement it this way using shortcuts, and that was likely copied in the navigation editor.

@grzim
Copy link
Contributor Author

grzim commented Jan 19, 2021

@talldan I have made a little investigation and it is just like you said. Editors implement it this way in order to make it possible to add shortcuts to blocks like this:

<BlockEditorProvider
			settings={ settings }
			value={ blocks }
			onInput={ onInput }
			onChange={ onChange }
			useSubRegistry={ false }
		>
			<KeyboardShortcuts />
...
</BlockEditorProvider>

The key concept is to make it possible to nest <KeyboardShortcuts /> in any level of jsx structure and it will be applied only to the element in which <KeyboardShortcuts /> is placed.
This is a kind of hacky approach as HOC with hooks should be used instead.
So here we can either use hooks as this would be a cleaner solution or leave it as it is now what makes it less clean but consistent with other editors. In my opinion - consistency wins here.

Copy link
Contributor

@talldan talldan left a comment

Choose a reason for hiding this comment

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

So here we can either use hooks as this would be a cleaner solution or leave it as it is now what makes it less clean but consistent with other editors. In my opinion - consistency wins here.

Agreed. Could always explore refactoring it all to hooks in a separate PR.

I recall another potential issue with the Register components is that they always have to come before the actual shortcut component, so definite scope for improvement.

Anyway, This is working nicely, I rebased locally to bring in some other recent fixes and can confirm save, undo, and redo are now working well. Thanks @grzim 🎉

@talldan talldan merged commit d4cc9a4 into master Jan 21, 2021
@talldan talldan deleted the add-save-shortcut branch January 21, 2021 09:07
@github-actions github-actions bot added this to the Gutenberg 9.9 milestone Jan 21, 2021
@talldan talldan changed the title Keyboard shortcut to save naviagtion added. Fix save, undo and redo keyboard shortcuts in navigation editor Jan 21, 2021
@talldan talldan added [Feature] Navigation Screen [Type] Bug An existing feature does not function as intended labels Jan 21, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Type] Bug An existing feature does not function as intended
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants