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] Simplify media insertion flow Part 1 - redux changes #29546

Merged

Conversation

jd-alexander
Copy link
Contributor

@jd-alexander jd-alexander commented Mar 4, 2021

gutenberg-mobile PR wordpress-mobile/gutenberg-mobile#2700

Description

These changes are related to the PR #25031 that is being broken down into separate PRs for easier testing and review.

Once this PR has been approved, we can merge the other two PRs into this one and then merge all the changes into trunk.

The gutenberg-mobile PR wordpress-mobile/gutenberg-mobile#2700 contains a temporary ref to the last PR for testing purposes.

The main goal of this PR is to introduce changes to the native redux store behavior that will facilitate the storing of the last block that was inserted i.e the last block the user clicked on the Inserter menu. This solution was utilized so that a Image, Video or Gallery would be able to query the store for the clientId of the last block inserted if there is a match then there can be a resulting action.

How has this been tested?

  1. These changes were primarily tested using the unit tests that are included within the PR by running npm run native test.
  2. Subsequent PRs that implement the behavior at a Component level will showcase that the functionality works as expected.

Types of changes

Changes were made to the native variants of the actions, reducer, and selectors.

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.

@jd-alexander jd-alexander added the Mobile App - i.e. Android or iOS Native mobile impl of the block editor. (Note: used in scripts, ping mobile folks to change) label Mar 4, 2021
@github-actions
Copy link

github-actions bot commented Mar 4, 2021

Size Change: +144 B (0%)

Total Size: 1.46 MB

Filename Size Change
build/block-editor/index.js 130 kB +114 B (0%)
build/block-library/index.js 153 kB +30 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.78 kB 0 B
build/api-fetch/index.js 3.41 kB 0 B
build/autop/index.js 2.83 kB 0 B
build/blob/index.js 664 B 0 B
build/block-directory/index.js 8.62 kB 0 B
build/block-directory/style-rtl.css 1 kB 0 B
build/block-directory/style.css 1.01 kB 0 B
build/block-editor/style-rtl.css 12.6 kB 0 B
build/block-editor/style.css 12.6 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 503 B 0 B
build/block-library/blocks/button/style.css 503 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 368 B 0 B
build/block-library/blocks/buttons/style.css 368 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 436 B 0 B
build/block-library/blocks/columns/style.css 435 B 0 B
build/block-library/blocks/cover/editor-rtl.css 605 B 0 B
build/block-library/blocks/cover/editor.css 605 B 0 B
build/block-library/blocks/cover/style-rtl.css 1.23 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 175 B 0 B
build/block-library/blocks/file/editor.css 174 B 0 B
build/block-library/blocks/file/style-rtl.css 248 B 0 B
build/block-library/blocks/file/style.css 248 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.09 kB 0 B
build/block-library/blocks/gallery/style.css 1.09 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/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 476 B 0 B
build/block-library/blocks/image/style.css 478 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 398 B 0 B
build/block-library/blocks/legacy-widget/editor.css 399 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 191 B 0 B
build/block-library/blocks/media-text/editor.css 191 B 0 B
build/block-library/blocks/media-text/style-rtl.css 535 B 0 B
build/block-library/blocks/media-text/style.css 532 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 597 B 0 B
build/block-library/blocks/navigation-link/editor.css 597 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 1.07 kB 0 B
build/block-library/blocks/navigation-link/style.css 1.07 kB 0 B
build/block-library/blocks/navigation/editor-rtl.css 1.24 kB 0 B
build/block-library/blocks/navigation/editor.css 1.24 kB 0 B
build/block-library/blocks/navigation/style-rtl.css 272 B 0 B
build/block-library/blocks/navigation/style.css 271 B 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 239 B 0 B
build/block-library/blocks/page-list/editor.css 240 B 0 B
build/block-library/blocks/page-list/style-rtl.css 167 B 0 B
build/block-library/blocks/page-list/style.css 167 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 250 B 0 B
build/block-library/blocks/post-comments-form/style.css 250 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 100 B 0 B
build/block-library/blocks/post-featured-image/style.css 100 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 83 B 0 B
build/block-library/blocks/query-loop/editor.css 82 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 810 B 0 B
build/block-library/blocks/query/editor.css 809 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 796 B 0 B
build/block-library/blocks/social-links/editor.css 795 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 402 B 0 B
build/block-library/blocks/table/style.css 402 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 552 B 0 B
build/block-library/blocks/template-part/editor.css 551 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 568 B 0 B
build/block-library/blocks/video/editor.css 569 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.31 kB 0 B
build/block-library/common.css 1.31 kB 0 B
build/block-library/editor-rtl.css 9.79 kB 0 B
build/block-library/editor.css 9.78 kB 0 B
build/block-library/reset-rtl.css 502 B 0 B
build/block-library/reset.css 503 B 0 B
build/block-library/style-rtl.css 9.43 kB 0 B
build/block-library/style.css 9.44 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.87 kB 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/blocks/index.js 48.6 kB 0 B
build/components/index.js 285 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 11.6 kB 0 B
build/core-data/index.js 17.2 kB 0 B
build/customize-widgets/index.js 8.25 kB 0 B
build/customize-widgets/style-rtl.css 630 B 0 B
build/customize-widgets/style.css 631 B 0 B
build/data-controls/index.js 836 B 0 B
build/data/index.js 8.87 kB 0 B
build/date/index.js 31.9 kB 0 B
build/deprecated/index.js 787 B 0 B
build/dom-ready/index.js 576 B 0 B
build/dom/index.js 5.12 kB 0 B
build/edit-navigation/index.js 17 kB 0 B
build/edit-navigation/style-rtl.css 2.86 kB 0 B
build/edit-navigation/style.css 2.86 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 339 kB 0 B
build/edit-post/style-rtl.css 6.99 kB 0 B
build/edit-post/style.css 6.98 kB 0 B
build/edit-site/index.js 28.7 kB 0 B
build/edit-site/style-rtl.css 4.9 kB 0 B
build/edit-site/style.css 4.89 kB 0 B
build/edit-widgets/index.js 16.7 kB 0 B
build/edit-widgets/style-rtl.css 2.97 kB 0 B
build/edit-widgets/style.css 2.98 kB 0 B
build/editor/index.js 42.7 kB 0 B
build/editor/style-rtl.css 3.92 kB 0 B
build/editor/style.css 3.92 kB 0 B
build/element/index.js 4.62 kB 0 B
build/escape-html/index.js 735 B 0 B
build/format-library/index.js 6.77 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 2.28 kB 0 B
build/html-entities/index.js 623 B 0 B
build/i18n/index.js 4.04 kB 0 B
build/is-shallow-equal/index.js 699 B 0 B
build/keyboard-shortcuts/index.js 2.53 kB 0 B
build/keycodes/index.js 1.95 kB 0 B
build/list-reusable-blocks/index.js 3.19 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 5.39 kB 0 B
build/notices/index.js 1.85 kB 0 B
build/nux/index.js 3.42 kB 0 B
build/nux/style-rtl.css 731 B 0 B
build/nux/style.css 727 B 0 B
build/plugins/index.js 2.95 kB 0 B
build/primitives/index.js 1.42 kB 0 B
build/priority-queue/index.js 791 B 0 B
build/react-i18n/index.js 1.45 kB 0 B
build/redux-routine/index.js 2.83 kB 0 B
build/reusable-blocks/index.js 3.8 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 13.5 kB 0 B
build/server-side-render/index.js 2.6 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/url/index.js 3.01 kB 0 B
build/viewport/index.js 1.85 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.22 kB 0 B

compressed-size-action

@jd-alexander jd-alexander changed the title [RNMobile] Simplify image insertion flow redux changes [RNMobile] Simplify media insertion flow redux changes Mar 4, 2021
@jd-alexander jd-alexander changed the title [RNMobile] Simplify media insertion flow redux changes [RNMobile] Simplify media insertion flow Part 1 - redux changes Mar 4, 2021
@jd-alexander jd-alexander marked this pull request as ready for review March 4, 2021 06:05
Copy link
Contributor

@chipsnyder chipsnyder left a comment

Choose a reason for hiding this comment

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

This looks good to me. I don't have a strong performance, either way, regarding @guarani's suggestion so I'll leave that for others to comment on.

@guarani
Copy link
Contributor

guarani commented Mar 9, 2021

This looks good to me. I don't have a strong performance, either way, regarding @guarani's suggestion so I'll leave that for others to comment on.

I'm totally happy with the way it is, I was just curious 👍 (so don't that comment hold this PR back @jd-alexander! 😄) I'm reviewing the other PRs now.

@guarani guarani self-requested a review March 9, 2021 13:47
Copy link
Contributor

@guarani guarani left a comment

Choose a reason for hiding this comment

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

LGTM :)

@guarani
Copy link
Contributor

guarani commented Mar 9, 2021

BTW, the failing iOS E2E tests might have been fixed by #29589, so if you update with the latest from trunk, the build might pass 🤞

@guarani
Copy link
Contributor

guarani commented Mar 9, 2021

BTW, the failing iOS E2E tests might have been fixed by #29589, so if you update with the latest from trunk, the build might pass 🤞

There might still be issues with these tests 😞

@guarani
Copy link
Contributor

guarani commented Mar 12, 2021

BTW, the failing iOS E2E tests might have been fixed by #29589, so if you update with the latest from trunk, the build might pass 🤞

There might still be issues with these tests 😞

This PR looks like it might have fixed the flaky tests, so this might need updating from trunk.

* added autoOpenMediaUpload prop to the MediaPlaceholder

* Added the auto-opening capabilities to the MediaUpload component.

* Added documentation for the new autoOpenMediaUpload prop

* renamed autoOpenMediaUpload to autoOpen in the MediaUpload component.

* [RNMobile] Simplify media insertion flow - Part 3 component integration (#29548)

* Track the clientId of the block that is inserted.

* implemented auto opening utilizing last block inserted from the store

* added dismissal support for the auto opening picker to the UI tests.

* Updated Dismiss button in closePicker function to Cancel
@jd-alexander jd-alexander requested a review from ellatrix as a code owner March 16, 2021 23:58
@jd-alexander
Copy link
Contributor Author

I just noticed the log contains a test failure due to changes made to the web gallery component. The error is in gallery.test.js

Expected mock function not to be called but it was called with:
["TypeError: (0 , o(...).wasBlockJustInserted) is not a function  

I have started looking into it but I am not too sure what the resolution is because I am not familiar with the web side of e2e testing. I will pull in someone else if I don't see any clues tomorrow.

@jd-alexander
Copy link
Contributor Author

jd-alexander commented Mar 17, 2021

Hi @ockham 👋🏾 would you be able to take a look at these failing e2e test and offer any guidance on how it could be resolved?

When I was searching for clues in the repo, I saw where you had resolved a similar issue a while back.

The current issue in these set of tests is

Expected mock function not to be called but it was called with:
["TypeError: (0 , o(...).wasBlockJustInserted) is not a function  

wasBlockJustInserted is a new selector that was added to the store in .native.js files.

Back story:

This PR introduces changes that allow several media related blocks to auto-open the MediaUpload component when inserted. ( Ignore the large diff, this is a base PR that contains two others) One of these blocks is the gallery block, and the behavior to make this work was added to the edit.js file since, we share it with native. Functionality was added to the redux store and used in the gallery block as seen here.. Since the changes touched the web variant of the gallery component, it seems to have broken several e2e tests that utilize the gallery component.

I am wondering if there's some form of e2e fixture configurations that contains the jest mocks that can be utilized in these tests but so far I wasn't able to find them. Let me know if you have any ideas. Thanks much!

@ockham
Copy link
Contributor

ockham commented Mar 19, 2021

Hi @ockham 👋🏾 would you be able to take a look at these failing e2e test and offer any guidance on how it could be resolved?

When I was searching for clues in the repo, I saw where you had resolved a similar issue a while back.

The current issue in these set of tests is

Expected mock function not to be called but it was called with:
["TypeError: (0 , o(...).wasBlockJustInserted) is not a function  

wasBlockJustInserted is a new selector that was added to the store in .native.js files.

I'm afraid that the issue I was facing the other day is of a fairly different kind. While they both share the "Expected mock function not to be called but it was called with..." part, that only tells us that a function was run that tests didn't expect to be run. In other words, the only thing both issues have in common is the way they are caught/reported.

In "my" case, that unexpected function call was a block transformation ("Block successfully updated for %s"), whereas here, it's an actual TypeError in the code. So I'm afraid what helped me track the issue down back then doesn't really apply here 😕

@jd-alexander
Copy link
Contributor Author

Thanks for the feedback @ockham

In "my" case, that unexpected function call was a block transformation ("Block successfully updated for %s"), whereas here, it's an actual TypeError in the code.

This helps, as it confirms the comments made by @youknowriad that the gallery block on the web did not expect the function because it is not properly declared there.

I will work on making the changes needed to get things compliant.

@jd-alexander
Copy link
Contributor Author

A refactor of the redux changes introduced in this PR is underway here #30123 Once the unit tests and code cleanups have been completed in that PR it will be merged back into this one, since this base PR targets trunk

jd-alexander and others added 4 commits March 31, 2021 10:11
* Moved the last block inserted actions from editor to the block-editor

* Moved the last block inserted reducer from editor to the block-editor

* Moved the last block inserted selector from editor to the block-editor

* Fixed es-lint error.

* Moved last block inserted actions test from editor to the block-editor

* Moved last block inserted reducer test from editor to the block-editor

* Moved last block inserted selector test from editor to the block-editor

* Moved all calls to last block inserted from editor to block-editor

* last block inserter usage in menu native migrated : editor to block-editor

* [RNMobile] Refactor: Simplify media flow redux migration (#30238)

* Add meta argument to insertBlock action

* Add inserter menu source

* Update last block inserted reducer

Instead of using specific actions for tracking the last block inserted, it uses the actions related to the insertion flow.

* Add get last block inserted selector

* Refactor gallery edit component

withSelect and withDispatch logic has been refactored to use useSelect and useDispatch hooks

* Refactor image edit component

wasBlockJustInserted is now calculated with getLastBlockInserted

* Refactor video edit component

wasBlockJustInserted is now calculated with getLastBlockInserted

* Fix reset blocks action in last block inserted reducer

* Add source param to wasBlockJustInserted selector

* Simplify withSelect part of video block

* Removed add/clear last block inserted actions and tests due to refactor

* Removed addLastBlockInserted from the insert menu's onPress.

* rewrote the tests for the lastBlockInserted reducer.

* rewrote tests for wasBlockJustInserted selector.

* optimized clientId

* removed unneeded clientId.

* put the expectedSource inside the test meta object.

* used expectedState insted {} for state related tests.

* used expectedState instead {} for state related tests.

* removed parentheses from describe name.

* return the same state instead of empty state.

* made changes to test name so its intent is clearer.

* made the insertion source optional.

Co-authored-by: Carlos Garcia <fluiddot@gmail.com>
@jd-alexander
Copy link
Contributor Author

@fluiddot @guarani this is ready for the final review so that it can be merged. @guarani @fluiddot already reviewed the redux changes, and I also reviewed the improvements he made. Nonetheless, you can still give a second set of eyes and share any findings you may have. Apart from that, I think this can be merged once no other issues have been found.

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 tested the changes on Android (device: Samsung Galaxy S20 FE) and iOS (device: iPhone 11) and works nice!

I didn't approve the PR because I found out a potential change, let me know what you think about it. Apart from that this PR is ready 🟢 , awesome work @jd-alexander 💯 !

export function lastBlockInserted( state = {}, action ) {
switch ( action.type ) {
case 'INSERT_BLOCKS':
if ( ! action.updateSelection || ! action.blocks.length ) {
Copy link
Contributor

Choose a reason for hiding this comment

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

After a second thought, I think that we probably shouldn't include the ! action.updateSelection condition here. The last block inserted should be updated independently on if the block gets selected upon insertion, right?

Originally I thought that this was necessary because we only wanted to show the media picker when the block is selected, but I realised that we're already checking that in the components (example), what do you think?

Copy link
Contributor Author

@jd-alexander jd-alexander Apr 16, 2021

Choose a reason for hiding this comment

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

After a second thought, I think that we probably shouldn't include the ! action.updateSelection condition here. The last block inserted should be updated independently on if the block gets selected upon insertion, right?

when you say "updated independently on if the block gets selected upon insertion" what exactly do you mean? I want to ensure that I understand you clearly :)

Originally I thought that this was necessary because we only wanted to show the media picker when the block is selected, but I realised that we're already checking that in the components (example), what do you think?

Makes sense! I checked the linked example and it went to the withSelect in the Gallery component, so I am assuming that you are referring to the isSelected usage there. If that's the case, yes, the isSelected behavior was added before the redux approach was introduced, so if it's better to keep the selection logic within the reducer, I am not against that, especially if it will be consistent with other behavior in the reducer.

Another question, I wanted to add to the discussion. In which cases would the block be inserted and it wouldn't be a selection. I removed isSelected and updateSelection from the code in my local environs and the functionality still worked. I will look more into this tomorrow, but I just wanted to share my thoughts here, so you can add any ideas you may have.

Copy link
Contributor

Choose a reason for hiding this comment

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

when you say "updated independently on if the block gets selected upon insertion" what exactly do you mean? I want to ensure that I understand you clearly :)

Oh sorry if I wasn't too clear, what I meant is that if this slice of the state contains the last block inserted, it makes sense that it gets updated for any block that is inserted, including the ones with the param updateSelection as false. From a consistence POV, I would expect that if I insert a block even if it doesn't get automatically selected (via the updateSelection action param), it would be set as the last block inserted.

Makes sense! I checked the linked example and it went to the withSelect in the Gallery component, so I am assuming that you are referring to the isSelected usage there. If that's the case, yes, the isSelected behavior was added before the redux approach was introduced, so if it's better to keep the selection logic within the reducer, I am not against that, especially if it will be consistent with other behavior in the reducer.

Yeah exactly, I was referring to the isSelected usage when calculating the value to pass to autoOpenMediaUpload prop.

In my opinion I think it would make more sense to keep the isSelected usage as we have currently in the components and update the lastBlockInserted reducer.

Another question, I wanted to add to the discussion. In which cases would the block be inserted and it wouldn't be a selection. I removed isSelected and updateSelection from the code in my local environs and the functionality still worked. I will look more into this tomorrow, but I just wanted to share my thoughts here, so you can add any ideas you may have.

I think it's a uncommon case but looks like there's at least one place where it's being used in the Jetpack project:
https://github.com/Automattic/jetpack/blob/5b637a82a9836213f066809cab550ce3590921cb/projects/plugins/jetpack/extensions/blocks/anchor-fm/editor.js#L48

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Oh sorry if I wasn't too clear, what I meant is that if this slice of the state contains the last block inserted, it makes sense that it gets updated for any block that is inserted, including the ones with the param updateSelection as false. From a consistence POV, I would expect that if I insert a block even if it doesn't get automatically selected (via the updateSelection action param), it would be set as the last block inserted.

Ah I get what you are saying now. Thanks for the clarification 🙇🏾

In my opinion I think it would make more sense to keep the isSelected usage as we have currently in the components and update the lastBlockInserted reducer.

I agree with this as well after gaining a deeper understanding due to your clarifications above. I will make the relevant changes to support this.

I think it's a uncommon case but looks like there's at least one place where it's being used in the Jetpack project:
https://github.com/Automattic/jetpack/blob/5b637a82a9836213f066809cab550ce3590921cb/projects/plugins/jetpack/extensions/blocks/anchor-fm/editor.js#L48

Good find 😉 Thanks for checking Jetpack. If I had a sleuthing badge 🔍 I would definitely give you one 😄

Copy link
Contributor

@fluiddot fluiddot Apr 19, 2021

Choose a reason for hiding this comment

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

I agree with this as well after gaining a deeper understanding due to your clarifications above. I will make the relevant changes to support this.

Nice! Thanks for making the changes, I'll be watching them so we can have this PR ready as soon as possible.

Good find 😉 Thanks for checking Jetpack. If I had a sleuthing badge 🔍 I would definitely give you one 😄

Thank you very much! 🕵️😄

@jd-alexander
Copy link
Contributor Author

I made the requested changes here bb98f4c @fluiddot so this is ready for another review. 🙇🏾

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 🎊 !

Tested on iPhone 11 (iOS 14.2) and Samsung Galaxy S20 FE 5G (Android 10).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
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.

6 participants