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

[RNMobile] Enable reusable block only in WP.com sites #31744

Merged
merged 13 commits into from
May 21, 2021

Conversation

fluiddot
Copy link
Contributor

@fluiddot fluiddot commented May 12, 2021

gutenberg-mobile PR: wordpress-mobile/gutenberg-mobile#3490
WordPress-iOS PR: wordpress-mobile/WordPress-iOS#16475
WordPress-Android PR: wordpress-mobile/WordPress-Android#14623

Description

This PR adds a capability into the editor to limit the availability of the reusable block to WP.com sites, until we manage to address the issue related to fetching reusable blocks in self-hosted sites.

When the new capability reusableBlock is false, we do the following actions:

  1. Unregister core/block (reusable block), this way we prevent the reusable block data to be fetched in case it's already in the post (code reference)
  2. Prevent fetching reusable blocks when the editor is mounted (code reference)

How has this been tested?

We have to test that the reusable block is enabled in WP.com sites but not on self-hosted:

WordPress.com site - Reusable block is enabled

Create a WordPress.com site or use an already created one.

  • Create a post in the web version
  • Add some blocks and create a Reusable block
  • Open the app with metro running (Gutenberg-mobile)
  • Add the WordPress.com site
  • Edit the previous created post
  • Check that the Reusable block is shown
  • Tap on it and check that the title of the Reusable blocks is shown
WordPress.com site (Atomic) - Reusable block is enabled

Create an Atomic site via WordPress.com site or use an already created one.

  • Create a post in the web version
  • Add some blocks and create a Reusable block
  • Open the app with metro running (Gutenberg-mobile)
  • Add the WordPress.com site
  • Edit the previous created post
  • Check that the Reusable block is shown
  • Tap on it and check that the title of the Reusable blocks is shown
Self-hosted site with Jetpack - Reusable block is disabled

Create a self-hosted site with Jetpack (I used https://jurassic.ninja/create/) or use an already created one.

  • Create a post in the web version
  • Add some blocks and create a Reusable block
  • Open the app with metro running (Gutenberg-mobile)
  • Add the self-hosted site
  • Edit the previous created post
  • Check that the Reusable block is displayed as unsupported
Self-hosted site without Jetpack - Reusable block is disabled

Create a self-hosted site without Jetpack (I created a local one using this instructions) or use your own.

  • Create a post in the web version
  • Add some blocks and create a Reusable block
  • Open the app with metro running (Gutenberg-mobile)
  • Add the self-hosted site
  • Edit the previous created post
  • Check that the Reusable block is displayed as unsupported

Screenshots

WP.com site Self-hosted site

Types of changes

Bug fix

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • I've tested my changes with keyboard and screen readers.
  • 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 (please manually search all *.native.js files for terms that need renaming or removal).

@fluiddot fluiddot added Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change) [Block] Block The "Reusable Block" Block labels May 12, 2021
@fluiddot fluiddot self-assigned this May 12, 2021
@github-actions
Copy link

github-actions bot commented May 12, 2021

Size Change: +3 B (0%)

Total Size: 1.62 MB

Filename Size Change
build/block-library/index.js 147 kB +6 B (0%)
build/editor/index.js 38.4 kB -3 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.12 kB 0 B
build/annotations/index.js 2.93 kB 0 B
build/api-fetch/index.js 2.42 kB 0 B
build/autop/index.js 2.28 kB 0 B
build/blob/index.js 673 B 0 B
build/block-directory/index.js 6.61 kB 0 B
build/block-directory/style-rtl.css 989 B 0 B
build/block-directory/style.css 990 B 0 B
build/block-editor/index.js 119 kB 0 B
build/block-editor/style-rtl.css 12.9 kB 0 B
build/block-editor/style.css 12.9 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 112 B 0 B
build/block-library/blocks/audio/style.css 112 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 603 B 0 B
build/block-library/blocks/button/style.css 602 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 315 B 0 B
build/block-library/blocks/buttons/editor.css 315 B 0 B
build/block-library/blocks/buttons/style-rtl.css 375 B 0 B
build/block-library/blocks/buttons/style.css 375 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 422 B 0 B
build/block-library/blocks/columns/style.css 422 B 0 B
build/block-library/blocks/cover/editor-rtl.css 644 B 0 B
build/block-library/blocks/cover/editor.css 646 B 0 B
build/block-library/blocks/cover/style-rtl.css 1.22 kB 0 B
build/block-library/blocks/cover/style.css 1.23 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/embed/style-rtl.css 401 B 0 B
build/block-library/blocks/embed/style.css 400 B 0 B
build/block-library/blocks/file/editor-rtl.css 301 B 0 B
build/block-library/blocks/file/editor.css 300 B 0 B
build/block-library/blocks/file/frontend.js 771 B 0 B
build/block-library/blocks/file/style-rtl.css 255 B 0 B
build/block-library/blocks/file/style.css 255 B 0 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB 0 B
build/block-library/blocks/freeform/editor.css 2.44 kB 0 B
build/block-library/blocks/gallery/editor-rtl.css 704 B 0 B
build/block-library/blocks/gallery/editor.css 705 B 0 B
build/block-library/blocks/gallery/style-rtl.css 1.06 kB 0 B
build/block-library/blocks/gallery/style.css 1.06 kB 0 B
build/block-library/blocks/group/editor-rtl.css 160 B 0 B
build/block-library/blocks/group/editor.css 160 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/home-link/style-rtl.css 259 B 0 B
build/block-library/blocks/home-link/style.css 259 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 481 B 0 B
build/block-library/blocks/image/style.css 485 B 0 B
build/block-library/blocks/latest-comments/style-rtl.css 281 B 0 B
build/block-library/blocks/latest-comments/style.css 282 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/legacy-widget/editor-rtl.css 557 B 0 B
build/block-library/blocks/legacy-widget/editor.css 557 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 176 B 0 B
build/block-library/blocks/media-text/editor.css 176 B 0 B
build/block-library/blocks/media-text/style-rtl.css 492 B 0 B
build/block-library/blocks/media-text/style.css 489 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 633 B 0 B
build/block-library/blocks/navigation-link/editor.css 634 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B 0 B
build/block-library/blocks/navigation-link/style.css 94 B 0 B
build/block-library/blocks/navigation/editor-rtl.css 1.54 kB 0 B
build/block-library/blocks/navigation/editor.css 1.54 kB 0 B
build/block-library/blocks/navigation/frontend.js 2.85 kB 0 B
build/block-library/blocks/navigation/style-rtl.css 1.8 kB 0 B
build/block-library/blocks/navigation/style.css 1.8 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/page-list/editor-rtl.css 310 B 0 B
build/block-library/blocks/page-list/editor.css 311 B 0 B
build/block-library/blocks/page-list/style-rtl.css 233 B 0 B
build/block-library/blocks/page-list/style.css 233 B 0 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B 0 B
build/block-library/blocks/paragraph/editor.css 157 B 0 B
build/block-library/blocks/paragraph/style-rtl.css 247 B 0 B
build/block-library/blocks/paragraph/style.css 248 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 140 B 0 B
build/block-library/blocks/post-comments-form/style.css 140 B 0 B
build/block-library/blocks/post-comments/style-rtl.css 360 B 0 B
build/block-library/blocks/post-comments/style.css 359 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-excerpt/style-rtl.css 69 B 0 B
build/block-library/blocks/post-excerpt/style.css 69 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 119 B 0 B
build/block-library/blocks/post-featured-image/style.css 119 B 0 B
build/block-library/blocks/post-title/style-rtl.css 60 B 0 B
build/block-library/blocks/post-title/style.css 60 B 0 B
build/block-library/blocks/preformatted/style-rtl.css 103 B 0 B
build/block-library/blocks/preformatted/style.css 103 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 318 B 0 B
build/block-library/blocks/pullquote/style.css 318 B 0 B
build/block-library/blocks/query-loop/editor-rtl.css 98 B 0 B
build/block-library/blocks/query-loop/editor.css 97 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-title/editor-rtl.css 86 B 0 B
build/block-library/blocks/query-title/editor.css 86 B 0 B
build/block-library/blocks/query/editor-rtl.css 131 B 0 B
build/block-library/blocks/query/editor.css 132 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 189 B 0 B
build/block-library/blocks/search/editor.css 189 B 0 B
build/block-library/blocks/search/style-rtl.css 359 B 0 B
build/block-library/blocks/search/style.css 362 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 251 B 0 B
build/block-library/blocks/separator/style.css 251 B 0 B
build/block-library/blocks/shortcode/editor-rtl.css 512 B 0 B
build/block-library/blocks/shortcode/editor.css 512 B 0 B
build/block-library/blocks/site-logo/editor-rtl.css 440 B 0 B
build/block-library/blocks/site-logo/editor.css 441 B 0 B
build/block-library/blocks/site-logo/style-rtl.css 154 B 0 B
build/block-library/blocks/site-logo/style.css 154 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 800 B 0 B
build/block-library/blocks/social-links/editor.css 799 B 0 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB 0 B
build/block-library/blocks/social-links/style.css 1.33 kB 0 B
build/block-library/blocks/spacer/editor-rtl.css 308 B 0 B
build/block-library/blocks/spacer/editor.css 308 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/table/editor-rtl.css 478 B 0 B
build/block-library/blocks/table/editor.css 478 B 0 B
build/block-library/blocks/table/style-rtl.css 480 B 0 B
build/block-library/blocks/table/style.css 480 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 551 B 0 B
build/block-library/blocks/template-part/editor.css 550 B 0 B
build/block-library/blocks/term-description/editor-rtl.css 90 B 0 B
build/block-library/blocks/term-description/editor.css 90 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/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 569 B 0 B
build/block-library/blocks/video/editor.css 570 B 0 B
build/block-library/blocks/video/style-rtl.css 173 B 0 B
build/block-library/blocks/video/style.css 173 B 0 B
build/block-library/common-rtl.css 1.26 kB 0 B
build/block-library/common.css 1.26 kB 0 B
build/block-library/editor-rtl.css 9.93 kB 0 B
build/block-library/editor.css 9.92 kB 0 B
build/block-library/reset-rtl.css 506 B 0 B
build/block-library/reset.css 507 B 0 B
build/block-library/style-rtl.css 10.3 kB 0 B
build/block-library/style.css 10.3 kB 0 B
build/block-library/theme-rtl.css 692 B 0 B
build/block-library/theme.css 693 B 0 B
build/block-serialization-default-parser/index.js 1.29 kB 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/blocks/index.js 47.2 kB 0 B
build/components/index.js 188 kB 0 B
build/components/style-rtl.css 16.2 kB 0 B
build/components/style.css 16.2 kB 0 B
build/compose/index.js 9.95 kB 0 B
build/core-data/index.js 12.1 kB 0 B
build/customize-widgets/index.js 43.2 kB 0 B
build/customize-widgets/style-rtl.css 1.38 kB 0 B
build/customize-widgets/style.css 1.38 kB 0 B
build/data-controls/index.js 829 B 0 B
build/data/index.js 7.23 kB 0 B
build/date/index.js 31.8 kB 0 B
build/deprecated/index.js 739 B 0 B
build/dom-ready/index.js 577 B 0 B
build/dom/index.js 4.62 kB 0 B
build/edit-navigation/index.js 13.9 kB 0 B
build/edit-navigation/style-rtl.css 3.08 kB 0 B
build/edit-navigation/style.css 3.08 kB 0 B
build/edit-post/classic-rtl.css 454 B 0 B
build/edit-post/classic.css 454 B 0 B
build/edit-post/index.js 335 kB 0 B
build/edit-post/style-rtl.css 6.81 kB 0 B
build/edit-post/style.css 6.8 kB 0 B
build/edit-site/index.js 25.8 kB 0 B
build/edit-site/style-rtl.css 4.76 kB 0 B
build/edit-site/style.css 4.75 kB 0 B
build/edit-widgets/index.js 292 kB 0 B
build/edit-widgets/style-rtl.css 3.46 kB 0 B
build/edit-widgets/style.css 3.47 kB 0 B
build/editor/style-rtl.css 3.92 kB 0 B
build/editor/style.css 3.91 kB 0 B
build/element/index.js 3.44 kB 0 B
build/escape-html/index.js 739 B 0 B
build/format-library/index.js 5.66 kB 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 1.76 kB 0 B
build/html-entities/index.js 627 B 0 B
build/i18n/index.js 3.73 kB 0 B
build/is-shallow-equal/index.js 710 B 0 B
build/keyboard-shortcuts/index.js 1.65 kB 0 B
build/keycodes/index.js 1.43 kB 0 B
build/list-reusable-blocks/index.js 2.06 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 3.08 kB 0 B
build/notices/index.js 1.07 kB 0 B
build/nux/index.js 2.31 kB 0 B
build/nux/style-rtl.css 718 B 0 B
build/nux/style.css 716 B 0 B
build/plugins/index.js 1.99 kB 0 B
build/primitives/index.js 1.03 kB 0 B
build/priority-queue/index.js 791 B 0 B
build/react-i18n/index.js 923 B 0 B
build/redux-routine/index.js 2.82 kB 0 B
build/reusable-blocks/index.js 2.54 kB 0 B
build/reusable-blocks/style-rtl.css 225 B 0 B
build/reusable-blocks/style.css 225 B 0 B
build/rich-text/index.js 10.7 kB 0 B
build/server-side-render/index.js 1.64 kB 0 B
build/shortcode/index.js 1.68 kB 0 B
build/token-list/index.js 846 B 0 B
build/url/index.js 1.95 kB 0 B
build/viewport/index.js 1.28 kB 0 B
build/warning/index.js 1.13 kB 0 B
build/widgets/index.js 1.66 kB 0 B
build/wordcount/index.js 1.24 kB 0 B

compressed-size-action

Comment on lines +75 to +83
this.getEditorSettings = memize(
( settings, capabilities ) => ( {
...settings,
capabilities,
} ),
{
maxSize: 1,
}
);
Copy link
Contributor Author

Choose a reason for hiding this comment

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

I added the capabilities into the editor settings that are passed to the EditorProvider, this is required because we need them when executing the useNativeBlockEditorSettings hook.

Additionally, to prevent extra re-renders, I decided to memoize the editor settings object.

Copy link
Contributor

Choose a reason for hiding this comment

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

@fluiddot I was looking around the codebase for some context about what maxSize does but I wasn't able to figure it out. Could you please expound a bit on its usage?

Copy link
Contributor

Choose a reason for hiding this comment

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

Is it utilized to define the maximum size of the cache?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Exactly, this parameter controls the size of the cache, here you can check the documentation of the memize package.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

There’s a similar logic in this file:

Copy link
Contributor

Choose a reason for hiding this comment

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

Good good. Thanks for confirming 🙇🏾

Comment on lines +46 to +52
reusableBlocks: isWeb
? select( coreStore ).getEntityRecords(
'postType',
'wp_block',
{ per_page: -1 }
)
: [], // Reusable blocks are fetched in the native version of this hook.
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Reusable blocks are fetched in the native version of this hook, so we only fetch them for the web version.

*/
import useBlockEditorSettings from './use-block-editor-settings.js';

function useNativeBlockEditorSettings( settings, hasTemplate ) {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

The purpose of this hook is to add custom code to the useBlockEditorSettings hook, which will be only executed in the native version of the editor.

Copy link
Contributor

Choose a reason for hiding this comment

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

Thanks for the context here. I can see that useNativeBlockEditorSettings is utilizing the web variant to create the editorSettings and then based on if support for reusable block is enabled or not based on the site type, we are then querying the coreStore for the said blocks.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah exactly, the main difference between this version and the web is that capabilities is only available in native. This is used, as you commented, to control whether it should query the reusable blocks.

@fluiddot fluiddot marked this pull request as ready for review May 12, 2021 11:53
@fluiddot fluiddot requested a review from jd-alexander May 12, 2021 11:53
@fluiddot
Copy link
Contributor Author

I've realized that the reusable block is disabled on Atomic sites, I'll push a fix as soon as possible into the WPiOS and WPAndroid branches 💨 .

@jd-alexander
Copy link
Contributor

I've realized that the reusable block is disabled on Atomic sites, I'll push a fix as soon as possible into the WPiOS and WPAndroid branches 💨 .

Appreciated! 👍🏾

@fluiddot
Copy link
Contributor Author

I've realized that the reusable block is disabled on Atomic sites, I'll push a fix as soon as possible into the WPiOS and WPAndroid branches 💨 .

Appreciated! 👍🏾

I've just committed the fix for the Atomic sites to the main app branches, additionally, I've added an extra test case for Atomic sites because I wasn't covering it initially.

@fluiddot
Copy link
Contributor Author

Looks like the case of an empty reusable block is not properly handled, here's a screenshot of how it looks like currently:

Potential solutions

I was thinking on different options for this:

Empty content
Warning box
Warning box as the content

To be honest, it's kind of an edge case to have empty reusable blocks although it's possible to create them. In any case, I don't see the best option for this so I'd appreciate your feedback. cc @iamthomasbishop

Thanks for your help 🙇 !

fluiddot added 3 commits May 13, 2021 19:27
# Conflicts:
#	packages/react-native-editor/CHANGELOG.md
# Conflicts:
#	packages/react-native-bridge/android/react-native-bridge/src/main/java/org/wordpress/mobile/WPAndroidGlue/GutenbergProps.kt
#	packages/react-native-bridge/ios/GutenbergBridgeDelegate.swift
#	packages/react-native-editor/android/app/src/main/java/com/gutenberg/MainActivity.java
# Conflicts:
#	packages/editor/src/components/provider/use-block-editor-settings.js
#	packages/react-native-editor/CHANGELOG.md
Copy link
Contributor

@jd-alexander jd-alexander left a comment

Choose a reason for hiding this comment

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

Thanks for these changes @fluiddot I tested utilizing the flows mentioned in the PR description. The reusable block is enabled on WPCom and Atomic sites and disabled on self-hosted sites. I notice a minor bug and left comments on both Android and iOS PRs. Let me know what you think.

Copy link
Contributor

@jd-alexander jd-alexander left a comment

Choose a reason for hiding this comment

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

Since the issue raised is not blocking this PR and affects all unsupported blocks, we can go ahead with the approval here. LGTM 🚢 The unselected empty state issue that was raised in the comments for design feedback can be implemented in another PR if you think that's best 👍🏾

@iamthomasbishop
Copy link

@fluiddot I believe what you have implemented is the expected behavior. I took a look at the web editor and can confirm this is the case (screenshot). I could see a case to be made for somehow making the unselected state "invisible", but for now I think what you have here is fine. In a future iteration, it might be worth customizing the placeholder text to say Add content or something along those lines, but let's just roll with this for now.

@fluiddot
Copy link
Contributor Author

@fluiddot I believe what you have implemented is the expected behavior. I took a look at the web editor and can confirm this is the case (screenshot). I could see a case to be made for somehow making the unselected state "invisible", but for now I think what you have here is fine. In a future iteration, it might be worth customizing the placeholder text to say Add content or something along those lines, but let's just roll with this for now.

Thanks @iamthomasbishop for the feedback ❤️ !

Initially, I also thought to use the implementation we have in the web editor but in this case, since the reusable block is not editable in the app yet, I think it can be a bit misleading, the user most likely would try to tap on it but it will be disabled.

In any case, I'll open an issue regarding this because the empty paragraph gets focused when the block is inserted and it's even more confusing (check the attached videos) 😄 .

Empty reusable block Insert empty reusable block
reusable-block-empty.mp4
reusable-block-insert-empty.mp4

@iamthomasbishop
Copy link

iamthomasbishop commented May 18, 2021

Initially, I also thought to use the implementation we have in the web editor but in this case, since the reusable block is not editable in the app yet,

@fluiddot Oh duh, of course 🤦 In that case, I think the best solution would be to at least show a tap target with the dotted outline when the block isn't selected, even if there isn't anything within it. We could theoretically show a placeholder of something like No content when its' selected, but I think in cases where it's editable we might want to show an inline inserter button instead (similar to the web).

Does that make sense? I'm open to other suggestions.

@fluiddot
Copy link
Contributor Author

Initially, I also thought to use the implementation we have in the web editor but in this case, since the reusable block is not editable in the app yet,

@fluiddot Oh duh, of course 🤦 In that case, I think the best solution would be to at least show a tap target with the dotted outline when the block isn't selected, even if there isn't anything within it. We could theoretically show a placeholder of something like No content when its' selected, but I think in cases where it's editable we might want to show an inline inserter button instead (similar to the web).

Does that make sense? I'm open to other suggestions.

One of the options I suggested was to add a placeholder, here is an example:

It's not ideal but it could work until we support editing, @iamthomasbishop wdyt?

@fluiddot fluiddot force-pushed the rnmobile/add/reusable-block-capability branch from 228e7ac to 233e227 Compare May 20, 2021 14:49
@fluiddot
Copy link
Contributor Author

I've just created this issue as a follow-up for the reusable block with empty content issue.

@iamthomasbishop
Copy link

One of the options I suggested was to add a placeholder, here is an example:

@fluiddot Sorry, I don't think I was very clear in my suggestion. What I was suggesting is a change to the placeholder text label (Start writing...) which would look like this:

However, I do think a mix between your placeholder approach and my idea of adding an outline (especially on the non-selected state) would probably work well. Something like this:

One other minor suggestion I'd like to make is that we might want to decrease the height of the placeholder bit you have (with the light gray background). I'm guessing that we're using the existing placeholder component in your example above, but if it's not a hassle would it be possible to slim down the vertical padding a little bit? I believe the top/bottom padding on the container is 24px, but we can bring it down to 12px.

Altogether, here is what that would look like between the selected and non-selected states:

Any thoughts? I think the only big change here is the outline on the non-selected state. The compact spacing proposed is less important, but would be nice.

@fluiddot
Copy link
Contributor Author

@jd-alexander Heads up that I've made a small change in the PR to disable reusable blocks in the demo project in this commit. It doesn't affect the feature itself so I think it's not really necessary an extra review.

@fluiddot fluiddot merged commit 6dbd06a into trunk May 21, 2021
@fluiddot fluiddot deleted the rnmobile/add/reusable-block-capability branch May 21, 2021 10:39
@github-actions github-actions bot added this to the Gutenberg 10.8 milestone May 21, 2021
fullofcaffeine added a commit that referenced this pull request May 22, 2021
…-take-2

* trunk: (57 commits)
  Image block: fix cover transform and excessive re-rendering (#32102)
  compose: Add types to useMergeRefs (#31939)
  Navigation: Fix collapsing regression. (#32081)
  components: Promote Elevation (#31614)
  compose: Add types to useReducedMotion and useMediaQuery (#31941)
  Update the graphic that appears in the Template Editor welcome guide (#32055)
  Block Navigation: use CSS for indentation with known max indent instead of spacer divs (#32063)
  Fix broken template part converter modal styles. (#32097)
  compose: Add types to `usePrevious` (#31944)
  components: Add ZStack (#31613)
  components: Fix Shortcut polymorphism (#31555)
  compose: Add types to `useFocusReturn` (#31949)
  compose: Add types to `useDebounce` (#32015)
  List View: Simplify the BlockNavigation component (#31290)
  Remove query context leftovers (#32093)
  Remove filter_var from blocks (#32046)
  Templates: Remove now-obsolete gutenberg_get_template_paths() (#32066)
  [RNMobile] Enable reusable block only in WP.com sites (#31744)
  Rename ViewOwnProps to PolymorphicComponentProps (#32053)
  Rich text: remove inline display warning (#32013)
  ...
@fluiddot
Copy link
Contributor Author

One of the options I suggested was to add a placeholder, here is an example:

@fluiddot Sorry, I don't think I was very clear in my suggestion. What I was suggesting is a change to the placeholder text label (Start writing...) which would look like this:

However, I do think a mix between your placeholder approach and my idea of adding an outline (especially on the non-selected state) would probably work well. Something like this:

One other minor suggestion I'd like to make is that we might want to decrease the height of the placeholder bit you have (with the light gray background). I'm guessing that we're using the existing placeholder component in your example above, but if it's not a hassle would it be possible to slim down the vertical padding a little bit? I believe the top/bottom padding on the container is 24px, but we can bring it down to 12px.

Altogether, here is what that would look like between the selected and non-selected states:

Any thoughts? I think the only big change here is the outline on the non-selected state. The compact spacing proposed is less important, but would be nice.

Now it's super clear, thank you very much @iamthomasbishop for the clarification!

I agree, it makes sense to display it this way, I'll take your insights and update the issue.

Regarding the height decrease of the placeholder:

One other minor suggestion I'd like to make is that we might want to decrease the height of the placeholder bit you have (with the light gray background). I'm guessing that we're using the existing placeholder component in your example above, but if it's not a hassle would it be possible to slim down the vertical padding a little bit? I believe the top/bottom padding on the container is 24px, but we can bring it down to 12px.

What do you think about applying the decrease in the component itself? It will affect all places where we're using it but I think it makes sense.

@iamthomasbishop
Copy link

I agree, it makes sense to display it this way, I'll take your insights and update the issue.

Sounds good, thank you!

What do you think about applying the decrease in the component itself? It will affect all places where we're using it but I think it makes sense.

I have a feeling it might be a bit too compact for some of the other instances, but I'm definitely open to trying it to see how it looks/feels! And I wouldn't want this to block or slow progress on the rest of this work, so feel free to break that off into a separate ticket if preferred. 😃

@fluiddot
Copy link
Contributor Author

What do you think about applying the decrease in the component itself? It will affect all places where we're using it but I think it makes sense.

I have a feeling it might be a bit too compact for some of the other instances, but I'm definitely open to trying it to see how it looks/feels! And I wouldn't want this to block or slow progress on the rest of this work, so feel free to break that off into a separate ticket if preferred. 😃

Ok, I'll check how it looks like on other places where we're using it just in case. For this specific case, probably what I'll do is to apply the fix only for the reusable block.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Block The "Reusable Block" Block Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants