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

DataViews: make it the root for pages and add details #57578

Merged
merged 20 commits into from
Jan 9, 2024

Conversation

oandregal
Copy link
Member

@oandregal oandregal commented Jan 5, 2024

Part of #55083
Supersedes #57523 #57589

What?

Updates the root "Pages" section to go to pages dataviews. It also adds a "details" button to support the whole flow:

Gravacao.do.ecra.2024-01-09.as.09.34.31.mov

Why?

It's the target flow we want.

How?

  1. Makes the list layout the default.

  2. Adds a "details" button to the list view item.

    • It requires a onDetailChange callback to the DataViews API, so consumers can handle this action. Note that, at the moment, the details event redirects the user to the existing details page (see conversation). The immediate follow-up is to open this in the content frame, as per the mockup below.
    • To make it accessible, this follows the pattern of the existing block editor list view, to make it accessible (interactive elements cannot be nested). See conversation.
  3. Updates the flows, so the back button works as follows: "Pages < DataViews < Details".

Testing Instructions

Test pages show the details:

  • Enable the "new admin view".
  • Navigate to "Pages" and experiment with dataviews.
  • Click on the "Details" button.

Test the templates do not have the details button and works as before:

  • Enable the "new admin view" experiment and visit "Manage all templates".
  • Switch to the list layout. This is how it should look like (no details button):
Captura de ecrã 2024-01-04, às 12 23 11

Follow-ups

  1. Implement details as per this mockup:

240103-page-list-page-detail

  1. Add the "Add page" button in the content frame (conversation). DataViews: add new page button in Pages #57685

What'd be the best place? In the sidebar (like the current design) or in the content frame (like we do for templates)? Related conversation.

Sidebar Content frame
Captura de ecrã 2024-01-05, às 13 38 16 Captura de ecrã 2024-01-05, às 13 38 55
  1. Add the"special Front page" to the list of pages (conversation).
Captura de ecrã 2024-01-05, às 13 41 52
  1. Add the footer to the sidebar linking to 404 and search pages (conversation). DataViews: add footer to Pages sidebar #57690
Captura de ecrã 2024-01-05, às 14 58 39
  1. Keyboard navigation

Make it work like the block editor list view: use arrow keys to move up/down the list and right/left to move to/from details.

@oandregal oandregal self-assigned this Jan 5, 2024
@oandregal oandregal added [Type] Experimental Experimental feature or API. [Feature] DataViews Work surrounding upgrading and evolving views in the site editor and beyond labels Jan 5, 2024
Copy link

github-actions bot commented Jan 5, 2024

Size Change: +600 B (0%)

Total Size: 1.69 MB

Filename Size Change
build/edit-site/index.min.js 195 kB +290 B (0%)
build/edit-site/style-rtl.css 15 kB +154 B (+1%)
build/edit-site/style.css 15 kB +156 B (+1%)
ℹ️ 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.31 kB
build/block-editor/content.css 4.31 kB
build/block-editor/default-editor-styles-rtl.css 403 B
build/block-editor/default-editor-styles.css 403 B
build/block-editor/index.min.js 247 kB
build/block-editor/style-rtl.css 15.3 kB
build/block-editor/style.css 15.3 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 419 B
build/block-library/blocks/button/editor.css 417 B
build/block-library/blocks/button/style-rtl.css 633 B
build/block-library/blocks/button/style.css 632 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 421 B
build/block-library/blocks/columns/style.css 421 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 647 B
build/block-library/blocks/cover/editor.css 650 B
build/block-library/blocks/cover/style-rtl.css 1.7 kB
build/block-library/blocks/cover/style.css 1.69 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 98 B
build/block-library/blocks/details/style.css 98 B
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 138 B
build/block-library/blocks/embed/theme.css 138 B
build/block-library/blocks/file/editor-rtl.css 316 B
build/block-library/blocks/file/editor.css 316 B
build/block-library/blocks/file/style-rtl.css 280 B
build/block-library/blocks/file/style.css 281 B
build/block-library/blocks/file/view.min.js 322 B
build/block-library/blocks/footnotes/style-rtl.css 201 B
build/block-library/blocks/footnotes/style.css 199 B
build/block-library/blocks/form-input/editor-rtl.css 229 B
build/block-library/blocks/form-input/editor.css 228 B
build/block-library/blocks/form-input/style-rtl.css 343 B
build/block-library/blocks/form-input/style.css 343 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 343 B
build/block-library/blocks/form-submission-notification/editor.css 342 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 452 B
build/block-library/blocks/freeform/editor-rtl.css 2.61 kB
build/block-library/blocks/freeform/editor.css 2.61 kB
build/block-library/blocks/gallery/editor-rtl.css 957 B
build/block-library/blocks/gallery/editor.css 962 B
build/block-library/blocks/gallery/style-rtl.css 1.75 kB
build/block-library/blocks/gallery/style.css 1.75 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 654 B
build/block-library/blocks/group/editor.css 654 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 189 B
build/block-library/blocks/heading/style.css 189 B
build/block-library/blocks/html/editor-rtl.css 340 B
build/block-library/blocks/html/editor.css 341 B
build/block-library/blocks/image/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/image/view.min.js 2.02 kB
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 505 B
build/block-library/blocks/media-text/style.css 503 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 671 B
build/block-library/blocks/navigation-link/editor.css 672 B
build/block-library/blocks/navigation-link/style-rtl.css 103 B
build/block-library/blocks/navigation-link/style.css 103 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation/editor-rtl.css 2.26 kB
build/block-library/blocks/navigation/editor.css 2.26 kB
build/block-library/blocks/navigation/style-rtl.css 2.25 kB
build/block-library/blocks/navigation/style.css 2.23 kB
build/block-library/blocks/navigation/view.min.js 1.1 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/query/view.min.js 647 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 602 B
build/block-library/blocks/search/style.css 602 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/search/view.min.js 475 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.49 kB
build/block-library/blocks/social-links/style.css 1.49 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 399 B
build/block-library/blocks/table/editor.css 399 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/editor-rtl.css 12.3 kB
build/block-library/editor.css 12.3 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 215 kB
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.7 kB
build/block-library/style.css 14.7 kB
build/block-library/theme-rtl.css 700 B
build/block-library/theme.css 705 B
build/block-serialization-default-parser/index.min.js 1.13 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 51.6 kB
build/commands/index.min.js 15.5 kB
build/commands/style-rtl.css 947 B
build/commands/style.css 942 B
build/components/index.min.js 235 kB
build/components/style-rtl.css 12.1 kB
build/components/style.css 12.1 kB
build/compose/index.min.js 12.8 kB
build/core-commands/index.min.js 2.73 kB
build/core-data/index.min.js 72.7 kB
build/customize-widgets/index.min.js 12.1 kB
build/customize-widgets/style-rtl.css 1.36 kB
build/customize-widgets/style.css 1.36 kB
build/data-controls/index.min.js 651 B
build/data/index.min.js 8.94 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 27.9 kB
build/edit-post/style-rtl.css 6.3 kB
build/edit-post/style.css 6.29 kB
build/edit-widgets/index.min.js 17.3 kB
build/edit-widgets/style-rtl.css 4.73 kB
build/edit-widgets/style.css 4.72 kB
build/editor/index.min.js 59.1 kB
build/editor/style-rtl.css 5.21 kB
build/editor/style.css 5.21 kB
build/element/index.min.js 4.87 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 7.98 kB
build/format-library/style-rtl.css 500 B
build/format-library/style.css 500 B
build/hooks/index.min.js 1.57 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.61 kB
build/interactivity/file.min.js 442 B
build/interactivity/image.min.js 2.15 kB
build/interactivity/index.min.js 12.5 kB
build/interactivity/navigation.min.js 1.23 kB
build/interactivity/query.min.js 791 B
build/interactivity/search.min.js 610 B
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.76 kB
build/keycodes/index.min.js 1.49 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/modules/importmap-polyfill.min.js 12.2 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 5.36 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 2.07 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 1 kB
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/rich-text/index.min.js 10.4 kB
build/router/index.min.js 1.79 kB
build/server-side-render/index.min.js 1.96 kB
build/shortcode/index.min.js 1.4 kB
build/style-engine/index.min.js 2.06 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.22 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

@@ -89,6 +93,19 @@ export default function ViewList( {
</div>
</VStack>
</HStack>
{ onDetailsChange && (
<Button
Copy link
Member Author

Choose a reason for hiding this comment

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

I'm looking at how to make this button appear visually within the other interactive element (<div role="button">) while avoid nesting in the DOM.

Copy link
Member Author

@oandregal oandregal Jan 5, 2024

Choose a reason for hiding this comment

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

I played with the idea of having two buttons: one nested and hidden from the accessibility tree, the second not nested and visually hidden.

It works, as demonstrated in the accessibility tree. Though, I'm not super keen on this idea:

Gravacao.do.ecra.2024-01-05.as.12.23.16.mov
In terms of code, something along these lines could work. It'd need factoring into a single component.
diff --git a/packages/dataviews/src/style.scss b/packages/dataviews/src/style.scss
index 93926db47d..72037da3d6 100644
--- a/packages/dataviews/src/style.scss
+++ b/packages/dataviews/src/style.scss
@@ -280,6 +280,16 @@
        .dataviews-list-view__details-button {
                align-self: center;
        }
+       .dataviews-list-view__details-button-visually-hidden {
+                       position: absolute;
+                       width: 1px;
+                       height: 1px;
+                       margin: -1px;
+                       padding: 0;
+                       overflow: hidden;
+                       clip: rect(0, 0, 0, 0);
+                       border: 0;
+       }
 }
 
 .dataviews-action-modal {
diff --git a/packages/dataviews/src/view-list.js b/packages/dataviews/src/view-list.js
index cf9ca31851..ccfc821956 100644
--- a/packages/dataviews/src/view-list.js
+++ b/packages/dataviews/src/view-list.js
@@ -95,6 +95,7 @@ export default function ViewList( {
                                                                </HStack>
                                                                { onDetailsChange && (
                                                                        <Button
+                                                                               aria-hidden={true}
                                                                                className="dataviews-list-view__details-button"
                                                                                onClick={ () =>
                                                                                        onDetailsChange( [ item ] )
@@ -108,6 +109,19 @@ export default function ViewList( {
                                                                ) }
                                                        </HStack>
                                                </div>
+                                               { onDetailsChange && (
+                                                                       <Button
+                                                                               className="dataviews-list-view__details-button-visually-hidden"
+                                                                               onClick={ () =>
+                                                                                       onDetailsChange( [ item ] )
+                                                                               }
+                                                                               icon={
+                                                                                       isRTL() ? chevronLeft : chevronRight
+                                                                               }
+                                                                               label={ __( 'View details' ) }
+                                                                               size="compact"
+                                                                       />
+                                                               ) }
                                        </li>
                                );
                        } ) }

Copy link
Member Author

Choose a reason for hiding this comment

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

I've also played with them being siblings within the same HStack. Tried different approaches, but wasn't able to make the first interactive element take all the space up to the second. There's always a weird gap.

Captura de ecrã 2024-01-05, às 12 28 38

Even if we were able to remove that gap and the button take the full height, visually, they will appear as two consecutive elements (see focus). Would that be a fine trade-off design-wise @jameskoster ?

Gravacao.do.ecra.2024-01-05.as.12.30.28.mov

Copy link
Member Author

Choose a reason for hiding this comment

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

Copy link
Contributor

@jameskoster jameskoster Jan 5, 2024

Choose a reason for hiding this comment

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

Instead of duplicating 'details' buttons, could the main button and details button be adjacent, with the latter positioned absolutely? Something like this codepen.

Copy link
Contributor

Choose a reason for hiding this comment

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

Related, if the entire element is going to be a button, we'll have to be a bit more conscious of what the accessible names look like. By default, it's the text content of the control, which right now would probably be something like "Sample Page admin published", which isn't great. The best way to fix this would probably be by setting aria-labelledby to point at the primaryField content.

That being said, the main job of an accessible name is to convey the purpose or intent of the element, and just using the primary field value doesn't really do that. So we'll have to think a bit about the semantics around this; a straight-up list of buttons might not actually be the best model here anyway.

Copy link
Contributor

Choose a reason for hiding this comment

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

Can you explain the benefit of doing this a bit more?

For sighted users the visual noise of the constantly-visible chevron is a bit distracting. It feels overly prominent in the UI. Perhaps a bad example but I'd liken it to tabs in a web/file browser, IDE, etc., where the close button is generally not permanently visible.

If the overlapping button is going to be problematic perhaps we can try a different hover/focus treatment of the main button. I'll try a design iteration tomorrow.

Copy link
Contributor

@jameskoster jameskoster Jan 5, 2024

Choose a reason for hiding this comment

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

@andrewhayward it occurred to me that the pattern I'm describing here is virtually identical to List View in the Editor. While not perfect, it has been quite rigorously tested. Do you think that since there's a precedent we might mimic that pattern here?

Edit: To be clear, the visuals still likely need some adjustment, particularly the hover state.

Copy link
Member Author

Choose a reason for hiding this comment

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

Here's what I have:

Gravacao.do.ecra.2024-01-08.as.17.55.12.mov

Implemented it following the block editor list view pattern:

  • structurally, buttons are siblings
  • most styles are handled by the button's wrapper
  • the focus styles are attached to a ::after pseudo-element

Copy link
Member Author

Choose a reason for hiding this comment

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

Looking at how the block editor list view works from a keyboard perspective, a follow-up to this PR could be to make dataviews' list view work the same: tab only stops at the top-most item of the list layout, people use arrow keys to navigate through the items and accessing the details.

@oandregal
Copy link
Member Author

Related PR about making pages-dataviews the default for the "Pages" section: #57589

@oandregal oandregal force-pushed the add/page-details-list-dataviews-link branch 2 times, most recently from ecc4ebd to a75d5ab Compare January 5, 2024 13:28
@oandregal
Copy link
Member Author

Trying to land this iteratively was creating some weird interim flow experiences, so implemented the main flows here:

Gravacao.do.ecra.2024-01-05.as.14.15.46.mov

@oandregal oandregal changed the title DataViews: add details for pages in list layout DataViews: make it the default experience for pages and add details Jan 5, 2024
@oandregal oandregal requested a review from SaxonF January 5, 2024 13:59
@oandregal oandregal changed the title DataViews: make it the default experience for pages and add details DataViews: make it the root for pages and add details Jan 5, 2024
@oandregal oandregal force-pushed the add/page-details-list-dataviews-link branch from 8dc94c6 to 1ad99df Compare January 8, 2024 13:33
@jameskoster
Copy link
Contributor

@oandregal I just pushed some style tweaks. One thing I couldn't fix was the display of the preview, title, and fields – they're still quite a bit different to trunk:

This PR Trunk
Screenshot 2024-01-08 at 17 27 02 Screenshot 2024-01-08 at 17 27 16

I'm not fully convinced about the info icon, but I think we need an alternative to the chevron as it looks too decorative when it appears on hover.

@oandregal oandregal force-pushed the add/page-details-list-dataviews-link branch from 3d19480 to 8096b52 Compare January 9, 2024 08:35
@oandregal
Copy link
Member Author

This is the current state:

Gravacao.do.ecra.2024-01-09.as.09.34.31.mov

@jameskoster is there any other design/interaction feedback you want incorporated in this PR? I'm looking now at other feedback and hoping to land this soon to unblock follow-ups.

) }
</div>
<HStack>
<li
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 changes here are to accommodate the two buttons as siblings. This is what we want:

<ul>
  <li>
    <div role="button">...</div> <!-- CONTENTS -->
    <button /> <!-- DETAILS BUTTON -->
  </li>
</ul>

Then, in CSS, we make it look like the first button (contents) wraps the second in situations such as focus. See accessibility conversation.

&:focus {
box-shadow: inset 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color);
&::before {
Copy link
Member Author

Choose a reason for hiding this comment

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

This pseudo-element serves to visualize the focus ring as it was part of the parent node (.dataviews-list-view__wrapper). See conversation.

@oandregal oandregal force-pushed the add/page-details-list-dataviews-link branch from 8096b52 to 537e399 Compare January 9, 2024 10:01
@oandregal
Copy link
Member Author

One thing that could use a refinement is the focus styles for the details button when the item is selected (cc @jameskoster):

Gravacao.do.ecra.2024-01-09.as.11.06.39.mov

@jameskoster
Copy link
Contributor

jameskoster commented Jan 9, 2024

One thing that could use a refinement is the focus styles for the details button when the item is selected.

I just pushed a fix for this.

OPERATOR_IN,
} from '../../utils/constants';

export const DEFAULT_CONFIG_PER_VIEW_TYPE = {
Copy link
Member Author

@oandregal oandregal Jan 9, 2024

Choose a reason for hiding this comment

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

This was moved from page-pages/index.js to initialize the DEFAULT_VIEWS with the layout data, which was not being initialized. It wasn't an issue until now because the table doesn't have any layout data, but the list does.

Copy link
Contributor

@jameskoster jameskoster left a comment

Choose a reason for hiding this comment

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

In terms of design I think we're in a good spot. There may be a11y details to refine, and we should fix the title truncation, but this can happen later.

Everything seems to be working well.

@oandregal oandregal merged commit 89f1d6b into trunk Jan 9, 2024
56 checks passed
@oandregal oandregal deleted the add/page-details-list-dataviews-link branch January 9, 2024 13:07
@oandregal
Copy link
Member Author

I'm merging this to continue work in the follow-ups. Please, do bring up any follow-up I've missed in post-merge reviews, so it's tracked and can be addressed.

@@ -236,7 +236,8 @@ Array of operations that can be performed upon each record. Each action is an ob
- `isLoading`: whether the data is loading. `false` by default.
- `supportedLayouts`: array of layouts supported. By default, all are: `table`, `grid`, `list`.
- `deferredRendering`: whether the items should be rendered asynchronously. Useful when there's a field that takes a lot of time (e.g.: previews). `false` by default.
- `onSelectionChange`: callback that returns the selected items. So far, only the `list` view implements this.
- `onSelectionChange`: callback that signals the user selected one of more items, and takes them as parameter. So far, only the `list` view implements it.
- `onDetailsChange`: callback that signals the user triggered the details for one of more items, and takes them as paremeter. So far, only the `list` view implements it.
Copy link
Contributor

@youknowriad youknowriad Jan 9, 2024

Choose a reason for hiding this comment

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

I think there's a world where this is the same as onSelectionChange in other words, when a single item is selected in list view we navigate to "details" and vice versa

Copy link
Member Author

Choose a reason for hiding this comment

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

That's possible, indeed. The way it works now is optimized for being a listing: you navigate through the items, preview them, and can manage them. There's also the multi-selection use case for bulk editing that needs to be accommodated.

@oandregal
Copy link
Member Author

Follow-up that adds a "Add new page" button at #57685

@oandregal
Copy link
Member Author

Follow-up that adds a footer to the sidebar with the 404 and Search templates #57690

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] DataViews Work surrounding upgrading and evolving views in the site editor and beyond [Type] Experimental Experimental feature or API.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants