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

[WIP]: handle duplicated blocks from entities with aliases and entity management #27084

Closed
wants to merge 6 commits into from

Conversation

noahtallen
Copy link
Member

@noahtallen noahtallen commented Nov 19, 2020

Description

This resolves #22639 by implementing the approach I described here: #24180 (comment).

TLDR:

  1. If a second inner block controller is inserted using the same entity ID as another, only the first inner block controller syncs changes in/out of the editor.
  2. Internally, block edits are synced between the first and second inner block controllers with a new concept called "block aliases."

This way, edits are up to date inside the block tree, and we only have incoming/outgoing changes happen once. No need to handle multiple syncs or any of that nonsense!

Tasks:

  • Implement an entity "management" tracker. This lets us know which template part block is supposed to be in control of the sync process.
  • Implement a "clone/alias/synchronize" block tree function, which lets us alias the block tree of the one template part under the other template part.
  • Add state to keep track of block aliases.
  • When a template part block is not in charge of syncing, make sure it does not sync.
  • When a template part block is in charge of syncing, make sure it does sync.
  • When a template part block is not in charge of syncing, make sure it calls the function to alias its block tree.
  • When a block is added under any template part, make sure its changes are synced to all of the alias blocks.
  • When a block is edited under any template part, make sure its changes are synced to all of the alias blocks.
  • When a block is deleted under any template part, make sure its changes are synced to all of the alias blocks.
  • When a block is deleted under any template part, make sure its changes are synced to all of the alias blocks.
  • Make sure that when a template part blocks is removed, the duplicate block becomes the primary manager.
  • Performance testing
  • Add unit tests
  • Add documentation

How has this been tested?

Screenshots

Types of changes

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR.

@github-actions
Copy link

github-actions bot commented Nov 19, 2020

Size Change: +1.24 kB (0%)

Total Size: 1.22 MB

Filename Size Change
build/annotations/index.js 3.8 kB +1 B
build/block-directory/index.js 8.72 kB +2 B (0%)
build/block-editor/index.js 129 kB +1.22 kB (0%)
build/block-library/index.js 149 kB +11 B (0%)
build/components/index.js 172 kB +7 B (0%)
build/edit-navigation/index.js 11.1 kB -1 B
build/edit-post/index.js 306 kB +3 B (0%)
build/editor/index.js 43.4 kB -3 B (0%)
build/format-library/index.js 6.74 kB -1 B
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/api-fetch/index.js 3.42 kB 0 B
build/autop/index.js 2.83 kB 0 B
build/blob/index.js 665 B 0 B
build/block-directory/style-rtl.css 943 B 0 B
build/block-directory/style.css 942 B 0 B
build/block-editor/style-rtl.css 11.2 kB 0 B
build/block-editor/style.css 11.2 kB 0 B
build/block-library/editor-rtl.css 9.07 kB 0 B
build/block-library/editor.css 9.07 kB 0 B
build/block-library/style-rtl.css 8.35 kB 0 B
build/block-library/style.css 8.35 kB 0 B
build/block-library/theme-rtl.css 789 B 0 B
build/block-library/theme.css 790 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/blocks/index.js 48.1 kB 0 B
build/components/style-rtl.css 15.4 kB 0 B
build/components/style.css 15.3 kB 0 B
build/compose/index.js 10.2 kB 0 B
build/core-data/index.js 15.4 kB 0 B
build/data-controls/index.js 827 B 0 B
build/data/index.js 8.97 kB 0 B
build/date/index.js 31.8 kB 0 B
build/deprecated/index.js 769 B 0 B
build/dom-ready/index.js 571 B 0 B
build/dom/index.js 4.95 kB 0 B
build/edit-navigation/style-rtl.css 881 B 0 B
build/edit-navigation/style.css 885 B 0 B
build/edit-post/style-rtl.css 6.49 kB 0 B
build/edit-post/style.css 6.47 kB 0 B
build/edit-site/index.js 24.7 kB 0 B
build/edit-site/style-rtl.css 3.93 kB 0 B
build/edit-site/style.css 3.93 kB 0 B
build/edit-widgets/index.js 26.3 kB 0 B
build/edit-widgets/style-rtl.css 3.13 kB 0 B
build/edit-widgets/style.css 3.13 kB 0 B
build/editor/editor-styles-rtl.css 476 B 0 B
build/editor/editor-styles.css 478 B 0 B
build/editor/style-rtl.css 3.84 kB 0 B
build/editor/style.css 3.84 kB 0 B
build/element/index.js 4.62 kB 0 B
build/escape-html/index.js 735 B 0 B
build/format-library/style-rtl.css 547 B 0 B
build/format-library/style.css 548 B 0 B
build/hooks/index.js 2.27 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 3.57 kB 0 B
build/is-shallow-equal/index.js 698 B 0 B
build/keyboard-shortcuts/index.js 2.54 kB 0 B
build/keycodes/index.js 1.93 kB 0 B
build/list-reusable-blocks/index.js 3.1 kB 0 B
build/list-reusable-blocks/style-rtl.css 476 B 0 B
build/list-reusable-blocks/style.css 476 B 0 B
build/media-utils/index.js 5.31 kB 0 B
build/notices/index.js 1.82 kB 0 B
build/nux/index.js 3.42 kB 0 B
build/nux/style-rtl.css 671 B 0 B
build/nux/style.css 668 B 0 B
build/plugins/index.js 2.54 kB 0 B
build/primitives/index.js 1.43 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/redux-routine/index.js 2.84 kB 0 B
build/reusable-blocks/index.js 2.92 kB 0 B
build/rich-text/index.js 13.4 kB 0 B
build/server-side-render/index.js 2.77 kB 0 B
build/shortcode/index.js 1.69 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/url/index.js 2.84 kB 0 B
build/viewport/index.js 1.86 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.22 kB 0 B

compressed-size-action

@noahtallen noahtallen self-assigned this Nov 19, 2020
@noahtallen noahtallen added [Block] Template Part Affects the Template Parts Block [Feature] Nested / Inner Blocks Anything related to the experience of nested/inner blocks inside a larger container, like Group or P [Package] Block editor /packages/block-editor labels Nov 19, 2020
@noahtallen noahtallen added the [Status] In Progress Tracking issues with work in progress label Nov 19, 2020
@noahtallen noahtallen force-pushed the try/add-block-aliases branch from 99cb71d to 9055bb7 Compare December 9, 2020 23:35
@noahtallen noahtallen force-pushed the try/add-block-aliases branch from 9055bb7 to 2c2fec5 Compare December 9, 2020 23:43
if ( actionsToIgnore.includes( action.type ) ) {
return;
}
if ( action.clientId ) {
Copy link
Member Author

Choose a reason for hiding this comment

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

This one handles things like updating block attributes: the action might only affect one client ID, so just apply it to the other aliased client IDs too. This however probably doesn't work for any action that might have clientId but also a root client ID 🤔 Thankfully most of those use clientIds.

@youknowriad
Copy link
Contributor

superseded by #27885 Thanks for you work on these issues @noahtallen

@youknowriad youknowriad deleted the try/add-block-aliases branch December 24, 2020 14:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Template Part Affects the Template Parts Block [Feature] Nested / Inner Blocks Anything related to the experience of nested/inner blocks inside a larger container, like Group or P [Package] Block editor /packages/block-editor [Status] In Progress Tracking issues with work in progress
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Adding duplicate Template Part removes both from page, can trigger clearing inner blocks in dirty state.
2 participants