TRY: Block Editor: Separate server-side mediaUpload key to fix nested provider loop#76137
TRY: Block Editor: Separate server-side mediaUpload key to fix nested provider loop#76137adamsilverstein wants to merge 3 commits intotrunkfrom
Conversation
Nested ExperimentalBlockEditorProvider instances (e.g. from BlockPreview) overwrite the upload-media store's real server-side mediaUpload with the queue interceptor, causing uploadItem() to loop endlessly. Store the original function under __unstableMediaUploadServer so it survives nesting.
|
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 If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message. To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. |
|
Size Change: +21 B (0%) Total Size: 6.87 MB
ℹ️ View Unchanged
|
|
While this unblocks uploading, for some reason it seems that the sideload requests aren't firing with this change, so I think things might still be getting stuck somewhere? 🤔 To check, I inspected the Network tab and looked for (Thanks for getting this alternative PR up by the way, conceptually it sounded good, but doesn't quite seem to be working how we expect) |
|
Flaky tests detected in ec67964. 🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/22702316388
|
Summary
Fixes a bug where images uploaded in the site editor get stuck in an infinite loading loop when a Query Loop / Post Template block is present. The root cause: nested
ExperimentalBlockEditorProviderinstances (created byBlockPreview) overwrite the upload-media store's real server-sidemediaUploadfunction with the queue interceptor, causinguploadItem()to loop endlessly.This PR stores the original server-side upload function under a separate key (
__unstableMediaUploadServer) so it survives arbitrary nesting depth.useMediaUploadSettingsprefers this key when passing settings to the upload-media store.Alternative approach to #76124.
Bug flow (before this fix)
settings.mediaUploadwith queue interceptorBlockPreviewreads settings from block-editor store (already has interceptor)useMediaUploadSettingsextracts the interceptor (not the real function)MediaUploadProviderwrites interceptor into upload-media storeuploadItem()callssettings.mediaUpload()→ interceptor →addItems()→ infinite loopHow the fix works
__unstableMediaUploadServerdoesn't exist on incoming settings, somediaUpload(the real function) is stored__unstableMediaUploadServeralready exists from the parent, so the||fallback preserves itifblock is skipped entirely; no behavior changeTest plan
window.__clientSideMediaProcessing = true)🤖 Generated with Claude Code