-
Notifications
You must be signed in to change notification settings - Fork 47k
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
DevTools: update error indices when elements are added/removed #22144
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1187,6 +1187,18 @@ export default class Store extends EventEmitter<{| | |
console.groupEnd(); | ||
} | ||
|
||
const indicesOfCachedErrorsOrWarningsAreStale = | ||
!haveErrorsOrWarningsChanged && | ||
(addedElementIDs.length > 0 || removedElementIDs.size > 0); | ||
if (indicesOfCachedErrorsOrWarningsAreStale) { | ||
this._cachedErrorAndWarningTuples.forEach(entry => { | ||
const index = this.getIndexOfElementID(entry.id); | ||
if (index !== null) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do we need to guard here or would this be bug at this point and we should include a warning? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't think this should ever be able to happen, and we'd just have this check to satisfy Flow. |
||
entry.index = index; | ||
} | ||
}); | ||
} | ||
|
||
this.emit('mutated', [addedElementIDs, removedElementIDs]); | ||
}; | ||
|
||
|
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.
I think this is also missing the case where we just re-order elements. We could let the operations decide when
indicesOfCachedErrorsOrWarningsAreStale
should be true instead but this feels a bit too brittle (though we have the same problem withhaveErrorsOrWarningsChanged
).The other solution would be to rethink the index caching strategy alltogether. So just cache the IDs and get the indices (cached) when necessary.
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.
This is a good point.
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.
TBH we should probably just store the ID and look up the index on the fly each time (no caching).
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.
That was my thinking as well. Though it would need some additional work since we currently assume that
errorsOrWarnings
are sorted by indices.So maybe we keep an unsorted set with all the fiber ids with errors or warnings and a separate list that is sorted index. When we handle operations we just update the set and once the user wants to loop through them we create a (cached) list that has them ordered by index.