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

Improve the Reusable Blocks UI by relying on multi entity save flow. #27887

Merged
merged 5 commits into from
Dec 30, 2020

Conversation

youknowriad
Copy link
Contributor

@youknowriad youknowriad commented Dec 24, 2020

closes #18560
closes #22832
closes #26824
closes #26670
closes #19436
closes #16614
closes #12255
closes #12079
closes #11784
closes #22405
closes #19372

This PR refactors the reusable block to use a controlled innerBlocks. This means several things:

  • It fixes some issues when editing reusable blocks: for instance the inspector sidebar is now visible for selected blocks inside the reusable blocks.
  • We can do things like drag a paragraph out of a reusable block
  • It also means no "edit/save" button on the reusable block itself, saving is deferred to the "multi entity" saving behavior.

For an initial version, I just show the "title input" when the block is selected and hide it otherwise but this creates "jumps" in the UI, we need better design here.

@youknowriad youknowriad added [Type] Enhancement A suggestion for improvement. [Feature] Synced Patterns Related to synced patterns (formerly reusable blocks) labels Dec 24, 2020
@youknowriad youknowriad self-assigned this Dec 24, 2020
@mtias
Copy link
Member

mtias commented Dec 24, 2020

This is great, so much code cleanup! Let's see what design improvements can be made and shared between template parts and reusable blocks.

@mtias mtias added the Needs Design Feedback Needs general design feedback. label Dec 24, 2020
/>
) ) }

{ <div { ...innerBlocksProps } /> }
Copy link
Member

Choose a reason for hiding this comment

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

Is this div necessary?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

yes, that's the actual inner blocks.

@github-actions
Copy link

github-actions bot commented Dec 24, 2020

Size Change: -1.25 kB (0%)

Total Size: 1.28 MB

Filename Size Change
build/annotations/index.js 3.81 kB -1 B (0%)
build/autop/index.js 2.83 kB -2 B (0%)
build/block-directory/index.js 8.71 kB -3 B (0%)
build/block-editor/index.js 129 kB +5 B (0%)
build/block-editor/style-rtl.css 11.2 kB +15 B (0%)
build/block-editor/style.css 11.2 kB +15 B (0%)
build/block-library/editor-rtl.css 8.87 kB -204 B (-2%)
build/block-library/editor.css 8.87 kB -201 B (-2%)
build/block-library/index.js 149 kB -849 B (-1%)
build/block-serialization-default-parser/index.js 1.88 kB -2 B (0%)
build/blocks/index.js 48.1 kB +5 B (0%)
build/components/index.js 170 kB +2 B (0%)
build/compose/index.js 11 kB +6 B (0%)
build/core-data/index.js 15.2 kB +9 B (0%)
build/data/index.js 8.98 kB +1 B (0%)
build/dom/index.js 4.95 kB -1 B (0%)
build/edit-navigation/index.js 11.1 kB -8 B (0%)
build/edit-post/index.js 306 kB -10 B (0%)
build/edit-site/index.js 24.3 kB -14 B (0%)
build/edit-widgets/index.js 26.3 kB +7 B (0%)
build/editor/index.js 42.6 kB -14 B (0%)
build/element/index.js 4.63 kB +3 B (0%)
build/format-library/index.js 6.75 kB -4 B (0%)
build/keycodes/index.js 1.93 kB -1 B (0%)
build/list-reusable-blocks/index.js 3.11 kB +5 B (0%)
build/media-utils/index.js 5.31 kB -11 B (0%)
build/notices/index.js 1.86 kB +1 B (0%)
build/nux/index.js 3.42 kB +1 B (0%)
build/reusable-blocks/index.js 2.92 kB +2 B (0%)
build/rich-text/index.js 13.4 kB -12 B (0%)
build/token-list/index.js 1.27 kB +1 B (0%)
build/url/index.js 3.02 kB +5 B (0%)
build/viewport/index.js 1.86 kB +1 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 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 943 B 0 B
build/block-directory/style.css 942 B 0 B
build/block-library/blocks/archives/editor-rtl.css 120 B 0 B
build/block-library/blocks/archives/editor.css 119 B 0 B
build/block-library/blocks/audio/editor-rtl.css 118 B 0 B
build/block-library/blocks/audio/editor.css 118 B 0 B
build/block-library/blocks/audio/style-rtl.css 152 B 0 B
build/block-library/blocks/audio/style.css 152 B 0 B
build/block-library/blocks/block/editor-rtl.css 211 B 0 B
build/block-library/blocks/block/editor.css 211 B 0 B
build/block-library/blocks/button/editor-rtl.css 513 B 0 B
build/block-library/blocks/button/editor.css 513 B 0 B
build/block-library/blocks/button/style-rtl.css 488 B 0 B
build/block-library/blocks/button/style.css 488 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 275 B 0 B
build/block-library/blocks/buttons/editor.css 275 B 0 B
build/block-library/blocks/buttons/style-rtl.css 346 B 0 B
build/block-library/blocks/buttons/style.css 346 B 0 B
build/block-library/blocks/calendar/style-rtl.css 249 B 0 B
build/block-library/blocks/calendar/style.css 249 B 0 B
build/block-library/blocks/categories/editor-rtl.css 135 B 0 B
build/block-library/blocks/categories/editor.css 135 B 0 B
build/block-library/blocks/categories/style-rtl.css 132 B 0 B
build/block-library/blocks/categories/style.css 132 B 0 B
build/block-library/blocks/code/style-rtl.css 141 B 0 B
build/block-library/blocks/code/style.css 141 B 0 B
build/block-library/blocks/columns/editor-rtl.css 239 B 0 B
build/block-library/blocks/columns/editor.css 239 B 0 B
build/block-library/blocks/columns/style-rtl.css 467 B 0 B
build/block-library/blocks/columns/style.css 466 B 0 B
build/block-library/blocks/cover/editor-rtl.css 440 B 0 B
build/block-library/blocks/cover/editor.css 438 B 0 B
build/block-library/blocks/cover/style-rtl.css 1.27 kB 0 B
build/block-library/blocks/cover/style.css 1.27 kB 0 B
build/block-library/blocks/embed/editor-rtl.css 529 B 0 B
build/block-library/blocks/embed/editor.css 529 B 0 B
build/block-library/blocks/embed/style-rtl.css 419 B 0 B
build/block-library/blocks/embed/style.css 419 B 0 B
build/block-library/blocks/file/editor-rtl.css 246 B 0 B
build/block-library/blocks/file/editor.css 245 B 0 B
build/block-library/blocks/file/style-rtl.css 288 B 0 B
build/block-library/blocks/file/style.css 289 B 0 B
build/block-library/blocks/freeform/editor-rtl.css 2.49 kB 0 B
build/block-library/blocks/freeform/editor.css 2.49 kB 0 B
build/block-library/blocks/gallery/editor-rtl.css 692 B 0 B
build/block-library/blocks/gallery/editor.css 693 B 0 B
build/block-library/blocks/gallery/style-rtl.css 1.11 kB 0 B
build/block-library/blocks/gallery/style.css 1.11 kB 0 B
build/block-library/blocks/group/editor-rtl.css 364 B 0 B
build/block-library/blocks/group/editor.css 364 B 0 B
build/block-library/blocks/group/style-rtl.css 117 B 0 B
build/block-library/blocks/group/style.css 117 B 0 B
build/block-library/blocks/heading/editor-rtl.css 174 B 0 B
build/block-library/blocks/heading/editor.css 174 B 0 B
build/block-library/blocks/heading/style-rtl.css 137 B 0 B
build/block-library/blocks/heading/style.css 137 B 0 B
build/block-library/blocks/html/editor-rtl.css 324 B 0 B
build/block-library/blocks/html/editor.css 325 B 0 B
build/block-library/blocks/image/editor-rtl.css 738 B 0 B
build/block-library/blocks/image/editor.css 737 B 0 B
build/block-library/blocks/image/style-rtl.css 510 B 0 B
build/block-library/blocks/image/style.css 511 B 0 B
build/block-library/blocks/latest-comments/editor-rtl.css 201 B 0 B
build/block-library/blocks/latest-comments/editor.css 200 B 0 B
build/block-library/blocks/latest-comments/style-rtl.css 315 B 0 B
build/block-library/blocks/latest-comments/style.css 315 B 0 B
build/block-library/blocks/latest-posts/editor-rtl.css 183 B 0 B
build/block-library/blocks/latest-posts/editor.css 183 B 0 B
build/block-library/blocks/latest-posts/style-rtl.css 568 B 0 B
build/block-library/blocks/latest-posts/style.css 567 B 0 B
build/block-library/blocks/list/editor-rtl.css 129 B 0 B
build/block-library/blocks/list/editor.css 129 B 0 B
build/block-library/blocks/list/style-rtl.css 127 B 0 B
build/block-library/blocks/list/style.css 127 B 0 B
build/block-library/blocks/media-text/editor-rtl.css 240 B 0 B
build/block-library/blocks/media-text/editor.css 240 B 0 B
build/block-library/blocks/media-text/style-rtl.css 579 B 0 B
build/block-library/blocks/media-text/style.css 577 B 0 B
build/block-library/blocks/more/editor-rtl.css 479 B 0 B
build/block-library/blocks/more/editor.css 479 B 0 B
build/block-library/blocks/navigation-link/editor-rtl.css 438 B 0 B
build/block-library/blocks/navigation-link/editor.css 440 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 747 B 0 B
build/block-library/blocks/navigation-link/style.css 745 B 0 B
build/block-library/blocks/navigation/editor-rtl.css 1.31 kB 0 B
build/block-library/blocks/navigation/editor.css 1.31 kB 0 B
build/block-library/blocks/navigation/style-rtl.css 205 B 0 B
build/block-library/blocks/navigation/style.css 205 B 0 B
build/block-library/blocks/nextpage/editor-rtl.css 440 B 0 B
build/block-library/blocks/nextpage/editor.css 440 B 0 B
build/block-library/blocks/paragraph/editor-rtl.css 161 B 0 B
build/block-library/blocks/paragraph/editor.css 161 B 0 B
build/block-library/blocks/paragraph/style-rtl.css 279 B 0 B
build/block-library/blocks/paragraph/style.css 279 B 0 B
build/block-library/blocks/post-author/editor-rtl.css 255 B 0 B
build/block-library/blocks/post-author/editor.css 255 B 0 B
build/block-library/blocks/post-author/style-rtl.css 229 B 0 B
build/block-library/blocks/post-author/style.css 230 B 0 B
build/block-library/blocks/post-comments-form/style-rtl.css 293 B 0 B
build/block-library/blocks/post-comments-form/style.css 293 B 0 B
build/block-library/blocks/post-content/editor-rtl.css 187 B 0 B
build/block-library/blocks/post-content/editor.css 187 B 0 B
build/block-library/blocks/post-excerpt/editor-rtl.css 134 B 0 B
build/block-library/blocks/post-excerpt/editor.css 134 B 0 B
build/block-library/blocks/post-featured-image/editor-rtl.css 387 B 0 B
build/block-library/blocks/post-featured-image/editor.css 386 B 0 B
build/block-library/blocks/post-featured-image/style-rtl.css 149 B 0 B
build/block-library/blocks/post-featured-image/style.css 149 B 0 B
build/block-library/blocks/preformatted/style-rtl.css 119 B 0 B
build/block-library/blocks/preformatted/style.css 119 B 0 B
build/block-library/blocks/pullquote/editor-rtl.css 231 B 0 B
build/block-library/blocks/pullquote/editor.css 231 B 0 B
build/block-library/blocks/pullquote/style-rtl.css 359 B 0 B
build/block-library/blocks/pullquote/style.css 359 B 0 B
build/block-library/blocks/query-loop/editor-rtl.css 142 B 0 B
build/block-library/blocks/query-loop/editor.css 141 B 0 B
build/block-library/blocks/query-loop/style-rtl.css 361 B 0 B
build/block-library/blocks/query-loop/style.css 363 B 0 B
build/block-library/blocks/query/editor-rtl.css 210 B 0 B
build/block-library/blocks/query/editor.css 210 B 0 B
build/block-library/blocks/quote/editor-rtl.css 121 B 0 B
build/block-library/blocks/quote/editor.css 121 B 0 B
build/block-library/blocks/quote/style-rtl.css 215 B 0 B
build/block-library/blocks/quote/style.css 214 B 0 B
build/block-library/blocks/rss/editor-rtl.css 245 B 0 B
build/block-library/blocks/rss/editor.css 246 B 0 B
build/block-library/blocks/rss/style-rtl.css 329 B 0 B
build/block-library/blocks/rss/style.css 328 B 0 B
build/block-library/blocks/search/editor-rtl.css 213 B 0 B
build/block-library/blocks/search/editor.css 213 B 0 B
build/block-library/blocks/search/style-rtl.css 384 B 0 B
build/block-library/blocks/search/style.css 386 B 0 B
build/block-library/blocks/separator/editor-rtl.css 151 B 0 B
build/block-library/blocks/separator/editor.css 151 B 0 B
build/block-library/blocks/separator/style-rtl.css 281 B 0 B
build/block-library/blocks/separator/style.css 281 B 0 B
build/block-library/blocks/shortcode/editor-rtl.css 547 B 0 B
build/block-library/blocks/shortcode/editor.css 547 B 0 B
build/block-library/blocks/site-logo/editor-rtl.css 251 B 0 B
build/block-library/blocks/site-logo/editor.css 251 B 0 B
build/block-library/blocks/site-logo/style-rtl.css 166 B 0 B
build/block-library/blocks/site-logo/style.css 166 B 0 B
build/block-library/blocks/social-link/editor-rtl.css 211 B 0 B
build/block-library/blocks/social-link/editor.css 211 B 0 B
build/block-library/blocks/social-links/editor-rtl.css 749 B 0 B
build/block-library/blocks/social-links/editor.css 749 B 0 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB 0 B
build/block-library/blocks/social-links/style.css 1.37 kB 0 B
build/block-library/blocks/spacer/editor-rtl.css 321 B 0 B
build/block-library/blocks/spacer/editor.css 321 B 0 B
build/block-library/blocks/spacer/style-rtl.css 107 B 0 B
build/block-library/blocks/spacer/style.css 107 B 0 B
build/block-library/blocks/subhead/editor-rtl.css 148 B 0 B
build/block-library/blocks/subhead/editor.css 148 B 0 B
build/block-library/blocks/subhead/style-rtl.css 134 B 0 B
build/block-library/blocks/subhead/style.css 134 B 0 B
build/block-library/blocks/table/editor-rtl.css 530 B 0 B
build/block-library/blocks/table/editor.css 530 B 0 B
build/block-library/blocks/table/style-rtl.css 433 B 0 B
build/block-library/blocks/table/style.css 433 B 0 B
build/block-library/blocks/tag-cloud/editor-rtl.css 162 B 0 B
build/block-library/blocks/tag-cloud/editor.css 162 B 0 B
build/block-library/blocks/tag-cloud/style-rtl.css 145 B 0 B
build/block-library/blocks/tag-cloud/style.css 145 B 0 B
build/block-library/blocks/template-part/editor-rtl.css 644 B 0 B
build/block-library/blocks/template-part/editor.css 645 B 0 B
build/block-library/blocks/text-columns/editor-rtl.css 146 B 0 B
build/block-library/blocks/text-columns/editor.css 146 B 0 B
build/block-library/blocks/text-columns/style-rtl.css 209 B 0 B
build/block-library/blocks/text-columns/style.css 209 B 0 B
build/block-library/blocks/verse/editor-rtl.css 118 B 0 B
build/block-library/blocks/verse/editor.css 118 B 0 B
build/block-library/blocks/verse/style-rtl.css 137 B 0 B
build/block-library/blocks/verse/style.css 137 B 0 B
build/block-library/blocks/video/editor-rtl.css 547 B 0 B
build/block-library/blocks/video/editor.css 548 B 0 B
build/block-library/blocks/video/style-rtl.css 241 B 0 B
build/block-library/blocks/video/style.css 241 B 0 B
build/block-library/common-rtl.css 940 B 0 B
build/block-library/common.css 937 B 0 B
build/block-library/style-rtl.css 8.48 kB 0 B
build/block-library/style.css 8.48 kB 0 B
build/block-library/theme-rtl.css 789 B 0 B
build/block-library/theme.css 790 B 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/components/style-rtl.css 15.4 kB 0 B
build/components/style.css 15.4 kB 0 B
build/data-controls/index.js 829 B 0 B
build/date/index.js 31.8 kB 0 B
build/deprecated/index.js 768 B 0 B
build/dom-ready/index.js 571 B 0 B
build/edit-navigation/style-rtl.css 881 B 0 B
build/edit-navigation/style.css 885 B 0 B
build/edit-post/style-rtl.css 6.47 kB 0 B
build/edit-post/style.css 6.45 kB 0 B
build/edit-site/style-rtl.css 3.91 kB 0 B
build/edit-site/style.css 3.91 kB 0 B
build/edit-widgets/style-rtl.css 3.1 kB 0 B
build/edit-widgets/style.css 3.1 kB 0 B
build/editor/editor-styles-rtl.css 476 B 0 B
build/editor/editor-styles.css 478 B 0 B
build/editor/style-rtl.css 3.84 kB 0 B
build/editor/style.css 3.84 kB 0 B
build/escape-html/index.js 735 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 2.27 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 698 B 0 B
build/keyboard-shortcuts/index.js 2.54 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/nux/style-rtl.css 671 B 0 B
build/nux/style.css 668 B 0 B
build/plugins/index.js 2.54 kB 0 B
build/primitives/index.js 1.43 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/redux-routine/index.js 2.84 kB 0 B
build/server-side-render/index.js 2.77 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.22 kB 0 B

compressed-size-action

@mtias
Copy link
Member

mtias commented Dec 24, 2020

We should disable all transforms for reusable blocks as they are crashing the editor in this branch and don't really make sense anyways:

image

@mtias
Copy link
Member

mtias commented Dec 24, 2020

image

This and the fact the inspector now works for individual blocks contained within is amazing.

There are some things that pop up design wise as worth doing, but we can follow up on them afterwards — like indicating when a reusable block has had changes in the reusable block toolbar (has unsaved changes).

We should also move the reusable block name next to the block type icon (like we are doing for template parts) and update the name of the block in things like breadcrumb and block navigation to use the actual title of the block.

@mtias
Copy link
Member

mtias commented Dec 24, 2020

That list of "closes" is epic

@mtias mtias mentioned this pull request Dec 24, 2020
15 tasks
@chrisvanpatten
Copy link
Contributor

Fantastic to see; thanks for tackling @youknowriad!

@Soean
Copy link
Member

Soean commented Dec 29, 2020

Nice PR 👍

I can't duplicate the block or edit it, if a reusable block is used twice in a post.

reusable_block.mov

@youknowriad youknowriad force-pushed the update/reusable-blocks-controlled branch from d3ad654 to 1f00883 Compare December 30, 2020 09:19
@youknowriad
Copy link
Contributor Author

@Soean This is exactly the bug that was supposed to be fixed in #22639

It turns out that the branch didn't include the fix. It should be fine now (after a rebase)

@mtias mtias removed the Needs Design Feedback Needs general design feedback. label Dec 30, 2020
@mtias
Copy link
Member

mtias commented Dec 30, 2020

Without the in-canvas name this feels alright to move forwards and we can follow up for a better presentation in the toolbar of the name. There's something odd in the flow of creating these when the name is set to undefined because you don't get a chance to modify it before creation. It's probably time to add a modal requiring you to input a name before a reusable block is created.

@Copons
Copy link
Contributor

Copons commented Jan 20, 2021

We are having increased reports of broken reusable blocks (and posts using them) on WordPress.com, apparently started after this change (see original issue).

The issue is technically caused by reusable blocks referencing themselves, which if I'm not mistaken, is currently being addressed in #27012 (which is not limited to reusable blocks, but anything where such infinite loop could happen).

Regardless, the infinite loop was possible even before this PR.
We suspect that the increased occurrences are caused by the UI changes introduced here.

Before: users had to explicitly edit (and save) a reusable block directly in the block UI itself.
Now: the reusable block is freely editable, and it's then handled by the multi-entity save panel.

What seems to happen is that folks might want to add multiple instances of the same reusable block "in sequence", but they accidentally get "stuck" inside the reusable block group.
E.g.

  • Insert reusable block.
  • Press enter to "leave" the reusable block group.
  • You are unkowingly still inside the reusable block.
  • Insert the same reusable block again.
  • You might expect it's being added after the previous one, but instead it's inside it.
  • Infinite loop!

As I said, the infinite loop issue is already being addressed (although, we might probably want to expedite the fix!), but we might also want to reconsider if this very light UI is the right approach for reusable blocks, or any kind of nested blocks.

I consider myself an expert user so I know where to look to figure out the nesting situation.
Still I'd really love to have a at-a-glance, contextual way to understand what I'm editing, rather than having to check the breadcrumbs, outline, or the little parent icon that pops out from the toolbar.

cc @mtias

@mtias
Copy link
Member

mtias commented Jan 20, 2021

See #27890 for some design considerations and possible improvements

@paaljoachim
Copy link
Contributor

paaljoachim commented Feb 23, 2021

EDIT:
The new save flow for reusable blocks creates difficulties. Moving the Reusable save away from the block creates more of a challenge to save an update of the block. Here is some feedback: The redesign of reusable blocks that happened in Gutenberg a few weeks back is confusing and makes them much harder to use. and #29178 (comment)

@mtias
Copy link
Member

mtias commented Feb 23, 2021

@paaljoachim there are related tasks in #27890

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment