Skip to content

Conversation

kevin940726
Copy link
Member

Description

Related to #33926. Addresses the following.

Isolated template part editing should be accessible from the ellipsis menu in the Template Part toolbar.

Design is in #29148 (comment) 's video.

How has this been tested?

  1. Activate tt1-block theme
  2. Go to Site Editor
  3. Click on a template part (Header for instance)
  4. Click on the ellipsis menu in the block toolbar
  5. There should be a "Edit template part" button
  6. Click on the button navigate to the isolated template part editor

Screenshots

Kapture.2021-09-09.at.14.25.10.mp4

Types of changes

New feature

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • I've tested my changes with keyboard and screen readers.
  • 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 (please manually search all *.native.js files for terms that need renaming or removal).

@kevin940726 kevin940726 added the [Feature] Template Editing Mode Related to the template editor available in the Block Editor label Sep 9, 2021
Comment on lines 34 to 38
const templatePart = templateParts.find(
( part ) =>
part.theme === block.attributes.theme &&
part.slug === block.attributes.slug
);
Copy link
Member Author

Choose a reason for hiding this comment

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

It feels a little bit weird to have to do this to find the id of the template part. Maybe we should make this a selector? Or is there other API for this?

Copy link
Member

Choose a reason for hiding this comment

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

It looks like template part CPTs have a fixed "$theme//$slug" ID structure so this should do the trick:

const templatePart = select( coreStore ).getEntityRecord(
	'postType',
	'wp_template_part',
	`${ block.attributes.theme }//${ block.attributes.slug }`
);

$template->id = $theme . '//' . $post->post_name;

Copy link
Member Author

Choose a reason for hiding this comment

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

That feels like an internal implementation though which I'd like to avoid relying on. Unless it's being documented somewhere 🤔 ?

Copy link
Member

@noisysocks noisysocks Sep 14, 2021

Choose a reason for hiding this comment

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

There's already precedent for doing this in the codebase (e.g. TemplatePartEdit) and turns out there's actually a documented helper we can use.

/**
* Generates a template part Id based on slug and theme inputs.
*
* @param {string} theme the template part's theme.
* @param {string} slug the template part's slug
* @return {string|null} the template part's Id.
*/
export function createTemplatePartId( theme, slug ) {
return theme && slug ? theme + '//' + slug : null;
}

Copy link
Member Author

Choose a reason for hiding this comment

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

The helper is not exposed though. Could it be easier if we just expose the templatePartId in block's attributes? So that we can just compare by ids rather than have to compose them first.

Copy link
Member

@noisysocks noisysocks Sep 14, 2021

Choose a reason for hiding this comment

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

But it's redundant to have both id and part+slug attributes in the Template Part block, though, no? They will contain the exact same data.

I think it's okay to rely on the ID being in this format. It's not an implementation detail as it's exposed in the public REST API. There's precedent already because TemplatePartEdit does exactly what we're doing here: it builds an ID from part and slug and passes it to getEntityRecord.

By using getEntityRecord instead of getEntityRecords we're not unnecessarily fetching all template parts from the REST API.

Arguably createTemplatePartId could live in @wordpress/core-data.

Copy link
Member Author

Choose a reason for hiding this comment

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

Oh right, we can use getEntityRecord directly! I'm not sure where to put that createTemplatePartId though, it seems less "data"-ly to be put in core-data. I just inlined it here and added a comment.

@github-actions
Copy link

github-actions bot commented Sep 9, 2021

Size Change: +14.7 kB (+1%)

Total Size: 1.06 MB

Filename Size Change
build/block-editor/index.min.js 128 kB +8.36 kB (+7%) 🔍
build/block-library/blocks/gallery/editor-rtl.css 983 B +56 B (+6%) 🔍
build/block-library/blocks/gallery/editor.css 988 B +54 B (+6%) 🔍
build/block-library/blocks/html/editor-rtl.css 332 B +49 B (+17%) ⚠️
build/block-library/blocks/html/editor.css 333 B +49 B (+17%) ⚠️
build/block-library/blocks/navigation/style-rtl.css 1.5 kB +79 B (+6%) 🔍
build/block-library/blocks/navigation/style.css 1.49 kB +76 B (+5%) 🔍
build/block-library/blocks/navigation/view.min.js 2.73 kB +200 B (+8%) 🔍
build/block-library/blocks/page-list/editor-rtl.css 377 B +67 B (+22%) 🚨
build/block-library/blocks/page-list/editor.css 377 B +67 B (+22%) 🚨
build/block-library/blocks/page-list/style-rtl.css 202 B -39 B (-16%) 👏
build/block-library/blocks/page-list/style.css 202 B -39 B (-16%) 👏
build/block-library/blocks/paragraph/style-rtl.css 273 B +12 B (+5%) 🔍
build/block-library/blocks/paragraph/style.css 273 B +12 B (+5%) 🔍
build/block-library/blocks/query-pagination/editor-rtl.css 301 B +31 B (+11%) ⚠️
build/block-library/blocks/query-pagination/editor.css 292 B +30 B (+11%) ⚠️
build/block-library/blocks/query-pagination/style-rtl.css 259 B +20 B (+8%) 🔍
build/block-library/blocks/query-pagination/style.css 257 B +21 B (+9%) 🔍
build/block-library/editor-rtl.css 9.72 kB +182 B (+2%)
build/block-library/editor.css 9.71 kB +188 B (+2%)
build/block-library/index.min.js 153 kB +1.91 kB (+1%)
build/block-library/style-rtl.css 10.3 kB +116 B (+1%)
build/block-library/style.css 10.3 kB +111 B (+1%)
build/components/index.min.js 209 kB +579 B (0%)
build/compose/index.min.js 10.3 kB +67 B (+1%)
build/customize-widgets/index.min.js 11.1 kB -4 B (0%)
build/dom/index.min.js 4.45 kB -80 B (-2%)
build/edit-navigation/index.min.js 16.2 kB +1.3 kB (+9%) 🔍
build/edit-navigation/style-rtl.css 3.62 kB +245 B (+7%) 🔍
build/edit-navigation/style.css 3.62 kB +247 B (+7%) 🔍
build/edit-post/index.min.js 29 kB -11 B (0%)
build/edit-post/style-rtl.css 7.23 kB +25 B (0%)
build/edit-post/style.css 7.22 kB +25 B (0%)
build/edit-site/index.min.js 26.7 kB +327 B (+1%)
build/edit-widgets/index.min.js 16.1 kB -2 B (0%)
build/edit-widgets/style-rtl.css 4.09 kB +30 B (+1%)
build/edit-widgets/style.css 4.09 kB +30 B (+1%)
build/editor/index.min.js 37.7 kB +16 B (0%)
build/format-library/index.min.js 5.34 kB -21 B (0%)
build/format-library/style.css 670 B +1 B (0%)
build/keyboard-shortcuts/index.min.js 1.72 kB +234 B (+16%) ⚠️
build/keycodes/index.min.js 1.3 kB +50 B (+4%)
build/redux-routine/index.min.js 2.63 kB -1 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 931 B
build/admin-manifest/index.min.js 1.09 kB
build/annotations/index.min.js 2.7 kB
build/api-fetch/index.min.js 2.19 kB
build/autop/index.min.js 2.08 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.2 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/style-rtl.css 13.8 kB
build/block-editor/style.css 13.8 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 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 58 B
build/block-library/blocks/audio/editor.css 58 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 474 B
build/block-library/blocks/button/editor.css 474 B
build/block-library/blocks/button/style-rtl.css 600 B
build/block-library/blocks/button/style.css 600 B
build/block-library/blocks/buttons/editor-rtl.css 315 B
build/block-library/blocks/buttons/editor.css 315 B
build/block-library/blocks/buttons/style-rtl.css 370 B
build/block-library/blocks/buttons/style.css 370 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 131 B
build/block-library/blocks/code/theme.css 131 B
build/block-library/blocks/columns/editor-rtl.css 206 B
build/block-library/blocks/columns/editor.css 205 B
build/block-library/blocks/columns/style-rtl.css 497 B
build/block-library/blocks/columns/style.css 496 B
build/block-library/blocks/cover/editor-rtl.css 666 B
build/block-library/blocks/cover/editor.css 670 B
build/block-library/blocks/cover/style-rtl.css 1.23 kB
build/block-library/blocks/cover/style.css 1.23 kB
build/block-library/blocks/embed/editor-rtl.css 488 B
build/block-library/blocks/embed/editor.css 488 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 322 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/style-rtl.css 1.6 kB
build/block-library/blocks/gallery/style.css 1.59 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 159 B
build/block-library/blocks/group/editor.css 159 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 70 B
build/block-library/blocks/group/theme.css 70 B
build/block-library/blocks/heading/style-rtl.css 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/home-link/style-rtl.css 247 B
build/block-library/blocks/home-link/style.css 247 B
build/block-library/blocks/image/editor-rtl.css 728 B
build/block-library/blocks/image/editor.css 728 B
build/block-library/blocks/image/style-rtl.css 482 B
build/block-library/blocks/image/style.css 487 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B
build/block-library/blocks/latest-posts/editor.css 137 B
build/block-library/blocks/latest-posts/style-rtl.css 528 B
build/block-library/blocks/latest-posts/style.css 527 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 488 B
build/block-library/blocks/media-text/style.css 485 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 489 B
build/block-library/blocks/navigation-link/editor.css 488 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 300 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/style-rtl.css 195 B
build/block-library/blocks/navigation-submenu/style.css 195 B
build/block-library/blocks/navigation-submenu/view.min.js 343 B
build/block-library/blocks/navigation/editor-rtl.css 1.72 kB
build/block-library/blocks/navigation/editor.css 1.72 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/post-author/editor-rtl.css 210 B
build/block-library/blocks/post-author/editor.css 210 B
build/block-library/blocks/post-author/style-rtl.css 182 B
build/block-library/blocks/post-author/style.css 181 B
build/block-library/blocks/post-comments-form/style-rtl.css 140 B
build/block-library/blocks/post-comments-form/style.css 140 B
build/block-library/blocks/post-comments/style-rtl.css 360 B
build/block-library/blocks/post-comments/style.css 359 B
build/block-library/blocks/post-content/editor-rtl.css 138 B
build/block-library/blocks/post-content/editor.css 138 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 398 B
build/block-library/blocks/post-featured-image/editor.css 398 B
build/block-library/blocks/post-featured-image/style-rtl.css 143 B
build/block-library/blocks/post-featured-image/style.css 143 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 378 B
build/block-library/blocks/post-template/style.css 379 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 60 B
build/block-library/blocks/post-title/style.css 60 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 378 B
build/block-library/blocks/pullquote/style.css 378 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 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-title/editor-rtl.css 85 B
build/block-library/blocks/query-title/editor.css 85 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 187 B
build/block-library/blocks/quote/style.css 187 B
build/block-library/blocks/quote/theme-rtl.css 220 B
build/block-library/blocks/quote/theme.css 222 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 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 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 374 B
build/block-library/blocks/search/style.css 375 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 250 B
build/block-library/blocks/separator/style.css 250 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 462 B
build/block-library/blocks/site-logo/editor.css 464 B
build/block-library/blocks/site-logo/style-rtl.css 153 B
build/block-library/blocks/site-logo/style.css 153 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 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 165 B
build/block-library/blocks/social-link/editor.css 165 B
build/block-library/blocks/social-links/editor-rtl.css 812 B
build/block-library/blocks/social-links/editor.css 811 B
build/block-library/blocks/social-links/style-rtl.css 1.3 kB
build/block-library/blocks/social-links/style.css 1.3 kB
build/block-library/blocks/spacer/editor-rtl.css 307 B
build/block-library/blocks/spacer/editor.css 307 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 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 146 B
build/block-library/blocks/tag-cloud/style.css 146 B
build/block-library/blocks/template-part/editor-rtl.css 636 B
build/block-library/blocks/template-part/editor.css 635 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/editor-rtl.css 90 B
build/block-library/blocks/term-description/editor.css 90 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 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 571 B
build/block-library/blocks/video/editor.css 572 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/common-rtl.css 853 B
build/block-library/common.css 849 B
build/block-library/reset-rtl.css 527 B
build/block-library/reset.css 527 B
build/block-library/theme-rtl.css 658 B
build/block-library/theme.css 663 B
build/block-serialization-default-parser/index.min.js 1.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/blocks/index.min.js 46.9 kB
build/components/style-rtl.css 15.8 kB
build/components/style.css 15.8 kB
build/core-data/index.min.js 12.3 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 614 B
build/data/index.min.js 7.1 kB
build/date/index.min.js 31.5 kB
build/deprecated/index.min.js 428 B
build/dom-ready/index.min.js 304 B
build/edit-post/classic-rtl.css 492 B
build/edit-post/classic.css 494 B
build/edit-site/style-rtl.css 5.07 kB
build/edit-site/style.css 5.07 kB
build/editor/style-rtl.css 3.74 kB
build/editor/style.css 3.73 kB
build/element/index.min.js 3.17 kB
build/escape-html/index.min.js 517 B
build/format-library/style-rtl.css 668 B
build/hooks/index.min.js 1.55 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.6 kB
build/is-shallow-equal/index.min.js 501 B
build/list-reusable-blocks/index.min.js 1.85 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.88 kB
build/notices/index.min.js 845 B
build/nux/index.min.js 2.03 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.83 kB
build/primitives/index.min.js 921 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 B
build/reusable-blocks/index.min.js 2.28 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.6 kB
build/server-side-render/index.min.js 1.32 kB
build/shortcode/index.min.js 1.48 kB
build/token-list/index.min.js 562 B
build/url/index.min.js 1.74 kB
build/viewport/index.min.js 1.02 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.27 kB
build/widgets/style-rtl.css 1.17 kB
build/widgets/style.css 1.18 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@kevin940726 kevin940726 marked this pull request as ready for review September 9, 2021 07:50
@jameskoster jameskoster added the Needs Design Feedback Needs general design feedback. label Sep 9, 2021
@kevin940726 kevin940726 mentioned this pull request Sep 10, 2021
13 tasks
@jameskoster jameskoster self-requested a review September 10, 2021 09:00
Copy link
Contributor

@jameskoster jameskoster left a comment

Choose a reason for hiding this comment

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

It works 🥳 Couple of minor things:

Since "template part" is a technical (and potentially confusing) term, we can probably go ahead and use the template part name in the menu label. IE "Edit Header" instead of "Edit Template Part".

I would also suggest placing the "Edit" menu item before the "Detach blocks from template part" menu item as I suspect editing will be a more common action.

@jameskoster jameskoster removed the Needs Design Feedback Needs general design feedback. label Sep 10, 2021
@kevin940726
Copy link
Member Author

Since "template part" is a technical (and potentially confusing) term, we can probably go ahead and use the template part name in the menu label. IE "Edit Header" instead of "Edit Template Part".

Makes sense to me! Although the term already exists in the sidebar menu though. Are we planning to change that in the future too?

image

@jameskoster
Copy link
Contributor

Are we planning to change that in the future too?

I believe there is still quite a bit of design work to be done around navigating the site editing flows, so I would imagine it is possible. For example I have seen some explorations that just display the taxonomies (headers, footers, sidebars, etc).


Thanks for the update, I noticed that we're using inconsistent text case when displaying template part names, but we can address that separately.

I'm not sure we need the quotation marks.

One final question – I'm only seeing this menu in the Site Editing context, should it be in the template editor too, or will that come later?

Copy link
Member

@noisysocks noisysocks left a comment

Choose a reason for hiding this comment

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

Looking good!

Comment on lines 34 to 38
const templatePart = templateParts.find(
( part ) =>
part.theme === block.attributes.theme &&
part.slug === block.attributes.slug
);
Copy link
Member

Choose a reason for hiding this comment

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

It looks like template part CPTs have a fixed "$theme//$slug" ID structure so this should do the trick:

const templatePart = select( coreStore ).getEntityRecord(
	'postType',
	'wp_template_part',
	`${ block.attributes.theme }//${ block.attributes.slug }`
);

$template->id = $theme . '//' . $post->post_name;

@kevin940726
Copy link
Member Author

I'm not sure we need the quotation marks.

I'm just copying it the design of the back button 😅, but I agree it feels a little weird as it's not clear what the quotation is for. I'll remove it for now.

I'm only seeing this menu in the Site Editing context, should it be in the template editor too, or will that come later?

What do you mean by the template editor? Do you mean the one in edit-post?

@jameskoster
Copy link
Contributor

Do you mean the one in edit-post?

Yeah that's the one. I'm able to view and interact with template parts there, so I should probably be able to focus (isolate) them too.

@kevin940726
Copy link
Member Author

I'm able to view and interact with template parts there, so I should probably be able to focus (isolate) them too.

Cool, I think that was brought up in #29148 (comment). It's still not clear how it should work in practice though, I'd say let's add this first in the side editor and iterate?

@jameskoster
Copy link
Contributor

jameskoster commented Sep 15, 2021

As discussed in #34732 it would be interesting to try a slightly different design pattern in this context which enables us to circumvent the awkward "<- Back" button for navigating between template <> template part, and hopefully add some clarity to the overall template editing experience. Here's a video:

editing.a.template.part.mp4

Figma prototype here.

Notes:

  • Entities outside the immediate purview of the template being edited (IE template parts) are semi-transparent.
  • Hovering a template part displays an overlay and a small chip containing the template part name.
  • It's possible to select template parts, and move them around in the context of the document, but not edit the blocks within. The persistent overlay indicates this.
  • Once a template part is selected, I can click the "Edit" button in the toolbar to focus it and "unlock" its contents. I am then able to edit the blocks inside.
  • While a template part is focussed and editable, the rest of the template becomes "locked" and semi-transparent. It can be unlocked the same way template parts are unlocked, as described above.

In the future we can apply this pattern to entities inside template parts (like the navigation example in the prototype). But that's something we can explore in more detail later.

@draganescu draganescu merged commit 86b2b8f into trunk Sep 17, 2021
@draganescu draganescu deleted the add/edit-template-part-menu-button branch September 17, 2021 14:42
@github-actions github-actions bot added this to the Gutenberg 11.6 milestone Sep 17, 2021
@mtias
Copy link
Member

mtias commented Sep 20, 2021

@jameskoster let's leave that for the flow of editing templates in general, we still need all the pieces for the "isolated mode" in place to handle direct links to edit header, navigation, footer, etc. Variations on "spotlight" we can break them up separately. The fading out has proven tricky on anything that had a different background than white, for example.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Template Editing Mode Related to the template editor available in the Block Editor
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants