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

Try: Sync block context with store #61895

Closed
wants to merge 10 commits into from

Conversation

SantosGuillamot
Copy link
Contributor

@SantosGuillamot SantosGuillamot commented May 23, 2024

What?

The idea behind this pull request is to sync the block context in the store.

Why?

To be able to access it without using a hook for uses cases like bindings modifying the block attributes.

How?

Creating a new action updateBlockContext to modify the block context in the store and a selector getBlockContext to retrieve it.

Apart from that, I'm syncing the context in the edit component using useContext.

Testing Instructions

  • In any block, use the getBlockContext selector and check that the block context is present.

useDispatch( blockEditorStore ).updateBlockContext(
clientId,
blockContext
);
Copy link
Member

Choose a reason for hiding this comment

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

Copy link
Member

Choose a reason for hiding this comment

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

Also, we shouldn't do this for every block, we should only do if where context it provided

Copy link
Member

@ellatrix ellatrix May 23, 2024

Choose a reason for hiding this comment

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

Actually, looking at https://github.com/WordPress/gutenberg/blob/trunk/packages/block-editor/src/components/inner-blocks/use-block-context.js, it appears block context is just a selector? So we could derive the whole thing the getBlockAttributes selector?

Copy link
Member

Choose a reason for hiding this comment

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

So in getBlockAttributes, we should loop up the parents, see if they provide context, and if so set their attributes as context?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good points 🙂

I thought we needed to get the value from useContext( BlockContext ), as you were doing here, but maybe you are right and we can do that looping up the parents. I can give that a try.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

That wouldn't include context provided by BlockContextProvider that doesn't belong to a block, right?

I'm thinking that, if I am not mistaken, we are providing postId and postType as context in the post template: link. But that wouldn't be available iterating through the parents, right?

Copy link
Member

Choose a reason for hiding this comment

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

Hm, I guess then it is easier to sync the context. I'd sync it inside of BlockContextProvider. Then create a selector that gets the context which would loop through the parents and finds/merges the context.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Do you mean something like this try?

Copy link

github-actions bot commented May 23, 2024

Size Change: -5.49 kB (-0.31%)

Total Size: 1.74 MB

Filename Size Change
build/block-editor/index.min.js 260 kB +171 B (+0.07%)
build/block-editor/style-rtl.css 15.5 kB -5 B (-0.03%)
build/block-editor/style.css 15.5 kB -5 B (-0.03%)
build/block-library/blocks/audio/theme-rtl.css 126 B -7 B (-5.26%)
build/block-library/blocks/audio/theme.css 126 B -7 B (-5.26%)
build/block-library/blocks/block/editor-rtl.css 0 B -277 B (removed) 🏆
build/block-library/blocks/block/editor.css 0 B -277 B (removed) 🏆
build/block-library/blocks/button/editor-rtl.css 307 B -108 B (-26.02%) 🎉
build/block-library/blocks/button/editor.css 307 B -107 B (-25.85%) 🎉
build/block-library/blocks/button/style-rtl.css 539 B -88 B (-14.04%) 👏
build/block-library/blocks/button/style.css 539 B -87 B (-13.9%) 👏
build/block-library/blocks/cover/style-rtl.css 1.67 kB -31 B (-1.82%)
build/block-library/blocks/cover/style.css 1.66 kB -31 B (-1.83%)
build/block-library/blocks/embed/theme-rtl.css 126 B -7 B (-5.26%)
build/block-library/blocks/embed/theme.css 126 B -7 B (-5.26%)
build/block-library/blocks/gallery/editor-rtl.css 962 B +6 B (+0.63%)
build/block-library/blocks/gallery/editor.css 965 B +5 B (+0.52%)
build/block-library/blocks/image/style-rtl.css 1.52 kB -77 B (-4.82%)
build/block-library/blocks/image/style.css 1.52 kB -75 B (-4.71%)
build/block-library/blocks/image/theme-rtl.css 137 B +4 B (+3.01%)
build/block-library/blocks/image/theme.css 137 B +4 B (+3.01%)
build/block-library/blocks/latest-posts/editor-rtl.css 205 B -8 B (-3.76%)
build/block-library/blocks/latest-posts/editor.css 205 B -7 B (-3.3%)
build/block-library/blocks/latest-posts/style-rtl.css 512 B +18 B (+3.64%)
build/block-library/blocks/latest-posts/style.css 512 B +18 B (+3.64%)
build/block-library/blocks/pullquote/style-rtl.css 344 B -10 B (-2.82%)
build/block-library/blocks/pullquote/style.css 343 B -10 B (-2.83%)
build/block-library/blocks/pullquote/theme-rtl.css 168 B -6 B (-3.45%)
build/block-library/blocks/pullquote/theme.css 168 B -6 B (-3.45%)
build/block-library/blocks/quote/theme-rtl.css 223 B -10 B (-4.29%)
build/block-library/blocks/quote/theme.css 226 B -9 B (-3.83%)
build/block-library/blocks/separator/editor-rtl.css 99 B -47 B (-32.19%) 🎉
build/block-library/blocks/separator/editor.css 99 B -47 B (-32.19%) 🎉
build/block-library/blocks/separator/style-rtl.css 248 B +9 B (+3.77%)
build/block-library/blocks/separator/style.css 248 B +9 B (+3.77%)
build/block-library/blocks/site-logo/style-rtl.css 218 B +14 B (+6.86%) 🔍
build/block-library/blocks/site-logo/style.css 218 B +14 B (+6.86%) 🔍
build/block-library/blocks/site-title/editor-rtl.css 124 B +8 B (+6.9%) 🔍
build/block-library/blocks/site-title/editor.css 124 B +8 B (+6.9%) 🔍
build/block-library/blocks/site-title/style-rtl.css 70 B +13 B (+22.81%) 🚨
build/block-library/blocks/site-title/style.css 70 B +13 B (+22.81%) 🚨
build/block-library/blocks/social-link/editor-rtl.css 335 B +11 B (+3.4%)
build/block-library/blocks/social-link/editor.css 335 B +11 B (+3.4%)
build/block-library/blocks/social-links/editor-rtl.css 683 B +7 B (+1.04%)
build/block-library/blocks/social-links/editor.css 681 B +6 B (+0.89%)
build/block-library/blocks/social-links/style-rtl.css 1.51 kB +15 B (+1%)
build/block-library/blocks/social-links/style.css 1.51 kB +15 B (+1%)
build/block-library/blocks/table/theme-rtl.css 146 B -6 B (-3.95%)
build/block-library/blocks/table/theme.css 146 B -6 B (-3.95%)
build/block-library/blocks/tag-cloud/style-rtl.css 265 B +14 B (+5.58%) 🔍
build/block-library/blocks/tag-cloud/style.css 266 B +13 B (+5.14%) 🔍
build/block-library/blocks/template-part/theme-rtl.css 112 B +5 B (+4.67%) 🔍
build/block-library/blocks/template-part/theme.css 112 B +5 B (+4.67%) 🔍
build/block-library/blocks/video/theme-rtl.css 126 B -7 B (-5.26%)
build/block-library/blocks/video/theme.css 126 B -7 B (-5.26%)
build/block-library/editor-rtl.css 12 kB -248 B (-2.03%)
build/block-library/editor.css 12 kB -252 B (-2.06%)
build/block-library/index.min.js 218 kB -3 B (0%)
build/block-library/style-rtl.css 14.6 kB -169 B (-1.14%)
build/block-library/style.css 14.6 kB -164 B (-1.11%)
build/block-library/theme-rtl.css 703 B -4 B (-0.57%)
build/block-library/theme.css 706 B -7 B (-0.98%)
build/components/index.min.js 222 kB -90 B (-0.04%)
build/edit-post/index.min.js 14.5 kB -164 B (-1.12%)
build/edit-post/style-rtl.css 2.45 kB -236 B (-8.79%)
build/edit-post/style.css 2.44 kB -237 B (-8.84%)
build/edit-site/index.min.js 210 kB -2.81 kB (-1.32%)
build/edit-site/style-rtl.css 12.2 kB -40 B (-0.33%)
build/edit-site/style.css 12.2 kB -41 B (-0.34%)
build/editor/index.min.js 92.1 kB -448 B (-0.48%)
build/editor/style-rtl.css 8.78 kB +172 B (+2%)
build/editor/style.css 8.78 kB +173 B (+2.01%)
build/interactivity/debug.min.js 16.4 kB +24 B (+0.15%)
build/interactivity/index.min.js 13.3 kB +23 B (+0.17%)
build/patterns/index.min.js 6.51 kB +3 B (+0.05%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 955 B
build/annotations/index.min.js 2.27 kB
build/api-fetch/index.min.js 2.32 kB
build/autop/index.min.js 2.1 kB
build/blob/index.min.js 578 B
build/block-directory/index.min.js 7.29 kB
build/block-directory/style-rtl.css 1.03 kB
build/block-directory/style.css 1.03 kB
build/block-editor/content-rtl.css 4.58 kB
build/block-editor/content.css 4.57 kB
build/block-editor/default-editor-styles-rtl.css 395 B
build/block-editor/default-editor-styles.css 395 B
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 90 B
build/block-library/blocks/archives/style.css 90 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 122 B
build/block-library/blocks/audio/style.css 122 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 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 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 421 B
build/block-library/blocks/columns/style.css 421 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-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 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-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 671 B
build/block-library/blocks/cover/editor.css 674 B
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 86 B
build/block-library/blocks/details/style.css 86 B
build/block-library/blocks/embed/editor-rtl.css 312 B
build/block-library/blocks/embed/editor.css 312 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/file/editor-rtl.css 326 B
build/block-library/blocks/file/editor.css 327 B
build/block-library/blocks/file/style-rtl.css 280 B
build/block-library/blocks/file/style.css 281 B
build/block-library/blocks/file/view.min.js 324 B
build/block-library/blocks/footnotes/style-rtl.css 201 B
build/block-library/blocks/footnotes/style.css 199 B
build/block-library/blocks/form-input/editor-rtl.css 227 B
build/block-library/blocks/form-input/editor.css 227 B
build/block-library/blocks/form-input/style-rtl.css 343 B
build/block-library/blocks/form-input/style.css 343 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 340 B
build/block-library/blocks/form-submission-notification/editor.css 340 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 471 B
build/block-library/blocks/freeform/editor-rtl.css 2.61 kB
build/block-library/blocks/freeform/editor.css 2.61 kB
build/block-library/blocks/gallery/style-rtl.css 1.72 kB
build/block-library/blocks/gallery/style.css 1.72 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 403 B
build/block-library/blocks/group/editor.css 403 B
build/block-library/blocks/group/style-rtl.css 103 B
build/block-library/blocks/group/style.css 103 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 189 B
build/block-library/blocks/heading/style.css 189 B
build/block-library/blocks/html/editor-rtl.css 336 B
build/block-library/blocks/html/editor.css 337 B
build/block-library/blocks/image/editor-rtl.css 891 B
build/block-library/blocks/image/editor.css 891 B
build/block-library/blocks/image/view.min.js 1.54 kB
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 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 306 B
build/block-library/blocks/media-text/editor.css 305 B
build/block-library/blocks/media-text/style-rtl.css 505 B
build/block-library/blocks/media-text/style.css 503 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 668 B
build/block-library/blocks/navigation-link/editor.css 669 B
build/block-library/blocks/navigation-link/style-rtl.css 193 B
build/block-library/blocks/navigation-link/style.css 192 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation/editor-rtl.css 2.26 kB
build/block-library/blocks/navigation/editor.css 2.26 kB
build/block-library/blocks/navigation/style-rtl.css 2.26 kB
build/block-library/blocks/navigation/style.css 2.25 kB
build/block-library/blocks/navigation/view.min.js 1.03 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 377 B
build/block-library/blocks/page-list/editor.css 377 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 235 B
build/block-library/blocks/paragraph/editor.css 235 B
build/block-library/blocks/paragraph/style-rtl.css 335 B
build/block-library/blocks/paragraph/style.css 335 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 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 508 B
build/block-library/blocks/post-comments-form/style.css 508 B
build/block-library/blocks/post-content/editor-rtl.css 74 B
build/block-library/blocks/post-content/editor.css 74 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 734 B
build/block-library/blocks/post-featured-image/editor.css 732 B
build/block-library/blocks/post-featured-image/style-rtl.css 342 B
build/block-library/blocks/post-featured-image/style.css 342 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 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 397 B
build/block-library/blocks/post-template/style.css 396 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 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 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 486 B
build/block-library/blocks/query/editor.css 486 B
build/block-library/blocks/query/view.min.js 958 B
build/block-library/blocks/quote/style-rtl.css 237 B
build/block-library/blocks/quote/style.css 237 B
build/block-library/blocks/read-more/style-rtl.css 140 B
build/block-library/blocks/read-more/style.css 140 B
build/block-library/blocks/rss/editor-rtl.css 101 B
build/block-library/blocks/rss/editor.css 101 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 184 B
build/block-library/blocks/search/editor.css 184 B
build/block-library/blocks/search/style-rtl.css 690 B
build/block-library/blocks/search/style.css 689 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/search/view.min.js 478 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 286 B
build/block-library/blocks/shortcode/editor.css 286 B
build/block-library/blocks/site-logo/editor-rtl.css 805 B
build/block-library/blocks/site-logo/editor.css 805 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/spacer/editor-rtl.css 350 B
build/block-library/blocks/spacer/editor.css 350 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 395 B
build/block-library/blocks/table/editor.css 395 B
build/block-library/blocks/table/style-rtl.css 639 B
build/block-library/blocks/table/style.css 639 B
build/block-library/blocks/template-part/editor-rtl.css 393 B
build/block-library/blocks/template-part/editor.css 393 B
build/block-library/blocks/term-description/style-rtl.css 111 B
build/block-library/blocks/term-description/style.css 111 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 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 185 B
build/block-library/blocks/video/style.css 185 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.11 kB
build/block-library/common.css 1.11 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 51.8 kB
build/commands/index.min.js 15.2 kB
build/commands/style-rtl.css 953 B
build/commands/style.css 951 B
build/components/style-rtl.css 12 kB
build/components/style.css 12 kB
build/compose/index.min.js 12.8 kB
build/core-commands/index.min.js 2.71 kB
build/core-data/index.min.js 72.5 kB
build/customize-widgets/index.min.js 10.9 kB
build/customize-widgets/style-rtl.css 1.36 kB
build/customize-widgets/style.css 1.36 kB
build/data-controls/index.min.js 640 B
build/data/index.min.js 9.01 kB
build/date/index.min.js 17.9 kB
build/deprecated/index.min.js 451 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.65 kB
build/edit-post/classic-rtl.css 578 B
build/edit-post/classic.css 578 B
build/edit-widgets/index.min.js 17.5 kB
build/edit-widgets/style-rtl.css 4.18 kB
build/edit-widgets/style.css 4.18 kB
build/element/index.min.js 4.83 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 8.09 kB
build/format-library/style-rtl.css 493 B
build/format-library/style.css 492 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.58 kB
build/interactivity/file.min.js 447 B
build/interactivity/image.min.js 1.67 kB
build/interactivity/navigation.min.js 1.17 kB
build/interactivity/query.min.js 740 B
build/interactivity/router.min.js 2.81 kB
build/interactivity/search.min.js 618 B
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.31 kB
build/keycodes/index.min.js 1.46 kB
build/list-reusable-blocks/index.min.js 2.14 kB
build/list-reusable-blocks/style-rtl.css 851 B
build/list-reusable-blocks/style.css 851 B
build/media-utils/index.min.js 2.92 kB
build/modules/importmap-polyfill.min.js 12.2 kB
build/notices/index.min.js 948 B
build/nux/index.min.js 1.58 kB
build/nux/style-rtl.css 748 B
build/nux/style.css 744 B
build/patterns/style-rtl.css 595 B
build/patterns/style.css 595 B
build/plugins/index.min.js 1.81 kB
build/preferences-persistence/index.min.js 2.06 kB
build/preferences/index.min.js 2.9 kB
build/preferences/style-rtl.css 719 B
build/preferences/style.css 721 B
build/primitives/index.min.js 831 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 1 kB
build/react-i18n/index.min.js 629 B
build/react-refresh-entry/index.min.js 9.47 kB
build/react-refresh-runtime/index.min.js 6.78 kB
build/redux-routine/index.min.js 2.7 kB
build/reusable-blocks/index.min.js 2.72 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.1 kB
build/router/index.min.js 1.96 kB
build/server-side-render/index.min.js 1.97 kB
build/shortcode/index.min.js 1.39 kB
build/style-engine/index.min.js 2.02 kB
build/token-list/index.min.js 582 B
build/url/index.min.js 3.74 kB
build/vendors/react-dom.min.js 42.8 kB
build/vendors/react-jsx-runtime.min.js 554 B
build/vendors/react.min.js 2.65 kB
build/viewport/index.min.js 964 B
build/warning/index.min.js 249 B
build/widgets/index.min.js 7.13 kB
build/widgets/style-rtl.css 1.17 kB
build/widgets/style.css 1.17 kB
build/wordcount/index.min.js 1.02 kB

compressed-size-action

Copy link

Flaky tests detected in 64984f2.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/9205619719
📝 Reported issues:

@SantosGuillamot SantosGuillamot force-pushed the try/sync-block-context-in-store branch from 64984f2 to c939061 Compare May 23, 2024 17:00
@@ -29,6 +35,7 @@ export function BlockContextProvider( { value, children } ) {
() => ( { ...context, ...value } ),
[ context, value ]
);
useDispatch( blockEditorStore ).updateBlockContext( nextValue );
Copy link
Member

Choose a reason for hiding this comment

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

Must be done in an effect

@SantosGuillamot SantosGuillamot force-pushed the try/sync-block-context-in-store branch from c939061 to b1b768c Compare May 24, 2024 08:44
@SantosGuillamot
Copy link
Contributor Author

SantosGuillamot commented May 24, 2024

I've been taking a deeper look at this and I am not sure how the context syncing should work. Let me use the query loop & post template example to explain my concerns.

When we have a query loop with a post template, the post template provides the postId and postType using BlockContextProvider: link. If I understand it correctly, BlockContextProvider adds or overwrite the context ONLY for the children. This means that a block will have a different context depending on the post template it is inside.

If I am not mistaken, the useContext hook takes care of knowing which context belongs where, but I am not sure how to make that differentiation in the store. In the current implementation of this pull request, we have a single store, but that isn't right.

Maybe we should rely on useContext and divide the store by clientId. But that probably means not doing the syncing in the BlockContextProvider, right?

EDIT: I went back to the previous implementation of syncing the store in the edit component and it seems to work better.

@SantosGuillamot
Copy link
Contributor Author

I've been testing this pull request, plus one to move the bindings logic and to allow post meta editing, and everything seems to work as expected.

I'm marking this pull request as ready for review, but there are some outstanding questions:

  • Is it okay to expose the context in the store?
  • If so, is this the proper way?
  • Should we make the action and selector private?

Copy link

github-actions bot commented May 24, 2024

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: SantosGuillamot <santosguillamot@git.wordpress.org>
Co-authored-by: ellatrix <ellatrix@git.wordpress.org>
Co-authored-by: gziolo <gziolo@git.wordpress.org>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

@SantosGuillamot SantosGuillamot added [Type] New API New API to be used by plugin developers or package users. [Feature] Block bindings labels May 24, 2024
@SantosGuillamot
Copy link
Contributor Author

As it seems it is still not clear if we should expose the block context in the store, I've moved the action and selector to private because it seems safer to me.

@gziolo
Copy link
Member

gziolo commented Jul 12, 2024

It looks like we won't need it after all. Based on the progress on other tasks planned for WordPress 6.7 outlined in #63018, I suggest we close this PR.

@SantosGuillamot
Copy link
Contributor Author

Yes, let's close this one and revisit it if considered necessary in the future.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Block bindings [Type] New API New API to be used by plugin developers or package users.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants