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

Core data revisions: extend support to other post types #56353

Merged
merged 5 commits into from Nov 29, 2023

Conversation

ramonjd
Copy link
Member

@ramonjd ramonjd commented Nov 21, 2023

Follow up to:

What?

While we decide how best to expose revisions support to the frontend from the server, let's allow revisions support for templates, template parts, patterns and navigation post types.

Also changing the name of the supports array to POST_TYPE_ENTITIES_WITH_REVISIONS_SUPPORT to highlight that it's for "post entities", not root entities.

Why?

Share the love.

How?

Adding the post type slugs to the POST_TYPE_ENTITIES_WITH_REVISIONS_SUPPORT array.

Testing Instructions

Fire up a block theme, head to the site editor and make some changes to:

  1. a theme or custom template
  2. a theme or custom template part
  3. A pattern
  4. The site's navigation

Here's how to grab revisions for each post type in the browser's console:

Templates

Replace templateSlug with the template slug, e.g., home or wp-custom-template-my-template.

await wp.data.resolveSelect( 'core' ).getRevisions( 'postType', 'wp_template', twentytwentyfour//${ templateSlug } )

Template parts

Replace templateSlug with the template part slug, e.g., header.

await wp.data.resolveSelect( 'core' ).getRevisions( 'postType', 'wp_template_part', twentytwentyfour//${ templateSlug } )

Navigation

Replace parentId with the ID of the navigation post.
await wp.data.resolveSelect( 'core' ).getRevisions( 'postType', 'wp_navigation', parentId )

Patterns

Replace parentId with the ID of the pattern post.
await wp.data.resolveSelect( 'core' ).getRevisions( 'postType', 'wp_block', parentId )

Also check that the revisions response updates as you continue to edit these posts.

@ramonjd ramonjd added [Type] Enhancement A suggestion for improvement. [Package] Core data /packages/core-data labels Nov 21, 2023
@ramonjd ramonjd self-assigned this Nov 21, 2023
@ramonjd ramonjd requested a review from nerrad as a code owner November 21, 2023 02:55
'wp_navigation',
'wp_template',
'wp_template_part',
];
Copy link
Member Author

Choose a reason for hiding this comment

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

The current thinking is to extend the view context's response with support information.

Copy link
Contributor

Choose a reason for hiding this comment

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

Just double-checking what you mean here (sorry if I'm missing context — so to speak!): that we have a hard-coded list of types here because calling '/wp/v2/types?context=view' doesn't include a supports array in the response for each post type?

That makes sense to me, and from looking up wp-includes/post.php the list here corresponds with types that all opt-in to revisions under supports 👍

Copy link

github-actions bot commented Nov 21, 2023

Size Change: +1.59 kB (0%)

Total Size: 1.7 MB

Filename Size Change
build/block-editor/index.min.js 248 kB +66 B (0%)
build/block-library/blocks/file/view.min.js 322 B +2 B (+1%)
build/block-library/blocks/gallery/style-rtl.css 1.75 kB +196 B (+13%) ⚠️
build/block-library/blocks/gallery/style.css 1.75 kB +199 B (+13%) ⚠️
build/block-library/blocks/image/view.min.js 2.02 kB -31 B (-2%)
build/block-library/blocks/navigation/view.min.js 1.04 kB -27 B (-3%)
build/block-library/blocks/query/view.min.js 647 B +10 B (+2%)
build/block-library/blocks/search/view.min.js 475 B +4 B (+1%)
build/block-library/editor-rtl.css 12.5 kB +5 B (0%)
build/block-library/editor.css 12.4 kB +5 B (0%)
build/block-library/index.min.js 212 kB -13 B (0%)
build/block-library/style-rtl.css 14.7 kB +170 B (+1%)
build/block-library/style.css 14.7 kB +168 B (+1%)
build/blocks/index.min.js 51 kB -507 B (-1%)
build/core-data/index.min.js 72.6 kB +56 B (0%)
build/edit-site/index.min.js 208 kB +104 B (0%)
build/edit-site/style-rtl.css 14.4 kB +62 B (0%)
build/edit-site/style.css 14.4 kB +65 B (0%)
build/interactivity/index.min.js 12.4 kB +1.04 kB (+9%) 🔍
build/rich-text/index.min.js 9.98 kB +14 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 590 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.29 kB
build/block-editor/content.css 4.28 kB
build/block-editor/default-editor-styles-rtl.css 403 B
build/block-editor/default-editor-styles.css 403 B
build/block-editor/style-rtl.css 15.7 kB
build/block-editor/style.css 15.7 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 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/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/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/editor-rtl.css 834 B
build/block-library/blocks/image/editor.css 833 B
build/block-library/blocks/image/style-rtl.css 1.61 kB
build/block-library/blocks/image/style.css 1.6 kB
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
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/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/editor-rtl.css 666 B
build/block-library/blocks/post-featured-image/editor.css 662 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/quote/style-rtl.css 237 B
build/block-library/blocks/quote/style.css 237 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 140 B
build/block-library/blocks/read-more/style.css 140 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/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/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/commands/index.min.js 15.5 kB
build/commands/style-rtl.css 947 B
build/commands/style.css 942 B
build/components/index.min.js 256 kB
build/components/style-rtl.css 12 kB
build/components/style.css 12 kB
build/compose/index.min.js 12.7 kB
build/core-commands/index.min.js 2.72 kB
build/customize-widgets/index.min.js 12.1 kB
build/customize-widgets/style-rtl.css 1.43 kB
build/customize-widgets/style.css 1.43 kB
build/data-controls/index.min.js 651 B
build/data/index.min.js 8.87 kB
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/index.min.js 35.8 kB
build/edit-post/style-rtl.css 7.58 kB
build/edit-post/style.css 7.57 kB
build/edit-widgets/index.min.js 17.2 kB
build/edit-widgets/style-rtl.css 4.65 kB
build/edit-widgets/style.css 4.65 kB
build/editor/index.min.js 47.4 kB
build/editor/style-rtl.css 3.74 kB
build/editor/style.css 3.73 kB
build/element/index.min.js 4.87 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 7.76 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/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.11 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/index.min.js 4.84 kB
build/patterns/style-rtl.css 564 B
build/patterns/style.css 564 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.74 kB
build/reusable-blocks/style-rtl.css 265 B
build/reusable-blocks/style.css 265 B
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

Copy link
Contributor

@andrewserong andrewserong left a comment

Choose a reason for hiding this comment

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

Code-wise this is looking good to me 👍

One thing I noticed while testing with the provided function calls, is that revisions for wp_template and wp_template_part for me appear to return an array with each element having the same value (look at the wp_id of each). In the API response in the Network tab, each value in the array is unique, but not in what gets returned by .getRevisions():

image

Are you able to replicate that? I was wondering if it might be something to do with .id being the same with each of these items in the array, where wp_id is different? That's just a wild guess, though 🙂

@@ -20,8 +20,16 @@ export const DEFAULT_ENTITY_KEY = 'id';
const POST_RAW_ATTRIBUTES = [ 'title', 'excerpt', 'content' ];

// A hardcoded list of post types that support revisions.
// Reflects post types in Core's src/wp-includes/post.php.
Copy link
Contributor

Choose a reason for hiding this comment

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

Thanks for highlighting where these are set in core!

'wp_navigation',
'wp_template',
'wp_template_part',
];
Copy link
Contributor

Choose a reason for hiding this comment

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

Just double-checking what you mean here (sorry if I'm missing context — so to speak!): that we have a hard-coded list of types here because calling '/wp/v2/types?context=view' doesn't include a supports array in the response for each post type?

That makes sense to me, and from looking up wp-includes/post.php the list here corresponds with types that all opt-in to revisions under supports 👍

@ramonjd
Copy link
Member Author

ramonjd commented Nov 21, 2023

Are you able to replicate that? I was wondering if it might be something to do with .id being the same with each of these items in the array, where wp_id is different?

Nice find! 10 points!

I can replicate AND the content is always the same in each revision 🤦🏻

I checked the database and the revisions look good however.

Nevertheless, this is definitely not right, and indicates that something is up with the template revisions endpoint perhaps.

In theory, we should just be able to get revisions using the real post id, e.g., await wp.data.resolveSelect( 'core' ).getRevisions( 'postType', 'wp_template', 85 )

Thank you for finding this! I'll look into it.

@ramonjd
Copy link
Member Author

ramonjd commented Nov 21, 2023

Just double-checking what you mean here (sorry if I'm missing context — so to speak!): that we have a hard-coded list of types here because calling '/wp/v2/types?context=view' doesn't include a supports array in the response for each post type?

Exactly that. It's available in the edit context, but we don't want to expose that entire context.

So the next step is to expose it somehow in the view context I believe. 😄

@ramonjd ramonjd added the [Status] In Progress Tracking issues with work in progress label Nov 21, 2023
@ramonjd ramonjd marked this pull request as draft November 21, 2023 04:45
@ramonjd
Copy link
Member Author

ramonjd commented Nov 21, 2023

Converted to draft while I investigate

@ramonjd
Copy link
Member Author

ramonjd commented Nov 21, 2023

I was wondering if it might be something to do with .id being the same with each of these items in the array, where wp_id is different?

Yes, it's related. So for revisions, we have to use the wp_id, which is the "real" id, to store revision records in state.

At the moment getEntityRecords and other functions will refer to the id, but because we're only dealing with single entities (or a collection of several with different "ids"), so they can be stored using the id key, e.g.,

screen grab of template entity reducer state

So we either need to create an exception for revisions, that is, store by the real "id", or do it for all of them.

I tried the latter first and broke the site editor 🤣

@ramonjd
Copy link
Member Author

ramonjd commented Nov 21, 2023

I've got it storing the revisions the right way by sending the wp_id key with the action:

	const isTemplate = [ 'wp_template', 'wp_template_part' ].includes( name );
	return {
		type: 'RECEIVE_ITEM_REVISIONS',
		key: isTemplate ? 'wp_id' : DEFAULT_ENTITY_KEY,
		items: Array.isArray( records ) ? records : [ records ],
		recordKey,
		meta,
		query,
		kind,
		name,
		invalidateCache,
	};

Though I think I need to find a way to define this in the entityConfig.

I just need to crack removing them on REMOVE_ITEMS. For some reason, the id in the record is with two slashes twentytwentyfour//wp-custom-template-nag but state key is stored one slash twentytwentyfour/wp-custom-template-nag so I can't match them.

🤔

@ramonjd
Copy link
Member Author

ramonjd commented Nov 22, 2023

While testing this I found another bug: calling getRevisions() then getRevision() doesn't return cached the store item (it makes a separate API call) and replaces current items state.

Screenshot 2023-11-22 at 3 26 07 pm

Added to:

return {
type: 'RECEIVE_ITEM_REVISIONS',
key: isTemplate ? 'wp_id' : DEFAULT_ENTITY_KEY,
Copy link
Contributor

Choose a reason for hiding this comment

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

Why do we have a special case for templates?

Copy link
Member Author

Choose a reason for hiding this comment

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

Good question.

Template records have ids that look like this: theme_name//template_slug.

This is fine for storing template entities themselves, since the ids are unique are usually unique:

{
    'theme_name//template_slug_1': { ...data },
    'theme_name//template_slug_2': { ...data },
}

These template records have a property wp_id, whose value is the real post id (the unique key in the database).

The spicy bit is that templates revisions use the same the schema as their parents:

// a bunch of template revisions
[
    {
        id: 'theme_name//template_slug_1',
        wp_id: 2 // revision id
    },
    {
        id: 'theme_name//template_slug_1',
        wp_id: 3 // revision id
    },
]

So we can't store them by the default key id as we do with other post types since it's not unique. We have to use wp_id.

What I've done is temporary, and I think the key should be defined somewhere in entityConfig - not sure how to do it cleanly yet as it's only required for revisions.

Copy link
Contributor

Choose a reason for hiding this comment

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

AFAIK, the "id" is unique (I implemented that system)

Copy link
Member Author

@ramonjd ramonjd Nov 22, 2023

Choose a reason for hiding this comment

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

the "id" is unique

For the entities or their revisions?

Here's the raw output of /wp/v2/templates/twentytwentythree/wp-custom-template-roo/revisions, where wp-custom-template-roo is a template I created with some changes.

API response
[
    {
        "id": "twentytwentythree//wp-custom-template-roo",
        "theme": "twentytwentythree",
        "content": {
            "raw": "<!-- wp:paragraph -->\n<p>roo12</p>\n<!-- /wp:paragraph -->"
        },
        "slug": "142-revision-v1",
        "source": "custom",
        "origin": null,
        "type": "revision",
        "description": "",
        "title": {
            "raw": "roo",
            "rendered": "roo"
        },
        "status": "inherit",
        "wp_id": 145,
        "has_theme_file": false,
        "author": 1,
        "modified": "2023-11-22T04:02:31",
        "parent": 142,
        "_links": {
            "self": [
                {
                    "href": "http://localhost:8888/index.php?rest_route=/wp/v2/templates/twentytwentythree//wp-custom-template-roo/revisions/145"
                }
            ],
            "parent": [
                {
                    "href": "http://localhost:8888/index.php?rest_route=/wp/v2/templates/twentytwentythree//wp-custom-template-roo"
                }
            ]
        }
    },
    {
        "id": "twentytwentythree//wp-custom-template-roo",
        "theme": "twentytwentythree",
        "content": {
            "raw": "<!-- wp:paragraph -->\n<p>roo1</p>\n<!-- /wp:paragraph -->"
        },
        "slug": "142-revision-v1",
        "source": "custom",
        "origin": null,
        "type": "revision",
        "description": "",
        "title": {
            "raw": "roo",
            "rendered": "roo"
        },
        "status": "inherit",
        "wp_id": 144,
        "has_theme_file": false,
        "author": 1,
        "modified": "2023-11-22T04:02:28",
        "parent": 142,
        "_links": {
            "self": [
                {
                    "href": "http://localhost:8888/index.php?rest_route=/wp/v2/templates/twentytwentythree//wp-custom-template-roo/revisions/144"
                }
            ],
            "parent": [
                {
                    "href": "http://localhost:8888/index.php?rest_route=/wp/v2/templates/twentytwentythree//wp-custom-template-roo"
                }
            ]
        }
    },
    {
        "id": "twentytwentythree//wp-custom-template-roo",
        "theme": "twentytwentythree",
        "content": {
            "raw": "<!-- wp:paragraph -->\n<p>roo</p>\n<!-- /wp:paragraph -->"
        },
        "slug": "142-revision-v1",
        "source": "custom",
        "origin": null,
        "type": "revision",
        "description": "",
        "title": {
            "raw": "roo",
            "rendered": "roo"
        },
        "status": "inherit",
        "wp_id": 143,
        "has_theme_file": false,
        "author": 1,
        "modified": "2023-11-22T04:02:26",
        "parent": 142,
        "_links": {
            "self": [
                {
                    "href": "http://localhost:8888/index.php?rest_route=/wp/v2/templates/twentytwentythree//wp-custom-template-roo/revisions/143"
                }
            ],
            "parent": [
                {
                    "href": "http://localhost:8888/index.php?rest_route=/wp/v2/templates/twentytwentythree//wp-custom-template-roo"
                }
            ]
        }
    }
]

Copy link
Contributor

Choose a reason for hiding this comment

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

For the entities, the "templates" are not always in the database so wp_id is not always set (it's not set if you load a raw untouched theme template). By yes, revisions are only for the "saved" templates, so the REST API for revisions is probably using wp_id.

The same should apply to template parts.

So yeah, there's a special case here for sure, I think it's probably ok to generate the URL to fetch revisions using wp_id for templates and template parts but it seems all the rest (all the places in our reducers....) should continue using id.

@ramonjd
Copy link
Member Author

ramonjd commented Nov 22, 2023

While testing this I found another bug: calling getRevisions() then getRevision() doesn't return cached the store item (it makes a separate API call) and replaces current items state.

Fixed in #56416

@ramonjd ramonjd marked this pull request as ready for review November 22, 2023 09:19
@ramonjd ramonjd removed the [Status] In Progress Tracking issues with work in progress label Nov 22, 2023
@ramonjd ramonjd force-pushed the update/add-core-data-revisions-support-to-templates branch from 1eb6e18 to c12f97b Compare November 28, 2023 04:36
Copy link
Contributor

@andrewserong andrewserong left a comment

Choose a reason for hiding this comment

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

This is testing great for me now, @ramonjd!

✅ Tested getRevisions and getRevision for post
✅ Tested getRevisions and getRevision for page
✅ Tested getRevisions and getRevision for wp_block
✅ Tested getRevisions and getRevision for wp_navigation
✅ Tested getRevisions and getRevision for wp_template
✅ Tested getRevisions and getRevision for wp_template_part
✅ Tested that pagination options per_page and page work as expected

LGTM! ✨

packages/core-data/src/actions.js Outdated Show resolved Hide resolved
packages/core-data/src/reducer.js Show resolved Hide resolved
const entityConfig = configs.find(
( config ) => config.kind === kind && config.name === name
);
const key =
Copy link
Contributor

Choose a reason for hiding this comment

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

For me this should continue to use the default entity key.

Copy link
Member Author

Choose a reason for hiding this comment

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

Do you mean DEFAULT_ENTITY_KEY?

The value is id, which doesn't work for template/template parts. To get the unique record id we have to refer to the wp_id property.

… as mirth in a grave, a jest without jesters. Begone, thou witless motley, for even a jest doth surpass thy meager worth!

Empty line: *whimper*
@ramonjd ramonjd merged commit 6a74183 into trunk Nov 29, 2023
52 checks passed
@ramonjd ramonjd deleted the update/add-core-data-revisions-support-to-templates branch November 29, 2023 00:25
@github-actions github-actions bot added this to the Gutenberg 17.2 milestone Nov 29, 2023
derekblank pushed a commit that referenced this pull request Dec 7, 2023
* Initial commit: add revisions support for templates

* Renames constant to be clearer about what these post types apply to.
Adds wp_block and wp_navigation

* Testing updating record.key in the action.

* Moving `revisionKey` to the entity config and use it in the action and resolvers

* Me: Pray, depart hence, thou knavish trifle! Thy utility be as absent as mirth in a grave, a jest without jesters. Begone, thou witless motley, for even a jest doth surpass thy meager worth!
Empty line: *whimper*
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] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants