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: Show existing template parts and a list of block patterns at creation flow. #38814

Merged
merged 12 commits into from
Feb 18, 2022

Conversation

youknowriad
Copy link
Contributor

@youknowriad youknowriad commented Feb 15, 2022

part of #28737

I'm choosing to limit it to the template part block for now (setup states for other patterns based blocks like query... should be improved separately to reuse the same code here)

This PR updates the template part (and its semantic variations) to have a placeholder with a unique button that opens a modal. The modal shows a list of existing template parts to pick from and also a list of block patterns for the current semantic area.

Testing instructions

  • Try the creation and modification flows for the template part block.

@youknowriad youknowriad added the [Type] Enhancement A suggestion for improvement. label Feb 15, 2022
@youknowriad youknowriad self-assigned this Feb 15, 2022
@github-actions
Copy link

github-actions bot commented Feb 15, 2022

Size Change: -1.4 kB (0%)

Total Size: 1.15 MB

Filename Size Change
build/admin-manifest/index.min.js 1.24 kB +114 B (+10%) ⚠️
build/block-directory/index.min.js 6.49 kB -18 B (0%)
build/block-editor/index.min.js 143 kB +730 B (+1%)
build/block-editor/style-rtl.css 14.8 kB -25 B (0%)
build/block-editor/style.css 14.8 kB -27 B (0%)
build/block-library/blocks/template-part/editor-rtl.css 235 B -325 B (-58%) 🏆
build/block-library/blocks/template-part/editor.css 235 B -324 B (-58%) 🏆
build/block-library/editor-rtl.css 9.9 kB -153 B (-2%)
build/block-library/editor.css 9.91 kB -151 B (-2%)
build/block-library/index.min.js 167 kB -654 B (0%)
build/blocks/index.min.js 46.4 kB -12 B (0%)
build/components/index.min.js 215 kB -249 B (0%)
build/core-data/index.min.js 13.9 kB -32 B (0%)
build/customize-widgets/index.min.js 11.4 kB -18 B (0%)
build/customize-widgets/style-rtl.css 1.49 kB -3 B (0%)
build/customize-widgets/style.css 1.49 kB -3 B (0%)
build/data/index.min.js 7.45 kB -26 B (0%)
build/edit-navigation/index.min.js 16.2 kB -12 B (0%)
build/edit-post/index.min.js 29.9 kB -122 B (0%)
build/edit-site/index.min.js 42.1 kB -92 B (0%)
build/edit-widgets/index.min.js 16.7 kB -46 B (0%)
build/edit-widgets/style-rtl.css 4.17 kB +4 B (0%)
build/edit-widgets/style.css 4.17 kB +3 B (0%)
build/editor/index.min.js 38.5 kB +54 B (0%)
build/reusable-blocks/index.min.js 2.24 kB -11 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/annotations/index.min.js 2.77 kB
build/api-fetch/index.min.js 2.25 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 487 B
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-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 150 B
build/block-library/blocks/audio/editor.css 150 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 470 B
build/block-library/blocks/button/editor.css 470 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 B
build/block-library/blocks/buttons/editor-rtl.css 292 B
build/block-library/blocks/buttons/editor.css 292 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 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 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 406 B
build/block-library/blocks/columns/style.css 406 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-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 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-query-loop/editor-rtl.css 95 B
build/block-library/blocks/comments-query-loop/editor.css 95 B
build/block-library/blocks/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.55 kB
build/block-library/blocks/cover/style.css 1.55 kB
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 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 353 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/editor-rtl.css 965 B
build/block-library/blocks/gallery/editor.css 967 B
build/block-library/blocks/gallery/style-rtl.css 1.61 kB
build/block-library/blocks/gallery/style.css 1.61 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 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 731 B
build/block-library/blocks/image/editor.css 730 B
build/block-library/blocks/image/style-rtl.css 518 B
build/block-library/blocks/image/style.css 523 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 199 B
build/block-library/blocks/latest-posts/editor.css 198 B
build/block-library/blocks/latest-posts/style-rtl.css 447 B
build/block-library/blocks/latest-posts/style.css 446 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 493 B
build/block-library/blocks/media-text/style.css 490 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 649 B
build/block-library/blocks/navigation-link/editor.css 650 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 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/view.min.js 375 B
build/block-library/blocks/navigation/editor-rtl.css 1.98 kB
build/block-library/blocks/navigation/editor.css 1.99 kB
build/block-library/blocks/navigation/style-rtl.css 1.89 kB
build/block-library/blocks/navigation/style.css 1.88 kB
build/block-library/blocks/navigation/view.min.js 2.85 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 401 B
build/block-library/blocks/page-list/editor.css 402 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 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 273 B
build/block-library/blocks/paragraph/style.css 273 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/style-rtl.css 446 B
build/block-library/blocks/post-comments-form/style.css 446 B
build/block-library/blocks/post-comments/style-rtl.css 521 B
build/block-library/blocks/post-comments/style.css 521 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 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/style.css 153 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 323 B
build/block-library/blocks/post-template/style.css 323 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 80 B
build/block-library/blocks/post-title/style.css 80 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 389 B
build/block-library/blocks/pullquote/style.css 388 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-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 234 B
build/block-library/blocks/query-pagination/style.css 231 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 201 B
build/block-library/blocks/quote/style.css 201 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 132 B
build/block-library/blocks/read-more/style.css 132 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 397 B
build/block-library/blocks/search/style.css 398 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 233 B
build/block-library/blocks/separator/style.css 233 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 744 B
build/block-library/blocks/site-logo/editor.css 744 B
build/block-library/blocks/site-logo/style-rtl.css 181 B
build/block-library/blocks/site-logo/style.css 181 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 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB
build/block-library/blocks/social-links/style.css 1.36 kB
build/block-library/blocks/spacer/editor-rtl.css 332 B
build/block-library/blocks/spacer/editor.css 332 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 214 B
build/block-library/blocks/tag-cloud/style.css 215 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/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 921 B
build/block-library/common.css 919 B
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/style-rtl.css 11.3 kB
build/block-library/style.css 11.3 kB
build/block-library/theme-rtl.css 672 B
build/block-library/theme.css 676 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/components/style-rtl.css 15.5 kB
build/components/style.css 15.5 kB
build/compose/index.min.js 11.2 kB
build/data-controls/index.min.js 663 B
build/date/index.min.js 31.9 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.53 kB
build/edit-navigation/style-rtl.css 3.76 kB
build/edit-navigation/style.css 3.76 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/style-rtl.css 7.19 kB
build/edit-post/style.css 7.18 kB
build/edit-site/style-rtl.css 7.23 kB
build/edit-site/style.css 7.22 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.71 kB
build/element/index.min.js 3.32 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 6.62 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.66 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.79 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.83 kB
build/keycodes/index.min.js 1.41 kB
build/list-reusable-blocks/index.min.js 1.75 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.94 kB
build/notices/index.min.js 957 B
build/nux/index.min.js 2.12 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.98 kB
build/primitives/index.min.js 949 B
build/priority-queue/index.min.js 611 B
build/react-i18n/index.min.js 704 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.69 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11.1 kB
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.52 kB
build/token-list/index.min.js 668 B
build/url/index.min.js 1.92 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.18 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.07 kB

compressed-size-action

} ) {
const blockNameWithArea = area
? `core/template-part/${ area }`
: 'core/template-part';
const blockPatterns = useSelect(
Copy link
Member

Choose a reason for hiding this comment

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

The list of the patterns was created inside BlockPatternSetup. Do you think we still have the possibility of a reusable component for selecting patterns like BlockPatternSetup?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I'm not sure, I left the current one because it's still used for other blocks (query...) but once we move to that block, we'd need to see.

For now I lean towards that not being needed but we'll see. The reason is that the template part modal is a bit different in the sense that it's composed of two areas (patterns and template parts) and the behavior of creating is a bit different between the two.

Copy link
Member

Choose a reason for hiding this comment

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

For now I lean towards that not being needed but we'll see. The reason is that the template part modal is a bit different in the sense that it's composed of two areas (patterns and template parts) and the behavior of creating is a bit different between the two.

Maybe a solution would be for the template part to have two buttons choose a template part, and choose a pattern? But that makes the replace strange as we don't want two replace buttons.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah, I initially suggested that but @jameskoster thought it was simpler to just merge everything.

Copy link
Contributor

Choose a reason for hiding this comment

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

Yup, I think the quicker we can show the user some options, the better.

Copy link
Contributor

Choose a reason for hiding this comment

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

Maybe a solution would be for the template part to have two buttons choose a template part, and choose a pattern?

That is the current way, no? Also I agree that Template Part flow is different from other blocks which most commonly are uncontrolled blocks.

Copy link
Member

@jorgefilipecosta jorgefilipecosta left a comment

Choose a reason for hiding this comment

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

We should probably have a start blank button at the side of choose:
image

Right now a user may wonder where is the option the stat blank it is not very intuitive that first one needs to press choose and the option is on the choose modal.

Copy link
Member

@jorgefilipecosta jorgefilipecosta left a comment

Choose a reason for hiding this comment

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

I guess it is going to be very common for a theme to create a pattern for each header and also a template part representing it, so we end up with duplicated lists:
image

Not a block but in the future, we may try to be smart and not show patterns if there is already.a template part with exactly that pattern.

@jorgefilipecosta
Copy link
Member

jorgefilipecosta commented Feb 15, 2022

If I add a template part block and then press choose the UI enters an infinite loop without showing any pattern:

Video.MP4.1162x782.mp4

I guess we have a bug when we have too many patterns to show? I guess we may consider showing the pattern explorer in the modal when the number of patterns is huge:
image

Having search and categories for sure simplifies finding the pattern one wants in a big list.

I guess we may also instead of showing a list for template parts and another list for patterns just show the pattern explorer with a tab for template parts when we are choosing something for a template part?

@jorgefilipecosta
Copy link
Member

When the number of template parts gets big I can not scroll and I'm never able to see the patterns:
image

Copy link
Member

@jorgefilipecosta jorgefilipecosta left a comment

Choose a reason for hiding this comment

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

I found some bugs in some hedge cases but nothing that could not be addressed in follow-up PRs. The code looks good and works well, so I'm approving the PR.

I wonder if it would make sense to reuse the patter explorer as the modal? Given that we would offer search, view by category, etc which may be useful when choosing a pattern for a very general block like a template part without an area set, where any pattern makes sense.

@jameskoster
Copy link
Contributor

I guess it is going to be very common for a theme to create a pattern for each header and also a template part representing it

I'm not sure, that seems kind of superfluous to me. In most cases shouldn't a theme author decide on one or the other?

@jorgefilipecosta
Copy link
Member

I'm not sure, that seems kind of superfluous to me. In most cases shouldn't a theme author decide on one or the other?

Currently, 2022 has both patterns and template parts. So if it happens currently I guess it will continue to happen.

Template parts are a must to allow the same header to be reused in multiple templates and allow changing all templates by just changing the template part. Patterns I guess is to allow to reuse of a header for example in another theme.

@jameskoster
Copy link
Contributor

Patterns I guess is to allow to reuse of a header for example in another theme.

In which case they should be submitted to the pattern directory rather than bundled with the theme, I think.


Here's what I'm seeing so far:

Screenshot 2022-02-15 at 16 27 38

I know this is WIP, but leaving a couple of notes / questions:

  • Does this work make it possible to invoke the modal from elsewhere (Inserter) in the future?
  • When there are no patterns (like in the screenshot) we can hide the heading, likewise for template parts.
  • We'll need to account for situations where no template parts or patterns are available – perhaps we can skip directly to "start blank"?
  • "Pick from the existing template parts" can read "Theme headers".
  • "Pick from the existing patterns" can read "Patterns".
  • The modal on top of another modal when you click "Start blank" is a little awkward and could perhaps use some design attention. Alternatively we could return the "Start blank" button to the placeholder state like @jorgefilipecosta suggested. Mockup below.

Screenshot 2022-02-15 at 16 43 24

Copy link
Contributor

@ntsekouras ntsekouras left a comment

Choose a reason for hiding this comment

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

Thanks for your work Riad! The combination of Template Parts and patterns do really simplify the logic/handling a lot!

This works well and follows the initial design about the creation/replacement flow.

Here are some extra thoughts...

Should we split this behavior for create and replace? For example if we replace with a pattern I feel like it should replace existing blocks and not prompt to create a new TP. This might fall under the block switcher/transforms category? Similarly to a patterns menu item it could show Template Parts and by clicking either one could trigger a UI with Modal like this one? 🤔

Another general thing that I've been thinking about the pattern explorer(s), as this modal is kind of a similar thing, is what if we could meddle with the block categories in patterns explorer? Right now we use the patterns categories but the component is being fed these from us. So what if adjust the categories in certain scenarios and use the same UI everywhere with categorization, search, etc.. In this case it would have two 'categories': template parts and patterns.. I haven't thought much the implementation but feel possible in my mind 😄

closeLabel={ __( 'Cancel' ) }
onRequestClose={ () =>
setIsTemplatePartSelectionOpen( false )
}
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
}
}
isFullScreen

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I tried this but the behavior is a bit weird, the width of the modal changes as the patterns load.

packages/block-library/src/template-part/edit/index.js Outdated Show resolved Hide resolved
}
.block-library-template-part__selection-content .block-editor-block-patterns-list {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
Copy link
Contributor

Choose a reason for hiding this comment

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

I think it would look nicer if we adjusted the columns per viewport widths as we do in Pattern Explorer.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah, I also feel this logic should be a prop of the component instead of doing this in CSS.

@youknowriad
Copy link
Contributor Author

@jameskoster

Does this work make it possible to invoke the modal from elsewhere (Inserter) in the future?

Not really, we don't have a concept of showing something before a block is inserted, that would require bigger changes. We can always share UI but there are different challenges there.

"Pick from the existing template parts" can read "Theme headers"

The theme can also define "patters" that are headers and they show on the second list. that's why I explicitly mentionned "template parts", the behavior is different when you pick a pattern (create a new template part), or pick an existing template part (reuse across templates)

@youknowriad
Copy link
Contributor Author

The modal on top of another modal when you click "Start blank" is a little awkward and could perhaps use some design attention. Alternatively we could return the "Start blank" button to the placeholder state like @jorgefilipecosta suggested.

The double modal is needed even if we move the "start blank" outside the modal because when you pick a "pattern", you need to also create a new template part.

@youknowriad
Copy link
Contributor Author

For example if we replace with a pattern I feel like it should replace existing blocks and not prompt to create a new TP. This might fall under the block switcher/transforms category?

I think that's a good point and one I would love more feedback on. cc @mtias @jameskoster
Personally, I think I agree with you that when you pick a "pattern" in the "replace" flow, maybe we should just replace the content of the existing template part instead of creating a new one.

@jameskoster
Copy link
Contributor

that's why I explicitly mentionned "template parts", the behavior is different when you pick a pattern (create a new template part), or pick an existing template part (reuse across templates)

Fair point, I'm still not sure we need to emphasise the "Template Part" label though. Especially as this is the Header block. "Theme Headers" or "Existing Headers" feels more intuitive to me.

The double modal is needed even if we move the "start blank" outside the modal because when you pick a "pattern", you need to also create a new template part.

Now I'm wondering how important the name really is in this flow :) I'm reminded of the friction that exists when we force folks to name their first navigation menu. Just an idea, but could we use the pattern name to auto-name the resultant template part? Starting blank could create "Header 1", etc.

Personally, I think I agree with you that when you pick a "pattern" in the "replace" flow, maybe we should just replace the content of the existing template part instead of creating a new one.

Yes I think so. This is aligned with the conclusion we came to in #31747

@youknowriad
Copy link
Contributor Author

Fair point, I'm still not sure we need to emphasise the "Template Part" label though. Especially as this is the Header block. "Theme Headers" or "Existing Headers" feels more intuitive to me.

Unfortunately we don't have a pluralized internationalized label for the areas, so these suggestions are going to be hard to implement. It's doable to add such pluralized label but it's not that simple. Can we create a follow-up issue for this one if needed.

Now I'm wondering how important the name really is in this flow :) I'm reminded of the friction that exists when we force folks to name their first navigation menu. Just an idea, but could we use the pattern name to auto-name the resultant template part? Starting blank could create "Header 1", etc.

I think it's important to name the template parts properly personally because these are the things that you'll refer to in multiple template to reuse the same header... Curious what other things here @jasmussen @mtias

@jameskoster
Copy link
Contributor

Is there any way to fix the jumping that occurs as patterns load?

jumpy.mp4

@youknowriad
Copy link
Contributor Author

@jameskoster personally I have a different experience, I don't see the same pattern being big and then small, but I do see patterns loading one after the other (it's intended for performance). There's no easy solution I can think of the moment 🤔

@jameskoster
Copy link
Contributor

I think it may be related to the Site Logo and/or Navigation block.

Another thought, since things like headers and footers tend to be wide and shallow, the 750px modal and 3 column grid do a rather poor job of previewing them. I appreciate there's a balance to be struck there, since we need to also consider narrow/tall patterns, but I think it might be worth trying either:

  1. A larger modal (Add a full screen modal component #28574)
  2. A two column layout

I understand if you prefer to do this separately.

@jasmussen
Copy link
Contributor

Took this for a spin, looks good!
tps

This is basic and works well. A few thoughts:

  • Anything we can do to limit the jumping and resizing. Even if it means setting a specific height on the modal (as opposed to having it auto expand).
  • I'd love for us to avoid the initial naming of the template part and skip that extra naming modal. You can always rename in the inspector if you need be, and it seems fine to auto-name these "Header", "Header 2", "Header 3" if the first block on the page, "Footer", "Footer 2", "Footer 3" if the last (and not the first block) on the page, and "Template Part", "Template Part 2", etc. for anything in between. We can even go with the latter as a starting point.

@youknowriad
Copy link
Contributor Author

I've updated with the following changes:

  • Use two columns instead of three.
  • When starting from a pattern, the title is prefilled with the pattern's title.
  • I kept the title when starting blank, I think it's important there otherwise we end up with duplicated titles.

@jameskoster
Copy link
Contributor

I kept the title when starting blank, I think it's important there otherwise we end up with duplicated titles.

I think that's fine for now. It also doubles as a cautionary "are you sure?" before embarking on a more advanced exercise.

Two columns is working much better 👍

Agree with Joen that we need to do something about the jumping. A fixed height on the modal helps a bit, but it's still fairly awkward:

fixed-heiht.mp4

I don't know if it helps at all, but this seems to be caused by:

  1. The navigation block – menu lists are loaded un-styled for a fraction of a second (IE in vertical orientation) which artificially elongates the pattern
  2. The Site Logo block – similar to the nav block; it loads the image at full size until it detects the dimensions set by the block

So perhaps it's something we need to fix separately on those blocks, or in the pattern preview itself... a loading state could be an option..?

@youknowriad
Copy link
Contributor Author

I don't know if it helps at all, but this seems to be caused by:
The navigation block – menu lists are loaded un-styled for a fraction of a second (IE in vertical orientation) which artificially elongates the pattern
The Site Logo block – similar to the nav block; it loads the image at full size until it detects the dimensions set by the block
So perhaps it's something we need to fix separately on those blocks, or in the pattern preview itself... a loading state could be an option..?

Can we open some issues about this, I think we should solve them separately of the current PR which just reuses the PatternList to render the previews. So if there's an issue here, there's probably an issue in the inserter and the patterns explore modal.

I don't mind if these are considered blockers but at this point, I don't know how to solve them and I don't know how difficult they will be but they should be addresses specifically and not add more code to this PR.

@jameskoster
Copy link
Contributor

I'll open issues.

Unsure if they should be blockers to this PR. I think less so if we apply a static height to the modal. What do you think @jasmussen ?

@jasmussen
Copy link
Contributor

jasmussen commented Feb 18, 2022

Oh I'd think it great to move forward so long as we believe in the overall direction, and have some open issues for the todos we agree on 👍 👍

Edit: About the static height, I think we should add one! Or is there a component-specific reason not to add one?

@youknowriad
Copy link
Contributor Author

Edit: About the static height, I think we should add one! Or is there a component-specific reason not to add one?

We can add one, no objections from me. What should it be?

@jasmussen
Copy link
Contributor

We can copy from the Preferences modal, which looks like it has a few complicated query based heights (would be nice to simplify those to just mobile and big), but it eventually settles on a 70% height, which seems good.

@youknowriad youknowriad merged commit 72d13ba into trunk Feb 18, 2022
@youknowriad youknowriad deleted the update/template-part-flows branch February 18, 2022 13:58
@github-actions github-actions bot added this to the Gutenberg 12.7 milestone Feb 18, 2022
@cbravobernal cbravobernal changed the title Update template part creation and replacement flows Template parts creation flow: Show existing template parts and a list of block patterns. Feb 25, 2022
@cbravobernal cbravobernal added the [Block] Template Part Affects the Template Parts Block label Feb 25, 2022
@cbravobernal cbravobernal changed the title Template parts creation flow: Show existing template parts and a list of block patterns. Template Parts: Show existing template parts and a list of block patterns at creation flow. Feb 25, 2022
@cbravobernal cbravobernal added the [Package] Block editor /packages/block-editor label Feb 26, 2022
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 [Package] Block editor /packages/block-editor [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants