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

Template Parts: Fix the template part replace flow #59883

Closed
wants to merge 5 commits into from

Conversation

scruffian
Copy link
Contributor

@scruffian scruffian commented Mar 14, 2024

What?

Changes the template part replace flow so that it replaces the contents of the template part itself rather than just the template's reference.

Why?

The current template part replace flow doesn't replace the contents of the template part, it replaces the reference to the template part in the template. This means that only the current template is updated. I think users would expect that this would instead update the template part itself.

How?

This reuses the approach in packages/edit-site/src/components/sidebar-edit-mode/template-panel/index.js, which copies the blocks from the pattern and puts them into the entity.

Testing Instructions

  1. Open a template with a header or footer template part.
  2. Select the template part
  3. Open the block actions menu
  4. Click on replace
  5. Wait for the modal to open
  6. Select a template part from the modal
  7. Confirm that the footer template part itself is updated with the new blocks
    The best way to test this is to open two different templates that use that template part (for example the home page and a posts page).
  8. Do the same using the "Replace" section of the block inspector.

Screenshots or screencast

Screen.Recording.2024-03-14.at.16.40.17.mov

@scruffian scruffian added [Type] Enhancement A suggestion for improvement. [Block] Template Part Affects the Template Parts Block labels Mar 14, 2024
@scruffian scruffian self-assigned this Mar 14, 2024
Copy link

github-actions bot commented Mar 14, 2024

Size Change: +43 B (0%)

Total Size: 1.71 MB

Filename Size Change
build/block-editor/index.min.js 252 kB +119 B (0%)
build/edit-site/index.min.js 217 kB -76 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 955 B
build/annotations/index.min.js 2.69 kB
build/api-fetch/index.min.js 2.32 kB
build/autop/index.min.js 2.1 kB
build/blob/index.min.js 578 B
build/block-directory/index.min.js 7.22 kB
build/block-directory/style-rtl.css 1.03 kB
build/block-directory/style.css 1.03 kB
build/block-editor/content-rtl.css 4.4 kB
build/block-editor/content.css 4.4 kB
build/block-editor/default-editor-styles-rtl.css 394 B
build/block-editor/default-editor-styles.css 394 B
build/block-editor/style-rtl.css 15.6 kB
build/block-editor/style.css 15.6 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 126 B
build/block-library/blocks/audio/theme.css 126 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 415 B
build/block-library/blocks/button/editor.css 414 B
build/block-library/blocks/button/style-rtl.css 627 B
build/block-library/blocks/button/style.css 626 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 421 B
build/block-library/blocks/columns/style.css 421 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 647 B
build/block-library/blocks/cover/editor.css 650 B
build/block-library/blocks/cover/style-rtl.css 1.69 kB
build/block-library/blocks/cover/style.css 1.68 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 98 B
build/block-library/blocks/details/style.css 98 B
build/block-library/blocks/embed/editor-rtl.css 322 B
build/block-library/blocks/embed/editor.css 322 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 126 B
build/block-library/blocks/embed/theme.css 126 B
build/block-library/blocks/file/editor-rtl.css 316 B
build/block-library/blocks/file/editor.css 316 B
build/block-library/blocks/file/style-rtl.css 280 B
build/block-library/blocks/file/style.css 281 B
build/block-library/blocks/file/view.min.js 324 B
build/block-library/blocks/footnotes/style-rtl.css 201 B
build/block-library/blocks/footnotes/style.css 199 B
build/block-library/blocks/form-input/editor-rtl.css 227 B
build/block-library/blocks/form-input/editor.css 227 B
build/block-library/blocks/form-input/style-rtl.css 343 B
build/block-library/blocks/form-input/style.css 343 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 340 B
build/block-library/blocks/form-submission-notification/editor.css 340 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 471 B
build/block-library/blocks/freeform/editor-rtl.css 2.61 kB
build/block-library/blocks/freeform/editor.css 2.61 kB
build/block-library/blocks/gallery/editor-rtl.css 947 B
build/block-library/blocks/gallery/editor.css 952 B
build/block-library/blocks/gallery/style-rtl.css 1.72 kB
build/block-library/blocks/gallery/style.css 1.72 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 647 B
build/block-library/blocks/group/editor.css 647 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 189 B
build/block-library/blocks/heading/style.css 189 B
build/block-library/blocks/html/editor-rtl.css 336 B
build/block-library/blocks/html/editor.css 337 B
build/block-library/blocks/image/editor-rtl.css 878 B
build/block-library/blocks/image/editor.css 878 B
build/block-library/blocks/image/style-rtl.css 1.6 kB
build/block-library/blocks/image/style.css 1.59 kB
build/block-library/blocks/image/theme-rtl.css 126 B
build/block-library/blocks/image/theme.css 126 B
build/block-library/blocks/image/view.min.js 1.54 kB
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 306 B
build/block-library/blocks/media-text/editor.css 305 B
build/block-library/blocks/media-text/style-rtl.css 505 B
build/block-library/blocks/media-text/style.css 503 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 668 B
build/block-library/blocks/navigation-link/editor.css 669 B
build/block-library/blocks/navigation-link/style-rtl.css 259 B
build/block-library/blocks/navigation-link/style.css 257 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation/editor-rtl.css 2.26 kB
build/block-library/blocks/navigation/editor.css 2.26 kB
build/block-library/blocks/navigation/style-rtl.css 2.26 kB
build/block-library/blocks/navigation/style.css 2.25 kB
build/block-library/blocks/navigation/view.min.js 1.02 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 377 B
build/block-library/blocks/page-list/editor.css 377 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 235 B
build/block-library/blocks/paragraph/editor.css 235 B
build/block-library/blocks/paragraph/style-rtl.css 335 B
build/block-library/blocks/paragraph/style.css 335 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 508 B
build/block-library/blocks/post-comments-form/style.css 508 B
build/block-library/blocks/post-content/editor-rtl.css 74 B
build/block-library/blocks/post-content/editor.css 74 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 666 B
build/block-library/blocks/post-featured-image/editor.css 662 B
build/block-library/blocks/post-featured-image/style-rtl.css 342 B
build/block-library/blocks/post-featured-image/style.css 342 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 409 B
build/block-library/blocks/post-template/style.css 408 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 354 B
build/block-library/blocks/pullquote/style.css 354 B
build/block-library/blocks/pullquote/theme-rtl.css 168 B
build/block-library/blocks/pullquote/theme.css 168 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 486 B
build/block-library/blocks/query/editor.css 486 B
build/block-library/blocks/query/view.min.js 958 B
build/block-library/blocks/quote/style-rtl.css 237 B
build/block-library/blocks/quote/style.css 237 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 140 B
build/block-library/blocks/read-more/style.css 140 B
build/block-library/blocks/rss/editor-rtl.css 149 B
build/block-library/blocks/rss/editor.css 149 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 184 B
build/block-library/blocks/search/editor.css 184 B
build/block-library/blocks/search/style-rtl.css 629 B
build/block-library/blocks/search/style.css 628 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/search/view.min.js 478 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 229 B
build/block-library/blocks/separator/style.css 229 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 323 B
build/block-library/blocks/shortcode/editor.css 323 B
build/block-library/blocks/site-logo/editor-rtl.css 754 B
build/block-library/blocks/site-logo/editor.css 754 B
build/block-library/blocks/site-logo/style-rtl.css 204 B
build/block-library/blocks/site-logo/style.css 204 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 682 B
build/block-library/blocks/social-links/editor.css 681 B
build/block-library/blocks/social-links/style-rtl.css 1.48 kB
build/block-library/blocks/social-links/style.css 1.48 kB
build/block-library/blocks/spacer/editor-rtl.css 350 B
build/block-library/blocks/spacer/editor.css 350 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 395 B
build/block-library/blocks/table/editor.css 395 B
build/block-library/blocks/table/style-rtl.css 639 B
build/block-library/blocks/table/style.css 639 B
build/block-library/blocks/table/theme-rtl.css 146 B
build/block-library/blocks/table/theme.css 146 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 403 B
build/block-library/blocks/template-part/editor.css 403 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/term-description/style-rtl.css 111 B
build/block-library/blocks/term-description/style.css 111 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 185 B
build/block-library/blocks/video/style.css 185 B
build/block-library/blocks/video/theme-rtl.css 126 B
build/block-library/blocks/video/theme.css 126 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.11 kB
build/block-library/common.css 1.11 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 12.4 kB
build/block-library/editor.css 12.4 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 217 kB
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.8 kB
build/block-library/style.css 14.8 kB
build/block-library/theme-rtl.css 688 B
build/block-library/theme.css 693 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 51.8 kB
build/commands/index.min.js 15.6 kB
build/commands/style-rtl.css 935 B
build/commands/style.css 930 B
build/components/index.min.js 223 kB
build/components/style-rtl.css 11.8 kB
build/components/style.css 11.9 kB
build/compose/index.min.js 12.6 kB
build/core-commands/index.min.js 2.77 kB
build/core-data/index.min.js 72.8 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.36 kB
build/customize-widgets/style.css 1.36 kB
build/data-controls/index.min.js 640 B
build/data/index.min.js 8.95 kB
build/date/index.min.js 17.9 kB
build/deprecated/index.min.js 451 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.65 kB
build/edit-post/classic-rtl.css 558 B
build/edit-post/classic.css 558 B
build/edit-post/index.min.js 24.2 kB
build/edit-post/style-rtl.css 5.58 kB
build/edit-post/style.css 5.57 kB
build/edit-site/style-rtl.css 15 kB
build/edit-site/style.css 15 kB
build/edit-widgets/index.min.js 17.3 kB
build/edit-widgets/style-rtl.css 4.17 kB
build/edit-widgets/style.css 4.16 kB
build/editor/index.min.js 63.8 kB
build/editor/style-rtl.css 5.36 kB
build/editor/style.css 5.35 kB
build/element/index.min.js 4.83 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 8.02 kB
build/format-library/style-rtl.css 492 B
build/format-library/style.css 490 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.58 kB
build/interactivity/file.min.js 447 B
build/interactivity/image.min.js 1.67 kB
build/interactivity/index.min.js 13 kB
build/interactivity/navigation.min.js 1.15 kB
build/interactivity/query.min.js 740 B
build/interactivity/router.min.js 1.36 kB
build/interactivity/search.min.js 618 B
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.74 kB
build/keycodes/index.min.js 1.46 kB
build/list-reusable-blocks/index.min.js 2.11 kB
build/list-reusable-blocks/style-rtl.css 851 B
build/list-reusable-blocks/style.css 849 B
build/media-utils/index.min.js 2.91 kB
build/modules/importmap-polyfill.min.js 12.2 kB
build/notices/index.min.js 948 B
build/nux/index.min.js 2 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 742 B
build/patterns/index.min.js 5.71 kB
build/patterns/style-rtl.css 553 B
build/patterns/style.css 552 B
build/plugins/index.min.js 1.8 kB
build/preferences-persistence/index.min.js 2.05 kB
build/preferences/index.min.js 2.8 kB
build/preferences/style-rtl.css 710 B
build/preferences/style.css 712 B
build/primitives/index.min.js 975 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 1 kB
build/react-i18n/index.min.js 623 B
build/react-refresh-entry/index.min.js 9.47 kB
build/react-refresh-runtime/index.min.js 6.78 kB
build/redux-routine/index.min.js 2.7 kB
build/reusable-blocks/index.min.js 2.72 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.5 kB
build/router/index.min.js 1.79 kB
build/server-side-render/index.min.js 1.95 kB
build/shortcode/index.min.js 1.39 kB
build/style-engine/index.min.js 2.1 kB
build/token-list/index.min.js 582 B
build/url/index.min.js 3.72 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.8 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 957 B
build/warning/index.min.js 249 B
build/widgets/index.min.js 7.21 kB
build/widgets/style-rtl.css 1.17 kB
build/widgets/style.css 1.17 kB
build/wordcount/index.min.js 1.02 kB

compressed-size-action

@scruffian scruffian force-pushed the fix/template-part-replace-flow branch from 31f8411 to 43b55f7 Compare March 14, 2024 20:39
@scruffian scruffian marked this pull request as ready for review March 14, 2024 20:39
Copy link

github-actions bot commented Mar 14, 2024

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

Unlinked Accounts

The following contributors have not linked their GitHub and WordPress.org accounts: @altivero.

Contributors, please read how to link your accounts to ensure your work is properly credited in WordPress releases.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Unlinked contributors: altivero.

Co-authored-by: scruffian <scruffian@git.wordpress.org>
Co-authored-by: youknowriad <youknowriad@git.wordpress.org>
Co-authored-by: talldan <talldanwp@git.wordpress.org>
Co-authored-by: jasmussen <joen@git.wordpress.org>
Co-authored-by: jameskoster <jameskoster@git.wordpress.org>
Co-authored-by: richtabor <richtabor@git.wordpress.org>
Co-authored-by: draganescu <andraganescu@git.wordpress.org>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

@youknowriad
Copy link
Contributor

This means that only the current template is updated. I think users would expect that this would instead update the template part itself.

I agree that there's some confusion here but I'd love to have more opinions on this, because I can see both approaches as useful. (For instance if you want to share the same template part across patterns, you might to replace the template part rather than its content).

cc @jasmussen @carolinan @jameskoster

@talldan
Copy link
Contributor

talldan commented Mar 15, 2024

I do remember updating the patterns part of the replace flow here in the past to do the opposite - Ensure replacing a template part using a pattern doesn't update the existing entity, so that might add some historical context.

@jasmussen
Copy link
Contributor

I agree that there's some confusion here but I'd love to have more opinions on this, because I can see both approaches as useful. (For instance if you want to share the same template part across patterns, you might to replace the template part rather than its content).

This is definitely tricky. I was just chatting with @jameskoster about this, about how we are intentionally omitting things like color settings directly on the template part itself, exactly because those are locally applied, not globally to the template part you selected. I would think that the same instinct applies here, that if we surface transforms for the template part itself, then those should apply to the template part itself, meaning across. The flipside, making a local-only change also feels slightly less common than making a global change, at least when you are interacting with a template part.

Not a strong opinion, and would also like to hear more thoughts.

@youknowriad
Copy link
Contributor

The flipside, making a local-only change also feels slightly less common than making a global change, at least when you are interacting with a template part.

It's even more subtle here though, because while applying a local change (changing the referenced template part), you're also making the decision to reuse that referenced template part across multiple templates (global change).

@scruffian
Copy link
Contributor Author

I am unclear what the terms global and local mean in this context :)

@jameskoster
Copy link
Contributor

This is a good example of why I'm not particularly fond of full inline editing for global/synced entities. It never quite feels clear whether your changes will be applied locally or globally.

I'd be interested in trying something like the Figma component model. IE when you select an instance of a synced entity, only local edit options (IE overrides) are surfaced in the Inspector. There would also be prominent (possibly toolbar level) links to:

  • Go and edit the source entity (in focus mode).
  • Replace the entity with another from the same category.

In terms of how to move forward here, perhaps we can look at the new Inspector designs for guidance. The concepts there cover these scenarios. Here are some mockups:

Editing the original entity Select an entity instance while editing a template
1 2

@jasmussen
Copy link
Contributor

Requiring TPs to be edited in isolation would solve some of these issues, but it would come at the tradeoff of not being able to see the full context of the page. Additionally, this would solve the issue only for template parts; even though synced patterns cannot yet be replaced with something else in a similar manner. Are there other options?

@jameskoster
Copy link
Contributor

Are there other options?

For me the main thing is to add a little friction to the experience so the user is able to better understand when they're editing globally. There could be three toolbar actions;

@jameskoster
Copy link
Contributor

A quick mockup to go with my previous comment. The visual details are rough but hopefully it communicates the idea.

Here's how a partially synced pattern instance would appear when selected while editing a parent document like a template:

Screenshot 2024-03-18 at 12 20 45

The only blocks you can directly manipulate are those surfaced in the Inspector's 'Content' panel (IE pattern overrides). This is basically the templateLock: contentOnly edit experience. So for fully synced entities like template parts there would be no 'Content' panel and blocks inside the instance would be inert.

If you click 'Edit in place' a number of things happen:

Screenshot 2024-03-18 at 12 41 29
  • The document title reflects that you're now editing a different entity
  • So does the Inspector
  • The entity you're editing is 'spotlighted' (source document blocks are faded)
  • You can now directly manipulate the blocks in the selected entity

Clicking 'Edit original' takes you to focus mode, which is basically the same experience as editing in place except the entity is abstracted from its consumer:

Screenshot 2024-03-18 at 12 26 30

Here's a prototype to demo the flows:

edit-pattern.mp4

Note; I'm aware that 'Edit in place' and 'Edit original' aren't great labels 😅

@jasmussen
Copy link
Contributor

Lots to like in your design.

Note; I'm aware that 'Edit in place' and 'Edit original' aren't great labels 😅

I'd echo, this is the main thing to figure out. With these three buttons, the block toolbar becomes slightly overwhelming:

Screenshot 2024-03-18 at 15 51 35

Compare to what's shipping:

Screenshot 2024-03-18 at 15 52 51

Since in what's shipping, the Edit button already takes you to focus mode, whereas another click on anything inside simply edits it inline, I wonder if we shouldn't just keep that behavior, and those labels, but just invoke the inline-editing-dimming that you have as soon as you click any item inside?

What would the "Replace" button do, in your concept?

@richtabor
Copy link
Member

Requiring TPs to be edited in isolation would solve some of these issues, but it would come at the tradeoff of not being able to see the full context of the page.

Which feels like a costly trade-off.

Since in what's shipping, the Edit button already takes you to focus mode, whereas another click on anything inside simply edits it inline, I wonder if we shouldn't just keep that behavior, and those labels, but just invoke the inline-editing-dimming that you have as soon as you click any item inside?

What do you think of this proposal (independent of content-only inspector controls when a template part is selected)? #59970

@jasmussen
Copy link
Contributor

What do you think of this proposal (independent of content-only inspector controls when a template part is selected)? #59970

I like the simplicity. Where does "edit in isolation" go? I still think that's something we need to make accessible for everything. But perhaps that can be in the ellipsis menu? #45264.

@jameskoster
Copy link
Contributor

What would the "Replace" button do, in your concept?

Allow you to swap with another pattern from the same category. Doesn't have to be so prominent – it could be an icon button, or live in the ellipsis menu.

but just invoke the inline-editing-dimming that you have as soon as you click any item inside?

I'm not convinced this is enough friction alone, but it could be a place to start and iterate from. I think a double-click could be worth trying too, but on balance I still prefer the dedicated 'Edit' button in the toolbar.

@richtabor seems our concepts are virtually the same. Like @jasmussen says we just need to figure out where the edit buttons live. I tend to think that editing in isolation is less likely to be the experience you want in this flow, so I reckon that could live in the ellipsis menu.

@richtabor
Copy link
Member

richtabor commented Mar 21, 2024

Note this is a bit off topic for this PR; perhaps we should continue this on #59970?

@richtabor seems our concepts are virtually the same. Like @jasmussen says we just need to figure out where the edit buttons live. I tend to think that editing in isolation is less likely to be the experience you want in this flow, so I reckon that could live in the ellipsis menu

I don't mind the "Edit" button in the toolbar like it is now, perhaps engaging the inline editing, as explored in #59970.

I like the simplicity. Where does "edit in isolation" go? I still think that's something we need to make accessible for everything. But perhaps that can be in the ellipsis menu? #45264.

I do too. Should there be a different way to engage in isolated? Maybe a more explicit control in the block options?

@jasmussen
Copy link
Contributor

I do too. Should there be a different way to engage in isolated? Maybe a more explicit control in the block options?

Sounds like we're all actually in agreement, but just to summarize my read of next steps, hopefully we can unblock this.

  • "Edit" button exists in the block toolbar, engages inline editing mode that dims surroundings.
  • Edit in isoluation button exists in the block options (block toolbar ellipsis menu). Needs a good name. This would scale to all containers, so we can close Focus mode: Allow on any container block from the ellipsis menu #45264 (separately).
  • "Replace" moves to block options too.

Figma has this option for editing in isolation, not a 1:1 but close enough:

go to main component

You right click a symbol and choose "go to main component". Is "Go to Template Part" or "Go to synced pattern" a better term? Or should we keep "Edit in isolation"?

@jameskoster
Copy link
Contributor

"Go to $entity-name" might be nice. But names can be very long.... "Go to Centered Header Menu with Search" would be an awkward menu item – we'd probably need to truncate.

On balance I lean slightly towards something like "Edit in isolation", mostly because it'll be consistent across, and aligns verbally with the primary 'Edit' action. Other potential options:

  • Edit in focus
  • Edit block
  • Edit original
  • Edit source

@jasmussen
Copy link
Contributor

Edit in isolation, in the ellipsis menu, sounds like a good next step.

@scruffian
Copy link
Contributor Author

Thanks for the discussion. It would be helpful if we could get some clarity around this PR. Should I close it?

@jameskoster
Copy link
Contributor

jameskoster commented Mar 22, 2024

There are quite a few moving parts to connect, notably:

I still think the principles outlined in #59883 (comment) make sense. IE: The tiles only appear when you're editing the template part, and selecting a different tile replaces the contents of the template part you're editing.

So with that said, I think the behavior on trunk is wrong and this PR moves us in the right direction.

One change I'd suggest is to rename the "Replace" panel, since the behavior is no longer a replacement. The designs in #59689 suggest a "Design" panel for this purpose, which would contain sections where you can change the design/layout, style variation, etc. We might begin to install that here:

Screenshot 2024-03-22 at 12 40 19

What do you think?

@jasmussen
Copy link
Contributor

I like the "Design" term. Can be separate, but the big drop shadow under these seems out of place. I wonder if it shouldn't be a thin border, a la what we're discussing here: #60110 (comment)

@richtabor
Copy link
Member

I like the "Design" term. Can be separate, but the big drop shadow under these seems out of place. I wonder if it shouldn't be a thin border, a la what we're discussing here: #60110 (comment)

Agreed. We probably don't need the titles either, like the pattern categories in the Inserter.

@altivero
Copy link

I almost feel like Edit could have it's own menu:
EditMenu

Edit Duplicate would open a dialog to name your duplicate and then you could start editing right away. Which unless you have already created all your alternate headers etc. would be the typical flow.

@scruffian
Copy link
Contributor Author

I created a PR for the text change here: #60156

@draganescu
Copy link
Contributor

Just chiming into this discussion to say I don't think this is an engineering problem to solve in this PR.

The main issue I see, as others mentioned, is that the same action (replace) results in 2 different outcomes (replace contents or replace reference). This is very confusing as we don't know if the user wants to update the template currently being edited or all the templates using the template part they're replacing.

I would err on the side of not doing global changes when not sure.

In this specific PR replacing the contents of a template part with the contents of another template part can lead to a library filled with the same duplicated template part. While it is possible to revert or step back through revisions, it's hard to know which one to edit because we lack a way to communicate where reusable content is reused (synced patterns, template parts, navigation).

I think the solution has to come from creating a good UX which allows the user to opt between updating the template part across all templates that use it, or updating the current template's reference for a specific template part. Using one action (replace) is so far very confusing.

@scruffian
Copy link
Contributor Author

Thanks for the discussion on this. I am trying a new idea in #60203

@scruffian scruffian closed this Mar 26, 2024
@scruffian scruffian deleted the fix/template-part-replace-flow branch March 26, 2024 13:58
@colorful-tones
Copy link
Member

Can we please try to link to a pertinent Issue in a Pull Request's description? I'm going down the rabbit hole of trying to figure out features and it is super difficult as it is. 😅

This PR was closed and another one opened, which also does not reference an Issue it is trying to solve. 🤦

Thanks for the discussion on this. I am trying a new idea in #60203

@colorful-tones
Copy link
Member

Perhaps we were trying to address this? #59970

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 [Type] Enhancement A suggestion for improvement.
Projects
Development

Successfully merging this pull request may close these issues.

9 participants