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

Adds edit in place for menu name #25343

Closed
wants to merge 0 commits into from
Closed

Conversation

draganescu
Copy link
Contributor

@draganescu draganescu commented Sep 15, 2020

Advances #Advances #25233
Based on #25329
Fixes: 24581

Description

Adds an edit in place control. Adds said control to the Navigation block's toolbar used in the Navigation editor via a filter.

How has this been tested?

Tested locally.

Screenshots

Screenshot 2020-09-15 at 18 22 58

Types of changes

Non breaking changes. An alternative implementation is how @noisysocks conditionally includes the inspector controls in here.

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.

@draganescu draganescu self-assigned this Sep 15, 2020
@github-actions
Copy link

github-actions bot commented Sep 15, 2020

Size Change: +3.08 kB (0%)

Total Size: 1.37 MB

Filename Size Change
build/annotations/index.js 3.77 kB -3 B (0%)
build/block-directory/index.js 9.08 kB +4 B (0%)
build/block-editor/index.js 124 kB +560 B (0%)
build/block-editor/style-rtl.css 12 kB +17 B (0%)
build/block-editor/style.css 12 kB +16 B (0%)
build/block-library/blocks/embed/style-rtl.css 396 B +21 B (+6%) 🔍
build/block-library/blocks/embed/style.css 395 B +20 B (+5%) 🔍
build/block-library/blocks/navigation/style-rtl.css 174 B -9 B (-5%)
build/block-library/blocks/navigation/style.css 174 B -9 B (-5%)
build/block-library/blocks/social-links/style-rtl.css 1.37 kB +1 B (0%)
build/block-library/index.js 144 kB +157 B (0%)
build/block-library/style-rtl.css 8.62 kB +4 B (0%)
build/block-library/style.css 8.62 kB +4 B (0%)
build/blocks/index.js 48.3 kB -1 B (0%)
build/components/index.js 279 kB +1.36 kB (0%)
build/components/style-rtl.css 15.6 kB +100 B (+1%)
build/components/style.css 15.6 kB +100 B (+1%)
build/compose/index.js 11.2 kB -1 B (0%)
build/core-data/index.js 16.8 kB +1 B (0%)
build/data/index.js 8.87 kB +56 B (+1%)
build/date/index.js 31.8 kB -1 B (0%)
build/deprecated/index.js 768 B -1 B (0%)
build/dom-ready/index.js 570 B -1 B (0%)
build/dom/index.js 4.93 kB +2 B (0%)
build/edit-navigation/index.js 11.5 kB +403 B (+4%)
build/edit-navigation/style-rtl.css 1.01 kB +73 B (+8%) 🔍
build/edit-navigation/style.css 1.01 kB +69 B (+7%) 🔍
build/edit-post/index.js 307 kB -4 B (0%)
build/edit-site/index.js 24.2 kB +89 B (0%)
build/edit-widgets/index.js 20.1 kB -2 B (0%)
build/editor/index.js 41.9 kB +35 B (0%)
build/element/index.js 4.61 kB -1 B (0%)
build/format-library/index.js 6.77 kB +2 B (0%)
build/i18n/index.js 3.74 kB -1 B (0%)
build/media-utils/index.js 5.35 kB +17 B (0%)
build/notices/index.js 1.85 kB +2 B (0%)
build/plugins/index.js 2.54 kB -1 B (0%)
build/primitives/index.js 1.42 kB -2 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/rich-text/index.js 13.4 kB +1 B (0%)
build/token-list/index.js 1.27 kB -1 B (0%)
build/url/index.js 3.01 kB -1 B (0%)
build/warning/index.js 1.14 kB -1 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/api-fetch/index.js 3.4 kB 0 B
build/autop/index.js 2.84 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 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 103 B 0 B
build/block-library/blocks/audio/style.css 103 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 453 B 0 B
build/block-library/blocks/button/style.css 451 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 227 B 0 B
build/block-library/blocks/buttons/editor.css 227 B 0 B
build/block-library/blocks/buttons/style-rtl.css 297 B 0 B
build/block-library/blocks/buttons/style.css 297 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 421 B 0 B
build/block-library/blocks/columns/style.css 421 B 0 B
build/block-library/blocks/cover/editor-rtl.css 392 B 0 B
build/block-library/blocks/cover/editor.css 393 B 0 B
build/block-library/blocks/cover/style-rtl.css 1.25 kB 0 B
build/block-library/blocks/cover/style.css 1.25 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/file/editor-rtl.css 199 B 0 B
build/block-library/blocks/file/editor.css 198 B 0 B
build/block-library/blocks/file/style-rtl.css 248 B 0 B
build/block-library/blocks/file/style.css 248 B 0 B
build/block-library/blocks/freeform/editor-rtl.css 2.45 kB 0 B
build/block-library/blocks/freeform/editor.css 2.45 kB 0 B
build/block-library/blocks/gallery/editor-rtl.css 679 B 0 B
build/block-library/blocks/gallery/editor.css 679 B 0 B
build/block-library/blocks/gallery/style-rtl.css 1.07 kB 0 B
build/block-library/blocks/gallery/style.css 1.06 kB 0 B
build/block-library/blocks/group/editor-rtl.css 318 B 0 B
build/block-library/blocks/group/editor.css 317 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/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 477 B 0 B
build/block-library/blocks/image/style.css 478 B 0 B
build/block-library/blocks/latest-comments/editor-rtl.css 159 B 0 B
build/block-library/blocks/latest-comments/editor.css 158 B 0 B
build/block-library/blocks/latest-comments/style-rtl.css 269 B 0 B
build/block-library/blocks/latest-comments/style.css 269 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/list/editor-rtl.css 65 B 0 B
build/block-library/blocks/list/editor.css 65 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 191 B 0 B
build/block-library/blocks/media-text/editor.css 191 B 0 B
build/block-library/blocks/media-text/style-rtl.css 535 B 0 B
build/block-library/blocks/media-text/style.css 532 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 392 B 0 B
build/block-library/blocks/navigation-link/editor.css 394 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 704 B 0 B
build/block-library/blocks/navigation-link/style.css 702 B 0 B
build/block-library/blocks/navigation/editor-rtl.css 1.38 kB 0 B
build/block-library/blocks/navigation/editor.css 1.37 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/paragraph/editor-rtl.css 109 B 0 B
build/block-library/blocks/paragraph/editor.css 109 B 0 B
build/block-library/blocks/paragraph/style-rtl.css 273 B 0 B
build/block-library/blocks/paragraph/style.css 273 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 249 B 0 B
build/block-library/blocks/post-comments-form/style.css 249 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-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 100 B 0 B
build/block-library/blocks/post-featured-image/style.css 100 B 0 B
build/block-library/blocks/preformatted/style-rtl.css 63 B 0 B
build/block-library/blocks/preformatted/style.css 63 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 316 B 0 B
build/block-library/blocks/pullquote/style.css 316 B 0 B
build/block-library/blocks/query-loop/editor-rtl.css 90 B 0 B
build/block-library/blocks/query-loop/editor.css 89 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/editor-rtl.css 159 B 0 B
build/block-library/blocks/query/editor.css 160 B 0 B
build/block-library/blocks/quote/editor-rtl.css 61 B 0 B
build/block-library/blocks/quote/editor.css 61 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 165 B 0 B
build/block-library/blocks/search/editor.css 165 B 0 B
build/block-library/blocks/search/style-rtl.css 342 B 0 B
build/block-library/blocks/search/style.css 344 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 236 B 0 B
build/block-library/blocks/separator/style.css 236 B 0 B
build/block-library/blocks/shortcode/editor-rtl.css 504 B 0 B
build/block-library/blocks/shortcode/editor.css 504 B 0 B
build/block-library/blocks/site-logo/editor-rtl.css 201 B 0 B
build/block-library/blocks/site-logo/editor.css 201 B 0 B
build/block-library/blocks/site-logo/style-rtl.css 117 B 0 B
build/block-library/blocks/site-logo/style.css 117 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 711 B 0 B
build/block-library/blocks/social-links/editor.css 712 B 0 B
build/block-library/blocks/social-links/style.css 1.37 kB 0 B
build/block-library/blocks/spacer/editor-rtl.css 302 B 0 B
build/block-library/blocks/spacer/editor.css 302 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/subhead/editor-rtl.css 99 B 0 B
build/block-library/blocks/subhead/editor.css 99 B 0 B
build/block-library/blocks/subhead/style-rtl.css 80 B 0 B
build/block-library/blocks/subhead/style.css 80 B 0 B
build/block-library/blocks/table/editor-rtl.css 489 B 0 B
build/block-library/blocks/table/editor.css 489 B 0 B
build/block-library/blocks/table/style-rtl.css 386 B 0 B
build/block-library/blocks/table/style.css 386 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 680 B 0 B
build/block-library/blocks/template-part/editor.css 679 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/editor-rtl.css 62 B 0 B
build/block-library/blocks/verse/editor.css 62 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 504 B 0 B
build/block-library/blocks/video/editor.css 503 B 0 B
build/block-library/blocks/video/style-rtl.css 193 B 0 B
build/block-library/blocks/video/style.css 193 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/editor-rtl.css 9.06 kB 0 B
build/block-library/editor.css 9.05 kB 0 B
build/block-library/theme-rtl.css 748 B 0 B
build/block-library/theme.css 748 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/data-controls/index.js 828 B 0 B
build/edit-post/style-rtl.css 6.79 kB 0 B
build/edit-post/style.css 6.78 kB 0 B
build/edit-site/style-rtl.css 4.04 kB 0 B
build/edit-site/style.css 4.04 kB 0 B
build/edit-widgets/style-rtl.css 3.2 kB 0 B
build/edit-widgets/style.css 3.2 kB 0 B
build/editor/editor-styles-rtl.css 543 B 0 B
build/editor/editor-styles.css 545 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 637 B 0 B
build/format-library/style.css 639 B 0 B
build/hooks/index.js 2.27 kB 0 B
build/html-entities/index.js 622 B 0 B
build/is-shallow-equal/index.js 698 B 0 B
build/keyboard-shortcuts/index.js 2.54 kB 0 B
build/keycodes/index.js 1.93 kB 0 B
build/list-reusable-blocks/index.js 3.15 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/nux/index.js 3.41 kB 0 B
build/nux/style-rtl.css 731 B 0 B
build/nux/style.css 727 B 0 B
build/priority-queue/index.js 790 B 0 B
build/server-side-render/index.js 2.77 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/viewport/index.js 1.86 kB 0 B
build/wordcount/index.js 1.22 kB 0 B

compressed-size-action

@draganescu draganescu marked this pull request as ready for review September 15, 2020 16:01
@draganescu draganescu changed the base branch from master to try/navigation-use-filter-add-controls September 24, 2020 16:14
@draganescu draganescu force-pushed the add/edit-in-place-menu-name branch from f39ff57 to da11745 Compare September 24, 2020 16:24
Base automatically changed from try/navigation-use-filter-add-controls to master September 25, 2020 03:26
@draganescu draganescu force-pushed the add/edit-in-place-menu-name branch from da11745 to 377e0cf Compare September 25, 2020 06:31
@noisysocks
Copy link
Member

In my testing:

  • Sometimes the new text field doesn't appear in the toolbar. There must be some race condition, as I see the text field appear about 1 in 5 times when I refresh the page.

  • When you change the name and unfocused the field, the new name is saved immediately. I'd expect this to happen when the user clicks Save.

  • I do wonder if the click to edit interaction is a little awkward. It's not a common interaction. Would users know to click it? Could this just be a regular text field? cc. @shaunandrews

@draganescu
Copy link
Contributor Author

draganescu commented Nov 23, 2020

I do wonder if the click to edit interaction is a little awkward. It's not a common interaction. Would users know to click it? Could this just be a regular text field?

I also think this to be an unexpected behavior (edit in place) and I would rather a rename action with a save action appearing on edit. Or, maybe just a regular textfield, which gets saved along with all the menu.

Edit: @noisysocks the textfield appears only when the navigation block is selected. At some point we removed the auto select behavior. I tried to have the edit in place component now show up, or the edit not working but it works at every refresh or click to edit. Tested both in Chrome and FF. What am I missing?

@draganescu
Copy link
Contributor Author

I tested this and it seems that the state of the edit in place control is problematic as seen below:

edit-in-place-state.mp4

This is the same problem I've encountered when wrapping the state management in the useEffect call. Can't say what happens exactly, but the previous approach was more reliable.

Also @grzim when using the arrow keys to move between letters the focus should not move to another button.

@shaunandrews
Copy link
Contributor

This seems to work well. I think we could add a transition between the resting state and the focus state to help avoid the jarring movement of the toolbar.

Menun Name in Toolbar

In the context of #28675, I was thinking we could have the menu name input in the sidebar. If this lands though, I think having it in the sidebar might not be necessary.

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.

Sorry, lots of comments! Most were around the EditInPlaceControl, and I'm wondering if we should just go for @shaunandrews' suggestion of using a normal input in the sidebar. I think this EditInPlace input is going to be really hard to get right.

Going for the sidebar would mean using the InspectorControls component instead of BlockControls.

packages/block-library/src/navigation/edit.js Outdated Show resolved Hide resolved
packages/components/src/edit-in-place-control/index.js Outdated Show resolved Hide resolved
packages/components/src/edit-in-place-control/index.js Outdated Show resolved Hide resolved
return (
<>
{ ! edit && (
<Button
Copy link
Contributor

@talldan talldan Feb 4, 2021

Choose a reason for hiding this comment

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

I don't think it'll be clear what this button does for screen reader users given its only label is the value of the input, which can be removed entirely.

Adding an aria-label would probably remediate this. That's something that should be customisable using a prop. The input field is also completely unlabelled, so again, it should use this value from a prop.

The way this component has a label prop that's really the value is probably wrong. I think it'd be best to repurpose label for the aria label.

packages/components/src/edit-in-place-control/index.js Outdated Show resolved Hide resolved
Copy link
Contributor Author

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

Tested this and it works. I love that the name resetting / not saving in the UI problem is solved by adding the filters in the right place and the rearrangements of the code help too. Left some comments to make the PR a bit smaller (move the suggestions function rewrite to a separate PR) and a couple style related.

packages/block-library/src/navigation/edit.js Outdated Show resolved Hide resolved
setEdit( false );
onUpdate( value );
} }
onKeyDown={ ( event ) => {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

@talldan @grzim has a separate PR #28614 to fix this, which disabled focus management for accessible toolbar if the focus in caught by an editable. Your opinion on that one would be great :)

packages/components/src/edit-in-place-control/index.js Outdated Show resolved Hide resolved
packages/components/src/edit-in-place-control/index.js Outdated Show resolved Hide resolved
Comment on lines 13 to 14
width: 50%;
transition: width 0.3s;
Copy link
Contributor

Choose a reason for hiding this comment

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

Copy link
Contributor

Choose a reason for hiding this comment

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

I'm not sure I understand. If the concern is about longer menu names, then we can truncate at a reasonable length:

image

Otherwise, I'd expect the transition to feel something like this:

Menu Name Transition

Copy link
Contributor

Choose a reason for hiding this comment

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

I think github had a glitch as my original review comment disappeared. My comment mentioned that the animation doesn't work as expected when the menu name is long, it becomes smaller and then expands:
longmenuname

I'd expect it to go smoothly from one size to the other.

Copy link
Contributor

Choose a reason for hiding this comment

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

The problem is that the component changes from being a button, that automatically takes the width of its contents, to being an input, that by default takes a width of 20 characters (that can be changed by using the size attribute). So what's happening is we're transitioning to an input with a smaller width than the button, and then because the input's initial size is even smaller than its final size, we see that jump.

There are two ways to approach this: either we set the input size to equal value and it'll grow or shrink when edited, and always be exactly the same size as the button, or we set a fixed width for both button and input, but then I'm not sure there's any point in making it bigger when it's editable 🤔

Also: we don't need the &.small rule (or the small classname at all); transition and the initial width value can be set directly on .components-edit-in-place-control__input, and then we won't need to repeat transition in &.large either.

Copy link
Contributor

Choose a reason for hiding this comment

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

I have moved this component to a separate PR #28924.
In my opinion fixed width of a button and input could be problematic for users when they have longer menu names.
@tellthemachines in order to make an editable area that stores users input and keep the size of text we could either add some js logic to enlarge input while typing or to use span with contenteditable property set to true:

<span
	role="textbox"
	aria-label={ editNameInputLabel }
	ref={ inputRef }
	className={ inputCssClasses }
	contentEditable={ true }
	onInput={ ( event ) => {
		const _value = inputRef.current.innerText;
		setValue( _value );
		onChange( _value, event );
	} }
	dangerouslySetInnerHTML={ { __html: value } }
	onFocus={ () =>
		setInputCssClasses( withTransitionCssClass )
	}
	tabIndex="0"
	onBlur={ () => {
		const _value = inputRef.current.innerText;
		setValue( _value );
		setInputCssClasses( withoutTransitionCssClass );
		setIsEdit( false );
	} }
	onKeyDown={ ( event ) => {
		if ( 'Enter' === event.key ) {
			cancelEvent( event );
			if ( inputValidator( value ) ) {
				setIsEdit( false );
				setValue( value );
				onUpdate( value );
			}
		}
		if ( 'Escape' === event.key ) {
			cancelEvent( event );
			setValue( initialValue );
			setIsEdit( false );
			event.target.blur();
		}
		onKeyDown( event );
	} }
/>

The input element is more stable, it is easier to add transitions and work with it in general. On the other hand, contenteditable makes the size adjusting trivial.

Copy link
Contributor

Choose a reason for hiding this comment

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

We don't need JS logic to adjust the input; its size attribute does that automatically. Try setting size to value and you'll see what I mean 🙂

Copy link
Contributor

Choose a reason for hiding this comment

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

Nice idea @tellthemachines :)
Here value represents the variable that is displayed inside an input, so the valid expression to pass to size attribute would be String(value).length. Nevertheless, somehow it is not adjusting properly, and not all chars are visible
image
😕

Copy link
Contributor

Choose a reason for hiding this comment

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

Yeah, String(value).length., of course 😅
Any CSS attached to the element will override size, so you'll have to remove the widths and transitions for it to work.

Copy link
Contributor

@grzim grzim Feb 16, 2021

Choose a reason for hiding this comment

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

surely I did;) I will make this component available for testing and you can see what I am talking about.

} }
/>
) : (
<Button
Copy link
Contributor

Choose a reason for hiding this comment

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

The use of Button causes a console warning:

Using custom components as toolbar controls is deprecated. Please use ToolbarItem or ToolbarButton components instead. See: https://developer.wordpress.org/block-editor/components/toolbar-button/#inside-blockcontrols

It should be implemented as a ToolbarButton component

Copy link
Contributor

Choose a reason for hiding this comment

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

I have moved edit-in-place to the another PR. Here the simple input is being used

return (
<>
{ isEdit ? (
<input
Copy link
Contributor

Choose a reason for hiding this comment

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

Similar to the issue with the Button, this also causes a warning. It would have to be implemented as a ToolbarItem.

Copy link
Contributor

Choose a reason for hiding this comment

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

altered to <ToolbarItem as="input"

@grzim grzim mentioned this pull request Feb 10, 2021
6 tasks
Comment on lines 13 to 14
width: 50%;
transition: width 0.3s;
Copy link
Contributor

Choose a reason for hiding this comment

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

@talldan
Copy link
Contributor

talldan commented Feb 15, 2021

There seem to be a lot of unrelated commits on the branch, not sure if something went wrong with a rebase.

@grzim grzim closed this Feb 15, 2021
@grzim grzim force-pushed the add/edit-in-place-menu-name branch from d3260f6 to 198fa44 Compare February 15, 2021 18:28
@grzim
Copy link
Contributor

grzim commented Feb 15, 2021

PR split to:
Edit in place control component #28924
Move fetch-link-suggestions to a separate file and refactor it #28843
Preserve input focus on arrow key in navigable container #28614
Navigation menu name editor #29012

@aristath aristath deleted the add/edit-in-place-menu-name branch May 28, 2021 10:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Needs Design Feedback Needs general design feedback. [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Navigation Screen: Allow for editing a menu's name Navigation Screen: Show block toolbar with menu name
8 participants