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

Add a new create-block template for the block development quick start guide #55876

Closed
wants to merge 9 commits into from

Conversation

ndiego
Copy link
Member

@ndiego ndiego commented Nov 5, 2023

What?

This PR adds a new template for the create-block package that allows users to easily scaffold a "Copyright Date" block. This block is used in the Quick Start Guide for the Getting Started section of the Block Editor Handbook.

This PR should be merged alongside the new Quick Start Guide (see #___).

Why?

A create-block template makes it much easier for new developers to get started with block development. Rather than having to build the block from scratch, the template provides the complete block in a matter of seconds.

@ndiego ndiego added the [Type] Developer Documentation Documentation for developers label Nov 5, 2023
@ndiego ndiego self-assigned this Nov 5, 2023
Copy link

github-actions bot commented Nov 5, 2023

Size Change: +1.27 kB (0%)

Total Size: 1.7 MB

Filename Size Change
build/block-editor/index.min.js 248 kB +113 B (0%)
build/block-editor/style-rtl.css 15.7 kB +37 B (0%)
build/block-editor/style.css 15.7 kB +32 B (0%)
build/block-library/blocks/image/editor-rtl.css 849 B +15 B (+2%)
build/block-library/blocks/image/editor.css 847 B +14 B (+2%)
build/block-library/blocks/post-featured-image/editor-rtl.css 666 B +78 B (+13%) ⚠️
build/block-library/blocks/post-featured-image/editor.css 662 B +76 B (+13%) ⚠️
build/block-library/editor-rtl.css 12.5 kB +43 B (0%)
build/block-library/editor.css 12.4 kB +43 B (0%)
build/block-library/index.min.js 212 kB +73 B (0%)
build/components/index.min.js 256 kB -1.57 kB (-1%)
build/components/style-rtl.css 12 kB +79 B (+1%)
build/components/style.css 12 kB +76 B (+1%)
build/core-data/index.min.js 71.8 kB +129 B (0%)
build/data/index.min.js 8.87 kB +2 B (0%)
build/edit-post/index.min.js 35.6 kB -28 B (0%)
build/edit-site/index.min.js 209 kB +1.89 kB (+1%)
build/edit-site/style-rtl.css 14.3 kB +49 B (0%)
build/edit-site/style.css 14.3 kB +49 B (0%)
build/editor/index.min.js 46 kB +66 B (0%)
build/patterns/index.min.js 4.77 kB +1 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 964 B
build/annotations/index.min.js 2.71 kB
build/api-fetch/index.min.js 2.29 kB
build/autop/index.min.js 2.11 kB
build/blob/index.min.js 461 B
build/block-directory/index.min.js 7.25 kB
build/block-directory/style-rtl.css 1.04 kB
build/block-directory/style.css 1.04 kB
build/block-editor/content-rtl.css 4.28 kB
build/block-editor/content.css 4.27 kB
build/block-editor/default-editor-styles-rtl.css 403 B
build/block-editor/default-editor-styles.css 403 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 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 138 B
build/block-library/blocks/audio/theme.css 138 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 587 B
build/block-library/blocks/button/editor.css 587 B
build/block-library/blocks/button/style-rtl.css 633 B
build/block-library/blocks/button/style.css 632 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 421 B
build/block-library/blocks/columns/style.css 421 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 647 B
build/block-library/blocks/cover/editor.css 650 B
build/block-library/blocks/cover/style-rtl.css 1.7 kB
build/block-library/blocks/cover/style.css 1.69 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 98 B
build/block-library/blocks/details/style.css 98 B
build/block-library/blocks/embed/editor-rtl.css 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 138 B
build/block-library/blocks/embed/theme.css 138 B
build/block-library/blocks/file/editor-rtl.css 316 B
build/block-library/blocks/file/editor.css 316 B
build/block-library/blocks/file/style-rtl.css 280 B
build/block-library/blocks/file/style.css 281 B
build/block-library/blocks/file/view.min.js 320 B
build/block-library/blocks/footnotes/style-rtl.css 201 B
build/block-library/blocks/footnotes/style.css 199 B
build/block-library/blocks/form-input/editor-rtl.css 229 B
build/block-library/blocks/form-input/editor.css 228 B
build/block-library/blocks/form-input/style-rtl.css 343 B
build/block-library/blocks/form-input/style.css 343 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 343 B
build/block-library/blocks/form-submission-notification/editor.css 342 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 452 B
build/block-library/blocks/freeform/editor-rtl.css 2.61 kB
build/block-library/blocks/freeform/editor.css 2.61 kB
build/block-library/blocks/gallery/editor-rtl.css 957 B
build/block-library/blocks/gallery/editor.css 962 B
build/block-library/blocks/gallery/style-rtl.css 1.55 kB
build/block-library/blocks/gallery/style.css 1.55 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 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 189 B
build/block-library/blocks/heading/style.css 189 B
build/block-library/blocks/html/editor-rtl.css 340 B
build/block-library/blocks/html/editor.css 341 B
build/block-library/blocks/image/style-rtl.css 1.6 kB
build/block-library/blocks/image/style.css 1.59 kB
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/image/view.min.js 2.01 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 505 B
build/block-library/blocks/media-text/style.css 503 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 671 B
build/block-library/blocks/navigation-link/editor.css 672 B
build/block-library/blocks/navigation-link/style-rtl.css 103 B
build/block-library/blocks/navigation-link/style.css 103 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/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.27 kB
build/block-library/blocks/navigation/style.css 2.26 kB
build/block-library/blocks/navigation/view.min.js 1.07 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 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 235 B
build/block-library/blocks/paragraph/editor.css 235 B
build/block-library/blocks/paragraph/style-rtl.css 335 B
build/block-library/blocks/paragraph/style.css 335 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 508 B
build/block-library/blocks/post-comments-form/style.css 508 B
build/block-library/blocks/post-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/style-rtl.css 345 B
build/block-library/blocks/post-featured-image/style.css 345 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 409 B
build/block-library/blocks/post-template/style.css 408 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 335 B
build/block-library/blocks/pullquote/style.css 335 B
build/block-library/blocks/pullquote/theme-rtl.css 168 B
build/block-library/blocks/pullquote/theme.css 168 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 486 B
build/block-library/blocks/query/editor.css 486 B
build/block-library/blocks/query/style-rtl.css 312 B
build/block-library/blocks/query/style.css 308 B
build/block-library/blocks/query/view.min.js 637 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 184 B
build/block-library/blocks/search/editor.css 184 B
build/block-library/blocks/search/style-rtl.css 613 B
build/block-library/blocks/search/style.css 613 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 471 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 329 B
build/block-library/blocks/shortcode/editor.css 329 B
build/block-library/blocks/site-logo/editor-rtl.css 760 B
build/block-library/blocks/site-logo/editor.css 760 B
build/block-library/blocks/site-logo/style-rtl.css 204 B
build/block-library/blocks/site-logo/style.css 204 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 682 B
build/block-library/blocks/social-links/editor.css 681 B
build/block-library/blocks/social-links/style-rtl.css 1.45 kB
build/block-library/blocks/social-links/style.css 1.45 kB
build/block-library/blocks/spacer/editor-rtl.css 359 B
build/block-library/blocks/spacer/editor.css 359 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 432 B
build/block-library/blocks/table/editor.css 432 B
build/block-library/blocks/table/style-rtl.css 646 B
build/block-library/blocks/table/style.css 645 B
build/block-library/blocks/table/theme-rtl.css 157 B
build/block-library/blocks/table/theme.css 157 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 191 B
build/block-library/blocks/video/style.css 191 B
build/block-library/blocks/video/theme-rtl.css 139 B
build/block-library/blocks/video/theme.css 139 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.11 kB
build/block-library/common.css 1.11 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.5 kB
build/block-library/style.css 14.5 kB
build/block-library/theme-rtl.css 700 B
build/block-library/theme.css 705 B
build/block-serialization-default-parser/index.min.js 1.13 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 51.6 kB
build/commands/index.min.js 15.5 kB
build/commands/style-rtl.css 947 B
build/commands/style.css 942 B
build/compose/index.min.js 12.7 kB
build/core-commands/index.min.js 2.72 kB
build/customize-widgets/index.min.js 12 kB
build/customize-widgets/style-rtl.css 1.51 kB
build/customize-widgets/style.css 1.5 kB
build/data-controls/index.min.js 651 B
build/date/index.min.js 17.9 kB
build/deprecated/index.min.js 462 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.68 kB
build/edit-post/classic-rtl.css 571 B
build/edit-post/classic.css 571 B
build/edit-post/style-rtl.css 7.89 kB
build/edit-post/style.css 7.88 kB
build/edit-widgets/index.min.js 17.2 kB
build/edit-widgets/style-rtl.css 4.85 kB
build/edit-widgets/style.css 4.84 kB
build/editor/style-rtl.css 3.58 kB
build/editor/style.css 3.58 kB
build/element/index.min.js 4.87 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 7.82 kB
build/format-library/style-rtl.css 577 B
build/format-library/style.css 577 B
build/hooks/index.min.js 1.57 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.61 kB
build/interactivity/index.min.js 11.4 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.76 kB
build/keycodes/index.min.js 1.9 kB
build/list-reusable-blocks/index.min.js 2.21 kB
build/list-reusable-blocks/style-rtl.css 865 B
build/list-reusable-blocks/style.css 865 B
build/media-utils/index.min.js 2.92 kB
build/notices/index.min.js 964 B
build/nux/index.min.js 2.01 kB
build/nux/style-rtl.css 775 B
build/nux/style.css 771 B
build/patterns/style-rtl.css 567 B
build/patterns/style.css 566 B
build/plugins/index.min.js 1.81 kB
build/preferences-persistence/index.min.js 1.85 kB
build/preferences/index.min.js 1.26 kB
build/primitives/index.min.js 994 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 988 B
build/react-i18n/index.min.js 631 B
build/react-refresh-entry/index.min.js 9.46 kB
build/react-refresh-runtime/index.min.js 6.78 kB
build/redux-routine/index.min.js 2.71 kB
build/reusable-blocks/index.min.js 2.73 kB
build/reusable-blocks/style-rtl.css 265 B
build/reusable-blocks/style.css 265 B
build/rich-text/index.min.js 10.2 kB
build/router/index.min.js 1.79 kB
build/server-side-render/index.min.js 1.96 kB
build/shortcode/index.min.js 1.4 kB
build/style-engine/index.min.js 1.98 kB
build/token-list/index.min.js 587 B
build/url/index.min.js 3.83 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 967 B
build/warning/index.min.js 259 B
build/widgets/index.min.js 7.18 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.18 kB
build/wordcount/index.min.js 1.03 kB

compressed-size-action

@gziolo
Copy link
Member

gziolo commented Nov 7, 2023

I wanted to raise my concern in regard to the growing number of Create Block templates maintained in the Gutenberg repository. At the moment, there are already 4 templates included:

This will be the fifth template (including 3 npm packages containing only templates). They all duplicate the plugin-templates folder and have a slightly different configuration. What actions could we take to improve the current status? Do you think all these templates are still useful for folks?

@gziolo
Copy link
Member

gziolo commented Nov 7, 2023

I really like the idea of using the block that uses save to store the last snapshot of its content, but also provides a way to dynamically update the content on the server when conditions change. I left a comment #55876 (comment) describing the potential issue with using the current year in the save method that will change over time. I will think about an alternative that is going to be compatible with how validation works in the block editor.

@ndiego
Copy link
Member Author

ndiego commented Nov 7, 2023

I wanted to raise my concern in regard to the growing number of Create Block templates maintained in the Gutenberg repository. At the moment, there are already 4 templates included

Yeah, I have the same concern, but I don't know how else to provide an easy quick start template. I do want to note that we likely can remove the Create Block tutorial template once those docs are rewritten. The tutorial will be based on this example block.

…der.php.mustache

Co-authored-by: Greg Ziółkowski <grzegorz@gziolo.pl>
Copy link

github-actions bot commented Nov 7, 2023

Flaky tests detected in 2b11d42.
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/6814202038
📝 Reported issues:

@ndiego
Copy link
Member Author

ndiego commented Nov 8, 2023

I left a comment #55876 (comment) describing the potential issue with using the current year in the save method that will change over time.

@gziolo @ryanwelcher @juanmaguitar I have come up with a solution to the validation issue mentioned above. The solution involved adding a new attribute, fallbackCurrentDate and a useEffect in the edit.js file to set the attribute when the block is rendered.

I have mocked up these changes in the original plugin repo here. I have also added an optimization to the render.php file where the saved block $content will be used if the fallbackCurrentDate does not differ from the current year.

When you have a sec, let me know what you think of this approach, and if it looks okay, I will get this template updated accordingly. It does add a level of complexity to the block, but since this block will be used in the "Create a block tutorial" it will allow us to cover a few more advanced topics towards the end of the tutorial, which would be useful for new block developers. Thanks!

@ryanwelcher
Copy link
Contributor

ryanwelcher commented Nov 9, 2023

@ndiego just took a quick look at the changes and am wondering if it makes sense to add a check to see if the fallbackCurrentYear has changed before calling setAttributes? Something like the following perhaps:

// When the block loads, set the fallbackCurrentYear attribute to the current year.
useEffect(
    () => { 
        if ( currentYear.toString !== fallbackCurrentYear ) {
            setAttributes( { fallbackCurrentYear: currentYear.toString() } );
        }
    }
[ currentYear, setAttributes ]
);

@ndiego
Copy link
Member Author

ndiego commented Nov 9, 2023

@ndiego just took a quick look at the changes and am wondering if it makes sense to add a check to see if the fallbackCurrentYear has changed before calling setAttributes?

Good call! I'll update that.

@ndiego
Copy link
Member Author

ndiego commented Nov 9, 2023

I have updated the template to address the block validation issues caused by the save function. The solution involved adding a new attribute, fallbackCurrentDate, and a useEffect in the edit.js file to set the attribute when the block is rendered.

While this change makes the block a bit more complicated, it also makes it more interesting. The methods used in this Quick Start Guide template will be covered in depth in the upcoming "Create a block tutorial" that will be based on this demo "Copyright Date" block.

@ndiego ndiego marked this pull request as ready for review November 9, 2023 15:55
@gziolo
Copy link
Member

gziolo commented Nov 9, 2023

While this change makes the block a bit more complicated, it also makes it more interesting. The methods used in this Quick Start Guide template will be covered in depth in the upcoming "Create a block tutorial" that will be based on this demo "Copyright Date" block.

That’s an excellent way to put it. I hope you are right, and it will allow us to illustrate the benefits of saving the block content as inner HTML and how it can be further modified on the server during rendering. This is a good opportunity to pivot from the pre-existing messaging that uses a strict split between static and dynamic blocks.

The last check I recommend doing for this block is saving it in the template or post content. The next step would be manually changing the fallback current date in the database entry. Finally, the question would be what happens when the saved and modified block gets loaded in the editor and React's useEffect triggers the change in the value of the attribute. Will the user see unsaved changes applied without doing anything? I'm really curious how it all works. It's rather non-issue for the newly inserted block, as we do similar tricks with other blocks like the File block where the translet download text gets set just after inserting.

@gziolo
Copy link
Member

gziolo commented Nov 9, 2023

Yeah, I have the same concern, but I don't know how else to provide an easy quick start template. I do want to note that we likely can remove the Create Block tutorial template once those docs are rewritten. The tutorial will be based on this example block.

I contemplated more about it, and I would be thrilled if there were a way to avoid creating another npm package with the Create Block template in the Gutenberg repository if possible. Would it be possible to replace the current default example: https://github.com/WordPress/gutenberg/tree/trunk/packages/create-block/lib/templates/block? These two blocks don’t differ as much so there is little value in keeping the old one. The biggest differences are CSS files used instead of block supports and two variants: static and dynamic. It really feels that the new Quick Start template is better shaped to introduce folks to the world of blocks.

In addition to that, it's worth considering sunsetting @wordpress/create-block-tutorial-template after the tutorial gets rewritten to use the new block proposed in this PR. If we want to keep backward compatibility then we can always alias the package name to the default template somehow.

There is also this question wheter we want to keep around the es5 template shipped with the Create Block tool. If the sentiment is to keep it then it should rather get rewritten to present the new demo block.

@ndiego
Copy link
Member Author

ndiego commented Nov 9, 2023

Would it be possible to replace the current default example: https://github.com/WordPress/gutenberg/tree/trunk/packages/create-block/lib/templates/block? These two blocks don’t differ as much so there is little value in keeping the old one.

Yeah, I am not sure. The current block template is extremely simple, making it a fairly good starting point to build your own custom block if you just want a basic scaffold. My demo block is definitely more opinionated.

Another idea would be to directly replace the current Create Block tutorial template with this example. The npm package name would remain the same and all we would need to do is remove the Quick Start section from the current tutorial. The more I think about it, this would be the simplest approach and will not add an additional template. This block will also form the basis of the upcoming tutorial, so naming works.

🤔 Thoughts @ryanwelcher @juanmaguitar?

The last check I recommend doing for this block is saving it in the template or post content. The next step would be manually changing the fallback current date in the database entry. Finally, the question would be what happens when the saved and modified block gets loaded in the editor and React's useEffect triggers the change in the value of the attribute. Will the user see unsaved changes applied without doing anything?

Thanks! I have been running lots of random tests and it's working quite well:

  • Loading from a template/pattern works as expected with no validation errors, and it does not trigger an update when the Editor loads.
  • I did discover an issue if the user manually removes the fallbackCurrentDate attribute when placing the block in a template/pattern, but I just patched that.
  • An update will trigger in the Editor when the year changes over since the attribute will get updated. But this would only happen once a year from a user perspective, and IMO, it's an interesting side effect to cover in the tutorial.

@gziolo
Copy link
Member

gziolo commented Nov 10, 2023

Yeah, I am not sure. The current block template is extremely simple, making it a fairly good starting point to build your own custom block if you just want a basic scaffold. My demo block is definitely more opinionated.

With block variants, it's possible to have two versions in a single template:

  • quick start - a simply a dynamic block with no save and simple render.php
  • tutorial - a full version of the block as exists today

The npm package name would remain the same and all we would need to do is remove the Quick Start section from the current tutorial. The more I think about it, this would be the simplest approach and will not add an additional template. This block will also form the basis of the upcoming tutorial, so naming works.

Like mentioned above, I can see how both could work with a single template. However, I also can see how the scenario you described would work. I'm mostly thinking that now that you work on a separate repository with examples of blocks scaffolded with Create Block using custom templates, it would be nice to tailor the default setup of Create Block so it integrates fully the Getting Started section of the Block Editor Handbook. The current default version of the project scaffolded by Create Block isn't explained in the Block Editor Handbook, unfortunately.

@juanmaguitar juanmaguitar added the [Tool] Create Block /packages/create-block label Nov 10, 2023
@juanmaguitar
Copy link
Contributor

juanmaguitar commented Nov 10, 2023

With block variants, it's possible to have two versions in a single template:

  • quick start - a simply a dynamic block with no save and simple render.php
  • tutorial - a full version of the block as exists today

I see this could be a possible scenario for the future but I don't see this new and "opinionated" template being part of a create-block variant from the very beginning.

Another idea would be to directly replace the current Create Block tutorial template with this example.

I agree replacing the current template for this "tutorial" block is a good path forward here as it has some advantages:

  • it continues reinforcing the idea of how powerful a template is (in the quick start guide)
  • It keeps create-block variants as a means to scaffold types of blocks
  • It doesn't change the current distribution and number of templates as this one is really an update of the former tutorial template
  • As Nick mentions: "the npm package name would remain the same and all we would need to do is remove the Quick Start section from the current tutorial"

IMHO we can take the conversation about keeping templates for create-block organized and discoverable out of the scope of this PR and start it in a new discussion or issue.

@ndiego
Copy link
Member Author

ndiego commented Nov 11, 2023

Thanks for all the great discussion folks. I am going to close this PR in favor of #56056. This new PR takes a modified approach:

  • The create-block-tutorial-template will be updated to the new "Copyright Date" block example
  • The Quick Start section in the current Create a block tutorial is removed
    • It will no longer be accurate once the template is updated, and removing this section does not really detract from the current tutorial while I work on creating the new tutorial
  • Add the new /getting-started/quick-start-guide doc which details how to use the template to scaffold the example block

@ndiego ndiego closed this Nov 11, 2023
@gziolo gziolo deleted the add/create-block-quick-start-template branch November 11, 2023 17:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Tool] Create Block /packages/create-block [Type] Developer Documentation Documentation for developers
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants