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

Global styles: enable user global styles revisions #46667

Closed
wants to merge 23 commits into from

Conversation

ramonjd
Copy link
Member

@ramonjd ramonjd commented Dec 20, 2022

Related to:

What?

Display revisions to a user's global style changes in the global styles sidebar (revisions for the wp_global_styles custom post type).

These revisions are the ones made by the current, logged-in author. (should we show all authors' revisions?)

We're only showing maximum 100 to limit the payload.

2023-04-12.16.50.24.mp4

How?

By:

  • adding a new 'version-history' entry to _links, mimicking the one from the posts API that contains count and href properties
  • adding a new callback to the global styles API – /revisions, which also mimics the REST API's /wp/v2/posts/<parent>/revisions – that returns data from wp_get_post_revisions()

Testing Instructions

npm run test:unit:php -- --filter Gutenberg_REST_Global_Styles_Controller_Test

npm run test:e2e:playwright -- --headed site-editor/user-global-styles-revisions.spec.js

@ramonjd ramonjd self-assigned this Dec 20, 2022
@ramonjd ramonjd force-pushed the try/user-global-styles-revisions branch from 475a386 to e32c7d4 Compare December 20, 2022 05:21
@ramonjd ramonjd mentioned this pull request Dec 20, 2022
17 tasks
@github-actions
Copy link

github-actions bot commented Dec 20, 2022

Size Change: +1.9 kB (0%)

Total Size: 1.37 MB

Filename Size Change
build/block-editor/index.min.js 203 kB +15 B (0%)
build/core-data/index.min.js 16.5 kB +196 B (+1%)
build/edit-site/index.min.js 65.5 kB +1.25 kB (+2%)
build/edit-site/style-rtl.css 10.3 kB +221 B (+2%)
build/edit-site/style.css 10.3 kB +223 B (+2%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/annotations/index.min.js 2.78 kB
build/api-fetch/index.min.js 2.27 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 483 B
build/block-directory/index.min.js 7.2 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.11 kB
build/block-editor/content.css 4.1 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 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 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 91 B
build/block-library/blocks/avatar/style.css 91 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 628 B
build/block-library/blocks/button/style.css 627 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 409 B
build/block-library/blocks/columns/style.css 409 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 649 B
build/block-library/blocks/cover/editor.css 651 B
build/block-library/blocks/cover/style-rtl.css 1.61 kB
build/block-library/blocks/cover/style.css 1.6 kB
build/block-library/blocks/details-summary/editor-rtl.css 65 B
build/block-library/blocks/details-summary/editor.css 65 B
build/block-library/blocks/details-summary/style-rtl.css 61 B
build/block-library/blocks/details-summary/style.css 61 B
build/block-library/blocks/details/style-rtl.css 54 B
build/block-library/blocks/details/style.css 54 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 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 269 B
build/block-library/blocks/file/style.css 270 B
build/block-library/blocks/file/view.min.js 353 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 984 B
build/block-library/blocks/gallery/editor.css 988 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 76 B
build/block-library/blocks/heading/style.css 76 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 830 B
build/block-library/blocks/image/editor.css 829 B
build/block-library/blocks/image/style-rtl.css 652 B
build/block-library/blocks/image/style.css 652 B
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 507 B
build/block-library/blocks/media-text/style.css 505 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 716 B
build/block-library/blocks/navigation-link/editor.css 715 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation/editor-rtl.css 2.13 kB
build/block-library/blocks/navigation/editor.css 2.14 kB
build/block-library/blocks/navigation/style-rtl.css 2.22 kB
build/block-library/blocks/navigation/style.css 2.21 kB
build/block-library/blocks/navigation/view-modal.min.js 2.81 kB
build/block-library/blocks/navigation/view.min.js 447 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 401 B
build/block-library/blocks/page-list/editor.css 401 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 174 B
build/block-library/blocks/paragraph/editor.css 174 B
build/block-library/blocks/paragraph/style-rtl.css 279 B
build/block-library/blocks/paragraph/style.css 281 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 501 B
build/block-library/blocks/post-comments-form/style.css 501 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 588 B
build/block-library/blocks/post-featured-image/editor.css 586 B
build/block-library/blocks/post-featured-image/style-rtl.css 322 B
build/block-library/blocks/post-featured-image/style.css 322 B
build/block-library/blocks/post-navigation-link/style-rtl.css 153 B
build/block-library/blocks/post-navigation-link/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 281 B
build/block-library/blocks/post-template/style.css 281 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 335 B
build/block-library/blocks/pullquote/style.css 335 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 463 B
build/block-library/blocks/query/editor.css 463 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 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 408 B
build/block-library/blocks/search/style.css 406 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 489 B
build/block-library/blocks/site-logo/editor.css 489 B
build/block-library/blocks/site-logo/style-rtl.css 203 B
build/block-library/blocks/site-logo/style.css 203 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.4 kB
build/block-library/blocks/social-links/style.css 1.39 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 433 B
build/block-library/blocks/table/editor.css 433 B
build/block-library/blocks/table/style-rtl.css 651 B
build/block-library/blocks/table/style.css 650 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 404 B
build/block-library/blocks/template-part/editor.css 404 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 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 179 B
build/block-library/blocks/video/style.css 179 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.12 kB
build/block-library/common.css 1.12 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 11.6 kB
build/block-library/editor.css 11.6 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 204 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 12.8 kB
build/block-library/style.css 12.8 kB
build/block-library/theme-rtl.css 698 B
build/block-library/theme.css 703 B
build/block-serialization-default-parser/index.min.js 1.13 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 51.1 kB
build/commands/index.min.js 14.8 kB
build/commands/style-rtl.css 1.1 kB
build/commands/style.css 1.09 kB
build/components/index.min.js 208 kB
build/components/style-rtl.css 11.7 kB
build/components/style.css 11.7 kB
build/compose/index.min.js 12.4 kB
build/customize-widgets/index.min.js 12.2 kB
build/customize-widgets/style-rtl.css 1.41 kB
build/customize-widgets/style.css 1.41 kB
build/data-controls/index.min.js 718 B
build/data/index.min.js 8.68 kB
build/date/index.min.js 40.4 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.72 kB
build/edit-post/classic-rtl.css 571 B
build/edit-post/classic.css 571 B
build/edit-post/index.min.js 35 kB
build/edit-post/style-rtl.css 7.59 kB
build/edit-post/style.css 7.58 kB
build/edit-widgets/index.min.js 17.3 kB
build/edit-widgets/style-rtl.css 4.56 kB
build/edit-widgets/style.css 4.56 kB
build/editor/index.min.js 45.9 kB
build/editor/style-rtl.css 3.49 kB
build/editor/style.css 3.48 kB
build/element/index.min.js 4.95 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 7.26 kB
build/format-library/style-rtl.css 557 B
build/format-library/style.css 556 B
build/hooks/index.min.js 1.66 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.79 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.79 kB
build/keycodes/index.min.js 1.94 kB
build/list-reusable-blocks/index.min.js 2.14 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.99 kB
build/notices/index.min.js 977 B
build/plugins/index.min.js 1.94 kB
build/preferences-persistence/index.min.js 2.23 kB
build/preferences/index.min.js 1.35 kB
build/primitives/index.min.js 960 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 942 B
build/react-i18n/index.min.js 702 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.75 kB
build/reusable-blocks/index.min.js 2.26 kB
build/reusable-blocks/style-rtl.css 265 B
build/reusable-blocks/style.css 265 B
build/rich-text/index.min.js 11.1 kB
build/server-side-render/index.min.js 2.09 kB
build/shortcode/index.min.js 1.52 kB
build/style-engine/index.min.js 1.55 kB
build/token-list/index.min.js 650 B
build/url/index.min.js 3.74 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 1.09 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.3 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.18 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

@ramonjd ramonjd added [Type] Feature New feature to highlight in changelogs. Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json [Status] In Progress Tracking issues with work in progress labels Dec 20, 2022
@ramonjd ramonjd force-pushed the try/user-global-styles-revisions branch 2 times, most recently from 0a8dfd1 to 777738b Compare December 22, 2022 04:08
Copy link
Contributor

@tellthemachines tellthemachines left a comment

Choose a reason for hiding this comment

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

Is adding a revisions property to the global styles response a good idea? Should we rather add a new entry to _links and add a separate endpoint for revisions to avoid huge responses?

Are there any scenarios where we might want to fetch global styles (or part of it) without the revisions? If so, yeah it's probably better to have a separate endpoint for them.

Testing this a bit, it's working pretty well for under 10 revisions, but started acting funny once I added a bunch of them in a row (I didn't always reload the page between saves, not sure if that might have had any influence).

As mentioned below, only the last 10 revisions are appearing in the dropdown.

I was switching between style variations in TT3, and ended up with all the variations showing gradient backgrounds:

Screenshot 2022-12-22 at 5 28 42 pm

This happened when I tried to go back to a previous revision after switching to the sherbet variation and fiddling with a bunch of block styles.

Also, changes to block global styles weren't reverted when going back to a previous revision.

@ramonjd
Copy link
Member Author

ramonjd commented Dec 23, 2022

I was switching between style variations in TT3, and ended up with all the variations showing gradient backgrounds:

Good pick up, thank you! I thought I saw that too but was hoping that it might have been also happening on trunk. Turns out hope is a dangerous thing :)

@ramonjd ramonjd force-pushed the try/user-global-styles-revisions branch from 3f1543a to e0753cb Compare December 23, 2022 02:07
@ramonjd
Copy link
Member Author

ramonjd commented Dec 23, 2022

started acting funny once I added a bunch of them in a row (I didn't always reload the page between saves, not sure if that might have had any influence).

As mentioned below, only the last 10 revisions are appearing in the dropdown.

I was switching between style variations in TT3, and ended up with all the variations showing gradient backgrounds

It actually is occurring on trunk.

Steps to reproduce:

  1. Fresh install of 2023 (no style customizations)
  2. Site editor > activate Sherbet style variation. Save.
  3. Change the background color by selecting a gradient from the default palette. Save. Refresh page.
  4. See that the variations have all changed to that color.
  5. No way back 🤷
2022-12-23.14.25.12.mp4

I'll create an issue.

Issue created: #46758

@ramonjd ramonjd marked this pull request as ready for review December 23, 2022 04:36
@ramonjd ramonjd changed the title WIP: Try to show user global styles revisions Global styles: enable user global styles revisions Dec 27, 2022
@ramonjd ramonjd force-pushed the try/user-global-styles-revisions branch from fcca8f6 to 7ac4391 Compare December 29, 2022 05:20
@ramonjd ramonjd added [Type] Experimental Experimental feature or API. and removed [Status] In Progress Tracking issues with work in progress labels Dec 29, 2022
@@ -453,7 +453,7 @@ __experimentalGetTemplateForLink.shouldInvalidate = ( action ) => {
);
};

export const __experimentalGetCurrentGlobalStylesId =
export const __experimentalGetCurrentGlobalStyles =
Copy link
Member Author

@ramonjd ramonjd Dec 29, 2022

Choose a reason for hiding this comment

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

The reason why I'm returning the entire global style object instead of just the ID is so we can access the revisions url.

E.g.: currentGlobalStyles?._links?.[ 'version-history' ]?.[ 0 ]?.href;

Copy link
Member Author

Choose a reason for hiding this comment

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

It seemed a waste not to repurpose this method since it was fetching what we wanted anyway and only returning the id.

Plus it's experimental so I didn't see much harm in changing it.

@jameskoster
Copy link
Contributor

Some questions from the design perspective:

  • As already mentioned: should revisions be global or per user?
  • Why does the button list switch to a dropdown, what are the conditions, is it necessary?
  • Would a (minimally) visual treatment of each revision in the list be helpful? Similarly, should the list resemble a timeline (something like Visual revisions #37037).
  • If you have unsaved changes, then select a revision, there doesn't appear to be a way back to those unsaved changes. Should there be a "Current (unsaved)" option in the list, or a warning that unsaved changes will be lost before switching to a revision?
  • Is the access point appropriately prominent? Other options: the ellipsis menu, an icon next to the eye.
  • Should the 'Reset to defaults' action be combined with revisions? There's some conceptual overlap there so perhaps its worth considering in the design.

cc @WordPress/gutenberg-design

…ating the full revision.

The revision should overwrite everything.
- same behaviour as post editor
- since revisions includes the current saved post, so we need at least two in order to switch
…yet delete global styles revisions and, because of other tests, we can't rely on the post revisions being a certain count so we try to cater for both in the test for now.

Added aria label to buttons in the UI
Checking for the number of revision buttons in the revisions list.
…rentGlobalStylesId, which has been removed in this PR.

Adding a reset button.
Updating e2e tests
A sad attempt at caching the unsaved userConfig
Adding an `is_latest` prop to the rest response to indicate the latest saved revision
@ramonjd ramonjd force-pushed the try/user-global-styles-revisions branch from 17f9ba6 to 9975e1a Compare April 14, 2023 09:03
Redesigning the buttons view
Rationalizing rest API return properties
@ramonjd ramonjd force-pushed the try/user-global-styles-revisions branch from 9975e1a to 408a755 Compare April 14, 2023 09:07
@annezazu annezazu mentioned this pull request Apr 17, 2023
57 tasks
@ramonjd
Copy link
Member Author

ramonjd commented Apr 18, 2023

I've been running around in circles in an attempt to come up with a reasonable workflow today, and have concerns about how to deal with unsaved changes in the editor.

I'm worried that users won't know that loading a revision overwrites the styles in the editor canvas, thereby removing any unsaved changes. For example, a user might want to browse previous revisions only.

@jameskoster raised this concern at the start of this PR, and suggested that a warning might be temporary approach until it's possible to load revision styles independent to the styles that show in the editor.

This is what I've come up with following those lines:

2023-04-18.16.35.13.mp4

I haven't committed it to this PR yet.

Thinking more broadly, I have positive feelings towards an in-editor revisions view, let's say something like the style book where we could compile and load any style without affecting the main editor canvas.

That would require a major refactor, but it might be useful to serve as a basis for comparing template revisions as well. I'd like to explore this option in hack branch.

@jameskoster
Copy link
Contributor

I'm worried that users won't know that loading a revision overwrites the styles in the editor canvas, thereby removing any unsaved changes. For example, a user might want to browse previous revisions only.

Yeah this feels like a blocker to me. I know we have the Undo affordance, but it doesn't feel intuitive in this case.

What you shared above seems like a good start. The action(s) are significant enough that it warrants being placed in a modal imo. We could potentially invoke a similar UI in other flows where customisations are lost such as switching variations: #40561

@ramonjd
Copy link
Member Author

ramonjd commented Apr 19, 2023

Thanks folks. @andrewserong and @tellthemachines had some good ideas that I can trial as well: namely, auto-saving unsaved changes (if any) when opening the revisions panel. This would technically create a new revision I think, but I'm interested to see how it would work in practice.

The action(s) are significant enough that it warrants being placed in a modal imo. We could potentially invoke a similar UI in other flows where customisations are lost such as switching variations: #40561

This makes perfect sense too. I'll play around.

@andrewserong
Copy link
Contributor

Thanks folks. @andrewserong and @tellthemachines had some good ideas

It was all @tellthemachines' idea, I was just being the cheer squad 😄

Thanks for digging into this feature so deeply!

@ramonjd
Copy link
Member Author

ramonjd commented Apr 19, 2023

What you shared above seems like a good start. The action(s) are significant enough that it warrants being placed in a modal imo. We could potentially invoke a similar UI in other flows where customisations are lost such as switching variations:

My plan is to implement this in this PR, but I took a stab at repurposing the stylebook code to load blocks and styles independently. The main benefit is that users can open revisions, try them out and return to the editor in whatever state they left it in, that is, any unsaved changes are unaffected.

There's still the need for a prompt to save unsaved changes before a revision is restored just in case.

@ramonjd
Copy link
Member Author

ramonjd commented Apr 21, 2023

Closing this PR and tracking follow ups based on the experimental PR over in the issue:

@ramonjd ramonjd closed this Apr 21, 2023
@ramonjd ramonjd mentioned this pull request Apr 27, 2023
4 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json Needs Design Needs design efforts. [Type] Experimental Experimental feature or API. [Type] Feature New feature to highlight in changelogs.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants