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

Fix dirty template and template parts on template creation. #26560

Merged
merged 10 commits into from
Oct 30, 2020

Conversation

Addison-Stavlo
Copy link
Contributor

@Addison-Stavlo Addison-Stavlo commented Oct 29, 2020

Description

This PR fixes a bug where creating a new Template from the navigation sidebar in the site editor loads the template with all the un-customized theme supplied template-parts dirtied and upgraded to 'publish' status.

This bug is fixed by refactoring the useEffect in the template part block to rely on inner blocks changing from when they were initially loaded, as opposed to the previous implementation of relying on a magic number of innerBlocks updates. Previously, the first 2 innerBlocks updates were ignored and the 3rd innerBlocks update would assume a user editing the contents of the template part to trigger setAttribute( postId ) and editEntityRecord to upgrade status to publish. 2 seems to be a magic number that worked for loading an existing template in the site editor, but it seems this does not work for the new template creation flow. Instead of allowing this to happen on the n-th update, we allow it to happen on the 1st update to innerBlocks content after innerBlocks are considered to be loaded.

How has this been tested?

In the Site Editor:

  • Load a template that references non-customized theme supplied template parts.
    • Verify the template parts (and template) are not dirty when loaded.
  • Edit a block inside a template part.
    • Verify the template part (and template) is now dirtied by checking the entities in the save flow.
  • Without saving the updates to the template and template part, reload the site editor.
  • Create a template from the navigation sidebar.
    • Verify the template-parts (and template) do not load dirty by checking the entities in the save flow.
  • Edit a block inside a template part.
    • Verify the template part (and template) is now dirtied by checking the entities in the save flow.

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.

@Addison-Stavlo Addison-Stavlo self-assigned this Oct 29, 2020
@Addison-Stavlo Addison-Stavlo added [Feature] Full Site Editing [Type] Bug An existing feature does not function as intended labels Oct 29, 2020
@github-actions
Copy link

github-actions bot commented Oct 29, 2020

Size Change: +104 B (0%)

Total Size: 1.21 MB

Filename Size Change
build/block-editor/index.js 130 kB -2 B (0%)
build/block-library/index.js 146 kB +13 B (0%)
build/block-library/style-rtl.css 7.83 kB +10 B (0%)
build/block-library/style.css 7.84 kB +13 B (0%)
build/components/index.js 172 kB +70 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.78 kB 0 B
build/api-fetch/index.js 3.45 kB 0 B
build/autop/index.js 2.84 kB 0 B
build/blob/index.js 665 B 0 B
build/block-directory/index.js 8.72 kB 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.1 kB 0 B
build/block-editor/style.css 11.1 kB 0 B
build/block-library/editor-rtl.css 8.98 kB 0 B
build/block-library/editor.css 8.98 kB 0 B
build/block-library/theme-rtl.css 837 B 0 B
build/block-library/theme.css 838 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/blocks/index.js 48.1 kB 0 B
build/components/style-rtl.css 15.2 kB 0 B
build/components/style.css 15.2 kB 0 B
build/compose/index.js 9.81 kB 0 B
build/core-data/index.js 12.3 kB 0 B
build/data-controls/index.js 772 B 0 B
build/data/index.js 8.77 kB 0 B
build/date/index.js 31.8 kB 0 B
build/deprecated/index.js 768 B 0 B
build/dom-ready/index.js 571 B 0 B
build/dom/index.js 4.46 kB 0 B
build/edit-navigation/index.js 11.2 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/index.js 306 kB 0 B
build/edit-post/style-rtl.css 6.38 kB 0 B
build/edit-post/style.css 6.37 kB 0 B
build/edit-site/index.js 22.1 kB 0 B
build/edit-site/style-rtl.css 3.86 kB 0 B
build/edit-site/style.css 3.85 kB 0 B
build/edit-widgets/index.js 26.4 kB 0 B
build/edit-widgets/style-rtl.css 3.1 kB 0 B
build/edit-widgets/style.css 3.1 kB 0 B
build/editor/editor-styles-rtl.css 480 B 0 B
build/editor/editor-styles.css 482 B 0 B
build/editor/index.js 43.1 kB 0 B
build/editor/style-rtl.css 3.85 kB 0 B
build/editor/style.css 3.85 kB 0 B
build/element/index.js 4.65 kB 0 B
build/escape-html/index.js 735 B 0 B
build/format-library/index.js 7.7 kB 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.13 kB 0 B
build/html-entities/index.js 623 B 0 B
build/i18n/index.js 3.57 kB 0 B
build/is-shallow-equal/index.js 712 B 0 B
build/keyboard-shortcuts/index.js 2.52 kB 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/index.js 3.11 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.34 kB 0 B
build/notices/index.js 1.79 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.56 kB 0 B
build/primitives/index.js 1.43 kB 0 B
build/priority-queue/index.js 791 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/reusable-blocks/index.js 3.06 kB 0 B
build/rich-text/index.js 13.2 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 4.06 kB 0 B
build/viewport/index.js 1.84 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.22 kB 0 B

compressed-size-action

@Addison-Stavlo Addison-Stavlo added the [Status] In Progress Tracking issues with work in progress label Oct 29, 2020
@Addison-Stavlo
Copy link
Contributor Author

It looks like the setAttribute / update status: publish is happening 1 edit too late in the new template case now. 🤔

@Addison-Stavlo
Copy link
Contributor Author

There still seems to be another innerBlocks update happening after we consider them loaded in the case of the new template flow. 🤔

@Addison-Stavlo
Copy link
Contributor Author

This seems to be working now. 😁

@Addison-Stavlo Addison-Stavlo removed the [Status] In Progress Tracking issues with work in progress label Oct 29, 2020
@Addison-Stavlo Addison-Stavlo changed the title Fix dirty template parts on template creation. Fix dirty template and template parts on template creation. Oct 29, 2020
Copy link
Contributor

@Copons Copons left a comment

Choose a reason for hiding this comment

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

@Addison-Stavlo Addison-Stavlo merged commit 2b17f47 into master Oct 30, 2020
@Addison-Stavlo Addison-Stavlo deleted the fix/template-part-upgrade-effect branch October 30, 2020 18:03
@github-actions github-actions bot added this to the Gutenberg 9.3 milestone Oct 30, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Type] Bug An existing feature does not function as intended
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants