-
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
Collab editing: ensure block attributes are serializable #57025
Merged
Merged
Changes from 1 commit
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
The problem is that now, the document will always be different for the "blocks" property. Meaning if a user changes the "title", the "blocks" will also be considered "modified" and it will send them over the wire unnecessarily. I think there's probably several small consequences for this.
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.
Because it's a new array? What if we memo it? Ensure that for the same array, we return the same "serialisable" array.
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.
The requirement in CRDT "maps" is to avoid calling
set
if there's no change. In this case, if the "blocks" object is still the same that exists in thedocument
, we should not callset
.For now it's not sufficient to memoize just the attribute because it will create a new "blocks" property anyway so we'll endup calling the
set
function.That said, right now we're not "decomposing" the blocks property in CRDT which we should be doing to allow parallel modification of blocks and merging the changes. And once we do that, it will actually become similar to "memoize" per attribute.
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.
But we're not checking right now if the blocks have changed?
I'm not sure I understand much of the rest, but I want to understand if there's going to be a fundamental problem with it. 😅 The last bit of your comment sounds like it may be ok.
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.
we are here;
document.get( key ) !== value
in this line if the "blocks" key in the document contains the same value as the one that we receive from state, we don't call theset
function.With the changes in this PR, the "blocks" key in the document will always be different because it's created every time when setting it, so there's no way it could match the value we get from the state.
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.
Oh missed that sorry. I'll try to fix it.
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 should work, right? Or am I misunderstanding it? d042da7