-
Notifications
You must be signed in to change notification settings - Fork 4.2k
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
Interactivity API: Update iterable signals when deepMerge()
adds new properties
#65135
Conversation
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. |
Flaky tests detected in 7b7e0cf. 🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/10753358050
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me! The change makes sense and has a passing test 👍
@@ -277,12 +277,13 @@ const deepMergeRecursive = ( | |||
) => { | |||
if ( isPlainObject( target ) && isPlainObject( source ) ) { | |||
for ( const key in source ) { | |||
const isNew = ! ( key in target ); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe "hasNewData" or "hasNewProperties" defines better the issue.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here, isNew
refers to the current key
inside the loop. But that's a good point anyway; we could move the signal update outside the loop. 🤔
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done in d516c42.
What?
Fixes
deepMerge()
to update the corresponding internal signals for property iteration (i.e.,...obj
,Object.keys( obj )
,Reflect.ownKeys( obj )
, etc.Why?
When a
deepMerge()
call adds new properties to an object, the correspondingiterable
signal should be updated to ensure subscribed directives react to changes.How?
Modifying the corresponding signal for the target object when necessary.
Testing Instructions
A unit test was added that didn't pass before the bug fix.