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

Patterns: Add renaming, duplication, and deletion options #52270

Merged
merged 18 commits into from
Jul 7, 2023

Conversation

aaronrobertshaw
Copy link
Contributor

@aaronrobertshaw aaronrobertshaw commented Jul 4, 2023

Fixes: #51919

Related:

NOTE: This PR still needs some polishing and updates to ensure better a11y

What?

This PR allows for:

  • renaming or deleting custom user patterns & custom template parts
  • duplicating all patterns or template parts (custom, theme, or core)

Known Issues / Follow Ups

  • The stacking of snackbar notices is being worked on in a separate PR
  • The flow when creating a pattern that returns via the "manage all" list view pages could be improved in a follow-up
  • We likely need some keyboard shortcuts similar to the delete option for the renaming and duplication
    • If the patterns list is changed to a simple list the need for the keyboard event handling/shortcuts might be alleviated

However, I'd reconsider the listbox / options implementation as it introduces unnecessary complex interaction for screen reader users. This i sjust a list of objects, visually presented in a grid. I'd recommend to use a standard list.

See: #52253

Why?

This improves management options for patterns and template parts and avoids convoluted flows to affect relatively minor changes such as renaming.

How?

  • Adds new options to each pattern's dropdown menu
  • All patterns or template parts, have a "Duplicate" option now
  • Custom user-created patterns or template parts have both "Rename" and "Delete" options

Testing Instructions

  1. Create some synced and unsynced patterns via the Site Editor > Patterns page
  2. Test renaming your created patterns
  3. Try out duplicating your patterns
  4. Ensure you can delete your patterns
  5. Navigate to one of the theme pattern categories e.g. Featured for TT3 theme
  6. Confirm that you only have the "duplicate" option for a theme pattern and it works as expected
  7. Navigate to one of the template part categories and find a core template part e.g. Header or Footer
  8. Duplicate the core template part
  9. Check that you can now also rename and delete this newly created custom template part

Testing Instructions for Keyboard

TBA

Screenshots or screencast

Screen.Recording.2023-07-04.at.4.13.46.pm.mp4

@aaronrobertshaw aaronrobertshaw added [Type] Enhancement A suggestion for improvement. [Feature] Patterns A collection of blocks that can be synced (previously reusable blocks) or unsynced Blessed for major release Can be iterated during a WordPress beta period labels Jul 4, 2023
@aaronrobertshaw aaronrobertshaw self-assigned this Jul 4, 2023
@aaronrobertshaw
Copy link
Contributor Author

@kevin940726 you might have some insight around the keyboard delete functionality. Do you think we need to replicate something similar for the rename and duplicate options, or should we explore the change suggested in #52253 to switch the listbox/options approach with a simple list?

@aaronrobertshaw
Copy link
Contributor Author

The addition of further options to the pattern dropdowns was raised in #52009.

If I'm understanding that discussion correctly, the solution proposed there is to replace the "delete" shortcut with a shortcut that opens the actions menu.

Perhaps we could implement that as a follow-up to this PR, in the interests of making the deadline for the next beta?

@github-actions
Copy link

github-actions bot commented Jul 4, 2023

Size Change: +1.16 kB (0%)

Total Size: 1.42 MB

Filename Size Change
build/edit-site/index.min.js 87 kB +1.14 kB (+1%)
build/edit-site/style-rtl.css 12.7 kB +9 B (0%)
build/edit-site/style.css 12.7 kB +10 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.28 kB
build/autop/index.min.js 2.1 kB
build/blob/index.min.js 451 B
build/block-directory/index.min.js 6.99 kB
build/block-directory/style-rtl.css 1.02 kB
build/block-directory/style.css 1.02 kB
build/block-editor/content-rtl.css 4.25 kB
build/block-editor/content.css 4.24 kB
build/block-editor/default-editor-styles-rtl.css 381 B
build/block-editor/default-editor-styles.css 381 B
build/block-editor/index.min.js 209 kB
build/block-editor/style-rtl.css 14.8 kB
build/block-editor/style.css 14.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 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 584 B
build/block-library/blocks/button/editor.css 582 B
build/block-library/blocks/button/style-rtl.css 624 B
build/block-library/blocks/button/style.css 623 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 409 B
build/block-library/blocks/columns/style.css 409 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.61 kB
build/block-library/blocks/cover/style.css 1.6 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 159 B
build/block-library/blocks/details/style.css 159 B
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 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 269 B
build/block-library/blocks/file/style.css 270 B
build/block-library/blocks/file/view.min.js 312 B
build/block-library/blocks/footnotes/style-rtl.css 191 B
build/block-library/blocks/footnotes/style.css 188 B
build/block-library/blocks/freeform/editor-rtl.css 2.58 kB
build/block-library/blocks/freeform/editor.css 2.58 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.53 kB
build/block-library/blocks/gallery/style.css 1.53 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 654 B
build/block-library/blocks/group/editor.css 654 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 76 B
build/block-library/blocks/heading/style.css 76 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 834 B
build/block-library/blocks/image/editor.css 833 B
build/block-library/blocks/image/style-rtl.css 1.42 kB
build/block-library/blocks/image/style.css 1.42 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-interactivity.min.js 1.46 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 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 507 B
build/block-library/blocks/media-text/style.css 505 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 712 B
build/block-library/blocks/navigation-link/editor.css 711 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 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.21 kB
build/block-library/blocks/navigation/style.css 2.2 kB
build/block-library/blocks/navigation/view.min.js 984 B
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 401 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 174 B
build/block-library/blocks/paragraph/editor.css 174 B
build/block-library/blocks/paragraph/style-rtl.css 279 B
build/block-library/blocks/paragraph/style.css 281 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-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 588 B
build/block-library/blocks/post-featured-image/editor.css 586 B
build/block-library/blocks/post-featured-image/style-rtl.css 319 B
build/block-library/blocks/post-featured-image/style.css 319 B
build/block-library/blocks/post-navigation-link/style-rtl.css 153 B
build/block-library/blocks/post-navigation-link/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 314 B
build/block-library/blocks/post-template/style.css 314 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 103 B
build/block-library/blocks/preformatted/style.css 103 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 335 B
build/block-library/blocks/pullquote/style.css 335 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 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 450 B
build/block-library/blocks/query/editor.css 449 B
build/block-library/blocks/quote/style-rtl.css 222 B
build/block-library/blocks/quote/style.css 222 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 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 178 B
build/block-library/blocks/search/editor.css 178 B
build/block-library/blocks/search/style-rtl.css 587 B
build/block-library/blocks/search/style.css 584 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 531 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 234 B
build/block-library/blocks/separator/style.css 234 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 203 B
build/block-library/blocks/site-logo/style.css 203 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 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.43 kB
build/block-library/blocks/social-links/style.css 1.42 kB
build/block-library/blocks/spacer/editor-rtl.css 348 B
build/block-library/blocks/spacer/editor.css 348 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 433 B
build/block-library/blocks/table/editor.css 433 B
build/block-library/blocks/table/style-rtl.css 645 B
build/block-library/blocks/table/style.css 644 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 174 B
build/block-library/blocks/video/style.css 174 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.1 kB
build/block-library/common.css 1.1 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.1 kB
build/block-library/editor.css 12.1 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 201 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 13.7 kB
build/block-library/style.css 13.7 kB
build/block-library/theme-rtl.css 686 B
build/block-library/theme.css 691 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 kB
build/commands/index.min.js 14.9 kB
build/commands/style-rtl.css 827 B
build/commands/style.css 827 B
build/components/index.min.js 240 kB
build/components/style-rtl.css 11.7 kB
build/components/style.css 11.7 kB
build/compose/index.min.js 12 kB
build/core-commands/index.min.js 2.26 kB
build/core-data/index.min.js 16.1 kB
build/customize-widgets/index.min.js 12 kB
build/customize-widgets/style-rtl.css 1.46 kB
build/customize-widgets/style.css 1.45 kB
build/data-controls/index.min.js 640 B
build/data/index.min.js 8.28 kB
build/date/index.min.js 17.8 kB
build/deprecated/index.min.js 451 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.63 kB
build/edit-post/classic-rtl.css 544 B
build/edit-post/classic.css 545 B
build/edit-post/index.min.js 35.4 kB
build/edit-post/style-rtl.css 7.58 kB
build/edit-post/style.css 7.58 kB
build/edit-widgets/index.min.js 16.9 kB
build/edit-widgets/style-rtl.css 4.53 kB
build/edit-widgets/style.css 4.53 kB
build/editor/index.min.js 45.4 kB
build/editor/style-rtl.css 3.58 kB
build/editor/style.css 3.58 kB
build/element/index.min.js 4.8 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 7.62 kB
build/format-library/style-rtl.css 554 B
build/format-library/style.css 553 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/index.min.js 10.2 kB
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.64 kB
build/keycodes/index.min.js 1.84 kB
build/list-reusable-blocks/index.min.js 2.18 kB
build/list-reusable-blocks/style-rtl.css 836 B
build/list-reusable-blocks/style.css 836 B
build/media-utils/index.min.js 2.9 kB
build/notices/index.min.js 948 B
build/plugins/index.min.js 1.77 kB
build/preferences-persistence/index.min.js 1.84 kB
build/preferences/index.min.js 1.24 kB
build/primitives/index.min.js 943 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 943 B
build/react-i18n/index.min.js 615 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.7 kB
build/reusable-blocks/index.min.js 2.46 kB
build/reusable-blocks/style-rtl.css 243 B
build/reusable-blocks/style.css 243 B
build/rich-text/index.min.js 10.9 kB
build/router/index.min.js 1.77 kB
build/server-side-render/index.min.js 1.94 kB
build/shortcode/index.min.js 1.39 kB
build/style-engine/index.min.js 1.83 kB
build/token-list/index.min.js 582 B
build/url/index.min.js 3.57 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 958 B
build/warning/index.min.js 268 B
build/widgets/index.min.js 7.16 kB
build/widgets/style-rtl.css 1.15 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.02 kB

compressed-size-action

@jameskoster
Copy link
Contributor

This is a very exciting PR that significantly enhances the pattern management experience, nice work so far!

Renaming seems to work well ✅

Deleting

  • Theme template parts that have been customised should have a "Clear customizations" action instead of "Delete". The reason being that they can be customized by the user, but will always exist in the file system so cannot be truly deleted in the UI.
  • In the confirmation dialog let's make the primary button label "Delete" to match other deletion flows:
Screenshot 2023-07-04 at 12 10 39

Duplicating

  • Asking the user to supply a name immediately adds some friction to the flow. Especially for template parts where you also need to specify the area. If it's not a lot of work, I think it would be interesting to try an iteration where the name is automatically set so the duplication feels more instantaneous. We could add a (copy) suffix to the new pattern. For template parts the area can match the source.
  • Being sent immediately to edit the duplicated pattern was a bit unexpected for me. Could we try remaining in the management view?
  • Duplicating theme patterns is powerful because it effectively makes them editable, but it's a bit confusing that they get recategorized as 'My patterns'. I understand there's a technical limitation that makes this a requirement for now, but in the short term I wonder if the 'Duplicate' action for theme patterns should be more explicit: 'Copy to My patterns'? That way there's no confusion about where the new pattern will end up.

@github-actions
Copy link

github-actions bot commented Jul 5, 2023

Flaky tests detected in fee8340.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/5483162145
📝 Reported issues:

@aaronrobertshaw
Copy link
Contributor Author

Thank you for the great feedback @jameskoster 👍

I've pushed a range of changes that include:

  • Labelling the delete action for customized template parts that have theme files with "Clear customization"
  • Updating the "delete" prompt when it is clearing customizations
  • Removing the rename action for customized template parts with theme files
  • Fixing keyboard deletion for customized template parts
  • Directly creating patterns or template parts so we don't get the modals or navigate away to the edit mode
  • Updating the duplicate label for theme patterns to "Copy to My patterns"

Here's the current state of the PR now:

Screen.Recording.2023-07-05.at.6.29.02.pm.mp4

A few things to note:

  1. If a user has lots of patterns, staying on the same page might make it hard to initially spot the new pattern.
  2. If a user repeatedly duplicates the same pattern we end up with multiple patterns with the ${title} (Copy) title.
  3. If we’re happy with the general direction of this PR, we’ll need to update the aria descriptions for the keyboard delete shortcuts to reflect the “clear customizations” change rather than delete.
  4. The flash when the patterns list is updating needs improvement if we continue with directly creating patterns and template parts.
  5. We don’t have any sorting options at this stage for the patterns list so I believe it might be in order of last updated. This could change as we implement pagination.
  6. Do we need to make the delete confirmation for template parts to avoid the mention of patterns e.g. “Are you sure you want to delete this template part?” instead of “Are you sure you want to delete this pattern?”

If you're happy with the new direction, I can polish up this PR tomorrow and aim to get it merged this week.

@jameskoster
Copy link
Contributor

Labelling the delete action for customized template parts that have theme files with "Clear customization"
Updating the "delete" prompt when it is clearing customizations
Removing the rename action for customized template parts with theme files
Updating the duplicate label for theme patterns to "Copy to My patterns"

✅ 🎉

Fixing keyboard deletion for customized template parts
How does this work? I don't seem to be able to focus the ellipsis using the keyboard.

Directly creating patterns or template parts so we don't get the modals or navigate away to the edit mode
Nice, this generally feels much better to me.

When duplicating a theme pattern, being redirected to "My patterns" is perhaps a little heavy-handed. Could try displaying a confirmation Snackbar saying something like "'Pattern name (copy)' added to my patterns", potentially with an action to "View my patterns"?

A confirmation snackbar would probably make sense for all duplications. It could include an "Edit pattern" action.

If a user repeatedly duplicates the same pattern we end up with multiple patterns with the ${title} (Copy) title.

Duplicate names seems like something to avoid generally. But I noticed you can reuse existing names when creating a pattern manually too, so perhaps it's something to address separately?

Do we need to make the delete confirmation for template parts to avoid the mention of patterns

Yes probably. Perhaps instead of "Are you sure you want to delete this pattern/template part" we could say "Are you sure you want to delete 'pattern name'?"

If you're happy with the new direction, I can polish up this PR tomorrow and aim to get it merged this week.

It needs more reviewers, but I'm pretty happy with the overall direction here.

@aaronrobertshaw aaronrobertshaw marked this pull request as ready for review July 6, 2023 08:27
@aaronrobertshaw
Copy link
Contributor Author

Appreciate the continued feedback @jameskoster 🙇

I've made the suggested tweaks, which include:

  • Snackbar success notices when duplicating patterns or template parts
  • A "View my pattern" action in the success notice when duplicating theme patterns
  • An "Edit pattern" action in the success notice when duplicating non-theme patterns
  • "Edit template part" action to success notices when duplicating template parts
  • Updated delete confirmation which now references the entity name rather than its type (pattern/template part)
  • Pattern deletion success notice now references pattern name so it matches delete confirmation prompt and template part deletion success message

Duplicate names seems like something to avoid generally. But I noticed you can reuse existing names when creating a pattern manually too, so perhaps it's something to address separately?

These patterns leverage the wp_block CPT and to date, there haven't been any restrictions on the uniqueness of the name, I assume given they rely on a dedicated id field.

Given existing reusable blocks can potentially have duplicate names, retroactively enforcing uniqueness might lead to some issues. We might be able to enforce this constraint on new patterns however we'd also have to update the REST API as well.

I'm not sure we can address this for 6.3, unfortunately. I'll create an issue and add it to the Patterns tracking issue.

Let me know what you think of the current state. I'll get some extra reviews on this tomorrow.

@jameskoster
Copy link
Contributor

Thanks for the updates, I think this is working pretty well now. Just a couple of minor points:

An "Edit pattern" action in the success notice when duplicating non-theme patterns
"Edit template part" action to success notices when duplicating template parts

If you'd like to simplify, the action could probably just be "Edit".

Where names appear in Snackbars I think they should be wrapped in double quotes instead of single.

Snackbar position seems to be broken when there are many patterns:

snackbar.mp4

@aaronrobertshaw
Copy link
Contributor Author

Thanks for the quick fixes @glendaviesnz, I've just pushed a minor tweak to improve readability. Once the tests are green I'll get this merged so we can iterate further on the a11y side.

@aaronrobertshaw aaronrobertshaw added the Backport to WP 6.7 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta label Jul 7, 2023
@aaronrobertshaw aaronrobertshaw merged commit bb5c6d0 into trunk Jul 7, 2023
@aaronrobertshaw aaronrobertshaw deleted the add/renaming-and-duplication-of-patterns branch July 7, 2023 06:40
@github-actions github-actions bot added this to the Gutenberg 16.3 milestone Jul 7, 2023
@afercia
Copy link
Contributor

afercia commented Jul 7, 2023

We likely need some keyboard shortcuts similar to the delete option for the renaming and duplication
If the patterns list is changed to a simple list the need for the keyboard event handling/shortcuts might be alleviated

Thank you for keeping keyboard operability into consideration. Yes, I'd say this is one more reason to reconsider the grit/roving tabindex implementation and just use a simple list instead.
Showing in the UI a control that can't be focused and operated with a keyboard is less than ideal for sighted keyboard users. Not to mention the amount of keyboard shortcuts would become a bit too large.

@aaronrobertshaw
Copy link
Contributor Author

Yes, I'd say this is one more reason to reconsider the grit/roving tabindex implementation and just use a simple list instead.

Thanks for the sanity check @afercia 👍

@glendaviesnz is currently working on those accessibility improvements to the patterns list in #52357 and we discussed landing this PR so #52357 could be rebased and take into account the full scope of interactions intended for 6.3.

Unfortunately, I'll be unavailable next week, but if you do foresee any problems please create issues and Glen, among others, will be able to take a look. There's also a Patterns tracking issue that they could be added to, to raise awareness.

@afercia
Copy link
Contributor

afercia commented Jul 7, 2023

Thanks for pointing me at #52357, will follow up there. 🌴

@tellthemachines
Copy link
Contributor

I just cherry-picked this PR to the update/beta-4-second-round branch to get it included in the next release: 3e5bc99

@tellthemachines tellthemachines removed the Backport to WP 6.7 Beta/RC Pull request that needs to be backported to the WordPress major release that's currently in beta label Jul 10, 2023
tellthemachines added a commit that referenced this pull request Jul 11, 2023
* Post and Comment Template blocks: Change render_block_context priority to 1 (#52364)

* Footnotes: fix lingering format boundary attr (#52439)

* Footnotes: Fix incorrect anchor position in Firefox (#52425)

* Scope CSS rules for the wp admin reset to js support only. (#52376)

* Fix: Patterns & template parts: remove "apply globally" option from block settings (#52160)

* Advanced styles panel: add an early return

* Update index.js

* Minor styling changes

* Use array of features

---------

Co-authored-by: George Mamadashvili <georgemamadashvili@gmail.com>

* make the body of the editor minimmum viewport height so that smaller contents maintain clickability (#52406)

* Patterns: Add renaming, duplication, and deletion options (#52270)

* Patterns: Update manage pattern links to go to site editor if available (#52403)

* [Patterns] Separate sync status into a filter control (#52303)

Co-authored-by: Saxon Fletcher <saxonafletcher@gmail.com>
Co-authored-by: Glen Davies <glen.davies@automattic.com>

* Patterns: Add missing decoding entities processing in Patterns and Template/Parts pages (#52449)

* Fix document title icon appearance (#52424)

* Quote block: Add transform to paragraph (#51809)

* Add ungroup transform as transform to p

* Lint

* Update test and snapshot.

---------

Co-authored-by: Juan Aldasoro <juanfraa@gmail.com>

* remove sidebar group descriptions (#52453)

* Patterns:  alternative grid layout to improve keyboard accessibility (#52357)

* add sync tooltip (#52458)

* Patterns: Update section heading levels (#52273)

* Ensure that the unsaved title is not persisted when reopening the modal (#52473)

* Iframe: avoid asset parsing & fix script localisation (#52405)

* Iframe: avoid asset parsing & fix script localisation

* Add e2e test for script localisation

* Update descriptions (#52468)

* Footnotes: show in inserter and placehold (#52445)

* Footnotes: show in inserter and placehold

* Fix placeholder block membrane; fix copy; add icon, label

---------

Co-authored-by: Miguel Fonseca <150562+mcsf@users.noreply.github.com>

* Fix: Focus loss on navigation link label editing on Firefox. (#52428)

* Update tooltip (#52465)

* Refactor, document, and fix image block deprecations (#52081)

* Refactor, document, and fix image block deprecations

* Fix v5 attributes & supports

* Fix v1 & v2 deprecation tests

* Rename deprecated test descriptions

* Respect custom aspect ratio (#52286)

* add image width and height via css inline style, update width and height attrs to be string

* keep width and height as attributes too, keep the attributes as numbers

* updates image fixtures

* RichText/Footnotes: make getRichTextValues work with InnerBlocks.Content (#52241)

* RichText/Footnotes: make getRichTextValues work with InnerBlocks.Content

---------

Co-authored-by: Miguel Fonseca <150562+mcsf@users.noreply.github.com>

* Footnotes: save numbering through the entity provider (#52423)

* Footnotes: save numbering through the entity provider

* Add sup so no styling is needed at all

* Migrate old format

* Restore old styles, fix nested attribute queries

* Fix anchor selection

* Migrate markup in entity provider instead

* Fix tests

* Fix typo

* Fix comment

---------

Co-authored-by: Miguel Fonseca <150562+mcsf@users.noreply.github.com>

* Revert "Post editor: Require confirmation before removing Footnotes (#52277)" (#52486)

This reverts commit e6426ea.

* List block: Fix selected type option (#52472)

* Library - make pattern title clickable (#51898)

* Use button inside title

* Remove href

* Preserve roving tab index

* Fix link colors to match trunk $gray-600

* Remove redundant var

* Amend colors as per review

* remove old files again

---------

Co-authored-by: scruffian <ben@scruffian.com>

* remove status icon (#52457)

* Rename block theme activation nonce variable. (#52398)

---------

Co-authored-by: Bernie Reiter <96308+ockham@users.noreply.github.com>
Co-authored-by: Ella <4710635+ellatrix@users.noreply.github.com>
Co-authored-by: Aki Hamano <54422211+t-hamano@users.noreply.github.com>
Co-authored-by: Andrea Fercia <a.fercia@gmail.com>
Co-authored-by: Carolina Nymark <myazalea@hotmail.com>
Co-authored-by: George Mamadashvili <georgemamadashvili@gmail.com>
Co-authored-by: Andrei Draganescu <me@andreidraganescu.info>
Co-authored-by: Aaron Robertshaw <60436221+aaronrobertshaw@users.noreply.github.com>
Co-authored-by: Kai Hao <kevin830726@gmail.com>
Co-authored-by: Saxon Fletcher <saxonafletcher@gmail.com>
Co-authored-by: Glen Davies <glen.davies@automattic.com>
Co-authored-by: James Koster <james@jameskoster.co.uk>
Co-authored-by: Rich Tabor <hi@richtabor.com>
Co-authored-by: Juan Aldasoro <juanfraa@gmail.com>
Co-authored-by: Miguel Fonseca <150562+mcsf@users.noreply.github.com>
Co-authored-by: Jorge Costa <jorge.costa@developer.pt>
Co-authored-by: Alex Lende <alex+github.com@lende.xyz>
Co-authored-by: Héctor <27339341+priethor@users.noreply.github.com>
Co-authored-by: Petter Walbø Johnsgård <petter@dekode.no>
Co-authored-by: Dave Smith <getdavemail@gmail.com>
Co-authored-by: scruffian <ben@scruffian.com>
Co-authored-by: Peter Wilson <519727+peterwilsoncc@users.noreply.github.com>
@femkreations femkreations added the Needs User Documentation Needs new user documentation label Sep 28, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Blessed for major release Can be iterated during a WordPress beta period [Feature] Patterns A collection of blocks that can be synced (previously reusable blocks) or unsynced Needs User Documentation Needs new user documentation [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Custom Patterns: Allow renaming and duplication within the Site Editor
6 participants