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 Template Part renaming error. #24500

Merged
merged 3 commits into from
Aug 12, 2020
Merged

Conversation

Addison-Stavlo
Copy link
Contributor

@Addison-Stavlo Addison-Stavlo commented Aug 11, 2020

Description

Fixes #24000 by using ensuring the postId attribute is set on the block when we update the slug.

How has this been tested?

Load a fresh template part supplied by the theme and attempt to rename it.
Verify it does not disappear from the screen.
Verify saving works as expected.

Screenshots

Types of changes

Bug fix (non-breaking change which fixes an issue)

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 Aug 11, 2020

Size Change: +4 B (0%)

Total Size: 1.16 MB

Filename Size Change
build/block-library/index.js 132 kB +4 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.67 kB 0 B
build/api-fetch/index.js 3.44 kB 0 B
build/autop/index.js 2.82 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/index.js 7.97 kB 0 B
build/block-directory/style-rtl.css 953 B 0 B
build/block-directory/style.css 952 B 0 B
build/block-editor/index.js 125 kB 0 B
build/block-editor/style-rtl.css 10.7 kB 0 B
build/block-editor/style.css 10.6 kB 0 B
build/block-library/editor-rtl.css 8.36 kB 0 B
build/block-library/editor.css 8.36 kB 0 B
build/block-library/style-rtl.css 7.5 kB 0 B
build/block-library/style.css 7.5 kB 0 B
build/block-library/theme-rtl.css 729 B 0 B
build/block-library/theme.css 730 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.4 kB 0 B
build/components/index.js 200 kB 0 B
build/components/style-rtl.css 15.7 kB 0 B
build/components/style.css 15.7 kB 0 B
build/compose/index.js 9.68 kB 0 B
build/core-data/index.js 11.8 kB 0 B
build/data-controls/index.js 1.29 kB 0 B
build/data/index.js 8.45 kB 0 B
build/date/index.js 5.38 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 568 B 0 B
build/dom/index.js 3.23 kB 0 B
build/edit-navigation/index.js 10.9 kB 0 B
build/edit-navigation/style-rtl.css 1.08 kB 0 B
build/edit-navigation/style.css 1.08 kB 0 B
build/edit-post/index.js 304 kB 0 B
build/edit-post/style-rtl.css 5.62 kB 0 B
build/edit-post/style.css 5.61 kB 0 B
build/edit-site/index.js 17 kB 0 B
build/edit-site/style-rtl.css 3.06 kB 0 B
build/edit-site/style.css 3.06 kB 0 B
build/edit-widgets/index.js 9.38 kB 0 B
build/edit-widgets/style-rtl.css 2.45 kB 0 B
build/edit-widgets/style.css 2.45 kB 0 B
build/editor/editor-styles-rtl.css 537 B 0 B
build/editor/editor-styles.css 539 B 0 B
build/editor/index.js 45.3 kB 0 B
build/editor/style-rtl.css 3.8 kB 0 B
build/editor/style.css 3.79 kB 0 B
build/element/index.js 4.65 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.72 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 621 B 0 B
build/i18n/index.js 3.56 kB 0 B
build/is-shallow-equal/index.js 711 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.33 kB 0 B
build/notices/index.js 1.79 kB 0 B
build/nux/index.js 3.4 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.41 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/rich-text/index.js 13.9 kB 0 B
build/server-side-render/index.js 2.71 kB 0 B
build/shortcode/index.js 1.7 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.85 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

@Addison-Stavlo Addison-Stavlo added the [Status] In Progress Tracking issues with work in progress label Aug 11, 2020
@Addison-Stavlo Addison-Stavlo changed the title Fix Template Part renaming error. WIP - Fix Template Part renaming error. Aug 11, 2020
@noahtallen
Copy link
Member

Saving can replace with a different auto-drafted template part by the same slug when:

  • The template has never been saved.
  • Or the template and unsaved template part are saved at the same time.

I'm a little confused by this. Is this the scenario?

  • there is an existing template part with a specific slug (say, header) that is in autodraft
  • you try to rename this other template part to header (?)
  • it starts using that first template part instead of the one you want

@noahtallen
Copy link
Member

Ah I think I understand more testing it out. Now, when you rename it to anything and then save changes, it seems to switch the template part back to whatever it was looking at previously, which causes some UI jankiness, and then it references the old name. But after refreshing, the new name shows up correctly.

Comment on lines 27 to 29
useEffect( () => {
setAttributes( { postId } );
}, [ postId ] );
Copy link
Contributor Author

Choose a reason for hiding this comment

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

This seems to fix it. However, it means that when we first load a template supplied by a theme, the template and all of its template parts will be marked as 'dirty' immediately since they have all been given explicit postIds. I dont think this is necessarily bad behavior, just different than before. 🤔

Copy link
Member

Choose a reason for hiding this comment

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

interesting. I think this behavior also existed at some point in the past (I think @epiqueras changed that somehow)

Copy link
Contributor

Choose a reason for hiding this comment

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

I don't think this behavior is acceptable. We made an effort to remove it because it's confusing.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

We made an effort to remove it because it's confusing.

True, definitely confusing if we are prompting the user to save changes to something they haven't made changes to. 🤔

Copy link
Contributor Author

@Addison-Stavlo Addison-Stavlo Aug 11, 2020

Choose a reason for hiding this comment

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

Alternative idea - 61fa1bf - set the postId attribute in the name-panel when the slug is changed. This will prevent it from disappearing when renamed, allow the template to dirty to save the proper id for its child, and not give us any issues with dirty loading. 🤔

Copy link
Member

Choose a reason for hiding this comment

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

I think there needs to be a clear distinction between Template Parts that are being referenced from the theme, and those that are customized by the user. Because once you start editing a Template Part, you're actually editing a newly-created duplicate, not the one from the theme. If your theme updates, the Template Part won't change with it, because you're no longer using the theme's version of the Template Part. But this is never conveyed clearly to the user.

I think theme-provided Template Parts should be in a sort of "read-only" mode by default, with an explicit "Customize/Edit" button that, when pressed, will copy it and create the editable version. Right now it's not clear at all whether a Template Part is still being referenced from a theme or not, and I think this is the source of a lot of the confusing behavior/logic.

Copy link
Member

Choose a reason for hiding this comment

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

That makes sense to me for sure. Imo, we can move forward with the fixes here, and then come up with a design for that interaction as well.

Copy link
Contributor Author

@Addison-Stavlo Addison-Stavlo Aug 12, 2020

Choose a reason for hiding this comment

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

If your theme updates, the Template Part won't change with it

I could be wrong, but now that you mention this I think this may still be the case even if the user has not edited the template part? On first use an auto-draft is created from the theme's .html files with the slug name, that is what is being used by the editor. If the auto-draft with that slug/theme already exists, I don't think we create a new one and overwrite it. So if the themes template part .html is updated, the editor would still be looking for the auto-draft by slug which was created with the outdated version. 🤔

I think theme-provided Template Parts should be in a sort of "read-only" mode by default, with an explicit "Customize/Edit" button that, when pressed, will copy it and create the editable version.

I think if we handle it this way for template parts we should probably do the same for templates as well?

Copy link
Member

Choose a reason for hiding this comment

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

I think if we handle it this way for template parts we should probably do the same for templates as well?

Yes, that sounds like the right behavior to me.

@Addison-Stavlo Addison-Stavlo removed the [Status] In Progress Tracking issues with work in progress label Aug 11, 2020
@Addison-Stavlo Addison-Stavlo changed the title WIP - Fix Template Part renaming error. Fix Template Part renaming error. Aug 11, 2020
Copy link
Member

@noahtallen noahtallen left a comment

Choose a reason for hiding this comment

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

Nice! This works perfectly to fix the issue in my testing without causing other side effects.

I think we should totally follow up to address @ZebulanStanphill's concerns about template parts coming from themes.

@noahtallen noahtallen merged commit 711f947 into master Aug 12, 2020
@noahtallen noahtallen deleted the fix/template-part-renaming-error branch August 12, 2020 04:07
@github-actions github-actions bot added this to the Gutenberg 8.8 milestone Aug 12, 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.

Attempting to rename Template Part deletes Template Part
4 participants