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] Add featured image settings to the Latest Posts block #39257

Merged
merged 23 commits into from
Apr 27, 2022

Conversation

SiobhyB
Copy link
Contributor

@SiobhyB SiobhyB commented Mar 7, 2022

Fixes wordpress-mobile/gutenberg-mobile#4034
Partially fixes #29815

Related PRs

Description

This PR adds featured image settings to the native Latest Posts block. This is a step towards bringing the available block settings on the native side in alignment with the web. If a user selects the new Display featured image toggle, the following two options for customizing the featured image's appearance will be unveiled:

  • Image alignment.
  • Add link to featured image.

Note, the option to specify the featured image's size/dimensions will be addressed separately to this PR. This is because these options are a bit more complex and may warrant some updates to the image block's settings.

Please refer to the Types of changes section below for an overview of the code changes.

Testing Instructions

Testing changes in the app

Prerequisite: A WordPress site with more than one published blog post, with a featured image assigned to at least one of the posts.

  • Open a post or page in the WordPress mobile app and add the Latest Posts block.
  • Tap the cog/gear icon to access the block's settings.
  • Confirm the new Featured image settings section appear within the block's settings and toggle the options.
  • Preview the post to confirm that toggling the new settings work as expected i.e. you should be able to view any featured images associated with the latest posts and their alignment should change if adjusted.

Testing for any web regressions

As these PR introduces some code changes to the web's alignment controls, there is a chance for unintentional regressions. We should therefore test that the alignment controls continue to work as expected while checked out with this branch on the web. Places where the controls appear include within the settings for the Image and Latest Posts blocks.

Screenshots

Before After

Video

featured.settings.mov

Types of changes

New feature (non-breaking change which adds functionality), with the following high-level overview of the code:

  • A new Featured image settings section has been added to the Latest Posts settings, following the same code pattern used for other sections.
  • If a user selects the new Display featured image toggle, the following two options for customizing the featured image's appearance will be unveiled:
      1. Change the image's alignment.
      1. Add a link to the image.
  • This PR re-uses the BlockAlignmentControl component to implement the alignment options, which required the following changes:
    • As a significant number of native-specific changes were required, a native version of the component's ui.js file was created. The main removal/additions to the original file's code can be found in ec59670.
    • All native-specific parts of the code have been removed from the original ui.js, as they're now redundant. The specific changes can be found in 40765b4 and 9fb7b38.
    • A new constants.js file has been created to add constants that are shared by both the native and web files, such as BLOCK_ALIGNMENTS_CONTROLS.
    • The changes that were made in the native version of BlockAlignmentControl enable the BottomSheetSelectControl component to be rendered when the isBottomSheetControl prop is set to true. This was a desired change, as it'll make it easier to add alignment options within a block's bottom sheet settings (rather than only the toolbar) in the future.
    • BottomSheetSelectControl was updated to allow icons to be displayed for each option in the subsheet, enabling the use of the alignment icons. It's likely that the use of icons will be a future use case for other developers using this component, too.
  • Note, the option to specify the image's size/dimensions will be addressed separately to this PR.

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).
  • I've updated related schemas if appropriate.

With this commit a 'display featured image' toggle is added to the Latest Post block's settings. This has been added to a new 'Featured image settings' panel.
@SiobhyB SiobhyB added [Type] Enhancement A suggestion for improvement. Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change) [Block] Latest Posts Affects the Latest Posts Block labels Mar 7, 2022
@SiobhyB SiobhyB self-assigned this Mar 7, 2022
@github-actions
Copy link

github-actions bot commented Mar 7, 2022

Size Change: +5 B (0%)

Total Size: 1.23 MB

Filename Size Change
build/block-editor/index.min.js 151 kB +5 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/annotations/index.min.js 2.77 kB
build/api-fetch/index.min.js 2.27 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 487 B
build/block-directory/index.min.js 6.51 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/style-rtl.css 15.1 kB
build/block-editor/style.css 15.1 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 59 B
build/block-library/blocks/avatar/style.css 59 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 445 B
build/block-library/blocks/button/editor.css 445 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 B
build/block-library/blocks/buttons/editor-rtl.css 292 B
build/block-library/blocks/buttons/editor.css 292 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 103 B
build/block-library/blocks/code/style.css 103 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-query-loop/editor-rtl.css 95 B
build/block-library/blocks/comments-query-loop/editor.css 95 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.53 kB
build/block-library/blocks/cover/style.css 1.53 kB
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 353 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 961 B
build/block-library/blocks/gallery/editor.css 964 B
build/block-library/blocks/gallery/style-rtl.css 1.51 kB
build/block-library/blocks/gallery/style.css 1.51 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 333 B
build/block-library/blocks/group/editor.css 333 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 731 B
build/block-library/blocks/image/editor.css 730 B
build/block-library/blocks/image/style-rtl.css 529 B
build/block-library/blocks/image/style.css 535 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 199 B
build/block-library/blocks/latest-posts/editor.css 198 B
build/block-library/blocks/latest-posts/style-rtl.css 447 B
build/block-library/blocks/latest-posts/style.css 446 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 493 B
build/block-library/blocks/media-text/style.css 490 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 708 B
build/block-library/blocks/navigation-link/editor.css 706 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/view.min.js 375 B
build/block-library/blocks/navigation/editor-rtl.css 2.03 kB
build/block-library/blocks/navigation/editor.css 2.04 kB
build/block-library/blocks/navigation/style-rtl.css 1.93 kB
build/block-library/blocks/navigation/style.css 1.92 kB
build/block-library/blocks/navigation/view-modal.min.js 2.65 kB
build/block-library/blocks/navigation/view.min.js 395 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 363 B
build/block-library/blocks/page-list/editor.css 363 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 260 B
build/block-library/blocks/paragraph/style.css 260 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 69 B
build/block-library/blocks/post-comments-form/editor.css 69 B
build/block-library/blocks/post-comments-form/style-rtl.css 521 B
build/block-library/blocks/post-comments-form/style.css 521 B
build/block-library/blocks/post-comments/editor-rtl.css 77 B
build/block-library/blocks/post-comments/editor.css 77 B
build/block-library/blocks/post-comments/style-rtl.css 511 B
build/block-library/blocks/post-comments/style.css 511 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 323 B
build/block-library/blocks/post-template/style.css 323 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 370 B
build/block-library/blocks/pullquote/style.css 370 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query/editor-rtl.css 369 B
build/block-library/blocks/query/editor.css 369 B
build/block-library/blocks/quote/style-rtl.css 213 B
build/block-library/blocks/quote/style.css 213 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 140 B
build/block-library/blocks/separator/editor.css 140 B
build/block-library/blocks/separator/style-rtl.css 233 B
build/block-library/blocks/separator/style.css 233 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 759 B
build/block-library/blocks/site-logo/editor.css 759 B
build/block-library/blocks/site-logo/style-rtl.css 181 B
build/block-library/blocks/site-logo/style.css 181 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB
build/block-library/blocks/social-links/style.css 1.36 kB
build/block-library/blocks/spacer/editor-rtl.css 332 B
build/block-library/blocks/spacer/editor.css 332 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 504 B
build/block-library/blocks/table/editor.css 504 B
build/block-library/blocks/table/style-rtl.css 625 B
build/block-library/blocks/table/style.css 625 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 226 B
build/block-library/blocks/tag-cloud/style.css 227 B
build/block-library/blocks/template-part/editor-rtl.css 149 B
build/block-library/blocks/template-part/editor.css 149 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 571 B
build/block-library/blocks/video/editor.css 572 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/common-rtl.css 993 B
build/block-library/common.css 990 B
build/block-library/editor-rtl.css 10.3 kB
build/block-library/editor.css 10.3 kB
build/block-library/index.min.js 177 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 11.5 kB
build/block-library/style.css 11.5 kB
build/block-library/theme-rtl.css 689 B
build/block-library/theme.css 694 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 47 kB
build/components/index.min.js 222 kB
build/components/style-rtl.css 15 kB
build/components/style.css 15 kB
build/compose/index.min.js 11.2 kB
build/core-data/index.min.js 14.5 kB
build/customize-widgets/index.min.js 11 kB
build/customize-widgets/style-rtl.css 1.39 kB
build/customize-widgets/style.css 1.39 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 7.64 kB
build/date/index.min.js 32 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.58 kB
build/edit-navigation/index.min.js 15.8 kB
build/edit-navigation/style-rtl.css 4.05 kB
build/edit-navigation/style.css 4.05 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/index.min.js 30.1 kB
build/edit-post/style-rtl.css 7.11 kB
build/edit-post/style.css 7.11 kB
build/edit-site/index.min.js 47.5 kB
build/edit-site/style-rtl.css 7.95 kB
build/edit-site/style.css 7.93 kB
build/edit-widgets/index.min.js 16.3 kB
build/edit-widgets/style-rtl.css 4.41 kB
build/edit-widgets/style.css 4.4 kB
build/editor/index.min.js 38.5 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.71 kB
build/element/index.min.js 4.29 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 6.62 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.66 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.79 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.83 kB
build/keycodes/index.min.js 1.41 kB
build/list-reusable-blocks/index.min.js 1.75 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.94 kB
build/notices/index.min.js 957 B
build/nux/index.min.js 2.12 kB
build/nux/style-rtl.css 751 B
build/nux/style.css 749 B
build/plugins/index.min.js 1.98 kB
build/preferences-persistence/index.min.js 2.1 kB
build/preferences/index.min.js 1.32 kB
build/primitives/index.min.js 949 B
build/priority-queue/index.min.js 628 B
build/react-i18n/index.min.js 704 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.69 kB
build/reusable-blocks/index.min.js 2.24 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11.2 kB
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.52 kB
build/token-list/index.min.js 668 B
build/url/index.min.js 1.99 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.21 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.07 kB

compressed-size-action

Siobhan added 7 commits March 7, 2022 15:03
The new 'link to featured image' toggle that's added with this commit will only be visible when the 'displayFeaturedImage' toggle is set to true.
With this commit, the 'BlockAlignmentControl' component is used to add alignment settings under the Latest Post block's featured image settings/section.
Prior to this commit, the BlockAlignmentControl component was only set up to display as a toolbar button on native. With this commit, a "isBottomSheetControl" prop is introduced to enable the component to be styled in a way that's appropriate within BottomSheets.
@SiobhyB SiobhyB requested review from fluiddot and jhnstn March 21, 2022 11:39
@SiobhyB SiobhyB marked this pull request as ready for review March 21, 2022 11:40
@SiobhyB SiobhyB requested a review from ellatrix as a code owner March 21, 2022 11:40
Copy link
Contributor

@fluiddot fluiddot left a comment

Choose a reason for hiding this comment

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

@SiobhyB thanks for adding the featured image settings to the latest posts block, great work 🎊 .

I tested locally and the changes work as expected, however, I'm wondering whether to use the dropdown for displaying the alignment options. My concern comes from the fact that for other settings like colors, this is done within a subscreen instead of displaying another bottom sheet over the main one. The approach you followed is ok from my side, but in order to keep consistency with the rest of elements within block settings, we might consider that option, wdyt?

I understand that the change I'm suggesting implies applying several changes to the PR, so please don't take it as a mandatory change but just as a suggestion. I'll be more than happy to discuss the best approach and if eventually, we consider continuing with this PR I'll be more than happy to approve it. I'd like also to have a second opinion from another reviewer regarding using a subscreen vs bottom sheet, @jhnstn what's your opinion?

@SiobhyB
Copy link
Contributor Author

SiobhyB commented Mar 24, 2022

@fluiddot, thank you for your review! I think you're right.

I was pretty focused on re-using the BlockAlignmentControl component but, upon reflection, I don't think re-using brings many benefits in this case. In fact, it's created some complexity and, as you've pointed out, some inconsistency.

Edited to add: I've gone ahead to refactor using the BottomSheetSelectControl component instead. I saw that component uses BottomSheet.SubSheet, which is used in other places, like for font sizes. Does that refactor seem more inline with what you'd expect? Looking forward to hearing your feedback.

Siobhan added 4 commits March 24, 2022 20:37
@SiobhyB SiobhyB requested a review from ajitbohra as a code owner March 24, 2022 20:52
@fluiddot
Copy link
Contributor

@fluiddot, thank you for your review! I think you're right.

I was pretty focused on re-using the BlockAlignmentControl component but, upon reflection, I don't think re-using brings many benefits in this case. In fact, it's created some complexity and, as you've pointed out, some inconsistency.

Makes sense to me, I think the implementation was right but my main concern was about consistency.

Edited to add: I've gone ahead to refactor using the BottomSheetSelectControl component instead. I saw that component uses BottomSheet.SubSheet, which is used in other places, like for font sizes. Does that refactor seem more inline with what you'd expect? Looking forward to hearing your feedback.

Great ⭐, thanks @SiobhyB for updating the PR 🙇 ! I like the idea of using the BottomSheetSelectControl component, as it looks like we could provide the same functionality with that component. I'll try to spare some time to review this but after a quick review, I think the implementation looks solid. I'll post a proper PR review once I jump into a deeper look.

Copy link
Contributor

@fluiddot fluiddot left a comment

Choose a reason for hiding this comment

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

I performed another test on Android and iOS and the changes worked as expected ✅. I only added a comment regarding where to place the BLOCK_ALIGNMENTS_CONTROLS constant, apart from that the PR looks great to me 🎊 .

Comment on lines 210 to 215
<BottomSheetSelectControl
label={ __( 'Image alignment' ) }
options={ BLOCK_ALIGNMENTS_CONTROLS }
onChange={ this.onSetFeaturedImageAlign }
value={ featuredImageAlign }
/>
Copy link
Contributor

Choose a reason for hiding this comment

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

In the future, it would be great if BlockAlignmentControl renders this component (i.e. BottomSheetSelectControl) underneath, this way we won't need to set up the options and we could use it here.

I was checking the previous commits where you introduced isBottomSheetControl prop in BlockAlignmentUI, and I was wondering if we could follow that approach for this. But, I noticed that it most likely imply a big refactor because we would need to implement the native version of the Block Alignment Toolbar component to provide here the BottomSheetSelectControl component.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@fluiddot, thank you for the suggestion! I've gone ahead with the proposed refactor, introducing the isBottomSheetControl prop again. As this required a significant number of changes to the ui.js file, I created a separate native version in 19b0e21.

Copy link
Contributor

Choose a reason for hiding this comment

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

Great, thank you very much @SiobhyB for tackling this 🙇.

I'd like to clarify that with my previous comment I didn't want to imply that we had to do the refactor in this PR, but I'm happy to see you sorted it out 😊. I'll try to take a look as soon as possible at the latest changes.

Comment on lines 16 to 25
export const BLOCK_ALIGNMENTS_CONTROLS = [
{ value: undefined, label: __( 'None' ), icon: alignNone },
{ value: 'left', label: __( 'Align left' ), icon: positionLeft },
{
value: 'center',
label: __( 'Align center' ),
icon: positionCenter,
},
{ value: 'right', label: __( 'Align right' ), icon: positionRight },
];
Copy link
Contributor

Choose a reason for hiding this comment

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

Not sure if we should expose a native-only constant in the constants file, if it's going to be used only in the edit.native.js file I might consider defining the constant there, wdyt?

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 changes to this shared constants file have been removed following the recent refactor. 👍

@fluiddot
Copy link
Contributor

@SiobhyB I also noticed that the PR checks look frozen, maybe updating with trunk branch re-triggers them.

Siobhan added 7 commits April 22, 2022 22:57
With this commit, the 'BottomSheetSelectControl' component is replaced to make use of 'BlockAlignmentControl'. Any code that relies on 'BottomSheetSelectControl' is also removed.
As more native-specific changes are going to be added to 'ui.js', a native version is created with this commit.
Prior to this commit, the BlockAlignmentControl component was only set up to display as a toolbar button on native. With this commit, a "isBottomSheetControl" prop is introduced to enable the use of the "BottomSheetSelectControl", so that the alignment control can be used within BottomSheets.
Following the separation of native-specific code to its own file, this commit further refines some unnecessary code that was left behind in the (now) web-only file.

Specifically, the logic surrounding the 'isCollapsed' prop previously included a check for whether 'isToolbar' is true. Now that there's a native-specific file, 'isCollapsed' will only ever be passed when 'isToolbar' is true. So, the extra check is redundant.
@SiobhyB SiobhyB marked this pull request as draft April 22, 2022 23:32
As 'popoverProps' and 'toggleProps' are only passed/used when the toolbar component is used, this commit moves them from the 'commonProps' variable.
@SiobhyB
Copy link
Contributor Author

SiobhyB commented Apr 25, 2022

@fluiddot, thank you for your suggestions! I've gone ahead with a refactor, so that BlockAlignmentControl is now able to renders BottomSheetSelectControl underneath. Looking forward to hearing what you think whenever you have the chance.

@SiobhyB SiobhyB marked this pull request as ready for review April 25, 2022 10:26
@SiobhyB SiobhyB requested a review from fluiddot April 25, 2022 10:27
Copy link
Contributor

@fluiddot fluiddot left a comment

Choose a reason for hiding this comment

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

LGTM 🎊 ! Awesome work @SiobhyB 🏅 !

I performed different tests on both native and web platforms and the changes work as expected.

Tested on Samsung Galaxy S20 FE 5G (Android 11) and Simulator iPhone 13 (iOS 15.4).

@SiobhyB
Copy link
Contributor Author

SiobhyB commented Apr 27, 2022

Thanks so much @fluiddot! 🙇‍♀️

@SiobhyB SiobhyB merged commit 48e2e83 into trunk Apr 27, 2022
@SiobhyB SiobhyB deleted the rnmobile/update/latest-posts-featured-settings branch April 27, 2022 09:48
@github-actions github-actions bot added this to the Gutenberg 13.2 milestone Apr 27, 2022
SiobhyB pushed a commit that referenced this pull request Apr 28, 2022
)

This change adds featured image settings to the native Latest Posts block. This is a step towards bringing the available block settings on the native side in alignment with the web.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Latest Posts Affects the Latest Posts Block Mobile App - Automation Label used to initiate Mobile App PR Automation Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change) [Type] Enhancement A suggestion for improvement.
Projects
None yet
2 participants