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

Site editor sidebar: add page details #50767

Merged
merged 12 commits into from
May 26, 2023
Merged

Site editor sidebar: add page details #50767

merged 12 commits into from
May 26, 2023

Conversation

SaxonF
Copy link
Contributor

@SaxonF SaxonF commented May 19, 2023

What?

Updates the existing page detail view in the site editor to include more useful information.

Why?

#50390

Constraints

  • If we want to get the author and avatar of the user who last modified the page we'll need to fetch and consult the revisions. This is possible, but needs extra work to set up the store in a follow up PR.

Testing Instructions

  1. Activate a block theme
  2. Make sure you have some pages ready to role. Add featured images, leave some scheduled too.
  3. Now head over to the site editor
  4. In the side bar, navigate to Design > Pages and click on the pages.
  5. Check each page's details in the sidebar.
  6. Overcome your bedazzlement and provide some constructive feedback.
Screenshot 2023-05-25 at 3 27 12 pm Screenshot 2023-05-25 at 3 27 00 pm Screenshot 2023-05-25 at 3 26 32 pm

@SaxonF SaxonF mentioned this pull request May 19, 2023
@github-actions
Copy link

github-actions bot commented May 19, 2023

Size Change: +2.23 kB (0%)

Total Size: 1.41 MB

Filename Size Change
build/edit-site/index.min.js 65.8 kB +1.58 kB (+2%)
build/edit-site/style-rtl.css 10.9 kB +316 B (+3%)
build/edit-site/style.css 10.9 kB +312 B (+3%)
build/editor/index.min.js 45.7 kB +21 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 982 B
build/annotations/index.min.js 2.76 kB
build/api-fetch/index.min.js 2.33 kB
build/autop/index.min.js 2.14 kB
build/blob/index.min.js 472 B
build/block-directory/index.min.js 7.18 kB
build/block-directory/style-rtl.css 1.02 kB
build/block-directory/style.css 1.02 kB
build/block-editor/content-rtl.css 4.23 kB
build/block-editor/content.css 4.23 kB
build/block-editor/default-editor-styles-rtl.css 381 B
build/block-editor/default-editor-styles.css 381 B
build/block-editor/index.min.js 200 kB
build/block-editor/style-rtl.css 15.1 kB
build/block-editor/style.css 15.1 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 90 B
build/block-library/blocks/archives/style.css 90 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 126 B
build/block-library/blocks/audio/theme.css 126 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 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 584 B
build/block-library/blocks/button/editor.css 582 B
build/block-library/blocks/button/style-rtl.css 624 B
build/block-library/blocks/button/style.css 623 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 409 B
build/block-library/blocks/columns/style.css 409 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 647 B
build/block-library/blocks/cover/editor.css 650 B
build/block-library/blocks/cover/style-rtl.css 1.61 kB
build/block-library/blocks/cover/style.css 1.6 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 159 B
build/block-library/blocks/details/style.css 159 B
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 126 B
build/block-library/blocks/embed/theme.css 126 B
build/block-library/blocks/file/editor-rtl.css 316 B
build/block-library/blocks/file/editor.css 316 B
build/block-library/blocks/file/interactivity.min.js 395 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 375 B
build/block-library/blocks/freeform/editor-rtl.css 2.58 kB
build/block-library/blocks/freeform/editor.css 2.58 kB
build/block-library/blocks/gallery/editor-rtl.css 947 B
build/block-library/blocks/gallery/editor.css 952 B
build/block-library/blocks/gallery/style-rtl.css 1.53 kB
build/block-library/blocks/gallery/style.css 1.53 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 654 B
build/block-library/blocks/group/editor.css 654 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/html/editor-rtl.css 336 B
build/block-library/blocks/html/editor.css 337 B
build/block-library/blocks/image/editor-rtl.css 834 B
build/block-library/blocks/image/editor.css 833 B
build/block-library/blocks/image/interactivity.min.js 783 B
build/block-library/blocks/image/style-rtl.css 1.07 kB
build/block-library/blocks/image/style.css 1.07 kB
build/block-library/blocks/image/theme-rtl.css 126 B
build/block-library/blocks/image/theme.css 126 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 712 B
build/block-library/blocks/navigation-link/editor.css 711 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation/editor-rtl.css 2.33 kB
build/block-library/blocks/navigation/editor.css 2.33 kB
build/block-library/blocks/navigation/interactivity.min.js 896 B
build/block-library/blocks/navigation/style-rtl.css 2.21 kB
build/block-library/blocks/navigation/style.css 2.2 kB
build/block-library/blocks/navigation/view-modal.min.js 2.81 kB
build/block-library/blocks/navigation/view.min.js 443 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 401 B
build/block-library/blocks/page-list/editor.css 401 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 174 B
build/block-library/blocks/paragraph/editor.css 174 B
build/block-library/blocks/paragraph/style-rtl.css 279 B
build/block-library/blocks/paragraph/style.css 281 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 508 B
build/block-library/blocks/post-comments-form/style.css 508 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 588 B
build/block-library/blocks/post-featured-image/editor.css 586 B
build/block-library/blocks/post-featured-image/style-rtl.css 319 B
build/block-library/blocks/post-featured-image/style.css 319 B
build/block-library/blocks/post-navigation-link/style-rtl.css 153 B
build/block-library/blocks/post-navigation-link/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 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 450 B
build/block-library/blocks/query/editor.css 449 B
build/block-library/blocks/quote/style-rtl.css 222 B
build/block-library/blocks/quote/style.css 222 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 149 B
build/block-library/blocks/rss/editor.css 149 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 178 B
build/block-library/blocks/search/editor.css 178 B
build/block-library/blocks/search/style-rtl.css 434 B
build/block-library/blocks/search/style.css 432 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 323 B
build/block-library/blocks/shortcode/editor.css 323 B
build/block-library/blocks/site-logo/editor-rtl.css 754 B
build/block-library/blocks/site-logo/editor.css 754 B
build/block-library/blocks/site-logo/style-rtl.css 203 B
build/block-library/blocks/site-logo/style.css 203 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.4 kB
build/block-library/blocks/social-links/style.css 1.39 kB
build/block-library/blocks/spacer/editor-rtl.css 348 B
build/block-library/blocks/spacer/editor.css 348 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 433 B
build/block-library/blocks/table/editor.css 433 B
build/block-library/blocks/table/style-rtl.css 645 B
build/block-library/blocks/table/style.css 644 B
build/block-library/blocks/table/theme-rtl.css 146 B
build/block-library/blocks/table/theme.css 146 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 403 B
build/block-library/blocks/template-part/editor.css 403 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 174 B
build/block-library/blocks/video/style.css 174 B
build/block-library/blocks/video/theme-rtl.css 126 B
build/block-library/blocks/video/theme.css 126 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.1 kB
build/block-library/common.css 1.1 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 12.1 kB
build/block-library/editor.css 12.1 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 205 kB
build/block-library/interactivity/runtime.min.js 2.68 kB
build/block-library/interactivity/vendors.min.js 8.2 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 13.1 kB
build/block-library/style.css 13.1 kB
build/block-library/theme-rtl.css 686 B
build/block-library/theme.css 691 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 50.9 kB
build/commands/index.min.js 15 kB
build/commands/style-rtl.css 827 B
build/commands/style.css 827 B
build/components/index.min.js 232 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/core-commands/index.min.js 1.8 kB
build/core-data/index.min.js 16.5 kB
build/customize-widgets/index.min.js 12.2 kB
build/customize-widgets/style-rtl.css 1.38 kB
build/customize-widgets/style.css 1.38 kB
build/data-controls/index.min.js 708 B
build/data/index.min.js 8.68 kB
build/date/index.min.js 40.5 kB
build/deprecated/index.min.js 507 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.72 kB
build/edit-post/classic-rtl.css 544 B
build/edit-post/classic.css 545 B
build/edit-post/index.min.js 35.3 kB
build/edit-post/style-rtl.css 7.76 kB
build/edit-post/style.css 7.75 kB
build/edit-widgets/index.min.js 17.3 kB
build/edit-widgets/style-rtl.css 4.53 kB
build/edit-widgets/style.css 4.53 kB
build/editor/style-rtl.css 3.54 kB
build/editor/style.css 3.53 kB
build/element/index.min.js 4.89 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 7.77 kB
build/format-library/style-rtl.css 554 B
build/format-library/style.css 553 B
build/hooks/index.min.js 1.64 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.73 kB
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.78 kB
build/keycodes/index.min.js 1.91 kB
build/list-reusable-blocks/index.min.js 2.14 kB
build/list-reusable-blocks/style-rtl.css 836 B
build/list-reusable-blocks/style.css 836 B
build/media-utils/index.min.js 2.97 kB
build/notices/index.min.js 963 B
build/plugins/index.min.js 1.85 kB
build/preferences-persistence/index.min.js 2.22 kB
build/preferences/index.min.js 1.33 kB
build/primitives/index.min.js 944 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 939 B
build/react-i18n/index.min.js 696 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.74 kB
build/reusable-blocks/index.min.js 2.25 kB
build/reusable-blocks/style-rtl.css 243 B
build/reusable-blocks/style.css 243 B
build/rich-text/index.min.js 11 kB
build/router/index.min.js 1.78 kB
build/server-side-render/index.min.js 2.08 kB
build/shortcode/index.min.js 1.42 kB
build/style-engine/index.min.js 1.52 kB
build/token-list/index.min.js 644 B
build/url/index.min.js 3.65 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.08 kB
build/warning/index.min.js 268 B
build/widgets/index.min.js 7.28 kB
build/widgets/style-rtl.css 1.15 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

@jameskoster
Copy link
Contributor

Is it a bit strange to see the featured image in the sidebar, if the assigned template doesn't display it? 🤔

@ramonjd
Copy link
Member

ramonjd commented May 22, 2023

I've added a commit 5207277

Some notes:

  • In order to show last modified by (author) we need to pull the revisions to grab the revision author id, and then match that against a user list to get the display name. This possibly requires new store selectors/actions, so in my opinion it's a potential follow up if required at all.
  • The featured image mostly matches the post/page editor display logic, with the exception of forced max-height. If the featured image has a larger height size, then it will be cut off with the risk that it will appear strange. Also, what if the image is not an image? I'm tending to agree with @jameskoster that its inclusion might trigger more raised eyebrows than the feature could possibly contend with. I've left it in this PR to test, but "if in doubt, chuck it out" might apply here.
  • Should we bother showing excerpts? They have to be explicitly activated for pages via add_post_type_support( 'page', 'excerpt' );. I've left them in this PR for now just in case.

🍺

).toBe( '2 days ago' );
} );

it( 'should return human readable time differences in the future', () => {
Copy link
Member

Choose a reason for hiding this comment

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

I just added some tests to make sure it can handle future dates.

const wordsCounted = page?.content?.raw
? wordCount( page.content.raw, wordCountType )
: 0;
const readingTime = Math.round( wordsCounted / AVERAGE_READING_RATE );
Copy link
Member

@ramonjd ramonjd May 22, 2023

Choose a reason for hiding this comment

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

How useful are wordcount and reading time stats to users in this context?

Copy link
Contributor

Choose a reason for hiding this comment

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

Good question — I quite like the inclusion, it could be useful if you're wanting to see at a glance how long a really long page might be, but I imagine it might be more useful for posts?

@ramonjd ramonjd changed the title Update/page detail Site editor sidebar: add page details May 22, 2023
@ramonjd ramonjd added [Type] Enhancement A suggestion for improvement. Needs Design Feedback Needs general design feedback. [Feature] Site Editor Related to the overarching Site Editor (formerly "full site editing") labels May 22, 2023
@github-actions
Copy link

github-actions bot commented May 22, 2023

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

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

@jameskoster
Copy link
Contributor

@ramonjd The last-modified detail is important, whether here or in a follow-up, as it will serve as an access point to revisions.

I'd say it's nice to include the Featured Image if we can get the appearance right. I can still see folks being a bit confused if they set it, and see no change in the frame. But some help text that clarifies where it can be used would probably address that problem.

Excerpt seems more useful for posts. And we still need to figure out how editing would work. So I wouldn't mind leaving them out for now. Not a strong feeling though.

Page

@ramonjd
Copy link
Member

ramonjd commented May 23, 2023

Thanks for the feedback @jameskoster

The last-modified detail is important, whether here or in a follow-up, as it will serve as an access point to revisions.

No worries. Just to confirm, we have the modified date from the post object, but to get the author who made the revision we'll need to fetch the revisions.

I can look into this separately so it's easier to test. 👍

I'd say it's nice to include the Featured Image if we can get the appearance right. I can still see folks being a bit confused if they set it, and see no change in the frame. But some help text that clarifies where it can be used would probably address that problem.

No worries. Let's leave it in. Perhaps we can center the image within the container, but I guess it depends on the container. Not sure how to ensure it will appear 100% of the time.

Excerpt seems more useful for posts. And we still need to figure out how editing would work. So I wouldn't mind leaving them out for now. Not a strong feeling though.

It will rarely show anyway so no harm in leaving it in.

@jameskoster
Copy link
Contributor

Just to confirm, we have the modified date from the post object, but to get the author who made the revision we'll need to fetch the revisions.

Oh, nice. The author is less important, fine to handle that one separately.

Here are some outstanding details, and a refreshed mockup.

  • The draft status icon looks incorrect, let me know if you need the svg for that.
  • We can probably lay the status row out like the other details, and potentially place it alongside the other details for now. See the latest mockup below.
  • Let's add the Featured Image description.
  • For the Featured Image position, could we display it as a background image with background-size: cover; and background-position: 50% 50%;?
  • Can we make each detail row 40px tall to match the mockup?
  • Ideally the modified date is pinned just above the save panel, and shares the same two column layout as other details.
Page

Thanks! I'm try to handle some of the other styling details when we get a bit closer.

@ramonjd
Copy link
Member

ramonjd commented May 24, 2023

The draft status icon looks incorrect, let me know if you need the svg for that.

Oh, I didn't realize there were mock ups. I'm looking at this screenshot. I'll see how far I get with CSS + icons, but it might be useful to have SVGs if I run into geometrical challenges. Cheers!

Ideally the modified date is pinned just above the save panel, and shares the same two column layout as other details.

I tried that yesterday. It might entail some restructuring of the HTML. Will have another crack.

Edit: I can't find a neat way to do this within the constraints of <SidebarNavigationScreen /> that doesn't cause the modified date container to overlap the other details when the page height is reduced. The only reliable way I think is to create a slot in <Sidebar /> inside the .edit-site-sidebar__footer element, similar to what we've done for the "Apply" button on Global styles revisions.

For now I've stretched the flex item and rendering the modified date link beneath the items but with a bit of padding for good luck.

@jameskoster
Copy link
Contributor

It might be worth looking at how the 'dynamic pages' group is handled in #50630 for implementation? It's basically the same thing.

Here are the svgs:

Published

<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16Zm-1.067-5.6 4.2-5.667.8.6-4.8 6.467-3-2.267.6-.8 2.2 1.667Z"/>
</svg>

Draft

<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5 8a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0ZM16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0Zm-8 4a4 4 0 0 0 0-8v8Z"/>
</svg>

Pending / Scheduled
These are the same, just different colors.

<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
  <path fill-rule="evenodd" clip-rule="evenodd" d="M14.5 8a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0ZM16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM8 4a4 4 0 1 0 0 8 4 4 0 0 0 0-8Z"/>
</svg>

@jameskoster jameskoster mentioned this pull request May 24, 2023
20 tasks
@ramonjd
Copy link
Member

ramonjd commented May 24, 2023

Great, thanks for the PNGs. Nice!

It might be worth looking at how the 'dynamic pages' group is handled in #50630 for implementation? It's basically the same thing.

It which sense? The sticky footer? I'll have a closer look and see if it's possible in this case. I'd submit it isn't a blocker for MVP.

Edit: Looks like it implements something I already tried and cast aside because it overlaps the details as the window height reduces - if you're happy with that I'll reinstate. At least things will be consistent and we can always tweak later. Only sticking the element to the bottom of an 100% container and catering for resize + scroll was tripping me up. Cheers again!! 🙇

@ramonjd ramonjd marked this pull request as ready for review May 25, 2023 00:51
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 looking great to me, nice work folks!

Overcome your bedazzlement and provide some constructive feedback.

I was mostly bedazzled — it's looking very cool indeed, but I left a few nits. The only issue I ran into is that it looks like some of the labels might need to be wrapped in translate calls, unless I'm missing something?

Visually it's looking and testing great for me 🎉

Published Draft with image Scheduled with parent
image image image

packages/date/src/test/index.js Outdated Show resolved Hide resolved
const wordsCounted = page?.content?.raw
? wordCount( page.content.raw, wordCountType )
: 0;
const readingTime = Math.round( wordsCounted / AVERAGE_READING_RATE );
Copy link
Contributor

Choose a reason for hiding this comment

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

Good question — I quite like the inclusion, it could be useful if you're wanting to see at a glance how long a really long page might be, but I imagine it might be more useful for posts?

@ramonjd
Copy link
Member

ramonjd commented May 25, 2023

RTL

Screenshot 2023-05-25 at 2 43 12 pm

ramonjd and others added 9 commits May 26, 2023 12:14
- exports `getMediaDetails()` from the post-featured-image sidebar component and uses it if there's a featured image in the post record
- cleans up components and unused functions
- uses available wordcount and readtime functions
- implements i18n strings
- shuffles page-specific styles around
- update package log after importing @wordpress/wordcount
- truncating titles and other long excerpts
- adding status icons
- adding featured image description and loading placeholder
Removing duped/unused test expectations
De-nesting BEM rules
Remove unused comments
i18n
De-nesting BEM rules
Remove unused comments
i18n
Importing getFeaturedMediaDetails into privateApis for the editor package.
Removing unnecessary conditional checks
Escaping HTML and other values for rendering in page and attributes - adding escape-html to package.json
Don't render details when we don't have a record
@ramonjd
Copy link
Member

ramonjd commented May 26, 2023

Thanks for reviewing @ntsekouras ! I've made those changes and rebased.

I think this should be good for a final test and then 🚀

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 still testing well for me! Just found a tiny issue that private pages shows up with an empty status field, so left a comment there.

Thanks for the PR! Is this how it's supposed to look or is it something with my local cache or something? 😄
I'm saying that because @andrewserong screenshot has different alignments(right).

It looks like the designs were updated since I last reviewed, and the PR appears to be consistent with the designs shared in #50390. I think personally, I slightly prefer the right aligned look, but don't feel too strongly about it.

One potential issue is with how each of the value fields look when the data inside is wrapped. To my eyes the scheduled date in the following looks a little odd because it's center aligned vertically, so the value is visually higher than the detail label:

image

This is quite fine-tuning stuff, though, so personally I wouldn't think either of the above issues as blockers to landing if it's easier to get the larger PR in, and then tweak things in follow-ups.

Comment on lines +83 to +95
return (
<div
className={ classnames(
'edit-site-sidebar-navigation-screen-page__status',
{
[ `has-status has-${ status }-status` ]: !! status,
}
) }
>
{ statusIcon } { statusLabel }
</div>
);
}
Copy link
Contributor

@andrewserong andrewserong May 26, 2023

Choose a reason for hiding this comment

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

It appears we render an empty Status area if a page is set to "private":

image

Should we add a label for private status? And if there's no match for status, would it be better to hide the whole row, or leave blank as it is currently?

Copy link
Member

Choose a reason for hiding this comment

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

I believe we should hide the whole row if we determine a status, thanks for confirming this. I'll update.

Copy link
Member

Choose a reason for hiding this comment

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

Actually 'private' is a status, but we don't cater for it in terms of icon or copy

Copy link
Member

Choose a reason for hiding this comment

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

Also, what about password protected? We can detect that as well. Perhaps we need more icons?

I've done this for now:

Screenshot 2023-05-26 at 2 02 46 pm Screenshot 2023-05-26 at 2 02 56 pm

Copy link
Contributor

@andrewserong andrewserong May 26, 2023

Choose a reason for hiding this comment

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

Yeah, for private posts/pages, I was imagining it could just be a Private status label with no icon, a little bit like the pending status for now.

But also, feel free to leave it for a follow-up — this PR is already fairly large, so it could be easier to fine-tune / fix up these things in follow-ups if you'd prefer. Whichever works best for you!

Copy link
Contributor

Choose a reason for hiding this comment

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

Sorry, missed your reply before commenting. Those work nicely for me!

Copy link
Member

Choose a reason for hiding this comment

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

Thanks! Icons are easy to add in a follow up. Let's merge this!

@ramonjd
Copy link
Member

ramonjd commented May 26, 2023

To my eyes the scheduled date in the following looks a little odd because its center aligned vertically, so the value is visually higher than the detail label:

I'll leave this to @jameskoster or @SaxonF 😄

@ramonjd
Copy link
Member

ramonjd commented May 26, 2023

I think we should merge before this PR gets too hairy. Follow ups will be a cinch. 🍺

@andrewserong
Copy link
Contributor

andrewserong commented May 26, 2023

I think we should merge before this PR gets too hairy.

Agreed. Nice work on this PR! 🎉 :shipit:

@ramonjd
Copy link
Member

ramonjd commented May 26, 2023

Finally, I'm not seeing the animation on the frame when moving between details / edit:

I'm not sure it's related to this PR as it's pretty contained in the page panel. I can't replicate?
2023-05-26 14 57 20

@ramonjd ramonjd merged commit d585d3f into trunk May 26, 2023
@ramonjd ramonjd deleted the update/page-detail branch May 26, 2023 05:06
@github-actions github-actions bot added this to the Gutenberg 16.0 milestone May 26, 2023
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.

Personally I feel this PR has been merged a little bit too quickly but it's fine we have time to correct. I've left a few comments here.

* @param {number} postId The post ID of the media
* @return {MediaDetails} The featured media details.
*/
export default function getFeaturedMediaDetails( media, postId ) {
Copy link
Contributor

Choose a reason for hiding this comment

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

It is very unclear to me why this is a selector of "editor" package instead of being a "hook" in edit-site for instance. editor should never be imported in edit-site IMO.

Copy link
Contributor

Choose a reason for hiding this comment

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

Looking further at the PR, I guess we want to reuse the same functionality that was present in this component. I think "core-data" is a more suited place for this and I'm also not sure whether it should be a hook or selector.

Copy link
Member

Choose a reason for hiding this comment

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

There is the option to revert this entirely and use the medium image size, and where that's not available the full one in the sidebar.

The image dimensions are constrained and cropped by CSS anyway so, image download size aside, the width and height are not as important since we're not displaying the entire image as we are in the block inspector.

Copy link
Contributor

Choose a reason for hiding this comment

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

There is the option to revert this entirely and use the medium image size, and where that's not available the full one in the sidebar.

Yeah I can't tell why we had the logic in the sidebar in the first place, it's also a weird logic: runs a filter using the "large" size, otherwise run the same filter using the "thumbnail" size. There's probably some historic reasons for these filters to be required.

return {
parentTitle: _parentTitle,
templateSlug: getEditedPostContext()?.templateSlug,
featuredMediaDetails: {
Copy link
Contributor

Choose a reason for hiding this comment

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

This component is going to be re-rendered on each store change. We shouldn't return random objects from useSelect callbacks. We should have a lint rule about that ideally.


export default function SidebarNavigationScreenPage() {
const { setCanvasMode } = unlock( useDispatch( editSiteStore ) );
const { getFeaturedMediaDetails } = unlock( privateEditorApis );
Copy link
Contributor

Choose a reason for hiding this comment

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

Why is this called within the component instead of top level?

? decodeEntities( _parentTitle.title.rendered )
: __( 'Untitled' );
} else {
_parentTitle = __( 'Top level' );
Copy link
Contributor

Choose a reason for hiding this comment

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

I'm not sure returning translated strings within useSelect is a good idea? Not sure if we've done this in the past. Translations feel more like "leaf" things and they can be filtered as well.

const { records: templates, isResolving: areTemplatesLoading } =
useEntityRecords( 'postType', 'wp_template', {
per_page: -1,
} );
Copy link
Contributor

Choose a reason for hiding this comment

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

Do we really need to fetch all the templates, to retrieve one by slug, can't we call a single getEntityRecord instead?

Copy link
Contributor

Choose a reason for hiding this comment

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

I had checked this too. We cannot make a request for templates by slug if I'm not wrong. That's something we should address though at some point.

Copy link
Contributor

Choose a reason for hiding this comment

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

I think we can, for templates the theme//slug is the id

Copy link
Member

Choose a reason for hiding this comment

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

I also tried getEntityRecord and it does return slug, but only the template name segment, e.g.,

{
    "postType": "page",
    "postId": "2",
    "templateSlug": "page"
}

So I needed a way to get the current theme to build the id, e.g., twentytwentythree//${ _templateSlug }

Copy link
Member

@ramonjd ramonjd May 30, 2023

Choose a reason for hiding this comment

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

And now I've just discovered getCurrentTheme() :trollface:

Copy link
Contributor

Choose a reason for hiding this comment

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

It might be good to check how we're retrieving the "post/page" template in the sidebar of the post editor. It's the same issue here.

Copy link
Member

Choose a reason for hiding this comment

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

Nice!

That's the first place I looked but it's using availableTemplates, which is a property of select( editorStore ).getEditorSettings(), but now I see the site editor settings have it under defaultTemplateTypes. 👍 Updated.

Details
</SidebarNavigationSubtitle>
<SidebarDetails
details={ getPageDetails( {
Copy link
Contributor

Choose a reason for hiding this comment

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

This function is a bit weird, Can't we instead transform it to a <PageDetails id={pageId} /> instead and collocate all the logic?

d="M14.5 8a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0ZM16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0ZM8 4a4 4 0 1 0 0 8 4 4 0 0 0 0-8Z"
/>
</SVG>
);
Copy link
Contributor

Choose a reason for hiding this comment

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

@jasmussen Are we ok with all these adhoc icons? Should we add them to the icons library?

Copy link
Member

Choose a reason for hiding this comment

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

They're specific to the page details, but happy to move them to the icons library. I have a refactor PR going at #51093

</SVG>
);

export default function StatusLabel( { status, date } ) {
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 extract this one to its own file/folder? Feels more like a reusable UI component?

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 we could, but maybe should wait until there's a use case? At the moment it's 100% specific to pages so I reckon we could keep in contained within the suggested PageDetails until there's a need?

Copy link
Contributor

Choose a reason for hiding this comment

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

I'm not saying extract it to the "components" package yet but the file looks a bit crowded to me. But it's minor, fine to wait.

@ramonjd
Copy link
Member

ramonjd commented May 30, 2023

I've left a few comments here.

Thanks for looking at it @youknowriad

I'll make a follow up tomorrow to address your feedback.

@ramonjd
Copy link
Member

ramonjd commented May 30, 2023

First stab at refactor PR over at #51093

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Site Editor Related to the overarching Site Editor (formerly "full site editing") Needs Design Feedback Needs general design feedback. Needs User Documentation Needs new user documentation [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants