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] FlatList inside the bottom-sheet #23873

Merged
merged 8 commits into from
Jul 29, 2020

Conversation

dratwas
Copy link
Contributor

@dratwas dratwas commented Jul 10, 2020

Description

In this PR i added a possibility to use FlatList inside Bottom-sheet w/o losing the swipe to close functionality (iOS) and w/o losing the optimization of FLatList.

Because we used the ScrollView to wrap content inside the BottomSheet we closed the optimization of FlatList. In this PR I added a prop called isChildrenScrollable and add ScrollView wrapper depends on it. I pass also all props that need to be passed to the nested FlatList by BottomSheetConsumer.

I demonstrated it on the inserter menu since it was a FlatList with scrollEnabled set to false.

How has this been tested?

  • Run app in develop mode
  • Open inserter
  • There should not be the warning WARN VirtualizedLists should never be nested inside plain ScrollViews with the same orientation - use another VirtualizedList-backed container instead. in the console

Types of changes

Add possibility to use FlatList inside bottom-sheet

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR.

@github-actions
Copy link

github-actions bot commented Jul 10, 2020

Size Change: -1.02 MB (88%) 🏆

Total Size: 1.16 MB

Filename Size Change
build/a11y/index.js 0 B -1.14 kB (0%)
build/annotations/index.js 0 B -3.67 kB (0%)
build/api-fetch/index.js 0 B -3.39 kB (0%)
build/autop/index.js 0 B -2.82 kB (0%)
build/blob/index.js 0 B -620 B (0%)
build/block-directory/index.js 0 B -7.67 kB (0%)
build/block-directory/style-rtl.css 953 B +9 B (0%)
build/block-directory/style.css 952 B +7 B (0%)
build/block-editor/index.js 0 B -115 kB (0%)
build/block-editor/style-rtl.css 10.8 kB +54 B (0%)
build/block-editor/style.css 10.8 kB +55 B (0%)
build/block-library/editor-rtl.css 7.63 kB +38 B (0%)
build/block-library/editor.css 7.63 kB +41 B (0%)
build/block-library/index.js 0 B -132 kB (0%)
build/block-library/style-rtl.css 7.83 kB +62 B (0%)
build/block-library/style.css 7.83 kB +62 B (0%)
build/block-serialization-default-parser/index.js 0 B -1.88 kB (0%)
build/block-serialization-spec-parser/index.js 0 B -3.1 kB (0%)
build/blocks/index.js 0 B -48.2 kB (0%)
build/components/index.js 0 B -199 kB (0%)
build/components/style-rtl.css 15.7 kB -170 B (1%)
build/components/style.css 15.7 kB -166 B (1%)
build/compose/index.js 0 B -9.67 kB (0%)
build/core-data/index.js 0 B -11.4 kB (0%)
build/data-controls/index.js 0 B -1.29 kB (0%)
build/data/index.js 0 B -8.46 kB (0%)
build/date/index.js 0 B -5.38 kB (0%)
build/deprecated/index.js 0 B -772 B (0%)
build/dom-ready/index.js 0 B -569 B (0%)
build/dom/index.js 0 B -3.23 kB (0%)
build/edit-navigation/index.js 0 B -10.8 kB (0%)
build/edit-post/index.js 0 B -304 kB (0%)
build/edit-post/style-rtl.css 5.61 kB +20 B (0%)
build/edit-post/style.css 5.61 kB +20 B (0%)
build/edit-site/index.js 0 B -16.6 kB (0%)
build/edit-site/style-rtl.css 3.06 kB +32 B (1%)
build/edit-site/style.css 3.06 kB +34 B (1%)
build/edit-widgets/index.js 0 B -9.35 kB (0%)
build/editor/index.js 0 B -45.1 kB (0%)
build/editor/style-rtl.css 3.8 kB +17 B (0%)
build/editor/style.css 3.79 kB +16 B (0%)
build/element/index.js 0 B -4.65 kB (0%)
build/escape-html/index.js 0 B -733 B (0%)
build/format-library/index.js 0 B -7.72 kB (0%)
build/hooks/index.js 0 B -2.13 kB (0%)
build/html-entities/index.js 0 B -622 B (0%)
build/i18n/index.js 0 B -3.56 kB (0%)
build/is-shallow-equal/index.js 0 B -709 B (0%)
build/keyboard-shortcuts/index.js 0 B -2.51 kB (0%)
build/keycodes/index.js 0 B -1.94 kB (0%)
build/list-reusable-blocks/index.js 0 B -3.12 kB (0%)
build/media-utils/index.js 0 B -5.32 kB (0%)
build/notices/index.js 0 B -1.79 kB (0%)
build/nux/index.js 0 B -3.4 kB (0%)
build/plugins/index.js 0 B -2.56 kB (0%)
build/primitives/index.js 0 B -1.4 kB (0%)
build/priority-queue/index.js 0 B -789 B (0%)
build/redux-routine/index.js 0 B -2.85 kB (0%)
build/rich-text/index.js 0 B -13.9 kB (0%)
build/server-side-render/index.js 0 B -2.71 kB (0%)
build/shortcode/index.js 0 B -1.7 kB (0%)
build/token-list/index.js 0 B -1.27 kB (0%)
build/url/index.js 0 B -4.06 kB (0%)
build/viewport/index.js 0 B -1.85 kB (0%)
build/warning/index.js 0 B -1.13 kB (0%)
build/wordcount/index.js 0 B -1.17 kB (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.min.js 1.14 kB 0 B
build/annotations/index.min.js 3.67 kB 0 B
build/api-fetch/index.min.js 3.44 kB 0 B
build/autop/index.min.js 2.82 kB 0 B
build/blob/index.min.js 620 B 0 B
build/block-directory/index.min.js 7.93 kB 0 B
build/block-editor/index.min.js 125 kB 0 B
build/block-library/index.min.js 133 kB 0 B
build/block-library/theme-rtl.css 728 B 0 B
build/block-library/theme.css 729 B 0 B
build/block-serialization-default-parser/index.min.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.min.js 3.1 kB 0 B
build/blocks/index.min.js 48.2 kB 0 B
build/components/index.min.js 200 kB 0 B
build/compose/index.min.js 9.68 kB 0 B
build/core-data/index.min.js 11.8 kB 0 B
build/data-controls/index.min.js 1.29 kB 0 B
build/data/index.min.js 8.45 kB 0 B
build/date/index.min.js 5.38 kB 0 B
build/deprecated/index.min.js 772 B 0 B
build/dom-ready/index.min.js 568 B 0 B
build/dom/index.min.js 3.23 kB 0 B
build/edit-navigation/index.min.js 10.9 kB 0 B
build/edit-navigation/style-rtl.css 1.08 kB 0 B
build/edit-navigation/style.css 1.08 kB 0 B
build/edit-post/index.min.js 304 kB 0 B
build/edit-site/index.min.js 17 kB 0 B
build/edit-widgets/index.min.js 9.38 kB 0 B
build/edit-widgets/style-rtl.css 2.45 kB 0 B
build/edit-widgets/style.css 2.45 kB 0 B
build/editor/editor-styles-rtl.css 537 B 0 B
build/editor/editor-styles.css 539 B 0 B
build/editor/index.min.js 45.3 kB 0 B
build/element/index.min.js 4.65 kB 0 B
build/escape-html/index.min.js 733 B 0 B
build/format-library/index.min.js 7.72 kB 0 B
build/format-library/style-rtl.css 547 B 0 B
build/format-library/style.css 548 B 0 B
build/hooks/index.min.js 2.13 kB 0 B
build/html-entities/index.min.js 621 B 0 B
build/i18n/index.min.js 3.56 kB 0 B
build/is-shallow-equal/index.min.js 711 B 0 B
build/keyboard-shortcuts/index.min.js 2.52 kB 0 B
build/keycodes/index.min.js 1.94 kB 0 B
build/list-reusable-blocks/index.min.js 3.11 kB 0 B
build/list-reusable-blocks/style-rtl.css 476 B 0 B
build/list-reusable-blocks/style.css 476 B 0 B
build/media-utils/index.min.js 5.33 kB 0 B
build/notices/index.min.js 1.79 kB 0 B
build/nux/index.min.js 3.4 kB 0 B
build/nux/style-rtl.css 671 B 0 B
build/nux/style.css 668 B 0 B
build/plugins/index.min.js 2.56 kB 0 B
build/primitives/index.min.js 1.41 kB 0 B
build/priority-queue/index.min.js 789 B 0 B
build/redux-routine/index.min.js 2.85 kB 0 B
build/rich-text/index.min.js 13.9 kB 0 B
build/server-side-render/index.min.js 2.71 kB 0 B
build/shortcode/index.min.js 1.7 kB 0 B
build/token-list/index.min.js 1.27 kB 0 B
build/url/index.min.js 4.06 kB 0 B
build/viewport/index.min.js 1.85 kB 0 B
build/warning/index.min.js 1.14 kB 0 B
build/wordcount/index.min.js 1.17 kB 0 B

compressed-size-action

@dratwas dratwas marked this pull request as ready for review July 13, 2020 08:29
@dratwas dratwas requested a review from mkevins July 13, 2020 08:30
Copy link
Contributor

@mkevins mkevins left a comment

Choose a reason for hiding this comment

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

I tested this via the steps described on Android (Pixel 3a) and iOS (via simulator iPhone 11 Pro), and the warning is no longer logged. I tested out the bottomsheet via the inserter, as well as some of the more complex flows, such as the color settings in button, and mostly everything works as expected.

Also, I've tested this via inclusion of the changeset in a draft PR here: #23922, and it seems to be working there as well.

However, I noticed one odd regression in the scroll behavior of the inserter: when the drag start happens between the buttons, the gesture is lost:

Swipe gesture is lost between buttons

I also encountered a subtle unrelated bug while testing (also observed on master), noting here since there is related work underway with navigation:

In the colors subsheet, after using the "soft" back button (the one in the subsheet header), two button presses are required to dismiss the main modal via the hardware back button:

Back button requires two presses after using "soft" back button in subsheet

@dratwas
Copy link
Contributor Author

dratwas commented Jul 20, 2020

Hey @mkevins thanks for your review :)

However, I noticed one odd regression in the scroll behavior of the inserter: when the drag start happens between the buttons, the gesture is lost:

I already fixed it, could you please check it one more time?

In the colors subsheet, after using the "soft" back button (the one in the subsheet header), two button presses are required to dismiss the main modal via the hardware back button:

Thanks for reporting, i already reimplemented the back button functionality and it seems to work on the navigation PR

Hey, @lukewalczak 👋 , could please review this as well? :)

Copy link
Contributor

@mkevins mkevins left a comment

Choose a reason for hiding this comment

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

Tested again after the latest fix, and the gesture is no longer lost between buttons 🎉 . LGTM!

@lukewalczak
Copy link
Member

I've noticed one regression in an inserter items layout, which should be left-aligned. To illustrate I attached screenshots:

before after changes
Screenshot 2020-07-23 at 09 18 19 Screenshot 2020-07-23 at 09 18 02

@dratwas
Copy link
Contributor Author

dratwas commented Jul 27, 2020

Thanks @lukewalczak for your report! I already fixed that issue. I also added the correct padding bottom to the inserter menu. Could you please check it one more time? :)

@dratwas dratwas merged commit 71bf1b5 into master Jul 29, 2020
@dratwas dratwas deleted the rnmobile/bottom-sheet-flat-list branch July 29, 2020 10:25
@github-actions github-actions bot added this to the Gutenberg 8.7 milestone Jul 29, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants