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

Tutorial: Create your First App with Gutenberg Data #38250

Merged
merged 52 commits into from
Feb 4, 2022

Conversation

adamziel
Copy link
Contributor

@adamziel adamziel commented Jan 26, 2022

Description

This PR proposes a tutorial gently introducing the user to Gutenberg Data's concepts through building a small application.

It is a spin-off of #37615 dedicated for new users. I would like to follow up with one or two more advanced materials.

For now I drafted the Readme, setup, and the part where we build the list view for WordPress pages. I'd like to stop and collect feedback before writing the rest of it. Perhaps we could merge this tutorial part-by-part instead of all at once.

Kudos to @getdave @bph @ironprogrammer @ryanwelcher @mkaz @youknowriad @gziolo @talldan @tellthemachines @draganescu for their feedback so far!

cc @draganescu @gziolo @youknowriad @talldan @annezazu @noisysocks

@adamziel adamziel added [Type] Developer Documentation Documentation for developers [Package] Core data /packages/core-data labels Jan 26, 2022
@adamziel adamziel self-assigned this Jan 26, 2022
Copy link
Contributor

@youknowriad youknowriad left a comment

Choose a reason for hiding this comment

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

I like this tutorial a lot. I didn't read fully but somethings standout to me: the repeating of wp.element.createElement is not great and aside JSX, it's seem that you're using ESnext in the examples. It makes me wonder whether it's better to just use JSX in the examples and have a note at the beginning or the end that links to the build setup config tutorial.

wp_register_script(
'my-first-gutenberg-app',
plugins_url( 'my-first-gutenberg-app/app.js' ),
array( 'wp-components', 'wp-data', 'wp-core-data' ),
Copy link
Contributor

Choose a reason for hiding this comment

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

should we explain what each one of the dependencies provide for our example?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Good point! I added a short comment for each

@Mamaduka
Copy link
Member

Mamaduka commented Jan 27, 2022

Stellar work, @adamziel 🥇

Will this tutorial be part of the Gutenberg examples repo?

I usually find it helpful to see finished example projects and how all pieces come together.

P.S. I assumed that you need to wrap your app in EntityProvider when working with entities; I see that this isn't a hard requirement.

@gziolo
Copy link
Member

gziolo commented Jan 27, 2022

Will this tutorial be part of the Gutenberg examples repo?

That would be great 👍

It makes me wonder whether it's better to just use JSX in the examples and have a note at the beginning or the end that links to the build setup config tutorial.

I agree that tutorials should promote JSX and ES Modules in the first place. It would be good to double check whether they still provide tye version without JSX.

The first exposure to coding tutorials is here: https://github.com/WordPress/gutenberg/tree/trunk/docs/getting-started/create-block

I haven’t checked the tutorial yet but I love the idea ❤️

@adamziel
Copy link
Contributor Author

adamziel commented Jan 27, 2022

I just realized it's not obvious how to review the rendered markdown and not just the code: Rendered markdown

Here's a few links to rich-text previews:

Unfortunately the screenshots don't render. If anyone knows how to work around that, please tell us :D

@github-actions
Copy link

github-actions bot commented Jan 31, 2022

Size Change: +26 B (0%)

Total Size: 1.14 MB

Filename Size Change
build/block-library/index.min.js 166 kB +26 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 960 B
build/admin-manifest/index.min.js 1.1 kB
build/annotations/index.min.js 2.75 kB
build/api-fetch/index.min.js 2.22 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 459 B
build/block-directory/index.min.js 6.28 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/index.min.js 141 kB
build/block-editor/style-rtl.css 14.6 kB
build/block-editor/style.css 14.6 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 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-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.4 kB
build/block-library/blocks/cover/style.css 1.4 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 322 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/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 810 B
build/block-library/blocks/image/editor.css 809 B
build/block-library/blocks/image/style-rtl.css 500 B
build/block-library/blocks/image/style.css 503 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 343 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.85 kB
build/block-library/blocks/navigation/style.css 1.84 kB
build/block-library/blocks/navigation/view.min.js 2.81 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 245 B
build/block-library/blocks/separator/style.css 245 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/editor-rtl.css 560 B
build/block-library/blocks/template-part/editor.css 559 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/editor-rtl.css 10.1 kB
build/block-library/editor.css 10.1 kB
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/style-rtl.css 11.1 kB
build/block-library/style.css 11.1 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.09 kB
build/block-serialization-spec-parser/index.min.js 2.79 kB
build/blocks/index.min.js 46.4 kB
build/components/index.min.js 215 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/core-data/index.min.js 13.4 kB
build/customize-widgets/index.min.js 11.4 kB
build/customize-widgets/style-rtl.css 1.5 kB
build/customize-widgets/style.css 1.49 kB
build/data-controls/index.min.js 631 B
build/data/index.min.js 7.49 kB
build/date/index.min.js 31.9 kB
build/deprecated/index.min.js 485 B
build/dom-ready/index.min.js 304 B
build/dom/index.min.js 4.5 kB
build/edit-navigation/index.min.js 16.2 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/index.min.js 29.7 kB
build/edit-post/style-rtl.css 7.15 kB
build/edit-post/style.css 7.14 kB
build/edit-site/index.min.js 41.5 kB
build/edit-site/style-rtl.css 7.22 kB
build/edit-site/style.css 7.21 kB
build/edit-widgets/index.min.js 16.7 kB
build/edit-widgets/style-rtl.css 4.17 kB
build/edit-widgets/style.css 4.17 kB
build/editor/index.min.js 38.4 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.71 kB
build/element/index.min.js 3.29 kB
build/escape-html/index.min.js 517 B
build/format-library/index.min.js 6.58 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.63 kB
build/html-entities/index.min.js 424 B
build/i18n/index.min.js 3.75 kB
build/is-shallow-equal/index.min.js 501 B
build/keyboard-shortcuts/index.min.js 1.8 kB
build/keycodes/index.min.js 1.39 kB
build/list-reusable-blocks/index.min.js 1.72 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.92 kB
build/notices/index.min.js 925 B
build/nux/index.min.js 2.08 kB
build/nux/style-rtl.css 747 B
build/nux/style.css 743 B
build/plugins/index.min.js 1.95 kB
build/primitives/index.min.js 917 B
build/priority-queue/index.min.js 582 B
build/react-i18n/index.min.js 671 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.65 kB
build/reusable-blocks/index.min.js 2.22 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11 kB
build/server-side-render/index.min.js 1.58 kB
build/shortcode/index.min.js 1.49 kB
build/token-list/index.min.js 639 B
build/url/index.min.js 1.9 kB
build/viewport/index.min.js 1.05 kB
build/warning/index.min.js 248 B
build/widgets/index.min.js 7.15 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.04 kB

compressed-size-action

@adamziel
Copy link
Contributor Author

adamziel commented Jan 31, 2022

I improved the screenshots, polished the grammar, and added finished examples. Here's the rich-text preview of the tutorial so far.

Can y'all see anything else that can be improved before merging the first part of it?

Will this tutorial be part of the Gutenberg examples repo?

@Mamaduka I would love that! And I think we're pretty close to making it happen by merging this PR :-)

I like this tutorial a lot. I didn't read fully but somethings standout to me: the repeating of wp.element.createElement is not great and aside JSX, it's seem that you're using ESnext in the examples. It makes me wonder whether it's better to just use JSX in the examples and have a note at the beginning or the end that links to the build setup config tutorial.

@youknowriad I went for JSX-first examples with a hidden compiled snippet. I think that's the best of both worlds, as in we have readability and convenience at the same time.

As for using ESnext in the examples – many features are widely supported by browsers so I think that's fine as long as it's not sprinkled with JSX.

I agree that tutorials should promote JSX and ES Modules in the first place.

@gziolo I went for wp.data in this tutorial as I wasn't sure how to access global stores via importing ES modules. Is it possible?

I usually find it helpful to see finished example projects and how all pieces come together.

It's now a part of this PR! :-)


@getdave I know you had the following notes:

Introduce the convenience entity selectors and resolvers such as getMenus

Pages unfortunately don't have getPages selectors and I am not sure how to make a clear distinction between hard-coded entities and different types pages. Would you like to propose something?

Be ultra clear that the resolver needs the exact same arguments as the selector in order to work

How would this look like? I didn't know how to introduce this topic as we're not building a new resolver at this point, only calling a selector that happens to have a related resolver.


Congratulations! You are now ready to start building the app!

## Readability vs Convenience
Copy link
Member

Choose a reason for hiding this comment

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

I think you can skip this whole paragraph or link to some existing page that covers the same topic.

A good reference would be also a tutorial that @getdave contributed for the standalone block editor:

https://github.com/WordPress/gutenberg/blob/trunk/docs/how-to-guides/platform/custom-block-editor/tutorial.md

Those are advanced tutorials and they should be using the most efficient syntax so in my opinion the build step is essential here.

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 agree in principle, but I think of this tutorial as more of a first step towards understanding advanced Gutenberg concepts. It can benefit from a build tool but I don't think it should require one. I'm thinking of myself here – I'm pretty impatient and I would instinctively look for a different tutorial with less pre-requisites.

That being said, let's see if I can make this section more succinct.

Copy link
Member

Choose a reason for hiding this comment

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

That's why we always try to pair the tutorial with https://github.com/WordPress/gutenberg-examples so you don't have to write a single line of code to run it 😄

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Ooh that's great, thank you for sharing! I'll look into that

@ryanwelcher
Copy link
Contributor

First, this is a fantastic resource and I'm so happy you've taken the time to put it together. I think it'll be a great addition to https://github.com/WordPress/gutenberg-examples.

My only concern, which has been shared by others already, is we're not using JSX and a build process. I completely understand the concept of just wanting to start building but we have been discussing moving all code examples to use JSX first ( see WordPress/gutenberg-examples#171 and #35776 ) and adding a new, advanced tutorial that doesn't that seems to be a bit of a step backward in that regards.

We also miss out on driving home just how powerful and versatile the @wordpress/scripts package is. This is a perfect opportunity to show it being used in a non-block application and would actually simplify some of the enqueue code by handling the dependencies automatically.

From my own personal experience having built applications like this in the past, I would always choose JSX for readability and the @wordpress/scripts as it provides all of the tools I would need to get starting quickly - but that's just one developer's opinion 😄

@getdave
Copy link
Contributor

getdave commented Feb 1, 2022

Is there a general tutorial on "getting setup with @wordpress/scripts and JSX? If there is then it would seem fine to point users towards that as a "setup" step and then continue the tutorial in JSX mode. It is far more readable and probably makes the tutorial more approachable for both beginner and more advanced readers.

Copy link
Contributor

@getdave getdave left a comment

Choose a reason for hiding this comment

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

Amazing work Adam. The refactors you've done have made this so much better.

I re-read for accuracy and suggested some nits.

Can't wait for this to land!

docs/how-to-guides/data-basics/1-setup.md Outdated Show resolved Hide resolved
docs/how-to-guides/data-basics/README.md Outdated Show resolved Hide resolved
@adamziel
Copy link
Contributor Author

adamziel commented Feb 3, 2022

Fantastic suggestions @getdave, I merged all of them – thank you so much!

I think we're almost there. I removed the compiled bits and focused on JSX as almost everyone here suggested. I will polish the code examples a bit more to use imports instead of window.wp and we may be good to merge.

@adamziel adamziel force-pushed the doc/first-app-with-gutenberg-data branch from ac4277d to 91246da Compare February 4, 2022 11:45
Copy link
Contributor

@youknowriad youknowriad left a comment

Choose a reason for hiding this comment

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

I see that you included the app here, and I saw that you extracted it into a PR in Gutenberg-examples as well. Should we remove the app from here?

@adamziel
Copy link
Contributor Author

adamziel commented Feb 4, 2022

@youknowriad Yeah I don't like having the code in this repo AND in gutenberg-examples. I removed the samples from this PR, but there is a small downside: you can no longer review how the current step looks like when finished, only the entire tutorial. I'm considering adding step1-setup, step2-list-of-pages etc inside of the 09-code-data-basics-esnext in gutenberg-examples, what do you think?

@getdave
Copy link
Contributor

getdave commented Feb 4, 2022

Great work on the updates Adam. Thanks for being so receptive to feedback.

adamziel and others added 4 commits February 4, 2022 14:21
Co-authored-by: Dave Smith <getdavemail@gmail.com>
Co-authored-by: Dave Smith <getdavemail@gmail.com>
…s to the selector and hasFinished resolution - thank you @get_dave!
…ess/gutenberg into doc/first-app-with-gutenberg-data
@adamziel
Copy link
Contributor Author

adamziel commented Feb 4, 2022

Alright, does anyone dare to approve this PR and the code sample in gutenberg-examples? :D

@youknowriad
Copy link
Contributor

I'm considering adding step1-setup, step2-list-of-pages etc inside of the 09-code-data-basics-esnext in gutenberg-examples, what do you think?

It feels a bit too much, maybe it's fine to just have these temporary steps like we have them now inline in the tutorial.

Copy link
Contributor

@youknowriad youknowriad left a comment

Choose a reason for hiding this comment

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

LGTM

@adamziel adamziel merged commit d9e34c8 into trunk Feb 4, 2022
@adamziel adamziel deleted the doc/first-app-with-gutenberg-data branch February 4, 2022 16:10
@github-actions github-actions bot added this to the Gutenberg 12.6 milestone Feb 4, 2022
@mkaz
Copy link
Member

mkaz commented Feb 5, 2022

Good stuff! 👍

For this to show up on the block editor handbook site you need to add it to the docs/toc.json file and then run npm run docs:build and check in the generated manifest.json file.

adamziel added a commit that referenced this pull request May 18, 2022
The fourth part of the Create your First App with Gutenberg Data tutorial, this time focused on creating new records. See #38250.

Co-authored-by: Dave Smith <getdavemail@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Package] Core data /packages/core-data [Type] Developer Documentation Documentation for developers
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants