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] Fix BottomSheet.SubSheet/TextInput Conflict #33845

Merged
merged 4 commits into from
Aug 3, 2021

Conversation

SiobhyB
Copy link
Contributor

@SiobhyB SiobhyB commented Aug 3, 2021

Fixes: #33828

gutenberg-mobile: wordpress-mobile/gutenberg-mobile#3784

Description

As outlined in #33828, the text editor for adding alt text to an image (accessed from the image block's settings) isn't currently working as expected. At the time of writing, the keyboard is immediately dismissed with each keystroke, making it extremely difficult, bordering on impossible, to add alt text to an image.

BottomSheetTextControl is the component behind the image block's alt text settings and is built on the BottomSheet.SubSheet component. There were changes to BottomSheet.SubSheet in d650b4f that led to a conflict with the TextInput component in BottomSheetTextControl, which brought this issue to the surface.

With this PR, I have refactored the changes in d650b4f in a way that enables the alt text entry to work as expected.

How has this been tested?

Test Case 1: Alt Text Settings

The following steps outline an approach to test that the original bug is fixed with this PR.
  1. Navigate to a new post then add an image block or tap on an existing one.
  2. Access the image block's settings by tapping the cog/gear icon.
  3. Tap Alt Text and confirm that a new sub sheet opens with a text editor.
  4. Enter a few lines into the text editor and confirm that it no longer closes with each keystroke.

Test Case 2: Help Panel (Production Only)

As part of our testing, we should also verify that the new changes don't bring any unexpected side effects to other places where the component's used, such as the Help panel.
  • Run the demo app.
  • Open the menu on iOS by clicking the overflow menu icon in the ActionBar or by shaking the device on Android.
  • Tap Help. The main help topics bottom sheet should be displayed.
  • Tap one of the help topics and verify that the new sheet displays as expected.

Test Case 3: Full Screen (Code Changes Required)

Lastly, we'll need to double-check that the "isFullScreen" parameter works as expected following the refactor. This will require code changes.
  • Find a component in the app where the BottomSheet.SubSheet component is being utilised, such as the BottomSheetTextControl component.
  • Add isFullScreen={ true } to the list of parameters being accepted by BottomSheet.SubSheet.
  • Navigate to the area in the app where the edited component is being used and verify that it's rendered as a sheet that takes up the full screen.

Screenshots

Screen.Recording.2021-08-03.at.14.26.40.mov

Types of changes

Bug fix (non-breaking change which fixes an issue), with the following high-level rundown of the main code changes:

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

The 'BottomSheetScreen' component was introduced in the following commit in order to correct a render error related to the 'setIsFullScreen' method: d650b4f#diff-d16d37d09ff59dce57c087e978ac5536503cb1642ec2b0ecdba9536f5c695b95R20

The way the component's currently rendering is causing a conflict with the TextInput component, however.

With this commit, the component's removed, along with the 'setIsFullScreen' method (the method will be re-introduced in the following commits).
@github-actions
Copy link

github-actions bot commented Aug 3, 2021

Size Change: +24 B (0%)

Total Size: 1.08 MB

Filename Size Change
build/block-library/index.min.js 147 kB +22 B (0%)
build/components/index.min.js 197 kB -4 B (0%)
build/components/style-rtl.css 15.8 kB +3 B (0%)
build/components/style.css 15.8 kB +3 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 1.12 kB
build/admin-manifest/index.min.js 1.46 kB
build/annotations/index.min.js 2.93 kB
build/api-fetch/index.min.js 2.44 kB
build/autop/index.min.js 2.28 kB
build/blob/index.min.js 673 B
build/block-directory/index.min.js 6.62 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/index.min.js 127 kB
build/block-editor/style-rtl.css 13.9 kB
build/block-editor/style.css 13.8 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 58 B
build/block-library/blocks/audio/editor.css 58 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/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 474 B
build/block-library/blocks/button/editor.css 474 B
build/block-library/blocks/button/style-rtl.css 605 B
build/block-library/blocks/button/style.css 604 B
build/block-library/blocks/buttons/editor-rtl.css 315 B
build/block-library/blocks/buttons/editor.css 315 B
build/block-library/blocks/buttons/style-rtl.css 370 B
build/block-library/blocks/buttons/style.css 370 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 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 131 B
build/block-library/blocks/code/theme.css 131 B
build/block-library/blocks/columns/editor-rtl.css 189 B
build/block-library/blocks/columns/editor.css 188 B
build/block-library/blocks/columns/style-rtl.css 474 B
build/block-library/blocks/columns/style.css 475 B
build/block-library/blocks/cover/editor-rtl.css 666 B
build/block-library/blocks/cover/editor.css 670 B
build/block-library/blocks/cover/style-rtl.css 1.23 kB
build/block-library/blocks/cover/style.css 1.23 kB
build/block-library/blocks/embed/editor-rtl.css 488 B
build/block-library/blocks/embed/editor.css 488 B
build/block-library/blocks/embed/style-rtl.css 400 B
build/block-library/blocks/embed/style.css 400 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 711 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 707 B
build/block-library/blocks/gallery/editor.css 706 B
build/block-library/blocks/gallery/style-rtl.css 1.05 kB
build/block-library/blocks/gallery/style.css 1.05 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 159 B
build/block-library/blocks/group/editor.css 159 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 93 B
build/block-library/blocks/group/theme.css 93 B
build/block-library/blocks/heading/editor-rtl.css 152 B
build/block-library/blocks/heading/editor.css 152 B
build/block-library/blocks/heading/style-rtl.css 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/home-link/style-rtl.css 247 B
build/block-library/blocks/home-link/style.css 247 B
build/block-library/blocks/html/editor-rtl.css 283 B
build/block-library/blocks/html/editor.css 284 B
build/block-library/blocks/image/editor-rtl.css 728 B
build/block-library/blocks/image/editor.css 728 B
build/block-library/blocks/image/style-rtl.css 482 B
build/block-library/blocks/image/style.css 487 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 137 B
build/block-library/blocks/latest-posts/editor.css 137 B
build/block-library/blocks/latest-posts/style-rtl.css 528 B
build/block-library/blocks/latest-posts/style.css 527 B
build/block-library/blocks/list/style-rtl.css 63 B
build/block-library/blocks/list/style.css 63 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 488 B
build/block-library/blocks/media-text/style.css 485 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 474 B
build/block-library/blocks/navigation-link/editor.css 474 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 B
build/block-library/blocks/navigation/editor-rtl.css 1.67 kB
build/block-library/blocks/navigation/editor.css 1.68 kB
build/block-library/blocks/navigation/style-rtl.css 1.65 kB
build/block-library/blocks/navigation/style.css 1.64 kB
build/block-library/blocks/navigation/view.min.js 2.84 kB
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 310 B
build/block-library/blocks/page-list/editor.css 310 B
build/block-library/blocks/page-list/style-rtl.css 242 B
build/block-library/blocks/page-list/style.css 242 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 248 B
build/block-library/blocks/paragraph/style.css 248 B
build/block-library/blocks/post-author/editor-rtl.css 210 B
build/block-library/blocks/post-author/editor.css 210 B
build/block-library/blocks/post-author/style-rtl.css 182 B
build/block-library/blocks/post-author/style.css 181 B
build/block-library/blocks/post-comments-form/style-rtl.css 140 B
build/block-library/blocks/post-comments-form/style.css 140 B
build/block-library/blocks/post-comments/style-rtl.css 360 B
build/block-library/blocks/post-comments/style.css 359 B
build/block-library/blocks/post-content/editor-rtl.css 138 B
build/block-library/blocks/post-content/editor.css 138 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 412 B
build/block-library/blocks/post-featured-image/editor.css 412 B
build/block-library/blocks/post-featured-image/style-rtl.css 143 B
build/block-library/blocks/post-featured-image/style.css 143 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 378 B
build/block-library/blocks/post-template/style.css 379 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 60 B
build/block-library/blocks/post-title/style.css 60 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 361 B
build/block-library/blocks/pullquote/style.css 360 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 270 B
build/block-library/blocks/query-pagination/editor.css 262 B
build/block-library/blocks/query-pagination/style-rtl.css 168 B
build/block-library/blocks/query-pagination/style.css 168 B
build/block-library/blocks/query-title/editor-rtl.css 85 B
build/block-library/blocks/query-title/editor.css 85 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 169 B
build/block-library/blocks/quote/style.css 169 B
build/block-library/blocks/quote/theme-rtl.css 220 B
build/block-library/blocks/quote/theme.css 222 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 209 B
build/block-library/blocks/search/editor.css 209 B
build/block-library/blocks/search/style-rtl.css 368 B
build/block-library/blocks/search/style.css 372 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 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 250 B
build/block-library/blocks/separator/style.css 250 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 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 462 B
build/block-library/blocks/site-logo/editor.css 464 B
build/block-library/blocks/site-logo/style-rtl.css 153 B
build/block-library/blocks/site-logo/style.css 153 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 165 B
build/block-library/blocks/social-link/editor.css 165 B
build/block-library/blocks/social-links/editor-rtl.css 812 B
build/block-library/blocks/social-links/editor.css 811 B
build/block-library/blocks/social-links/style-rtl.css 1.33 kB
build/block-library/blocks/social-links/style.css 1.33 kB
build/block-library/blocks/spacer/editor-rtl.css 307 B
build/block-library/blocks/spacer/editor.css 307 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 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 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 146 B
build/block-library/blocks/tag-cloud/style.css 146 B
build/block-library/blocks/template-part/editor-rtl.css 636 B
build/block-library/blocks/template-part/editor.css 635 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/term-description/editor-rtl.css 90 B
build/block-library/blocks/term-description/editor.css 90 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 1.29 kB
build/block-library/common.css 1.29 kB
build/block-library/editor-rtl.css 9.87 kB
build/block-library/editor.css 9.85 kB
build/block-library/reset-rtl.css 514 B
build/block-library/reset.css 514 B
build/block-library/style-rtl.css 10.2 kB
build/block-library/style.css 10.2 kB
build/block-library/theme-rtl.css 688 B
build/block-library/theme.css 692 B
build/block-serialization-default-parser/index.min.js 1.3 kB
build/block-serialization-spec-parser/index.min.js 3.06 kB
build/blocks/index.min.js 47.2 kB
build/compose/index.min.js 10.2 kB
build/core-data/index.min.js 12.6 kB
build/customize-widgets/index.min.js 10.8 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 831 B
build/data/index.min.js 7.22 kB
build/date/index.min.js 31.8 kB
build/deprecated/index.min.js 738 B
build/dom-ready/index.min.js 576 B
build/dom/index.min.js 4.78 kB
build/edit-navigation/index.min.js 13.9 kB
build/edit-navigation/style-rtl.css 3.1 kB
build/edit-navigation/style.css 3.1 kB
build/edit-post/classic-rtl.css 479 B
build/edit-post/classic.css 481 B
build/edit-post/index.min.js 59.4 kB
build/edit-post/style-rtl.css 7.19 kB
build/edit-post/style.css 7.18 kB
build/edit-site/index.min.js 26 kB
build/edit-site/style-rtl.css 5.01 kB
build/edit-site/style.css 5.01 kB
build/edit-widgets/index.min.js 16.6 kB
build/edit-widgets/style-rtl.css 4.01 kB
build/edit-widgets/style.css 4.02 kB
build/editor/index.min.js 38.3 kB
build/editor/style-rtl.css 3.92 kB
build/editor/style.css 3.91 kB
build/element/index.min.js 3.44 kB
build/escape-html/index.min.js 739 B
build/format-library/index.min.js 5.72 kB
build/format-library/style-rtl.css 668 B
build/format-library/style.css 669 B
build/hooks/index.min.js 1.76 kB
build/html-entities/index.min.js 628 B
build/i18n/index.min.js 3.73 kB
build/is-shallow-equal/index.min.js 710 B
build/keyboard-shortcuts/index.min.js 1.74 kB
build/keycodes/index.min.js 1.49 kB
build/list-reusable-blocks/index.min.js 2.07 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 3.08 kB
build/notices/index.min.js 1.07 kB
build/nux/index.min.js 2.31 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.99 kB
build/primitives/index.min.js 1.06 kB
build/priority-queue/index.min.js 791 B
build/react-i18n/index.min.js 924 B
build/redux-routine/index.min.js 2.82 kB
build/reusable-blocks/index.min.js 2.56 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.8 kB
build/server-side-render/index.min.js 1.64 kB
build/shortcode/index.min.js 1.68 kB
build/token-list/index.min.js 848 B
build/url/index.min.js 1.95 kB
build/viewport/index.min.js 1.28 kB
build/warning/index.min.js 1.16 kB
build/widgets/index.min.js 6.48 kB
build/widgets/style-rtl.css 1.04 kB
build/widgets/style.css 1.04 kB
build/wordcount/index.min.js 1.24 kB

compressed-size-action

With this commit, the 'setIsFullScreen' method is added back to the component. This time, it's added to its own separate 'useEffect' function.
@SiobhyB SiobhyB changed the title Fix BottomSheet.SubSheet/TextInput Conflict [RNMobile] Fix BottomSheet.SubSheet/TextInput Conflict Aug 3, 2021
@SiobhyB SiobhyB 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] Image Affects the Image Block [Type] Bug An existing feature does not function as intended labels Aug 3, 2021
@SiobhyB SiobhyB self-assigned this Aug 3, 2021
@SiobhyB SiobhyB marked this pull request as ready for review August 3, 2021 13:43
@SiobhyB SiobhyB requested a review from dcalhoun August 3, 2021 13:43
Copy link
Member

@dcalhoun dcalhoun left a comment

Choose a reason for hiding this comment

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

Great work on this! Thank you! I verified the original keyboard/focus issue no longer occurs on an iPhone SE and Samsung Galaxy S20.

However, I did notice additional typing issues that appear to have been present from the very original implementation, even before d650b4f was applied.

  1. Typing quickly can cause the cursor to jump to an incorrect location, which results in incorrect text being entered into the field.
  2. (Android only) After moving the cursor to a different location, tapping the delete/backspace key caused the cursor to jump backwards 1 character.
Android Bug Recording
Screen_Recording_20210803-095218.mp4

Given that these issues appear to be separate, I think we should merge this fix as-is. We can open a separate issue and fix. WDYT?

Comment on lines -20 to -23
const BottomSheetScreen = ( { onMount } ) => {
useEffect( onMount, [] );
return children ?? null;
};
Copy link
Member

@dcalhoun dcalhoun Aug 3, 2021

Choose a reason for hiding this comment

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

My understanding from the PR description and testing is that the creation of this component within the render of its parent BottomSheetSubSheet is the root cause of the issue, correct?

I am not suggesting we change this PR, but I wanted to share the below alternative that is closer to the original implementation, purely for discussion's sake. It would appear merely hoisting BottomSheetScreen out of BottomSheetSubSheet does fix the original keyboard/focus issue.

Alternative Approach
diff --git a/packages/components/src/mobile/bottom-sheet/sub-sheet/index.native.js b/packages/components/src/mobile/bottom-sheet/sub-sheet/index.native.js
index 8654dc918e..2af2c0f5da 100644
--- a/packages/components/src/mobile/bottom-sheet/sub-sheet/index.native.js
+++ b/packages/components/src/mobile/bottom-sheet/sub-sheet/index.native.js
@@ -11,17 +11,17 @@ import { createSlotFill, BottomSheetConsumer } from '@wordpress/components';
 
 const { Fill, Slot } = createSlotFill( 'BottomSheetSubSheet' );
 
+const BottomSheetScreen = ( { children, onMount } ) => {
+	useEffect( onMount, [] );
+	return children;
+};
+
 const BottomSheetSubSheet = ( {
 	children,
 	navigationButton,
 	showSheet,
 	isFullScreen,
 } ) => {
-	const BottomSheetScreen = ( { onMount } ) => {
-		useEffect( onMount, [] );
-		return children ?? null;
-	};
-
 	return (
 		<>
 			{ showSheet && (
@@ -33,7 +33,9 @@ const BottomSheetSubSheet = ( {
 									onMount={ () =>
 										setIsFullScreen( isFullScreen )
 									}
-								/>
+								>
+									{ children }
+								</BottomSheetScreen>
 							) }
 						</BottomSheetConsumer>
 					</SafeAreaView>

Edit: Updated the diff to showcase the difference between the original implementation, instead of the difference between this PR.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks for this, David! 🙇‍♀️ You're right on what I believe to be the root cause of this issue (i.e. the creation of the child component within the parent). I appreciate you sharing that alternative approach, as hoisting the component isn't something I'd have come up with by myself, so will add it to my knowledge bank going forward.

Are there any positives or negatives to either approach? I'm definitely open to learning and updating the PR if there is anything steering you towards or away from either approach. If it's the case that they're fairly similar, with no major advantages/disadvantages to one another, I'll go ahead to merge the current PR.

Copy link
Member

Choose a reason for hiding this comment

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

Are there any positives or negatives to either approach? I'm definitely open to learning and updating the PR if there is anything steering you towards or away from either approach. If it's the case that they're fairly similar, with no major advantages/disadvantages to one another, I'll go ahead to merge the current PR.

No, I wouldn't say there is a distinct positive or negative with either approach. It is merely differently structured code from my perspective.

That said, after reviewing this again, I believe this wrapping BottomSheetConsumer may be duplicative of the new useContext usage and unnecessary. I.e. we could likely remove BottomSheetConsumer altogether.

// React Context accessed via Consumer with function as a child 
<BottomSheetConsumer>
	{({ setIsFullScreen }) => {
		// ...
	}}
</BottomSheetConsumer>

// React Context accessed via useContext Hook
const { setIsFullScreen } = useContext(BottomSheetContext);

For an explanation as to why, both of the above are accessing the React Context object. The former is using the Context.Consumer approach. The latter is using the React Hook approach. Either is fine. I believe this project generally attempts to rely upon React Hooks now-a-days.

Currently, this PR has a lingering BottomSheetConsumer that is largely going unused.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Ah, excellent, that's clear, thanks for the explanation! I've gone ahead to remove code surrounding that unnecessary BottomSheetConsumer in 5232398 and b75e766. I also tested and can confirm the alt text settings still work with the update.

@dcalhoun
Copy link
Member

dcalhoun commented Aug 3, 2021

Siobhan added 2 commits August 3, 2021 18:05
'BottomSheetConsumer' is no longer necessary as we're now using 'useContext' to pull in 'setIsFullScreen'.

Further discussion here: #33845 (comment)
As 'BottomSheetConsumer' was removed in 5232398, 'children' no longer needs to be returned as part of a function. In fact, this results in an error.

With this commit, the function surrounding the reference to 'children' is removed.
@SiobhyB
Copy link
Contributor Author

SiobhyB commented Aug 3, 2021

Thank you for the review and surfacing those bugs, @dcalhoun 🙇‍♀️

I'll go ahead with the merge domino when the tests are complete, unless anything else comes up for me to address.

@SiobhyB SiobhyB merged commit 11101e2 into trunk Aug 3, 2021
@SiobhyB SiobhyB deleted the rnmobile/fix/broken-bottom-sheet-text-control branch August 3, 2021 18:29
@github-actions github-actions bot added this to the Gutenberg 11.3 milestone Aug 3, 2021
SiobhyB added a commit that referenced this pull request Aug 4, 2021
* Remove 'BottomSheetScreen' component

The 'BottomSheetScreen' component was introduced in the following commit in order to correct a render error related to the 'setIsFullScreen' method: d650b4f#diff-d16d37d09ff59dce57c087e978ac5536503cb1642ec2b0ecdba9536f5c695b95R20

The way the component's currently rendering is causing a conflict with the TextInput component, however.

With this commit, the component's removed, along with the 'setIsFullScreen' method (the method will be re-introduced in the following commits).

* Refactor 'setIsFullScreen' method

With this commit, the 'setIsFullScreen' method is added back to the component. This time, it's added to its own separate 'useEffect' function.

* Remove 'BottomSheetConsumer'

'BottomSheetConsumer' is no longer necessary as we're now using 'useContext' to pull in 'setIsFullScreen'.

Further discussion here: #33845 (comment)

* Refactor reference to 'children'

As 'BottomSheetConsumer' was removed in 5232398, 'children' no longer needs to be returned as part of a function. In fact, this results in an error.

With this commit, the function surrounding the reference to 'children' is removed.
SiobhyB added a commit that referenced this pull request Aug 4, 2021
* Release script: Update react-native-editor version to 1.58.0

* Release script: Update with changes from 'npm run core preios'

* Add 1.58 section to changelog

* Release script: Update react-native-editor version to 1.58.1

* Release script: Update with changes from 'npm run core preios'

* [Mobile] - Global styles: Check for undefined values and merge user colors (#33707)

* Fix: Mobile - Check for undefined variables and merge user colors before parsing

* Check for null values

* Update react-native-editor changelog

* [RNMobile][Embed block] Disable paragraph transform (#33745)

* Update react-native-editor changelog

* Release script: Update react-native-editor version to 1.58.2

* Release script: Update with changes from 'npm run core preios'

* [RNMobile] Fix BottomSheet.SubSheet/TextInput Conflict (#33845)

* Remove 'BottomSheetScreen' component

The 'BottomSheetScreen' component was introduced in the following commit in order to correct a render error related to the 'setIsFullScreen' method: d650b4f#diff-d16d37d09ff59dce57c087e978ac5536503cb1642ec2b0ecdba9536f5c695b95R20

The way the component's currently rendering is causing a conflict with the TextInput component, however.

With this commit, the component's removed, along with the 'setIsFullScreen' method (the method will be re-introduced in the following commits).

* Refactor 'setIsFullScreen' method

With this commit, the 'setIsFullScreen' method is added back to the component. This time, it's added to its own separate 'useEffect' function.

* Remove 'BottomSheetConsumer'

'BottomSheetConsumer' is no longer necessary as we're now using 'useContext' to pull in 'setIsFullScreen'.

Further discussion here: #33845 (comment)

* Refactor reference to 'children'

As 'BottomSheetConsumer' was removed in 5232398, 'children' no longer needs to be returned as part of a function. In fact, this results in an error.

With this commit, the function surrounding the reference to 'children' is removed.

* Update CHANGELOG

* Fix merge issues with CHANGELOG

Co-authored-by: Carlos Garcia <[email protected]>
Co-authored-by: Gerardo Pacheco <[email protected]>
Co-authored-by: Ceyhun Ozugur <[email protected]>
fluiddot added a commit that referenced this pull request Aug 12, 2021
* Release script: Update react-native-editor version to 1.58.0

* Release script: Update with changes from 'npm run core preios'

* Add 1.58 section to changelog

* Release script: Update react-native-editor version to 1.58.1

* Release script: Update with changes from 'npm run core preios'

* [Mobile] - Global styles: Check for undefined values and merge user colors (#33707)

* Fix: Mobile - Check for undefined variables and merge user colors before parsing

* Check for null values

* Update react-native-editor changelog

* [RNMobile][Embed block] Disable paragraph transform (#33745)

* Update react-native-editor changelog

* Release script: Update react-native-editor version to 1.58.2

* Release script: Update with changes from 'npm run core preios'

* [RNMobile] Fix BottomSheet.SubSheet/TextInput Conflict (#33845)

* Remove 'BottomSheetScreen' component

The 'BottomSheetScreen' component was introduced in the following commit in order to correct a render error related to the 'setIsFullScreen' method: d650b4f#diff-d16d37d09ff59dce57c087e978ac5536503cb1642ec2b0ecdba9536f5c695b95R20

The way the component's currently rendering is causing a conflict with the TextInput component, however.

With this commit, the component's removed, along with the 'setIsFullScreen' method (the method will be re-introduced in the following commits).

* Refactor 'setIsFullScreen' method

With this commit, the 'setIsFullScreen' method is added back to the component. This time, it's added to its own separate 'useEffect' function.

* Remove 'BottomSheetConsumer'

'BottomSheetConsumer' is no longer necessary as we're now using 'useContext' to pull in 'setIsFullScreen'.

Further discussion here: #33845 (comment)

* Refactor reference to 'children'

As 'BottomSheetConsumer' was removed in 5232398, 'children' no longer needs to be returned as part of a function. In fact, this results in an error.

With this commit, the function surrounding the reference to 'children' is removed.

* Update CHANGELOG

* Release script: Update react-native-editor version to 1.58.3

* Release script: Update with changes from 'npm run core preios'

* Rich text - toTree - Add optional chaining in replacements before accessing its type (#34020)

* Update CHANGELOG

* Remove CHANGELOG duplicated sections after merge

Co-authored-by: Siobhan <[email protected]>
Co-authored-by: Carlos Garcia <[email protected]>
Co-authored-by: Ceyhun Ozugur <[email protected]>
Co-authored-by: Siobhan Bamber <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Image Affects the Image Block Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change) [Type] Bug An existing feature does not function as intended
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Inputting text into Image Alt Field causes keyboard to be dismissed after every stroke
2 participants